Merge commit 'goog/readonly-korg-master' into merge_korg_master
diff --git a/Android.mk b/Android.mk
index 02ba333..33cd6ab 100644
--- a/Android.mk
+++ b/Android.mk
@@ -3,10 +3,6 @@
 
 LOCAL_MODULE_TAGS := user
 
-# TODO: Remove dependency of application on the test runner (android.test.runner) 
-# library.
-LOCAL_JAVA_LIBRARIES := android.test.runner
-
 LOCAL_STATIC_JAVA_LIBRARIES := google-framework
 
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
@@ -14,3 +10,6 @@
 LOCAL_PACKAGE_NAME := Browser
 
 include $(BUILD_PACKAGE)
+
+# additionally, build tests in sub-folders in a separate .apk
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c67cc97..cdac176 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,20 +1,19 @@
 <!--
-/* //device/apps/Browser/AndroidManifest.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
+/*
+ * Copyright 2006, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.browser">
@@ -28,36 +27,27 @@
     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
-    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
-    <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
+    <uses-permission android:name="android.permission.READ_HISTORY_BOOKMARKS"/>
+    <uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS"/>
 
-    <!-- Allows an application to read the user Browser's history and bookmarks. -->
-    <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
-        android:permissionGroup="android.permission-group.PERSONAL_INFO"
-        android:label="@string/permlab_readHistoryBookmarks"
-        android:description="@string/permdesc_readHistoryBookmarks"
-        android:protectionLevel="dangerous" />
-
-    <!-- Allows an application to write (but not read) the user Browser's history and bookmarks. -->
-    <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"
-        android:permissionGroup="android.permission-group.PERSONAL_INFO"
-        android:label="@string/permlab_writeHistoryBookmarks"
-        android:description="@string/permdesc_writeHistoryBookmarks"
-        android:protectionLevel="dangerous" />
+    <supports-density android:density="160" />
+    <supports-density android:density="240" />
+    <expandable />
 
     <application   android:name="Browser"
                    android:label="@string/application_name"
                    android:icon="@drawable/ic_launcher_browser"
+                   android:backupAgent=".BrowserBackupAgent"
                    android:taskAffinity="android.task.browser" >
-        <!-- TODO: Remove dependency of application on the test runner
-             (android.test) library. -->
-        <uses-library android:name="android.test.runner" />
 
-        <provider android:name="BrowserProvider" 
-                  android:authorities="browser" 
-                  android:multiprocess="true" 
-                  android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
-                  android:writePermission="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
+        <provider android:name="BrowserProvider"
+                  android:authorities="browser"
+                  android:multiprocess="true"
+                  android:readPermission="android.permission.READ_HISTORY_BOOKMARKS"
+                  android:writePermission="android.permission.WRITE_HISTORY_BOOKMARKS">
+            <path-permission android:path="/bookmarks/search_suggest_query"
+                    android:readPermission="android.permission.GLOBAL_SEARCH" />
+        </provider>
         <activity android:name="BrowserActivity"
                   android:label="@string/application_name"
                   android:launchMode="singleTask"
@@ -82,6 +72,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:scheme="http" />
                 <data android:scheme="https" />
+                <data android:scheme="inline" />
                 <data android:mimeType="text/html"/>
                 <data android:mimeType="text/plain"/>
                 <data android:mimeType="application/xhtml+xml"/>
@@ -111,7 +102,6 @@
                 <data android:scheme="https" />
             </intent-filter>
             <intent-filter>
-                <action android:name="android.intent.action.WEB_SEARCH" />
                 <action android:name="android.intent.action.MEDIA_SEARCH" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
@@ -134,7 +124,6 @@
         <activity android:name="BrowserBookmarksPage" android:label="@string/bookmarks"
                   android:launchMode="singleTop" android:configChanges="orientation|keyboardHidden">
         </activity>
-
         <activity android:name="MostVisitedActivity" android:label=""
                 android:launchMode="singleTop" android:configChanges="orientation|keyboardHidden"/>
 
@@ -148,7 +137,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
 
-        </activity-alias>        
+        </activity-alias>
 
         <activity android:name="BrowserDownloadPage" android:label=""
                   android:configChanges="orientation|keyboardHidden">
@@ -166,16 +155,38 @@
                   android:configChanges="orientation|keyboardHidden">
         </activity>
 
+        <activity android:name="WebsiteSettingsActivity" android:label=""
+                  android:configChanges="orientation|keyboardHidden">
+        </activity>
+
         <activity android:name="GearsDialog" android:process=":dialog"
                   android:configChanges="orientation|keyboardHidden"
                   android:theme="@android:style/Theme.Dialog">
         </activity>
 
+        <activity android:name="PermissionDialog"
+                  android:configChanges="orientation|keyboardHidden"
+                  android:theme="@android:style/Theme.Dialog">
+        </activity>
+
         <activity android:name="GearsNativeDialog"
                   android:configChanges="orientation|keyboardHidden"
                   android:theme="@android:style/Theme.Dialog">
         </activity>
 
+        <activity android:name="BookmarkSearch"
+                  android:label="@string/bookmarks_search"
+                  android:stateNotNeeded="true"
+                  android:theme="@android:style/Theme.NoDisplay"
+                  android:excludeFromRecents="true">
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="android.app.searchable"
+                    android:resource="@xml/bookmarks_searchable" />
+        </activity>
+
         <service android:name="GearsDialogService"
                  android:process=":dialog"
                  android:exported="false">
@@ -199,23 +210,5 @@
 
     </application>
 
-    <!-- Browser tests.  Invoke with: -->
-    <!--      adb shell am instrument -w com.android.browser/.BrowserTestRunner -->
-    <instrumentation android:name="BrowserTestRunner"
-        android:targetPackage="com.android.browser"
-        android:label="@string/activity_instrumentation_test_runner"
-    />
-    <!-- Browser tests.  Invoke with: -->
-    <!--      adb shell am instrument -w com.android.browser/.BrowserFunctionalTestRunner -->
-    <instrumentation android:name="BrowserFunctionalTestRunner"
-        android:targetPackage="com.android.browser"
-        android:label="@string/activity_instrumentation_functional_test_runner"
-    />
-
-    <instrumentation android:name="BrowserLaunchPerformance"
-        android:targetPackage="com.android.browser"
-        android:label="Browser Launch Performance"
-    />
-
 </manifest>
 
diff --git a/res/drawable/background_titlebar.png b/res/drawable/background_titlebar.png
new file mode 100644
index 0000000..1fdb078
--- /dev/null
+++ b/res/drawable/background_titlebar.png
Binary files differ
diff --git a/res/drawable/blank.xml b/res/drawable/blank.xml
new file mode 100644
index 0000000..724f5e7
--- /dev/null
+++ b/res/drawable/blank.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <corners android:radius="5dip"/>
+            <solid android:color="@color/white"/>
+        </shape>
+    </item>
+</layer-list>
diff --git a/res/drawable/button_line.xml b/res/drawable/button_line.xml
new file mode 100644
index 0000000..67869d0
--- /dev/null
+++ b/res/drawable/button_line.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape android:width="2dip">
+            <solid android:color="#ff000000"/>
+        </shape>
+    </item>
+    <item android:left="1dip" android:width="1dip">
+        <shape>
+            <solid android:color="#ffffffff"/>
+        </shape>
+    </item>
+</layer-list>
diff --git a/res/drawable/ic_search_category_bookmark.png b/res/drawable/ic_search_category_bookmark.png
index 08b5e74..d228408 100755
--- a/res/drawable/ic_search_category_bookmark.png
+++ b/res/drawable/ic_search_category_bookmark.png
Binary files differ
diff --git a/res/drawable/ic_search_category_history.png b/res/drawable/ic_search_category_history.png
index 894c254..12cd51c 100755
--- a/res/drawable/ic_search_category_history.png
+++ b/res/drawable/ic_search_category_history.png
Binary files differ
diff --git a/res/drawable/ic_search_category_suggest.png b/res/drawable/ic_search_category_suggest.png
index ada07e6..a4ed7aa 100755
--- a/res/drawable/ic_search_category_suggest.png
+++ b/res/drawable/ic_search_category_suggest.png
Binary files differ
diff --git a/res/drawable/ic_titlebar_zoom.png b/res/drawable/ic_titlebar_zoom.png
new file mode 100644
index 0000000..b497dab
--- /dev/null
+++ b/res/drawable/ic_titlebar_zoom.png
Binary files differ
diff --git a/res/drawable/ic_titlebar_zoom_out.png b/res/drawable/ic_titlebar_zoom_out.png
new file mode 100644
index 0000000..4b5a3dd
--- /dev/null
+++ b/res/drawable/ic_titlebar_zoom_out.png
Binary files differ
diff --git a/res/layout/application.xml b/res/layout/application.xml
new file mode 100644
index 0000000..d8de265
--- /dev/null
+++ b/res/layout/application.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:drawingCacheQuality="auto"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:gravity="center"
+  android:padding="0dip">
+
+  <ImageView android:id="@+id/icon"
+    android:layout_width="32px"
+    android:layout_height="32px"
+    android:padding="2dip" />
+
+  <TwoLineListItem
+    android:paddingTop="2dip"
+    android:paddingBottom="2dip"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:mode="twoLine">
+
+    <TextView android:id="@+id/title"
+      android:layout_width="fill_parent"
+      android:layout_height="wrap_content"
+      android:layout_marginLeft="6dip"
+      android:layout_marginTop="6dip"
+      android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+    <TextView android:id="@+id/subtitle"
+      android:layout_width="fill_parent"
+      android:layout_height="wrap_content"
+      android:layout_below="@+id/title"
+      android:layout_alignLeft="@+id/title"
+      android:textAppearance="?android:attr/textAppearanceSmall"/>
+
+  </TwoLineListItem>
+
+</LinearLayout>
diff --git a/res/layout/bookmark_thumbnail.xml b/res/layout/bookmark_thumbnail.xml
new file mode 100644
index 0000000..5e7a27b
--- /dev/null
+++ b/res/layout/bookmark_thumbnail.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:orientation="vertical"
+    android:padding="4dip"
+    >
+
+    <ImageView android:id="@+id/thumb"
+        android:src="@drawable/blank"
+        android:scaleType="center"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        />
+
+<!--
+    <ImageView android:id="@+id/fav"
+        android:scaleType="center"
+        android:layout_width="20dip"
+        android:layout_height="20dip"
+        />
+-->
+
+    <TextView android:id="@+id/label"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textStyle="bold"
+        android:textColor="@color/white"
+        android:maxLines="1"
+        android:paddingTop="3dip"
+        android:paddingBottom="3dip"
+        android:paddingLeft="2dip"
+        android:paddingRight="2dip"
+        android:scrollHorizontally="true"
+        android:ellipsize="marquee"
+        />
+</LinearLayout>
diff --git a/res/layout/browser_downloads_page.xml b/res/layout/browser_downloads_page.xml
index c83a727..1d4d4e6 100644
--- a/res/layout/browser_downloads_page.xml
+++ b/res/layout/browser_downloads_page.xml
@@ -18,8 +18,14 @@
 ** limitations under the License.
 */
 -->
-
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/list"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"/>
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+    <ListView 
+        android:id="@+id/list"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"/>
+    <ViewStub 
+        android:id="@+id/empty"
+        android:layout="@layout/no_downloads"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"/>
+</merge>
diff --git a/res/layout/custom_screen.xml b/res/layout/custom_screen.xml
new file mode 100644
index 0000000..2c41fef
--- /dev/null
+++ b/res/layout/custom_screen.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android">
+    <FrameLayout android:id="@+id/fullscreen_custom_content"
+        android:visibility="gone"
+        android:background="@color/black"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+    />
+    <LinearLayout android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent">
+        <com.android.browser.TitleBar android:id="@+id/title_bar"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+        />
+        <FrameLayout android:id="@+id/main_content"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:foreground="?android:attr/windowContentOverlay"
+        />
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/permission_dialog.xml b/res/layout/permission_dialog.xml
new file mode 100644
index 0000000..ff24eaf
--- /dev/null
+++ b/res/layout/permission_dialog.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:drawingCacheQuality="auto"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:orientation="vertical"
+  android:padding="0dip">
+
+  <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal"
+    android:padding="10dip">
+
+    <ImageView
+      android:id="@+id/icon"
+      android:paddingRight="10dip"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_centerHorizontal="true"/>
+
+    <TextView
+      android:id="@+id/dialog_title"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_centerVertical="true"
+      android:gravity="center_vertical"
+      android:visibility="gone"
+      android:textSize="16dip"
+      android:textStyle="bold"
+      android:textColor="@color/white"/>
+
+  </LinearLayout>
+
+  <LinearLayout
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <ImageView android:id="@+id/titleDivider"
+        android:layout_width="fill_parent"
+        android:layout_height="1dip"
+        android:scaleType="fitXY"
+        android:gravity="fill_horizontal"
+        android:src="@drawable/dialog_divider_horizontal_light"
+        android:layout_marginLeft="10dip"
+        android:layout_marginRight="10dip"/>
+
+  </LinearLayout>
+
+  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:paddingBottom="10dip"
+    android:layout_weight="1">
+
+    <LinearLayout
+      android:orientation="vertical"
+      android:layout_width="fill_parent"
+      android:paddingTop="10dip"
+      android:paddingLeft="10dip"
+      android:paddingRight="10dip"
+      android:layout_height="wrap_content">
+
+      <TextView
+        android:id="@+id/origin"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:visibility="gone"
+        android:textStyle="bold"
+        android:gravity="left"
+        android:textSize="16dip"
+        android:textColor="@color/white"/>
+
+      <TextView
+        android:id="@+id/dialog_message"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:paddingLeft="4dip"
+        android:paddingTop="10dip"
+        android:gravity="left"
+        android:textSize="16dip"
+        android:textColor="@color/white"/>
+
+    </LinearLayout>
+
+  </ScrollView>
+
+  <LinearLayout
+    android:layout_width="fill_parent"
+    android:background="@color/gray"
+    android:layout_height="wrap_content"
+    android:paddingTop="4dip"
+    android:paddingLeft="0dip"
+    android:paddingRight="0dip">
+
+    <LinearLayout android:id="@+id/leftSpacer"
+       android:layout_weight="0.25"
+       android:layout_width="0dip"
+       android:layout_height="wrap_content"
+       android:orientation="horizontal"
+       android:visibility="gone"/>
+
+    <Button
+      android:id="@+id/button_allow"
+      android:layout_width="96dip"
+      android:layout_height="48dip"
+      android:layout_gravity="left"
+      android:layout_weight="1"
+      android:maxLines="2"
+      android:textSize="13dip"/>
+
+    <Button
+      android:id="@+id/button_alwaysdeny"
+      android:layout_width="96dip"
+      android:layout_height="48dip"
+      android:layout_gravity="left"
+      android:layout_weight="1"
+      android:maxLines="2"
+      android:textSize="13dip"/>
+
+    <Button
+      android:id="@+id/button_deny"
+      android:layout_width="96dip"
+      android:layout_height="48dip"
+      android:layout_gravity="right"
+      android:layout_weight="1"
+      android:maxLines="2"
+      android:textSize="13dip"/>
+
+    <LinearLayout android:id="@+id/rightSpacer"
+      android:layout_width="0dip"
+      android:layout_weight="0.25"
+      android:layout_height="wrap_content"
+      android:orientation="horizontal"
+      android:visibility="gone" />
+
+  </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/title_bar.xml b/res/layout/title_bar.xml
new file mode 100644
index 0000000..0f70519
--- /dev/null
+++ b/res/layout/title_bar.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:fitsSystemWindows="true"
+    android:orientation="horizontal"
+    android:layout_width="fill_parent"
+    android:background="@drawable/background_titlebar"
+    android:layout_height="45dip">
+    <ImageView android:id="@+id/favicon"
+        android:layout_height="20dip"
+        android:layout_width="20dip"
+        android:layout_marginLeft="6dip"
+        android:layout_marginRight="6dip"
+        android:layout_gravity="center_vertical"
+        />
+    <!-- layout which contains the title, progress bar, and url -->
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="0dip"
+        android:layout_weight="1"
+        android:layout_height="wrap_content">
+        <!-- This part contains the favicon and the progress bar -->
+        <RelativeLayout
+            android:layout_marginTop="3dip"
+            android:layout_height="wrap_content"
+            android:layout_width="fill_parent"
+            >
+            <LinearLayout
+                android:orientation="horizontal"
+                android:layout_marginTop="3dip"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content">
+                <ProgressBar android:id="@+id/progress_horizontal"
+                    style="?android:attr/progressBarStyleHorizontal"
+                    android:layout_width="0dip"
+                    android:layout_weight="1"
+                    android:layout_height="wrap_content"
+                    android:max="100" />
+                <ProgressBar android:id="@+id/progress_circular"
+                    style="?android:attr/progressBarStyleSmallTitle"
+                    android:layout_marginLeft="3dip"
+                    android:layout_gravity="center_vertical"
+                    android:max="100"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content" />
+            </LinearLayout>
+            <!-- need to make this no wider than the horizontal progress bar -->
+            <TextView android:id="@+id/title"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:layout_marginLeft="6dip"
+                android:layout_marginTop="4dip"
+                android:textSize="14dip"
+                android:textColor="@color/white"
+                android:textStyle="bold"
+                android:singleLine="true"
+                />
+            <TextView android:id="@+id/url"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="6dip"
+                android:layout_below="@id/title"
+                android:textSize="12dip"
+                android:textColor="@color/white"
+                android:singleLine="true"
+                />
+            <ImageView android:id="@+id/lock_icon"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:layout_alignBottom="@id/title"
+                android:layout_alignParentRight="true"
+                android:visibility="gone"/>
+        </RelativeLayout>
+    </LinearLayout>
+    <!-- These buttons will change look/functionality -->
+    <ImageView android:id="@+id/lft_button"
+        android:layout_width="52dip"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:src="@android:drawable/btn_star"/>
+    <!-- divider -->
+    <View android:id="@+id/divider"
+        android:layout_height="fill_parent"
+        android:layout_width="2dip"
+        android:background="@drawable/button_line"/>
+    <ImageView android:id="@+id/rt_button"
+        android:layout_width="52dip"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:src="@*android:drawable/btn_browser_zoom_page_overview"/>
+</LinearLayout>
diff --git a/res/menu/bookmarks.xml b/res/menu/bookmarks.xml
index 50dcfa9..8a6e32e 100644
--- a/res/menu/bookmarks.xml
+++ b/res/menu/bookmarks.xml
@@ -18,4 +18,6 @@
     <item android:id="@+id/new_context_menu_id"
         android:icon="@android:drawable/ic_menu_add"
         android:title="@string/bookmark_page" />
+    <item android:id="@+id/switch_mode_menu_id"
+        android:title="@string/switch_mode"/>
 </menu>
diff --git a/res/menu/bookmarkscontext.xml b/res/menu/bookmarkscontext.xml
index b43e242..ba5d1dc 100644
--- a/res/menu/bookmarkscontext.xml
+++ b/res/menu/bookmarkscontext.xml
@@ -34,5 +34,7 @@
       android:title="@string/contextmenu_copylink"/>
     <item android:id="@+id/delete_context_menu_id"
       android:title="@string/remove_bookmark"/>
+    <item android:id="@+id/homepage_context_menu_id"
+      android:title="@string/set_as_homepage"/>
   </group>
 </menu>
diff --git a/res/menu/historycontext.xml b/res/menu/historycontext.xml
index dfda010..5306396 100644
--- a/res/menu/historycontext.xml
+++ b/res/menu/historycontext.xml
@@ -26,5 +26,7 @@
     <item android:id="@+id/copy_context_menu_id"
         android:title="@string/contextmenu_copylink"/> 
     <item android:id="@+id/delete_context_menu_id"
-        android:title="@string/remove_history_item"/> 
+        android:title="@string/remove_history_item"/>
+    <item android:id="@+id/homepage_context_menu_id"
+        android:title="@string/set_as_homepage"/>
 </menu>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 8379ab6..0bea424 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -25,6 +25,7 @@
     <string name="username">"Název"</string>
     <string name="password">"Heslo"</string>
     <string name="action">"Přihlásit se"</string>
+    <string name="bookmarks_search">"Prohlížeč"</string>
     <string name="cancel">"Zrušit"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Zobrazit upozornění, pokud dojde k problému se zabezpečením webu"</string>
     <string name="pref_security_accept_cookies">"Přijímat soubory cookie"</string>
     <string name="pref_security_accept_cookies_summary">"Povolit webům ukládat a číst soubory cookie"</string>
-    <string name="pref_text_size">"Nastavení velikosti textu"</string>
+    <string name="pref_text_size">"Velikost textu"</string>
   <string-array name="pref_text_size_choices">
     <item>"Velmi malé"</item>
     <item>"Malé"</item>
@@ -158,6 +159,13 @@
     <item>"Velmi velké"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Velikost textu"</string>
+    <string name="pref_default_zoom">"Výchozí přiblížení"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Daleko"</item>
+    <item>"Střední"</item>
+    <item>"Zavřít"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Výchozí přiblížení"</string>
     <string name="pref_extras_title">"Upřesnit nastavení"</string>
     <string name="pref_extras_gears_enable">"Povolit službu Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Aplikace, které rozšiřují funkce prohlížeče"</string>
@@ -170,7 +178,7 @@
     <string name="pref_extras_reset_default_dlg">"Všechna data prohlížeče budou vymazána a bude použito výchozí nastavení."</string>
     <string name="pref_extras_reset_default_dlg_title">"Obnovit výchozí"</string>
     <string name="pref_development_title">"Ladit"</string>
-    <string name="pref_default_text_encoding">"Nastavení kódování textu"</string>
+    <string name="pref_default_text_encoding">"Kódování textu"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +203,8 @@
     <string name="no_database">"Databáze neexistuje."</string>
     <string name="search_hint">"Zadejte webovou adresu"</string>
     <string name="search_button_text">"Přejít"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Upozornění"</string>
     <string name="popup_window_attempt">"Tato stránka se pokouší otevřít vyskakovací okno."</string>
     <string name="allow">"Povolit"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"Nelze stáhnout. Velikost položky nelze určit."</string>
     <string name="download_precondition_failed">"Stahování bylo přerušeno a nelze v něm pokračovat."</string>
     <string name="activity_instrumentation_test_runner">"Testovací verze prohlížeče"</string>
-    <string name="search_google">"Prohledat Google"</string>
-    <string name="permlab_readHistoryBookmarks">"čtení historie a záložek prohlížeče"</string>
-    <string name="permdesc_readHistoryBookmarks">"Umožňuje aplikaci číst všechny navštívené adresy URL a záložky prohlížeče."</string>
-    <string name="permlab_writeHistoryBookmarks">"zápis historie a záložek prohlížeče"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Umožní aplikaci změnit historii či záložky prohlížeče uložené v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení vymazat či pozměnit data prohlížeče."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Vyhledat na webu"</string>
     <string name="query_data_prompt">"Povolit úložiště"</string>
     <string name="query_data_message">"Tyto webové stránky chtějí uložit informace do vašeho telefonu."</string>
     <string name="location_prompt">"Přistupovat k poloze"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
new file mode 100644
index 0000000..bbf91ec
--- /dev/null
+++ b/res/values-da/strings.xml
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Browser"</string>
+    <string name="tab_bookmarks">"Bogmærker"</string>
+    <string name="tab_most_visited">"Mest besøgte"</string>
+    <string name="tab_history">"Oversigt"</string>
+    <string name="added_to_bookmarks">"Føjet til bogmærker"</string>
+    <string name="removed_from_bookmarks">"Fjernet fra bogmærker"</string>
+    <string name="sign_in_to">"Log ind på <xliff:g id="HOSTNAME">%s1</xliff:g>\"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Navn"</string>
+    <string name="password">"Adgangskode"</string>
+    <string name="action">"Log ind"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"Annuller"</string>
+    <string name="ok">"OK"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Der er ingen matches"</item>
+    <item quantity="one">"1 match"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> matches"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> matches"</item>
+  </plurals>
+    <string name="page_info">"Sideoplysninger"</string>
+    <string name="page_info_view">"Vis sideoplysninger"</string>
+    <string name="page_info_address">"Adresse:"</string>
+    <string name="ssl_warnings_header">"Der er problemer med sikkerhedscertifikatet for dette websted."</string>
+    <string name="ssl_continue">"Fortsæt"</string>
+    <string name="security_warning">"Sikkerhedsadvarsel"</string>
+    <string name="view_certificate">"Vis certifikat"</string>
+    <string name="ssl_untrusted">"Dette certifikat stammer ikke fra en troværdig autoritet."</string>
+    <string name="ssl_mismatch">"Navnet på dette websted stemmer ikke overens med navnet på certifikatet."</string>
+    <string name="ssl_expired">"Dette certifikat er udløbet."</string>
+    <string name="ssl_not_yet_valid">"Dette certifikat er ikke gyldigt endnu."</string>
+    <string name="ssl_certificate">"Sikkerhedscertifikat"</string>
+    <string name="ssl_certificate_is_valid">"Dette certifikat er gyldigt."</string>
+    <string name="issued_to">"Udstedt til:"</string>
+    <string name="common_name">"Fællesnavn:"</string>
+    <string name="org_name">"Organisation:"</string>
+    <string name="org_unit">"Organisatorisk enhed:"</string>
+    <string name="issued_by">"Udstedt af:"</string>
+    <string name="validity_period">"Gyldighed:"</string>
+    <string name="issued_on">"Udstedt den:"</string>
+    <string name="expires_on">"Udløber den:"</string>
+    <string name="retrieving_creds_dlg_msg">"Henter logindetaljer ..."</string>
+    <string name="stopping">"Standser ..."</string>
+    <string name="stop">"Stop"</string>
+    <string name="reload">"Opdater"</string>
+    <string name="forward">"Fremad"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"Annuller"</string>
+    <string name="location">"Placering"</string>
+    <string name="name">"Navn"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Tilføj et bogmærke"</string>
+    <string name="edit_bookmark">"Rediger bogmærke"</string>
+    <string name="create_shortcut_bookmark">"Føj genvej til Start"</string>
+    <string name="open_bookmark">"Åbn"</string>
+    <string name="remove_bookmark">"Slet bogmærke"</string>
+    <string name="remove_history_item">"Fjern fra oversigt"</string>
+    <string name="bookmark_saved">"Gemt i bogmærker."</string>
+    <string name="bookmark_needs_title">"Bogmærke skal have et navn."</string>
+    <string name="bookmark_needs_url">"Bogmærke skal have en placering."</string>
+    <string name="empty_bookmark">"Der kan ikke oprettes et tomt bogmærke."</string>
+    <string name="bookmark_url_not_valid">"Webadresse er ikke gyldig."</string>
+    <string name="delete_bookmark">"Slet"</string>
+    <string name="bookmark_page">"Tilføj bogmærke ved sidst viste side"</string>
+    <string name="current_page">"fra "</string>
+    <string name="delete_bookmark_warning">"Bogmærket \"<xliff:g id="BOOKMARK">%s</xliff:g>\" slettes."</string>
+    <string name="open_in_new_window">"Åbn i et nyt vindue"</string>
+    <string name="new_window">"Nyt vindue"</string>
+    <string name="goto_dot">"Gå"</string>
+    <string name="find_dot">"Find på side"</string>
+    <string name="select_dot">"Vælg tekst"</string>
+    <string name="view_tabs">"Vinduesoversigt"</string>
+    <string name="view_tabs_condensed">"Vinduer"</string>
+    <string name="tab_picker_title">"Nuværende vinduer"</string>
+    <string name="tab_picker_view_tab">"Vis"</string>
+    <string name="tab_picker_new_tab">"Nyt vindue"</string>
+    <string name="tab_picker_remove_tab">"Luk"</string>
+    <string name="tab_picker_bookmark">"Tilføj et bogmærke"</string>
+    <string name="tab_picker_send_url">"Del link"</string>
+    <string name="bookmarks">"Bogmærker"</string>
+    <string name="shortcut_bookmark">"Bogmærke"</string>
+    <string name="history">"Oversigt"</string>
+    <string name="menu_view_download">"Downloads"</string>
+    <string name="share_page">"Del side"</string>
+    <string name="contextmenu_openlink">"Åbn"</string>
+    <string name="contextmenu_openlink_newwindow">"Åbn i et nyt vindue"</string>
+    <string name="contextmenu_bookmark_thislink">"Tilføj et bogmærke ved linket"</string>
+    <string name="contextmenu_savelink">"Gem link"</string>
+    <string name="contextmenu_sharelink">"Del link"</string>
+    <string name="contextmenu_copy">"Kopier"</string>
+    <string name="contextmenu_copylink">"Kopier linkets webadresse"</string>
+    <string name="contextmenu_download_image">"Gem billede"</string>
+    <string name="contextmenu_view_image">"Vis billede"</string>
+    <string name="contextmenu_dial_dot">"Ring til ..."</string>
+    <string name="contextmenu_add_contact">"Tilføj kontaktperson"</string>
+    <string name="contextmenu_send_mail">"Send e-mail"</string>
+    <string name="contextmenu_map">"Kort"</string>
+    <string name="clear">"Ryd"</string>
+    <string name="replace">"Erstat"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Bogmærker"</string>
+    <string name="menu_preferences">"Indstillinger"</string>
+    <string name="pref_content_title">"Indstillinger for sideindhold"</string>
+    <string name="pref_content_load_images">"Indlæs billeder"</string>
+    <string name="pref_content_load_images_summary">"Vis billeder på websider"</string>
+    <string name="pref_content_block_popups">"Bloker pop op-vinduer"</string>
+    <string name="pref_content_javascript">"Aktiver Javascript"</string>
+    <string name="pref_content_open_in_background">"Åbn i baggrunden"</string>
+    <string name="pref_content_open_in_background_summary">"Nye vinduer åbnes bag det nuværende"</string>
+    <string name="pref_content_homepage">"Indstil startside"</string>
+    <string name="pref_content_autofit">"Automatisk tilpassede sider"</string>
+    <string name="pref_content_autofit_summary">"Formater websider til at passe til skærmen"</string>
+    <string name="pref_privacy_title">"Fortrolighedsindstillinger"</string>
+    <string name="pref_privacy_clear_cache">"Ryd cache"</string>
+    <string name="pref_privacy_clear_cache_summary">"Slet alt cachelagret sideindhold"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Cachen ryddes."</string>
+    <string name="pref_privacy_clear_cookies">"Ryd alle cookiedata"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Ryd alle browsercookierne"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Alle cookies ryddes."</string>
+    <string name="pref_privacy_clear_history">"Ryd oversigt"</string>
+    <string name="pref_privacy_clear_history_summary">"Ryd browserens navigationsoversigt"</string>
+    <string name="pref_privacy_clear_history_dlg">"Browserens navigationsoversigt ryddes."</string>
+    <string name="pref_privacy_clear_form_data">"Ryd formulardata"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Ryd alle gemte formulardata"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Alle gemte formulardata ryddes."</string>
+    <string name="pref_privacy_clear_passwords">"Ryd adgangskoder"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Ryd alle gemte adgangskoder"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Alle gemte adgangskoder ryddes."</string>
+    <string name="pref_security_title">"Sikkerhedsindstillinger"</string>
+    <string name="pref_security_remember_passwords">"Husk adgangskoder"</string>
+    <string name="pref_security_remember_passwords_summary">"Gem brugernavne og adgangskoder til websteder"</string>
+    <string name="pref_security_save_form_data">"Husk formulardata"</string>
+    <string name="pref_security_save_form_data_summary">"Husk data, jeg indtaster i formularer, til senere brug"</string>
+    <string name="pref_security_show_security_warning">"Vis sikkerhedsadvarsler"</string>
+    <string name="pref_security_show_security_warning_summary">"Vis advarsler, hvis der er et problem med et websteds sikkerhed"</string>
+    <string name="pref_security_accept_cookies">"Accepter cookies"</string>
+    <string name="pref_security_accept_cookies_summary">"Tillad websteder at gemme og læse \"cookie\"-data"</string>
+    <string name="pref_text_size">"Tekststørrelse"</string>
+  <string-array name="pref_text_size_choices">
+    <item>"Lillebitte"</item>
+    <item>"Lille"</item>
+    <item>"Normal"</item>
+    <item>"Stor"</item>
+    <item>"Kæmpestor"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Tekststørrelse"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Avancerede indstillinger"</string>
+    <string name="pref_extras_gears_enable">"Aktiver Gears"</string>
+    <string name="pref_extras_gears_enable_summary">"Programmer, der udvider browserfunktionalitet"</string>
+    <string name="pref_extras_gears_settings">"Indstillinger for Gears"</string>
+    <string name="pref_plugin_installed">"Liste over plugins"</string>
+    <string name="pref_plugin_installed_empty_list">"Der er ingen installerede plugins."</string>
+    <string name="pref_extras_gears_settings_summary">"Programmer, der udvider browserfunktionalitet"</string>
+    <string name="pref_extras_reset_default">"Nulstil til standard"</string>
+    <string name="pref_extras_reset_default_summary">"Ryd alle browserdata, og nulstil alle indstillinger til standard"</string>
+    <string name="pref_extras_reset_default_dlg">"Alle browserdata slettes, og indstillingerne vender tilbage til standardværdier."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Nulstil til standard"</string>
+    <string name="pref_development_title">"Fejlretning"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Japansk (ISO-2022-JP)"</item>
+    <item>"Japansk (SHIFT_JIS)"</item>
+    <item>"Japansk (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Tekstkodning"</string>
+    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="browserFrameRedirect">"Omdiriger"</string>
+    <string name="browserFrame307Post">"Dette websted omdirigeres. Send dine indtastede formulardata til den nye placering?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Dataforbindelsesproblem"</string>
+    <string name="browserFrameFileErrorLabel">"Der er et problem med filen"</string>
+    <string name="browserFrameFormResubmitLabel">"Bekræft"</string>
+    <string name="browserFrameFormResubmitMessage">"Den side, du prøver at få vist, indeholder data, der allerede er indsendt (\"POSTDATA\"). Hvis du sender dataene igen, gentages alle handlinger, som formularen på siden udførte (som f.eks. en søgning eller et online køb)."</string>
+    <string name="loadSuspendedTitle">"Der er ingen netværksforbindelse"</string>
+    <string name="loadSuspended">"Indlæsningen af siden fortsættes, når forbindelsen er genoprettet."</string>
+    <string name="clear_history">"Ryd oversigt"</string>
+    <string name="browser_history">"Nyligt besøgte sider"</string>
+    <string name="empty_history">"Browseroversigt er tom."</string>
+    <string name="add_new_bookmark">"Tilføj bogmærke ..."</string>
+    <string name="no_database">"Der er ingen database!"</string>
+    <string name="search_hint">"Indtast webadresse"</string>
+    <string name="search_button_text">"Gå"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Bemærk"</string>
+    <string name="popup_window_attempt">"Dette websted forsøger at åbne et pop op-vindue."</string>
+    <string name="allow">"Tillad"</string>
+    <string name="block">"Bloker"</string>
+    <string name="too_many_windows_dialog_title">"Grænsen for vinduet er nået"</string>
+    <string name="too_many_windows_dialog_message">"Der kunne ikke åbnes et nyt vindue, fordi du allerede har åbnet det maksimale antal."</string>
+    <string name="too_many_subwindows_dialog_title">"Pop op er allerede åben"</string>
+    <string name="too_many_subwindows_dialog_message">"Der kunne ikke åbnes et nyt pop op-vindue, da der kun kan være ét åbent ad gangen."</string>
+    <string name="download_title">"Downloadoversigt"</string>
+    <string name="download_unknown_filename">"&lt;Ukendt&gt;"</string>
+    <string name="download_menu_open">"Åbn"</string>
+    <string name="download_menu_clear">"Ryd fra listen"</string>
+    <string name="download_menu_cancel">"Annuller download"</string>
+    <string name="download_menu_cancel_all">"Annuller alle downloads"</string>
+    <string name="download_menu_clear_all">"Ryd liste"</string>
+    <string name="download_clear_dlg_title">"Ryd"</string>
+    <string name="download_clear_dlg_msg">"Alle elementer ryddes fra listen og fjernes fra browserens cache."</string>
+    <string name="download_cancel_dlg_title">"Annuller downloads"</string>
+    <string name="download_cancel_dlg_msg">"Alle <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> downloads annulleres og ryddes fra downloadoversigten."</string>
+    <string name="download_file_error_dlg_title">"Der er ikke mere plads"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g> kunne ikke downloades."\n"Frigør noget plads på din telefon, og prøv igen."</string>
+    <string name="download_failed_generic_dlg_title">"Download mislykkedes"</string>
+    <string name="download_no_sdcard_dlg_title">"Der er intet SD-kort"</string>
+    <string name="download_no_sdcard_dlg_msg">"Et SD-kort er påkrævet for at downloade <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_sdcard_busy_dlg_title">"SD-kort er ikke tilgængeligt"</string>
+    <string name="download_sdcard_busy_dlg_msg">"SD-kortet er optaget. Vælg \"Slå USB-lagring fra\" i meddelelsen for at tillade downloads."</string>
+    <string name="download_no_application">"Der blev ikke fundet et program, der kan åbne denne fil."</string>
+    <string name="retry">"Prøv igen"</string>
+    <string name="no_downloads">"Downloadoversigt er tom."</string>
+    <string name="download_error">"Download mislykkedes."</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> Download afsluttet."</string>
+    <string name="download_running">"Downloader ..."</string>
+    <string name="download_pending">"Starter download ..."</string>
+    <string name="download_pending_network">"Venter på dataforbindelse ..."</string>
+    <string name="download_running_paused">"Venter på dataforbindelse ..."</string>
+    <string name="download_canceled">"Download annulleret."</string>
+    <string name="download_not_acceptable">"Der kan ikke downloades. Indholdet er ikke understøttet på telefonen."</string>
+    <string name="download_file_error">"Download kan ikke afsluttes. Der er ikke nok plads."</string>
+    <string name="download_length_required">"Der kan ikke downloades. Størrelsen på elementet kan ikke afgøres."</string>
+    <string name="download_precondition_failed">"Download blev afbrudt. Den kan ikke genoptages."</string>
+    <string name="activity_instrumentation_test_runner">"Browsertestkørsel"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Tillad lagring"</string>
+    <string name="query_data_message">"Dette websted ønsker at gemme oplysninger på din telefon."</string>
+    <string name="location_prompt">"Få adgang til din placering"</string>
+    <string name="location_message">"Dette websted ønsker at få adgang til din placering."</string>
+    <string name="shortcut_prompt">"Opret en genvej"</string>
+    <string name="shortcut_message">"Dette websted vil gerne oprette en genvej til denne side på din startskærm."</string>
+    <string name="settings_message">"Nedenstående tabel viser de tilladelser, du har givet til hvert websted, som har forsøgt at bruge Gears."</string>
+    <string name="filepicker_message">"Filsamler"</string>
+    <string name="image_message">"Valgt billede"</string>
+    <string name="settings_title">"Indstillinger for Gears"</string>
+    <string name="privacy_policy">"Læs webstedets fortrolighedspolitik for at se, hvordan din placering bruges."</string>
+    <string name="settings_storage_title">"Tillad lokal lagring"</string>
+    <string name="settings_storage_subtitle_on">"Dette websted kan gemme oplysninger på din telefon"</string>
+    <string name="settings_storage_subtitle_off">"Dette websted kan ikke gemme oplysninger på din telefon"</string>
+    <string name="settings_location_title">"Tillad lokaliseringsregistrering"</string>
+    <string name="settings_location_subtitle_on">"Dette websted kan læse din aktuelle placering"</string>
+    <string name="settings_location_subtitle_off">"Dette websted kan ikke læse din aktuelle placering"</string>
+    <string name="settings_remove_site">"Fjern dette websted fra Gears"</string>
+    <string name="settings_empty">"Der er ikke indstillet nogen tilladelser"</string>
+    <string name="settings_confirmation_remove_title">"Fjern dette websted"</string>
+    <string name="settings_confirmation_remove">"Alle tilladelser ryddes, og alle data, som er gemt på din telefon af webstedet, slettes."</string>
+    <string name="storage_notification">"Dette websted gemmer oplysninger på din telefon."\n" Skift denne indstilling i:"\n" Indstillinger-&gt; Indstillinger for Gears"</string>
+    <string name="storage_notification_alwaysdeny">"Dette websted gemmer aldrig oplysninger på din telefon."\n" Skift denne indstilling i:"\n" Indstillinger-&gt; Indstillinger for Gears"</string>
+    <string name="location_notification">"Dette websted har adgang til din aktuelle placering."\n" Skift denne indstilling i:"\n" Indstillinger -&gt; Indstillinger for Gears"</string>
+    <string name="location_notification_alwaysdeny">"Dette websted har ikke adgang til din aktuelle placering."\n" Skift denne indstilling i:"\n" Indstillinger -&gt; Indstillinger for Gears"</string>
+    <string name="shortcut_notification">"Genvej oprettet"</string>
+    <string name="permission_button_alwaysdeny">"Tillad aldrig"</string>
+    <string name="permission_button_allow">"OK"</string>
+    <string name="permission_button_deny">"Annuller"</string>
+    <string name="shortcut_button_alwaysdeny">"Tillad aldrig"</string>
+    <string name="shortcut_button_allow">"OK"</string>
+    <string name="shortcut_button_deny">"Annuller"</string>
+    <string name="settings_button_allow">"Anvend"</string>
+    <string name="settings_button_deny">"Annuller"</string>
+    <string name="filepicker_button_allow">"OK"</string>
+    <string name="filepicker_button_deny">"Annuller"</string>
+    <string name="filepicker_path">"sti:"</string>
+    <string name="filepicker_no_files_selected">"Der blev ikke valgt nogen filer"</string>
+    <string name="filepicker_one_file_selected">"Der er valgt én fil"</string>
+    <string name="filepicker_some_files_selected">"valgte filer"</string>
+    <string name="remove">"Fjern"</string>
+    <string name="local_storage">"Lokal lagring"</string>
+    <string name="allowed">"Tilladt"</string>
+    <string name="denied">"Afvist"</string>
+    <string name="unrecognized_dialog_message">"Ikke anerkendt dialogtype"</string>
+    <string name="default_button">"OK"</string>
+    <string name="zoom_overview_button_text">"Oversigt"</string>
+</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index a6f2f0f..67f10e3 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -25,6 +25,7 @@
     <string name="username">"Name"</string>
     <string name="password">"Passwort"</string>
     <string name="action">"Anmelden"</string>
+    <string name="bookmarks_search">"Browser"</string>
     <string name="cancel">"Abbrechen"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Bei Problemen mit der Sicherheit der Website Warnung anzeigen"</string>
     <string name="pref_security_accept_cookies">"Cookies akzeptieren"</string>
     <string name="pref_security_accept_cookies_summary">"Speichern und Lesen von \"Cookie\"-Daten zulassen"</string>
-    <string name="pref_text_size">"Textgröße einstellen"</string>
+    <string name="pref_text_size">"Textgröße"</string>
   <string-array name="pref_text_size_choices">
     <item>"Sehr klein"</item>
     <item>"Klein"</item>
@@ -158,6 +159,13 @@
     <item>"Sehr groß"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Textgröße"</string>
+    <string name="pref_default_zoom">"Standard-Zoom"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Entfernt"</item>
+    <item>"Mittel"</item>
+    <item>"Schließen"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Standard-Zoom"</string>
     <string name="pref_extras_title">"Erweiterte Einstellungen"</string>
     <string name="pref_extras_gears_enable">"Gears aktivieren"</string>
     <string name="pref_extras_gears_enable_summary">"Anwendungen, die die Browserfunktionen erweitern"</string>
@@ -170,7 +178,7 @@
     <string name="pref_extras_reset_default_dlg">"Alle Browserdaten werden gelöscht. Alle Einstellungen werden auf die Standardeinstellung zurückgesetzt."</string>
     <string name="pref_extras_reset_default_dlg_title">"Auf Standardeinstellung zurücksetzen"</string>
     <string name="pref_development_title">"Debuggen"</string>
-    <string name="pref_default_text_encoding">"Textcodierung einstellen"</string>
+    <string name="pref_default_text_encoding">"Textcodierung"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +203,8 @@
     <string name="no_database">"Keine Datenbank!"</string>
     <string name="search_hint">"Webadresse eingeben"</string>
     <string name="search_button_text">"Los"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Achtung"</string>
     <string name="popup_window_attempt">"Diese Website versucht, ein Pop-up-Fenster zu öffnen."</string>
     <string name="allow">"Zulassen"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"Download kann nicht gestartet werden, da die Größe des Elements nicht bestimmt werden kann."</string>
     <string name="download_precondition_failed">"Download wurde unterbrochen und kann nicht fortgesetzt werden."</string>
     <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
-    <string name="search_google">"In Google suchen"</string>
-    <string name="permlab_readHistoryBookmarks">"Browserverlauf und Lesezeichen lesen"</string>
-    <string name="permdesc_readHistoryBookmarks">"Ermöglicht der Anwendung, alle URLs, die mit dem Browser besucht wurden, sowie alle Lesezeichen des Browsers zu lesen."</string>
-    <string name="permlab_writeHistoryBookmarks">"Browserverlauf und Lesezeichen schreiben"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Ermöglicht einer Anwendung, den auf Ihrem Telefon gespeicherten Browserverlauf und die Lesezeichen zu ändern. Schädliche Anwendungen können so Ihre Browserdaten löschen oder ändern."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Web durchsuchen"</string>
     <string name="query_data_prompt">"Speicher zulassen"</string>
     <string name="query_data_message">"Diese Website möchte Informationen auf Ihrem Telefon speichern."</string>
     <string name="location_prompt">"Zugriff auf Ihren Standort"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
new file mode 100644
index 0000000..781d20c
--- /dev/null
+++ b/res/values-el/strings.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Πρόγραμμα περιήγησης"</string>
+    <string name="tab_bookmarks">"Σελιδοδείκτες"</string>
+    <string name="tab_most_visited">"Οι πιο δημοφιλείς"</string>
+    <string name="tab_history">"Ιστορικό"</string>
+    <string name="added_to_bookmarks">"Έγινε προσθήκη στους σελιδοδείκτες"</string>
+    <string name="removed_from_bookmarks">"Κατάργηση από τους σελιδοδείκτες"</string>
+    <string name="sign_in_to">"Σύνδεση στο <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Όνομα"</string>
+    <string name="password">"Κωδικός πρόσβασης"</string>
+    <string name="action">"Σύνδεση"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"Ακύρωση"</string>
+    <string name="ok">"OK"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Δεν υπάρχουν αποτελέσματα"</item>
+    <item quantity="one">"1 αποτέλεσμα"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> αποτελέσματα"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> αποτελέσματα"</item>
+  </plurals>
+    <string name="page_info">"Πληροφορίες σελίδας"</string>
+    <string name="page_info_view">"Προβολή πληροφοριών σελίδας"</string>
+    <string name="page_info_address">"Διεύθυνση:"</string>
+    <string name="ssl_warnings_header">"Παρουσιάστηκαν προβλήματα με το πιστοποιητικό ασφαλείας αυτού του ιστότοπου."</string>
+    <string name="ssl_continue">"Συνέχεια"</string>
+    <string name="security_warning">"Προειδοποίηση ασφαλείας"</string>
+    <string name="view_certificate">"Προβολή πιστοποιητικού"</string>
+    <string name="ssl_untrusted">"Αυτό το πιστοποιητικό δεν είναι από έμπιστη αρχή."</string>
+    <string name="ssl_mismatch">"Το όνομα του ιστότοπου δεν αντιστοιχεί στο όνομα του πιστοποιητικού."</string>
+    <string name="ssl_expired">"Αυτό το πιστοποιητικό έχει λήξει."</string>
+    <string name="ssl_not_yet_valid">"Αυτό το πιστοποιητικό δεν είναι έγκυρο ακόμα."</string>
+    <string name="ssl_certificate">"Πιστοποιητικό ασφαλείας"</string>
+    <string name="ssl_certificate_is_valid">"Αυτό το πιστοποιητικό είναι έγκυρο."</string>
+    <string name="issued_to">"Εκδόθηκε στις:"</string>
+    <string name="common_name">"Κοινό όνομα:"</string>
+    <string name="org_name">"Οργανισμός:"</string>
+    <string name="org_unit">"Μονάδα οργάνωσης:"</string>
+    <string name="issued_by">"Εκδόθηκε:"</string>
+    <string name="validity_period">"Ισχύς:"</string>
+    <string name="issued_on">"Εκδόθηκε στις:"</string>
+    <string name="expires_on">"Λήγει:"</string>
+    <string name="retrieving_creds_dlg_msg">"Ανάκτηση λεπτομερειών σύνδεσης..."</string>
+    <string name="stopping">"Διακοπή..."</string>
+    <string name="stop">"Διακοπή"</string>
+    <string name="reload">"Ανανέωση"</string>
+    <string name="forward">"Εμπρός"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"Ακύρωση"</string>
+    <string name="location">"Τοποθεσία"</string>
+    <string name="name">"Όνομα"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Σελιδοδείκτης"</string>
+    <string name="edit_bookmark">"Επεξεργασία σελιδοδείκτη"</string>
+    <string name="create_shortcut_bookmark">"Προσθήκη συντόμευσης στην αρχική οθόνη"</string>
+    <string name="open_bookmark">"Άνοιγμα"</string>
+    <string name="remove_bookmark">"Διαγραφή σελιδοδείκτη"</string>
+    <string name="remove_history_item">"Κατάργηση από το ιστορικό"</string>
+    <string name="bookmark_saved">"Αποθηκεύτηκε στους σελιδοδείκτες."</string>
+    <string name="bookmark_needs_title">"Ο σελιδοδείκτης πρέπει να έχει ένα όνομα."</string>
+    <string name="bookmark_needs_url">"Ο σελιδοδείκτης πρέπει να έχει μια τοποθεσία."</string>
+    <string name="empty_bookmark">"Δεν είναι δυνατή η δημιουργία κενού σελιδοδείκτη."</string>
+    <string name="bookmark_url_not_valid">"Μη έγκυρη διεύθυνση URL."</string>
+    <string name="delete_bookmark">"Διαγραφή"</string>
+    <string name="bookmark_page">"Προσθήκη της τελευταίας σελίδας που προβλήθηκε στους σελιδοδείκτες"</string>
+    <string name="current_page">"από "</string>
+    <string name="delete_bookmark_warning">"Ο σελιδοδείκτης \"<xliff:g id="BOOKMARK">%s</xliff:g>\" θα διαγραφεί."</string>
+    <string name="open_in_new_window">"Άνοιγμα σε νέο παράθυρο"</string>
+    <string name="new_window">"Νέο παράθυρο"</string>
+    <string name="goto_dot">"Μετάβαση"</string>
+    <string name="find_dot">"Εύρεση στη σελίδα"</string>
+    <string name="select_dot">"Επιλογή κειμένου"</string>
+    <string name="view_tabs">"Προεπισκόπηση παραθύρου"</string>
+    <string name="view_tabs_condensed">"Παράθυρα"</string>
+    <string name="tab_picker_title">"Τρέχοντα παράθυρα"</string>
+    <string name="tab_picker_view_tab">"Προβολή"</string>
+    <string name="tab_picker_new_tab">"Νέο παράθυρο"</string>
+    <string name="tab_picker_remove_tab">"Κλείσιμο"</string>
+    <string name="tab_picker_bookmark">"Σελιδοδείκτης"</string>
+    <string name="tab_picker_send_url">"Κοινή χρήση συνδέσμου"</string>
+    <string name="bookmarks">"Σελιδοδείκτες"</string>
+    <string name="shortcut_bookmark">"Σελιδοδείκτης"</string>
+    <string name="history">"Ιστορικό"</string>
+    <string name="menu_view_download">"Λήψεις"</string>
+    <string name="share_page">"Κοινή χρήση σελίδας"</string>
+    <string name="contextmenu_openlink">"Άνοιγμα"</string>
+    <string name="contextmenu_openlink_newwindow">"Άνοιγμα σε νέο παράθυρο"</string>
+    <string name="contextmenu_bookmark_thislink">"Πρόσθεση συνδέσμου στους σελιδοδείκτες"</string>
+    <string name="contextmenu_savelink">"Αποθήκευση συνδέσμου"</string>
+    <string name="contextmenu_sharelink">"Κοινή χρήση συνδέσμου"</string>
+    <string name="contextmenu_copy">"Αντιγραφή"</string>
+    <string name="contextmenu_copylink">"Αντιγραφή συνδέσμου διεύθυνσης URL"</string>
+    <string name="contextmenu_download_image">"Αποθήκευση εικόνας"</string>
+    <string name="contextmenu_view_image">"Προβολή εικόνας"</string>
+    <string name="contextmenu_dial_dot">"Κλήση..."</string>
+    <string name="contextmenu_add_contact">"Προσθήκη επαφής"</string>
+    <string name="contextmenu_send_mail">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου"</string>
+    <string name="contextmenu_map">"Χάρτης"</string>
+    <string name="clear">"Εκκαθάριση"</string>
+    <string name="replace">"Αντικατάσταση"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Σελιδοδείκτες"</string>
+    <string name="menu_preferences">"Ρυθμίσεις"</string>
+    <string name="pref_content_title">"Ρυθμίσεις περιεχομένου σελίδας"</string>
+    <string name="pref_content_load_images">"Φόρτωση εικόνων"</string>
+    <string name="pref_content_load_images_summary">"Προβολή εικόνων στις ιστοσελίδες"</string>
+    <string name="pref_content_block_popups">"Αποκλεισμός αναδυόμενων παραθύρων"</string>
+    <string name="pref_content_javascript">"Ενεργοποίηση JavaScript"</string>
+    <string name="pref_content_open_in_background">"Άνοιγμα στο παρασκήνιο"</string>
+    <string name="pref_content_open_in_background_summary">"Τα νέα παράθυρα ανοίγουν πίσω από το τρέχον"</string>
+    <string name="pref_content_homepage">"Ορισμός ως αρχική σελίδα"</string>
+    <string name="pref_content_autofit">"Αυτόματη προσαρμογή σελίδων"</string>
+    <string name="pref_content_autofit_summary">"Μορφοποίηση ιστοσελίδων για την προσαρμογή τους στο μέγεθος της οθόνης"</string>
+    <string name="pref_privacy_title">"Ρυθμίσεις απορρήτου"</string>
+    <string name="pref_privacy_clear_cache">"Εκκαθάριση προσωρινής μνήμης"</string>
+    <string name="pref_privacy_clear_cache_summary">"Διαγραφή όλου του περιεχομένου των προσωρινά αποθηκευμένων σελίδων"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Θα γίνει εκκαθάριση της προσωρινής μνήμης."</string>
+    <string name="pref_privacy_clear_cookies">"Εκκαθάριση όλων των δεδομένων cookie"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Εκκαθάριση όλων των cookie του προγράμματος περιήγησης"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Θα γίνει εκκαθάριση όλων των cookie."</string>
+    <string name="pref_privacy_clear_history">"Εκκαθάριση ιστορικού"</string>
+    <string name="pref_privacy_clear_history_summary">"Εκκαθάριση ιστορικού πλοήγησης προγράμματος περιήγησης"</string>
+    <string name="pref_privacy_clear_history_dlg">"Θα γίνει εκκαθάριση του ιστορικού πλοήγησης του προγράμματος περιήγησης."</string>
+    <string name="pref_privacy_clear_form_data">"Εκκαθάριση δεδομένων φόρμας"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Εκκαθάριση όλων των αποθηκευμένων δεδομένων φόρμας"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Θα γίνει εκκαθάριση όλων των αποθηκευμένων δεδομένων φόρμας."</string>
+    <string name="pref_privacy_clear_passwords">"Εκκαθάριση κωδικών πρόσβασης"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Εκκαθάριση όλων των αποθηκευμένων κωδικών πρόσβασης"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Θα γίνει εκκαθάριση όλων των αποθηκευμένων κωδικών πρόσβασης."</string>
+    <string name="pref_security_title">"Ρυθμίσεις ασφαλείας"</string>
+    <string name="pref_security_remember_passwords">"Απομνημόνευση κωδικών πρόσβασης"</string>
+    <string name="pref_security_remember_passwords_summary">"Αποθήκευση ονομάτων χρήστη και κωδικών πρόσβασης για τους ιστότοπους"</string>
+    <string name="pref_security_save_form_data">"Απομνημόνευση δεδομένων φόρμας"</string>
+    <string name="pref_security_save_form_data_summary">"Να γίνεται απομνημόνευση των δεδομένων που εισάγω σε φόρμες για μελλοντική χρήση"</string>
+    <string name="pref_security_show_security_warning">"Εμφάνιση προειδοποιήσεων ασφαλείας"</string>
+    <string name="pref_security_show_security_warning_summary">"Να εμφανίζεται προειδοποίηση εάν υπάρχει πρόβλημα με την ασφάλεια ενός ιστότοπου"</string>
+    <string name="pref_security_accept_cookies">"Αποδοχή cookie"</string>
+    <string name="pref_security_accept_cookies_summary">"Να επιτρέπεται η αποθήκευση και η ανάγνωση δεδομένων \"cookie\" από τους ιστότοπους"</string>
+    <!-- no translation found for pref_text_size (3827031324346612208) -->
+    <skip />
+  <string-array name="pref_text_size_choices">
+    <item>"Πολύ μικρό"</item>
+    <item>"Μικρό"</item>
+    <item>"Κανονικό"</item>
+    <item>"Μεγάλο"</item>
+    <item>"Πολύ μεγάλο"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Μέγεθος κειμένου"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Σύνθετες ρυθμίσεις"</string>
+    <string name="pref_extras_gears_enable">"Ενεργοποίηση Gears"</string>
+    <string name="pref_extras_gears_enable_summary">"Εφαρμογές που επεκτείνουν τις δυνατότητες του προγράμματος περιήγησης"</string>
+    <string name="pref_extras_gears_settings">"Ρυθμίσεις Gears"</string>
+    <string name="pref_plugin_installed">"Λίστα προσθηκών"</string>
+    <string name="pref_plugin_installed_empty_list">"Δεν υπάρχουν εγκατεστημένες προσθήκες."</string>
+    <string name="pref_extras_gears_settings_summary">"Εφαρμογές που επεκτείνουν τις δυνατότητες του προγράμματος περιήγησης"</string>
+    <string name="pref_extras_reset_default">"Επαναφορά προεπιλογών"</string>
+    <string name="pref_extras_reset_default_summary">"Εκκαθάριση όλων των δεδομένων του προγράμματος περιήγησης και επαναφορά όλων των ρυθμίσεων στις προεπιλεγμένες ρυθμίσεις"</string>
+    <string name="pref_extras_reset_default_dlg">"Θα γίνει εκκαθάριση όλων των δεδομένων του προγράμματος περιήγησης και επαναφορά των ρυθμίσεων στις προεπιλεγμένες τιμές."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Επαναφορά προεπιλογών"</string>
+    <string name="pref_development_title">"Εντοπισμός σφαλμάτων"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Ιαπωνικά (ISO-2022-JP)"</item>
+    <item>"Ιαπωνικά (SHIFT_JIS)"</item>
+    <item>"Ιαπωνικά (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Κωδικοποίηση κειμένου"</string>
+    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="browserFrameRedirect">"Ανακατεύθυνση"</string>
+    <string name="browserFrame307Post">"Γίνεται ανακατεύθυνση αυτής της ιστοσελίδας. Να αποσταλούν ξανά τα δεδομένα φόρμας που έχετε εισάγει, στην νέα τοποθεσία;"</string>
+    <string name="browserFrameNetworkErrorLabel">"Πρόβλημα σύνδεσης δεδομένων"</string>
+    <string name="browserFrameFileErrorLabel">"Υπάρχει πρόβλημα με το αρχείο"</string>
+    <string name="browserFrameFormResubmitLabel">"Επιβεβαίωση"</string>
+    <string name="browserFrameFormResubmitMessage">"Η σελίδα που προσπαθείτε να προβάλλετε, περιέχει δεδομένα που έχουν ήδη υποβληθεί (\"POSTDATA\"). Εάν αποστείλετε ξανά τα δεδομένα, όλες οι ενέργειες που εκτελέστηκαν από τη φόρμα στη σελίδα (όπως μια αναζήτηση ή μια αγορά στο διαδίκτυο) θα επαναληφθούν."</string>
+    <string name="loadSuspendedTitle">"Δεν υπάρχει σύνδεση δικτύου"</string>
+    <string name="loadSuspended">"Η φόρτωση της σελίδας θα συνεχιστεί μετά την επαναφορά της σύνδεσης."</string>
+    <string name="clear_history">"Εκκαθάριση ιστορικού"</string>
+    <string name="browser_history">"Σελίδες που έχετε επισκεφθεί πρόσφατα"</string>
+    <string name="empty_history">"Το ιστορικό του προγράμματος περιήγησης είναι κενό."</string>
+    <string name="add_new_bookmark">"Προσθήκη σελιδοδείκτη..."</string>
+    <string name="no_database">"Δεν υπάρχει βάση δεδομένων!"</string>
+    <string name="search_hint">"Πληκτρολογήστε τη διεύθυνση ιστού"</string>
+    <string name="search_button_text">"Μετάβαση"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Προσοχή"</string>
+    <string name="popup_window_attempt">"Αυτός ο ιστότοπος επιχειρεί να ανοίξει ένα αναδυόμενο παράθυρο."</string>
+    <string name="allow">"Να επιτρέπεται"</string>
+    <string name="block">"Αποκλεισμός"</string>
+    <string name="too_many_windows_dialog_title">"Το όριο παραθύρων εξαντλήθηκε"</string>
+    <string name="too_many_windows_dialog_message">"Δεν ήταν δυνατό το άνοιγμα νέου παραθύρου, επειδή έχετε ήδη ανοίξει τον μέγιστο αριθμό παραθύρων."</string>
+    <string name="too_many_subwindows_dialog_title">"Το αναδυόμενο παράθυρο είναι ήδη ανοιχτό"</string>
+    <string name="too_many_subwindows_dialog_message">"Δεν είναι δυνατό το άνοιγμα ενός νέου αναδυόμενου παράθυρου, επειδή επιτρέπεται το άνοιγμα μόνο ενός παράθυρου κάθε φορά."</string>
+    <string name="download_title">"Ιστορικό λήψης"</string>
+    <string name="download_unknown_filename">"&lt;Άγνωστο&gt;"</string>
+    <string name="download_menu_open">"Άνοιγμα"</string>
+    <string name="download_menu_clear">"Εκκαθάριση από τη λίστα"</string>
+    <string name="download_menu_cancel">"Ακύρωση λήψης"</string>
+    <string name="download_menu_cancel_all">"Ακύρωση όλων των λήψεων"</string>
+    <string name="download_menu_clear_all">"Εκκαθάριση λίστας"</string>
+    <string name="download_clear_dlg_title">"Εκκαθάριση"</string>
+    <string name="download_clear_dlg_msg">"Θα γίνει εκκαθάριση όλων των στοιχείων από τη λίστα και κατάργηση από την προσωρινή μνήμη του προγράμματος περιήγησης."</string>
+    <string name="download_cancel_dlg_title">"Ακύρωση λήψεων"</string>
+    <string name="download_cancel_dlg_msg">"Οι <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> λήψεις θα ακυρωθούν και θα γίνει εκκαθάρισή τους από το ιστορικό λήψεων."</string>
+    <string name="download_file_error_dlg_title">"Εξαντλήθηκε ο χώρος"</string>
+    <string name="download_file_error_dlg_msg">"Δεν ήταν δυνατή η λήψη του <xliff:g id="FILENAME">%s</xliff:g>."\n"Απελευθερώστε λίγο χώρο στο τηλέφωνό σας και δοκιμάστε ξανά."</string>
+    <string name="download_failed_generic_dlg_title">"Ανεπιτυχής λήψη"</string>
+    <string name="download_no_sdcard_dlg_title">"Δεν υπάρχει κάρτα SD"</string>
+    <string name="download_no_sdcard_dlg_msg">"Για τη λήψη του <xliff:g id="FILENAME">%s</xliff:g> απαιτείται κάρτα SD."</string>
+    <string name="download_sdcard_busy_dlg_title">"Η κάρτα SD δεν είναι διαθέσιμη"</string>
+    <string name="download_sdcard_busy_dlg_msg">"Η κάρτα SD είναι απασχολημένη. Για να επιτρέψετε τις λήψεις, στην ειδοποίηση επιλέξτε \"Απενεργοποίηση χώρου αποθήκευσης USB\"."</string>
+    <string name="download_no_application">"Δεν βρέθηκε εφαρμογή για το άνοιγμα αυτού του αρχείου."</string>
+    <string name="retry">"Επανάληψη"</string>
+    <string name="no_downloads">"Το ιστορικό λήψεων του προγράμματος περιήγησης είναι κενό."</string>
+    <string name="download_error">"Ανεπιτυχής λήψη."</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> Ολοκλήρωση λήψης."</string>
+    <string name="download_running">"Λήψη..."</string>
+    <string name="download_pending">"Έναρξη λήψης..."</string>
+    <string name="download_pending_network">"Αναμονή για σύνδεση δεδομένων…"</string>
+    <string name="download_running_paused">"Αναμονή για σύνδεση δεδομένων…"</string>
+    <string name="download_canceled">"Η λήψη ακυρώθηκε."</string>
+    <string name="download_not_acceptable">"Δεν είναι δυνατή η λήψη. Το περιεχόμενο δεν υποστηρίζεται από το τηλέφωνο."</string>
+    <string name="download_file_error">"Δεν είναι δυνατή η ολοκλήρωση της λήψης. Δεν υπάρχει αρκετός διαθέσιμος χώρος."</string>
+    <string name="download_length_required">"Δεν είναι δυνατή η λήψη. Δεν είναι δυνατός ο προσδιορισμός του μεγέθους του στοιχείου."</string>
+    <string name="download_precondition_failed">"Η λήψη διακόπηκε. Δεν είναι δυνατή η συνέχισή της."</string>
+    <string name="activity_instrumentation_test_runner">"Πρόγραμμα εκτέλεσης δοκιμών προγράμματος περιήγησης"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Να επιτρέπεται η αποθήκευση"</string>
+    <string name="query_data_message">"Αυτός ο ιστότοπος θέλει να αποθηκεύσει πληροφορίες στο τηλέφωνό σας."</string>
+    <string name="location_prompt">"Πρόσβαση στην τοποθεσία σας"</string>
+    <string name="location_message">"Αυτός ο ιστότοπος θέλει να αποκτήσει πρόσβαση στην τοποθεσία σας."</string>
+    <string name="shortcut_prompt">"Δημιουργία συντόμευσης"</string>
+    <string name="shortcut_message">"Αυτός ο ιστότοπος θέλει να δημιουργήσει μια συντόμευση αυτής της σελίδας στην αρχική σας οθόνη."</string>
+    <string name="settings_message">"Ο παρακάτω πίνακας εμφανίζει τα δικαιώματα που έχετε παραχωρήσει σε κάθε ιστότοπο που προσπάθησε να χρησιμοποιήσει το Gears."</string>
+    <string name="filepicker_message">"Πρόγραμμα επιλογής αρχείων"</string>
+    <string name="image_message">"Επιλεγμένη εικόνα"</string>
+    <string name="settings_title">"Ρυθμίσεις Gears"</string>
+    <string name="privacy_policy">"Διαβάστε την πολιτική απορρήτου αυτού του ιστότοπου για να μάθετε πώς θα χρησιμοποιηθεί η τοποθεσία σας."</string>
+    <string name="settings_storage_title">"Να επιτρέπεται η τοπική αποθήκευση"</string>
+    <string name="settings_storage_subtitle_on">"Αυτός ο ιστότοπος μπορεί να αποθηκεύσει πληροφορίες στο τηλέφωνό σας"</string>
+    <string name="settings_storage_subtitle_off">"Αυτός ο ιστότοπος δεν μπορεί να αποθηκεύσει πληροφορίες στο τηλέφωνό σας"</string>
+    <string name="settings_location_title">"Να επιτρέπεται ο εντοπισμός τοποθεσίας"</string>
+    <string name="settings_location_subtitle_on">"Είναι δυνατή η ανάγνωση της τοποθεσίας σας από αυτόν τον ιστότοπο"</string>
+    <string name="settings_location_subtitle_off">"Δεν είναι δυνατή η ανάγνωση της τοποθεσίας σας από αυτόν τον ιστότοπο"</string>
+    <string name="settings_remove_site">"Κατάργηση αυτού του ιστότοπου από το Gears"</string>
+    <string name="settings_empty">"Δεν έχουν οριστεί δικαιώματα"</string>
+    <string name="settings_confirmation_remove_title">"Κατάργηση αυτού του ιστότοπου"</string>
+    <string name="settings_confirmation_remove">"Θα γίνει εκκαθάριση όλων των δικαιωμάτων και τα δεδομένα που έχουν αποθηκευτεί στο τηλέφωνό σας από τον ιστότοπο, θα διαγραφούν."</string>
+    <string name="storage_notification">"Αυτός ο ιστότοπος θα αποθηκεύσει πληροφορίες στο τηλέφωνό σας."\n" Αλλάξτε αυτήν τη ρύθμιση στο μενού:"\n" Ρυθμίσεις -&gt; Ρυθμίσεις Gears"</string>
+    <string name="storage_notification_alwaysdeny">"Αυτός ο ιστότοπος δεν θα αποθηκεύσει ποτέ πληροφορίες στο τηλέφωνό σας."\n" Αλλάξτε αυτήν τη ρύθμιση στο μενού:"\n" Ρυθμίσεις -&gt; Ρυθμίσεις Gears"</string>
+    <string name="location_notification">"Αυτός ο ιστότοπος μπορεί να αποκτήσει πρόσβαση στην τρέχουσα τοποθεσία σας."\n" Αλλάξτε αυτήν τη ρύθμιση στο μενού:"\n" Ρυθμίσεις -&gt; Ρυθμίσεις Gears"</string>
+    <string name="location_notification_alwaysdeny">"Αυτός ο ιστότοπος δεν θα έχει πρόσβαση στην τοποθεσία σας."\n" Αλλάξτε αυτήν τη ρύθμιση από το μενού:"\n" Ρυθμίσεις -&gt; Ρυθμίσεις Gears"</string>
+    <string name="shortcut_notification">"Η συντόμευση δημιουργήθηκε"</string>
+    <string name="permission_button_alwaysdeny">"Να μην επιτρέπεται ποτέ"</string>
+    <string name="permission_button_allow">"OK"</string>
+    <string name="permission_button_deny">"Ακύρωση"</string>
+    <string name="shortcut_button_alwaysdeny">"Να μην επιτρέπεται ποτέ"</string>
+    <string name="shortcut_button_allow">"OK"</string>
+    <string name="shortcut_button_deny">"Ακύρωση"</string>
+    <string name="settings_button_allow">"Εφαρμογή"</string>
+    <string name="settings_button_deny">"Ακύρωση"</string>
+    <string name="filepicker_button_allow">"OK"</string>
+    <string name="filepicker_button_deny">"Ακύρωση"</string>
+    <string name="filepicker_path">"διαδρομή:"</string>
+    <string name="filepicker_no_files_selected">"Δεν έχουν επιλεχθεί αρχεία"</string>
+    <string name="filepicker_one_file_selected">"Επιλέχθηκε ένα αρχείο"</string>
+    <string name="filepicker_some_files_selected">"επιλεγμένα αρχεία"</string>
+    <string name="remove">"Κατάργηση"</string>
+    <string name="local_storage">"Τοπικός χώρος αποθήκευσης"</string>
+    <string name="allowed">"Επιτρέπεται"</string>
+    <string name="denied">"Απορρίφθηκε"</string>
+    <string name="unrecognized_dialog_message">"Άγνωστος τύπος πλαισίου διαλόγου"</string>
+    <string name="default_button">"OK"</string>
+    <string name="zoom_overview_button_text">"Επισκόπηση"</string>
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..fd47725
--- /dev/null
+++ b/res/values-es-rUS/strings.xml
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Navegador"</string>
+    <string name="tab_bookmarks">"Marcadores"</string>
+    <string name="tab_most_visited">"Los más visitados"</string>
+    <string name="tab_history">"Historial"</string>
+    <string name="added_to_bookmarks">"Agregado a marcadores"</string>
+    <string name="removed_from_bookmarks">"Suprimido de los marcadores"</string>
+    <string name="sign_in_to">"Iniciar sesión en <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Nombre"</string>
+    <string name="password">"Contraseña"</string>
+    <string name="action">"Iniciar sesión"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"Cancelar"</string>
+    <string name="ok">"Aceptar"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Sin coincidencias"</item>
+    <item quantity="one">"1 coincidencia"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> coincide"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> coincide"</item>
+  </plurals>
+    <string name="page_info">"Información de la página"</string>
+    <string name="page_info_view">"Ver información de la página"</string>
+    <string name="page_info_address">"Dirección:"</string>
+    <string name="ssl_warnings_header">"Existen problemas con el certificado de seguridad para este sitio."</string>
+    <string name="ssl_continue">"Continuar"</string>
+    <string name="security_warning">"Advertencia de seguridad"</string>
+    <string name="view_certificate">"Ver certificado"</string>
+    <string name="ssl_untrusted">"Este certificado no proviene de una fuente confiable."</string>
+    <string name="ssl_mismatch">"El nombre del sitio no coincide con el nombre del certificado."</string>
+    <string name="ssl_expired">"Este certificado ha expirado."</string>
+    <string name="ssl_not_yet_valid">"Este certificado aún no es válido."</string>
+    <string name="ssl_certificate">"Certificado de seguridad"</string>
+    <string name="ssl_certificate_is_valid">"Este certificado es válido."</string>
+    <string name="issued_to">"Emitido a:"</string>
+    <string name="common_name">"Nombre habitual:"</string>
+    <string name="org_name">"Organización:"</string>
+    <string name="org_unit">"Unidad organizativa"</string>
+    <string name="issued_by">"Emitido por:"</string>
+    <string name="validity_period">"Validez:"</string>
+    <string name="issued_on">"Enviado el:"</string>
+    <string name="expires_on">"Expira el:"</string>
+    <string name="retrieving_creds_dlg_msg">"Recuperando detalles de inicio de sesión..."</string>
+    <string name="stopping">"Deteniendo..."</string>
+    <string name="stop">"Detener"</string>
+    <string name="reload">"Actualizar"</string>
+    <string name="forward">"Reenviar"</string>
+    <string name="save">"Aceptar"</string>
+    <string name="do_not_save">"Cancelar"</string>
+    <string name="location">"Ubicación"</string>
+    <string name="name">"Nombre"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Marcador"</string>
+    <string name="edit_bookmark">"Editar marcador"</string>
+    <string name="create_shortcut_bookmark">"Agregar acceso directo a la página de inicio"</string>
+    <string name="open_bookmark">"Abrir"</string>
+    <string name="remove_bookmark">"Eliminar marcador"</string>
+    <string name="remove_history_item">"Suprimir del historial"</string>
+    <string name="bookmark_saved">"Guardado en los marcadores."</string>
+    <string name="bookmark_needs_title">"El marcador debe tener un nombre."</string>
+    <string name="bookmark_needs_url">"El marcador debe tener una ubicación."</string>
+    <string name="empty_bookmark">"No es posible crear un marcador vacío."</string>
+    <string name="bookmark_url_not_valid">"La URL no es válida."</string>
+    <string name="delete_bookmark">"Eliminar"</string>
+    <string name="bookmark_page">"Última página vista del marcador"</string>
+    <string name="current_page">"de "</string>
+    <string name="delete_bookmark_warning">"El marcador \"<xliff:g id="BOOKMARK">%s</xliff:g>\" se eliminará."</string>
+    <string name="open_in_new_window">"Abrir en una ventana nueva"</string>
+    <string name="new_window">"Ventana nueva"</string>
+    <string name="goto_dot">"Ir"</string>
+    <string name="find_dot">"Buscar en la página"</string>
+    <string name="select_dot">"Seleccionar texto"</string>
+    <string name="view_tabs">"Descripción general de la ventana"</string>
+    <string name="view_tabs_condensed">"Windows"</string>
+    <string name="tab_picker_title">"Ventana actual"</string>
+    <string name="tab_picker_view_tab">"Ver"</string>
+    <string name="tab_picker_new_tab">"Ventana nueva"</string>
+    <string name="tab_picker_remove_tab">"Cerrar"</string>
+    <string name="tab_picker_bookmark">"Marcador"</string>
+    <string name="tab_picker_send_url">"Compartir enlace"</string>
+    <string name="bookmarks">"Marcadores"</string>
+    <string name="shortcut_bookmark">"Marcador"</string>
+    <string name="history">"Historial"</string>
+    <string name="menu_view_download">"Descargas"</string>
+    <string name="share_page">"Compartir página"</string>
+    <string name="contextmenu_openlink">"Abrir"</string>
+    <string name="contextmenu_openlink_newwindow">"Abrir en una ventana nueva"</string>
+    <string name="contextmenu_bookmark_thislink">"Enlace del marcador"</string>
+    <string name="contextmenu_savelink">"Guardar enlace"</string>
+    <string name="contextmenu_sharelink">"Compartir enlace"</string>
+    <string name="contextmenu_copy">"Copiar"</string>
+    <string name="contextmenu_copylink">"Copiar URL de vínculo"</string>
+    <string name="contextmenu_download_image">"Guardar imagen"</string>
+    <string name="contextmenu_view_image">"Ver imagen"</string>
+    <string name="contextmenu_dial_dot">"Discar..."</string>
+    <string name="contextmenu_add_contact">"Agregar contacto"</string>
+    <string name="contextmenu_send_mail">"Enviar correo electrónico"</string>
+    <string name="contextmenu_map">"Situar en el mapa"</string>
+    <string name="clear">"Borrar"</string>
+    <string name="replace">"Reemplazar"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Marcadores"</string>
+    <string name="menu_preferences">"Configuración"</string>
+    <string name="pref_content_title">"Configuración del contenido de la página"</string>
+    <string name="pref_content_load_images">"Cargar imágenes"</string>
+    <string name="pref_content_load_images_summary">"Visualizar imágenes en páginas web"</string>
+    <string name="pref_content_block_popups">"Bloquear ventanas emergentes"</string>
+    <string name="pref_content_javascript">"Habilitar JavaScript"</string>
+    <string name="pref_content_open_in_background">"Abrir en modo subordinado"</string>
+    <string name="pref_content_open_in_background_summary">"Las ventanas nuevas se abren detrás de la actual"</string>
+    <string name="pref_content_homepage">"Definir página de inicio"</string>
+    <string name="pref_content_autofit">"Ajuste automático de páginas"</string>
+    <string name="pref_content_autofit_summary">"Formatea las páginas web para que se ajusten a la pantalla"</string>
+    <string name="pref_privacy_title">"Configuración de privacidad"</string>
+    <string name="pref_privacy_clear_cache">"Borrar caché"</string>
+    <string name="pref_privacy_clear_cache_summary">"Eliminar todo el contenido de la página del caché"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Se borrará el caché."</string>
+    <string name="pref_privacy_clear_cookies">"Borrar todos los datos de cookies"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Borrar todas las cookies del navegador"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Se borrarán todas las cookies."</string>
+    <string name="pref_privacy_clear_history">"Borrar historial"</string>
+    <string name="pref_privacy_clear_history_summary">"Borrar el historial de navegación del navegador"</string>
+    <string name="pref_privacy_clear_history_dlg">"Se borrará el historial del navegador."</string>
+    <string name="pref_privacy_clear_form_data">"Borrar datos del formulario"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Borrar todos los datos guardados del formulario"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Se borrarán todos los datos guardados del formulario."</string>
+    <string name="pref_privacy_clear_passwords">"Borrar contraseñas"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Borrar todas las contraseñas guardadas"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Se borrarán todas las contraseñas guardadas."</string>
+    <string name="pref_security_title">"Configuración de seguridad"</string>
+    <string name="pref_security_remember_passwords">"Recordar contraseñas"</string>
+    <string name="pref_security_remember_passwords_summary">"Guardar nombres de usuario y contraseñas para sitios web"</string>
+    <string name="pref_security_save_form_data">"Recordar datos del formulario"</string>
+    <string name="pref_security_save_form_data_summary">"Recordar los datos ingresados en los formularios para uso futuro"</string>
+    <string name="pref_security_show_security_warning">"Mostrar advertencias de seguridad"</string>
+    <string name="pref_security_show_security_warning_summary">"Mostrar una advertencia si hay un problema con la seguridad de un sitio"</string>
+    <string name="pref_security_accept_cookies">"Aceptar cookies"</string>
+    <string name="pref_security_accept_cookies_summary">"Permitir que los sitios guarden y lean datos de las \"cookies\""</string>
+    <string name="pref_text_size">"Tamaño del texto"</string>
+  <string-array name="pref_text_size_choices">
+    <item>"Más pequeño"</item>
+    <item>"Pequeño"</item>
+    <item>"Normal"</item>
+    <item>"Grande"</item>
+    <item>"Enorme"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Tamaño del texto"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Configuración avanzada"</string>
+    <string name="pref_extras_gears_enable">"Habilitar Gears"</string>
+    <string name="pref_extras_gears_enable_summary">"Aplicaciones que amplían la funcionalidad del navegador"</string>
+    <string name="pref_extras_gears_settings">"Configuración de Gears"</string>
+    <string name="pref_plugin_installed">"Lista de complementos"</string>
+    <string name="pref_plugin_installed_empty_list">"No hay complementos instalados."</string>
+    <string name="pref_extras_gears_settings_summary">"Aplicaciones que amplían la funcionalidad del navegador"</string>
+    <string name="pref_extras_reset_default">"Restablecer a los valores predeterminados"</string>
+    <string name="pref_extras_reset_default_summary">"Borrar todos los datos del navegador y restablecer la configuración a los valores predeterminados"</string>
+    <string name="pref_extras_reset_default_dlg">"Se borrarán todos los datos del navegador y la configuración volverá a los valores predeterminados."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Restablecer a los valores predeterminados"</string>
+    <string name="pref_development_title">"Depurar"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latino-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Japonés (ISO-2022-JP)"</item>
+    <item>"Japonés (SHIFT_JIS)"</item>
+    <item>"Japonés (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Codificación de texto"</string>
+    <string name="pref_default_text_encoding_default">"Latino-1"</string>
+    <string name="browserFrameRedirect">"Redireccionamiento"</string>
+    <string name="browserFrame307Post">"Esta página web está siendo redireccionada. ¿Deseas reenviar los datos que ingresaste en tu formulario a la ubicación nueva?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Problema de conectividad de datos"</string>
+    <string name="browserFrameFileErrorLabel">"Problema con el archivo"</string>
+    <string name="browserFrameFormResubmitLabel">"Confirmar"</string>
+    <string name="browserFrameFormResubmitMessage">"La página que intentas ver contiene datos que ya se han suministrado (\"POSTDATA\"). Si vuelves a enviar los datos, se repetirán las acciones que haya realizado el formulario (como una búsqueda o compra en línea)."</string>
+    <string name="loadSuspendedTitle">"No hay conexión a la red"</string>
+    <string name="loadSuspended">"La página continuará cargando cuando se haya restablecido la conexión."</string>
+    <string name="clear_history">"Borrar historial"</string>
+    <string name="browser_history">"Últimas páginas visitadas"</string>
+    <string name="empty_history">"El historial del navegador está vacío."</string>
+    <string name="add_new_bookmark">"Agregar marcador..."</string>
+    <string name="no_database">"No hay base de datos"</string>
+    <string name="search_hint">"Escribe la dirección web"</string>
+    <string name="search_button_text">"Ir"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Atención"</string>
+    <string name="popup_window_attempt">"Este sitio está intentando abrir una ventana emergente."</string>
+    <string name="allow">"Permitir"</string>
+    <string name="block">"Bloquear"</string>
+    <string name="too_many_windows_dialog_title">"Se alcanzó el límite de la ventana"</string>
+    <string name="too_many_windows_dialog_message">"No se ha podido abrir una ventana nueva porque ya has abierto el máximo permitido."</string>
+    <string name="too_many_subwindows_dialog_title">"Ventana emergente ya abierta"</string>
+    <string name="too_many_subwindows_dialog_message">"No es posible abrir una ventana emergente nueva porque sólo puede abrirse una por vez."</string>
+    <string name="download_title">"Historial de descarga"</string>
+    <string name="download_unknown_filename">"&lt;Desconocido&gt;"</string>
+    <string name="download_menu_open">"Abrir"</string>
+    <string name="download_menu_clear">"Borrar de la lista"</string>
+    <string name="download_menu_cancel">"Cancelar descarga"</string>
+    <string name="download_menu_cancel_all">"Cancelar todas las descargas"</string>
+    <string name="download_menu_clear_all">"Borrar lista"</string>
+    <string name="download_clear_dlg_title">"Borrar"</string>
+    <string name="download_clear_dlg_msg">"Todos los elementos se borrarán de la lista y se suprimirán del caché del navegador."</string>
+    <string name="download_cancel_dlg_title">"Cancelar descargas"</string>
+    <string name="download_cancel_dlg_msg">"Las <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> descargas se cancelarán y se borrarán del historial de descarga."</string>
+    <string name="download_file_error_dlg_title">"No hay espacio suficiente"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g> no se pudo cargar."\n"Libera espacio en tu teléfono y vuelve a intentarlo."</string>
+    <string name="download_failed_generic_dlg_title">"Descarga incorrecta"</string>
+    <string name="download_no_sdcard_dlg_title">"No hay tarjeta SD"</string>
+    <string name="download_no_sdcard_dlg_msg">"Es necesario tener una tarjeta SD para descargar <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_sdcard_busy_dlg_title">"Tarjeta SD no disponible"</string>
+    <string name="download_sdcard_busy_dlg_msg">"La tarjeta SD está llena. Para permitir descargas, selecciona \"Desactivar almacenamiento USB\" en la notificación."</string>
+    <string name="download_no_application">"No se encuentra una aplicación para abrir este archivo."</string>
+    <string name="retry">"Intentar nuevamente"</string>
+    <string name="no_downloads">"El historial de descarga está vacío."</string>
+    <string name="download_error">"Descarga incorrecta."</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> Descarga completa."</string>
+    <string name="download_running">"Descargando..."</string>
+    <string name="download_pending">"Iniciando la descarga..."</string>
+    <string name="download_pending_network">"Esperando la conexión de datos..."</string>
+    <string name="download_running_paused">"Esperando la conexión de datos..."</string>
+    <string name="download_canceled">"Descarga cancelada."</string>
+    <string name="download_not_acceptable">"No es posible realizar la descarga. El contenido no se admite en el teléfono."</string>
+    <string name="download_file_error">"No es posible terminar la descarga. No hay espacio suficiente."</string>
+    <string name="download_length_required">"No es posible realizar la descarga. No puede determinarse el tamaño del elemento."</string>
+    <string name="download_precondition_failed">"Descarga interrumpida. No se puede retomar."</string>
+    <string name="activity_instrumentation_test_runner">"Ejecutor de pruebas del navegador"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Permitir almacenamiento"</string>
+    <string name="query_data_message">"Este sitio web desea almacenar información en tu teléfono."</string>
+    <string name="location_prompt">"Acceder a tu ubicación"</string>
+    <string name="location_message">"Este sitio web desea acceder a tu ubicación."</string>
+    <string name="shortcut_prompt">"Crear un acceso directo"</string>
+    <string name="shortcut_message">"Este sitio web desea crear un acceso directo a esta página en tu pantalla de inicio"</string>
+    <string name="settings_message">"En la siguiente tabla, se muestran los permisos que has otorgado a cada sitio que ha intentado utilizar Gears."</string>
+    <string name="filepicker_message">"File Picker"</string>
+    <string name="image_message">"Imagen seleccionada"</string>
+    <string name="settings_title">"Configuración de Gears"</string>
+    <string name="privacy_policy">"Lee la política de privacidad del sitio para ver cómo se utilizará tu ubicación."</string>
+    <string name="settings_storage_title">"Permitir almacenamiento local"</string>
+    <string name="settings_storage_subtitle_on">"Este sitio puede guardar información en tu teléfono"</string>
+    <string name="settings_storage_subtitle_off">"Este sitio no puede guardar información en tu teléfono"</string>
+    <string name="settings_location_title">"Permitir detección de ubicación"</string>
+    <string name="settings_location_subtitle_on">"Este sitio puede leer tu ubicación actual"</string>
+    <string name="settings_location_subtitle_off">"Este sitio no puede leer tu ubicación actual"</string>
+    <string name="settings_remove_site">"Suprimir este sitio de Gears"</string>
+    <string name="settings_empty">"No hay permisos definidos"</string>
+    <string name="settings_confirmation_remove_title">"Suprimir este sitio"</string>
+    <string name="settings_confirmation_remove">"Se borrarán todos los permisos y se eliminarán los datos del sitio almacenados en el teléfono."</string>
+    <string name="storage_notification">"Este sitio almacenará información en este teléfono. "\n" Cambia esta configuración en:"\n" Configuración -&gt; Configuración de Gears"</string>
+    <string name="storage_notification_alwaysdeny">"Este sitio nunca almacenará información en este teléfono. "\n" Cambia esta configuración en:"\n" Configuración -&gt; Configuración de Gears"</string>
+    <string name="location_notification">"Este sitio puede acceder a tu ubicación. "\n" Cambia esta configuración en:"\n" Configuración -&gt; Configuración de Gears"</string>
+    <string name="location_notification_alwaysdeny">"Este sitio no accederá a tu ubicación. "\n" Cambia esta configuración en:"\n" Configuración -&gt; Configuración de Gears"</string>
+    <string name="shortcut_notification">"Acceso directo creado"</string>
+    <string name="permission_button_alwaysdeny">"No permitir nunca"</string>
+    <string name="permission_button_allow">"Aceptar"</string>
+    <string name="permission_button_deny">"Cancelar"</string>
+    <string name="shortcut_button_alwaysdeny">"No permitir nunca"</string>
+    <string name="shortcut_button_allow">"Aceptar"</string>
+    <string name="shortcut_button_deny">"Cancelar"</string>
+    <string name="settings_button_allow">"Aplicar"</string>
+    <string name="settings_button_deny">"Cancelar"</string>
+    <string name="filepicker_button_allow">"Aceptar"</string>
+    <string name="filepicker_button_deny">"Cancelar"</string>
+    <string name="filepicker_path">"ruta:"</string>
+    <string name="filepicker_no_files_selected">"No hay archivos seleccionados"</string>
+    <string name="filepicker_one_file_selected">"Un archivo seleccionado"</string>
+    <string name="filepicker_some_files_selected">"archivo seleccionado"</string>
+    <string name="remove">"Eliminar"</string>
+    <string name="local_storage">"Almacenamiento local"</string>
+    <string name="allowed">"Permitido"</string>
+    <string name="denied">"Denegado"</string>
+    <string name="unrecognized_dialog_message">"Tipo de diálogo no reconocido"</string>
+    <string name="default_button">"Aceptar"</string>
+    <string name="zoom_overview_button_text">"Descripción general"</string>
+</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3cde9b4..924e2ea 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -25,6 +25,7 @@
     <string name="username">"Nombre"</string>
     <string name="password">"Contraseña"</string>
     <string name="action">"Acceder"</string>
+    <string name="bookmarks_search">"Navegador"</string>
     <string name="cancel">"Cancelar"</string>
     <string name="ok">"Aceptar"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Mostrar advertencia si hay algún problema con la seguridad del sitio"</string>
     <string name="pref_security_accept_cookies">"Aceptar cookies"</string>
     <string name="pref_security_accept_cookies_summary">"Permitir que los sitios guarden y lean datos de cookies"</string>
-    <string name="pref_text_size">"Establecer tamaño de texto"</string>
+    <string name="pref_text_size">"Tamaño de texto"</string>
   <string-array name="pref_text_size_choices">
     <item>"Muy pequeño"</item>
     <item>"Pequeño"</item>
@@ -158,6 +159,13 @@
     <item>"Enorme"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Tamaño de texto"</string>
+    <string name="pref_default_zoom">"Zoom predeterminado"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Lejos"</item>
+    <item>"Media distancia"</item>
+    <item>"Cerca"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Zoom predeterminado"</string>
     <string name="pref_extras_title">"Configuración avanzada"</string>
     <string name="pref_extras_gears_enable">"Habilitar Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Aplicaciones que amplían las funciones del navegador"</string>
@@ -195,6 +203,8 @@
     <string name="no_database">"No hay ninguna base de datos."</string>
     <string name="search_hint">"Introduce la dirección web."</string>
     <string name="search_button_text">"Ir"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Atención"</string>
     <string name="popup_window_attempt">"Este sitio está intentando mostrar una ventana emergente."</string>
     <string name="allow">"Permitir"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"No se puede realizar la descarga, porque no es posible determinar el tamaño del elemento."</string>
     <string name="download_precondition_failed">"La descarga se ha interrumpido y no se puede reanudar."</string>
     <string name="activity_instrumentation_test_runner">"Realizador de pruebas del navegador"</string>
-    <string name="search_google">"Búsqueda de Google"</string>
-    <string name="permlab_readHistoryBookmarks">"leer información de marcadores y del historial del navegador"</string>
-    <string name="permdesc_readHistoryBookmarks">"Permite que la aplicación lea todas las URL que ha visitado el navegador y todos sus marcadores."</string>
-    <string name="permlab_writeHistoryBookmarks">"escribir en marcadores y en el historial del navegador"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Permite que una aplicación modifique la información de los marcadores o del historial del navegador almacenada en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar los datos del navegador."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Buscar en la Web"</string>
     <string name="query_data_prompt">"Permitir almacenamiento"</string>
     <string name="query_data_message">"Este sitio web desea almacenar información en el teléfono."</string>
     <string name="location_prompt">"Acceso a tu ubicación"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 9093f99..9709d07 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -25,6 +25,7 @@
     <string name="username">"Nom"</string>
     <string name="password">"Mot de passe"</string>
     <string name="action">"Se connecter"</string>
+    <string name="bookmarks_search">"Navigateur"</string>
     <string name="cancel">"Annuler"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Afficher un avertissement en cas de problème de sécurité d\'un site"</string>
     <string name="pref_security_accept_cookies">"Accepter les cookies"</string>
     <string name="pref_security_accept_cookies_summary">"Autoriser les sites à enregistrer et lire les données des cookies"</string>
-    <string name="pref_text_size">"Définir la taille du texte"</string>
+    <string name="pref_text_size">"Taille de la police"</string>
   <string-array name="pref_text_size_choices">
     <item>"Très petite"</item>
     <item>"Petite"</item>
@@ -158,6 +159,13 @@
     <item>"Très grande"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Taille de la police"</string>
+    <string name="pref_default_zoom">"Zoom par défaut"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Éloigné"</item>
+    <item>"Moyen"</item>
+    <item>"Proche"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Zoom par défaut"</string>
     <string name="pref_extras_title">"Paramètres avancés"</string>
     <string name="pref_extras_gears_enable">"Activer Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Applications étendant les fonctionnalités du navigateur"</string>
@@ -170,7 +178,7 @@
     <string name="pref_extras_reset_default_dlg">"Toutes les données du navigateur seront effacées et les paramètres par défaut rétablis."</string>
     <string name="pref_extras_reset_default_dlg_title">"Rétablir les valeurs par défaut"</string>
     <string name="pref_development_title">"Débogage"</string>
-    <string name="pref_default_text_encoding">"Définir le codage du texte"</string>
+    <string name="pref_default_text_encoding">"Codage du texte"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +203,8 @@
     <string name="no_database">"Aucune base de données !"</string>
     <string name="search_hint">"Saisir l\'adresse Web"</string>
     <string name="search_button_text">"Aller"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Attention"</string>
     <string name="popup_window_attempt">"Le site tente d\'ouvrir une fenêtre contextuelle."</string>
     <string name="allow">"Autoriser"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"Téléchargement impossible. La taille de l\'élément n\'a pas pu être déterminée."</string>
     <string name="download_precondition_failed">"Téléchargement interrompu. Impossible de reprendre le téléchargement."</string>
     <string name="activity_instrumentation_test_runner">"Testeur de navigateur"</string>
-    <string name="search_google">"Recherche Google"</string>
-    <string name="permlab_readHistoryBookmarks">"Lecture de l\'historique du navigateur et des favoris"</string>
-    <string name="permdesc_readHistoryBookmarks">"Permet à l\'application de lire toutes les URL visitées par le navigateur et tous les favoris."</string>
-    <string name="permlab_writeHistoryBookmarks">"Enregistrement de l\'historique du navigateur et des favoris"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Permet à une application de modifier l\'historique du navigateur ou les favoris enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonction pour effacer ou modifier les données de votre navigateur."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Rechercher sur le Web"</string>
     <string name="query_data_prompt">"Autoriser le stockage"</string>
     <string name="query_data_message">"Ce site souhaite enregistrer des informations sur votre téléphone."</string>
     <string name="location_prompt">"Afficher ma position"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index b94a285..7b8dbb2 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -25,6 +25,7 @@
     <string name="username">"Nome"</string>
     <string name="password">"Password"</string>
     <string name="action">"Accedi"</string>
+    <string name="bookmarks_search">"Browser"</string>
     <string name="cancel">"Annulla"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Mostra un avviso se esiste un problema di sicurezza con un sito"</string>
     <string name="pref_security_accept_cookies">"Accetta cookie"</string>
     <string name="pref_security_accept_cookies_summary">"Consenti ai siti di salvare e leggere i dati \"cookie\""</string>
-    <string name="pref_text_size">"Imposta dim. testo"</string>
+    <string name="pref_text_size">"Dimensioni testo"</string>
   <string-array name="pref_text_size_choices">
     <item>"Molto piccolo"</item>
     <item>"Piccolo"</item>
@@ -158,6 +159,13 @@
     <item>"Molto grande"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Dimensioni testo"</string>
+    <string name="pref_default_zoom">"Zoom predefinito"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Lontano"</item>
+    <item>"Medio"</item>
+    <item>"Chiudi"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Zoom predefinito"</string>
     <string name="pref_extras_title">"Impostazioni avanzate"</string>
     <string name="pref_extras_gears_enable">"Attiva Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Applicazioni che estendono le funzionalità del browser"</string>
@@ -170,7 +178,7 @@
     <string name="pref_extras_reset_default_dlg">"Verranno cancellati tutti i dati del browser e ripristinate le impostazioni predefinite."</string>
     <string name="pref_extras_reset_default_dlg_title">"Ripristina valori predefiniti"</string>
     <string name="pref_development_title">"Debug"</string>
-    <string name="pref_default_text_encoding">"Imposta codifica testo"</string>
+    <string name="pref_default_text_encoding">"Codifica testo"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +203,8 @@
     <string name="no_database">"Nessun database"</string>
     <string name="search_hint">"Digita l\'indirizzo web"</string>
     <string name="search_button_text">"Vai"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Attenzione"</string>
     <string name="popup_window_attempt">"Il sito sta tentando di aprire una finestra pop-up."</string>
     <string name="allow">"Consenti"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"Impossibile effettuare il download. Impossibile determinare le dimensioni dell\'elemento."</string>
     <string name="download_precondition_failed">"Download interrotto. Impossibile ripristinarlo."</string>
     <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
-    <string name="search_google">"Cerca su Google"</string>
-    <string name="permlab_readHistoryBookmarks">"lettura cronologia e segnalibri del browser"</string>
-    <string name="permdesc_readHistoryBookmarks">"Consente all\'applicazione di leggere tutti gli URL visitati e tutti i segnalibri del browser."</string>
-    <string name="permlab_writeHistoryBookmarks">"creazione cronologia e segnalibri del browser"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Consente a un\'applicazione di modificare la cronologia o i segnalibri del browser memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del browser."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Cerca nel Web"</string>
     <string name="query_data_prompt">"Consenti archiviazione"</string>
     <string name="query_data_message">"Il sito web vorrebbe memorizzare informazioni sul cellulare."</string>
     <string name="location_prompt">"Accedi alla tua posizione"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index f6e64b8..8509f83 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -25,6 +25,8 @@
     <string name="username">"名前"</string>
     <string name="password">"パスワード"</string>
     <string name="action">"ログイン"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
     <string name="cancel">"キャンセル"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -65,10 +67,10 @@
     <string name="name">"名前"</string>
     <string name="http">"http://"</string>
     <string name="save_to_bookmarks">"ブックマーク"</string>
-    <string name="edit_bookmark">"ブックマークを編集"</string>
-    <string name="create_shortcut_bookmark">"ショートカットをホームに追加"</string>
+    <string name="edit_bookmark">"編集"</string>
+    <string name="create_shortcut_bookmark">"ショートカットを作成"</string>
     <string name="open_bookmark">"開く"</string>
-    <string name="remove_bookmark">"ブックマークを削除"</string>
+    <string name="remove_bookmark">"削除"</string>
     <string name="remove_history_item">"履歴から消去"</string>
     <string name="bookmark_saved">"ブックマークを保存しました。"</string>
     <string name="bookmark_needs_title">"名前を指定してください。"</string>
@@ -95,7 +97,7 @@
     <string name="bookmarks">"ブックマーク"</string>
     <string name="shortcut_bookmark">"ブックマーク"</string>
     <string name="history">"履歴"</string>
-    <string name="menu_view_download">"ダウンロード"</string>
+    <string name="menu_view_download">"ダウンロード履歴"</string>
     <string name="share_page">"ページを共有"</string>
     <string name="contextmenu_openlink">"開く"</string>
     <string name="contextmenu_openlink_newwindow">"新しいウィンドウで開く"</string>
@@ -103,7 +105,7 @@
     <string name="contextmenu_savelink">"リンクを保存"</string>
     <string name="contextmenu_sharelink">"リンクを共有"</string>
     <string name="contextmenu_copy">"コピー"</string>
-    <string name="contextmenu_copylink">"リンクのURLをコピー"</string>
+    <string name="contextmenu_copylink">"URLをコピー"</string>
     <string name="contextmenu_download_image">"画像を保存"</string>
     <string name="contextmenu_view_image">"画像を表示"</string>
     <string name="contextmenu_dial_dot">"発信..."</string>
@@ -149,7 +151,7 @@
     <string name="pref_security_show_security_warning_summary">"サイトの安全性に問題がある場合に警告を表示する"</string>
     <string name="pref_security_accept_cookies">"Cookieを受け入れる"</string>
     <string name="pref_security_accept_cookies_summary">"サイトによるCookieの保存と読み取りを許可する"</string>
-    <string name="pref_text_size">"文字サイズを選択"</string>
+    <string name="pref_text_size">"テキストサイズ"</string>
   <string-array name="pref_text_size_choices">
     <item>"最小"</item>
     <item>"小"</item>
@@ -158,6 +160,13 @@
     <item>"最大"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"文字サイズ"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
     <string name="pref_extras_title">"詳細設定"</string>
     <string name="pref_extras_gears_enable">"Gearsを有効にする"</string>
     <string name="pref_extras_gears_enable_summary">"ブラウザの機能拡張を許可する"</string>
@@ -170,7 +179,8 @@
     <string name="pref_extras_reset_default_dlg">"ブラウザデータをすべて消去して初期設定に戻します。"</string>
     <string name="pref_extras_reset_default_dlg_title">"初期設定にリセット"</string>
     <string name="pref_development_title">"デバッグ"</string>
-    <string name="pref_default_text_encoding">"エンコードを選択"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -179,7 +189,7 @@
     <item>"日本語 (EUC-JP)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle">"テキストエンコード"</string>
-    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="pref_default_text_encoding_default">"SHIFT_JIS"</string>
     <string name="browserFrameRedirect">"リダイレクト"</string>
     <string name="browserFrame307Post">"このウェブページはリダイレクトされます。入力したフォームデータをリダイレクト先に送信しますか?"</string>
     <string name="browserFrameNetworkErrorLabel">"データアクセスエラー"</string>
@@ -195,6 +205,8 @@
     <string name="no_database">"データベースがありません。"</string>
     <string name="search_hint">"ウェブアドレスを入力"</string>
     <string name="search_button_text">"移動"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"注意"</string>
     <string name="popup_window_attempt">"このサイトはポップアップウィンドウを開こうとしています。"</string>
     <string name="allow">"許可"</string>
@@ -236,11 +248,10 @@
     <string name="download_length_required">"項目のサイズを特定できないため、ダウンロードできません。"</string>
     <string name="download_precondition_failed">"ダウンロードが中断されました。再開できません。"</string>
     <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
-    <string name="search_google">"Google検索"</string>
-    <string name="permlab_readHistoryBookmarks">"ブラウザの履歴とブックマークの読み取り"</string>
-    <string name="permdesc_readHistoryBookmarks">"ブラウザでアクセスしたすべてのURLとブックマークの読み取りをアプリケーションに許可します。"</string>
-    <string name="permlab_writeHistoryBookmarks">"ブラウザの履歴とブックマークの書き込み"</string>
-    <string name="permdesc_writeHistoryBookmarks">"携帯電話に保存されたブラウザの履歴やブックマークの変更をアプリケーションに許可します。これにより悪意のあるアプリケーションが、ブラウザのデータを消去または変更する恐れがあります。"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
     <string name="query_data_prompt">"保存を許可"</string>
     <string name="query_data_message">"このサイトは携帯電話に情報を保存しようとしています。"</string>
     <string name="location_prompt">"現在地情報にアクセス"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 51a622a..5276664 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -20,11 +20,13 @@
     <string name="tab_most_visited">"최다 방문 웹사이트"</string>
     <string name="tab_history">"기록"</string>
     <string name="added_to_bookmarks">"북마크에 추가되었습니다."</string>
-    <string name="removed_from_bookmarks">"북마크에서 삭제"</string>
+    <string name="removed_from_bookmarks">"북마크에서 삭제됨"</string>
     <string name="sign_in_to">"<xliff:g id="HOSTNAME">%s1</xliff:g> \'<xliff:g id="REALM">%s2</xliff:g>\'에 로그인"</string>
     <string name="username">"이름"</string>
     <string name="password">"비밀번호"</string>
     <string name="action">"로그인"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
     <string name="cancel">"취소"</string>
     <string name="ok">"확인"</string>
   <plurals name="matches_found">
@@ -40,20 +42,20 @@
     <string name="ssl_continue">"계속"</string>
     <string name="security_warning">"보안 경고"</string>
     <string name="view_certificate">"인증서 보기"</string>
-    <string name="ssl_untrusted">"신뢰된 인증기관에서 발급된 인증서가 아닙니다."</string>
-    <string name="ssl_mismatch">"사이트의 이름이 인증서에 있는 이름과 일치하지 않습니다."</string>
-    <string name="ssl_expired">"만료된 인증서입니다."</string>
-    <string name="ssl_not_yet_valid">"아직 유효하지 않은 인증서입니다."</string>
+    <string name="ssl_untrusted">"신뢰할 수 있는 인증 기관에서 발급한 인증서가 아닙니다."</string>
+    <string name="ssl_mismatch">"사이트 이름이 인증서에 있는 것과 일치하지 않습니다."</string>
+    <string name="ssl_expired">"인증서가 만료되었습니다."</string>
+    <string name="ssl_not_yet_valid">"인증서가 아직 유효하지 않습니다."</string>
     <string name="ssl_certificate">"보안 인증서"</string>
     <string name="ssl_certificate_is_valid">"유효한 인증서입니다."</string>
     <string name="issued_to">"발급 대상:"</string>
     <string name="common_name">"일반 이름:"</string>
     <string name="org_name">"조직:"</string>
     <string name="org_unit">"조직 구성 단위:"</string>
-    <string name="issued_by">"발급자:"</string>
+    <string name="issued_by">"발급 기관:"</string>
     <string name="validity_period">"유효성:"</string>
-    <string name="issued_on">"발급일:"</string>
-    <string name="expires_on">"만료일:"</string>
+    <string name="issued_on">"발급 날짜:"</string>
+    <string name="expires_on">"만료 날짜:"</string>
     <string name="retrieving_creds_dlg_msg">"로그인 세부정보를 가져오는 중..."</string>
     <string name="stopping">"중지하는 중..."</string>
     <string name="stop">"중지"</string>
@@ -69,12 +71,12 @@
     <string name="create_shortcut_bookmark">"홈에 바로가기 추가"</string>
     <string name="open_bookmark">"열기"</string>
     <string name="remove_bookmark">"북마크 삭제"</string>
-    <string name="remove_history_item">"기록에서 제거"</string>
+    <string name="remove_history_item">"기록에서 삭제"</string>
     <string name="bookmark_saved">"북마크에 저장되었습니다."</string>
-    <string name="bookmark_needs_title">"북마크에는 이름이 있어야 합니다."</string>
-    <string name="bookmark_needs_url">"북마크에는 위치가 있어야 합니다."</string>
-    <string name="empty_bookmark">"빈 북마크는 만들 수 없습니다."</string>
-    <string name="bookmark_url_not_valid">"URL이 올바르지 않습니다."</string>
+    <string name="bookmark_needs_title">"북마크의 이름을 입력해야 합니다."</string>
+    <string name="bookmark_needs_url">"북마크의 위치를 입력해야 합니다."</string>
+    <string name="empty_bookmark">"빈 북마크를 만들 수 없습니다."</string>
+    <string name="bookmark_url_not_valid">"URL이 유효하지 않습니다."</string>
     <string name="delete_bookmark">"삭제"</string>
     <string name="bookmark_page">"마지막으로 본 페이지를 북마크 설정"</string>
     <string name="current_page">"북마크할 페이지 "</string>
@@ -82,10 +84,10 @@
     <string name="open_in_new_window">"새 창에서 열기"</string>
     <string name="new_window">"새 창"</string>
     <string name="goto_dot">"실행"</string>
-    <string name="find_dot">"검색 페이지"</string>
+    <string name="find_dot">"페이지에서 찾기"</string>
     <string name="select_dot">"텍스트 선택"</string>
-    <string name="view_tabs">"창 세부정보"</string>
-    <string name="view_tabs_condensed">"Windows"</string>
+    <string name="view_tabs">"창 전체보기"</string>
+    <string name="view_tabs_condensed">"창"</string>
     <string name="tab_picker_title">"현재 창"</string>
     <string name="tab_picker_view_tab">"보기"</string>
     <string name="tab_picker_new_tab">"새 창"</string>
@@ -99,7 +101,7 @@
     <string name="share_page">"페이지 공유"</string>
     <string name="contextmenu_openlink">"열기"</string>
     <string name="contextmenu_openlink_newwindow">"새 창에서 열기"</string>
-    <string name="contextmenu_bookmark_thislink">"북마크 링크"</string>
+    <string name="contextmenu_bookmark_thislink">"링크를 북마크에 추가"</string>
     <string name="contextmenu_savelink">"링크 저장"</string>
     <string name="contextmenu_sharelink">"링크 공유"</string>
     <string name="contextmenu_copy">"복사"</string>
@@ -111,20 +113,20 @@
     <string name="contextmenu_send_mail">"이메일 보내기"</string>
     <string name="contextmenu_map">"지도"</string>
     <string name="clear">"지우기"</string>
-    <string name="replace">"기존 URL"</string>
+    <string name="replace">"교체"</string>
     <string name="browser_bookmarks_page_bookmarks_text">"북마크"</string>
     <string name="menu_preferences">"설정"</string>
-    <string name="pref_content_title">"페이지 내용 설정"</string>
+    <string name="pref_content_title">"페이지 콘텐츠 설정"</string>
     <string name="pref_content_load_images">"이미지 로드"</string>
     <string name="pref_content_load_images_summary">"웹페이지에 이미지 표시"</string>
     <string name="pref_content_block_popups">"팝업 창 차단"</string>
-    <string name="pref_content_javascript">"자바스크립트 활성화"</string>
-    <string name="pref_content_open_in_background">"배경에서 열기"</string>
-    <string name="pref_content_open_in_background_summary">"새 창이 현재 창 뒤쪽에 열립니다."</string>
+    <string name="pref_content_javascript">"자바스크립트 사용"</string>
+    <string name="pref_content_open_in_background">"백그라운드에서 열기"</string>
+    <string name="pref_content_open_in_background_summary">"현재 창 뒤에 새 창이 열림"</string>
     <string name="pref_content_homepage">"홈페이지 설정"</string>
     <string name="pref_content_autofit">"페이지 자동 맞춤"</string>
-    <string name="pref_content_autofit_summary">"화면에 맞게 웹페이지의 형식 조정"</string>
-    <string name="pref_privacy_title">"개인정보보호 설정"</string>
+    <string name="pref_content_autofit_summary">"화면에 맞게 웹페이지 형식 지정"</string>
+    <string name="pref_privacy_title">"개인정보 설정"</string>
     <string name="pref_privacy_clear_cache">"캐시 지우기"</string>
     <string name="pref_privacy_clear_cache_summary">"캐시된 모든 페이지 콘텐츠 삭제"</string>
     <string name="pref_privacy_clear_cache_dlg">"캐시가 지워집니다."</string>
@@ -138,28 +140,35 @@
     <string name="pref_privacy_clear_form_data_summary">"저장된 양식 데이터 모두 지우기"</string>
     <string name="pref_privacy_clear_form_data_dlg">"저장된 양식 데이터가 모두 지워집니다."</string>
     <string name="pref_privacy_clear_passwords">"비밀번호 지우기"</string>
-    <string name="pref_privacy_clear_passwords_summary">"저장된 비밀번호 모두 지우기"</string>
+    <string name="pref_privacy_clear_passwords_summary">"저장된 모든 비밀번호 지우기"</string>
     <string name="pref_privacy_clear_passwords_dlg">"저장된 비밀번호가 모두 지워집니다."</string>
     <string name="pref_security_title">"보안 설정"</string>
     <string name="pref_security_remember_passwords">"비밀번호 기억"</string>
-    <string name="pref_security_remember_passwords_summary">"웹사이트의 사용자 이름과 비밀번호 저장"</string>
+    <string name="pref_security_remember_passwords_summary">"웹사이트의 사용자 이름 및 비밀번호 저장"</string>
     <string name="pref_security_save_form_data">"양식 데이터 기억"</string>
     <string name="pref_security_save_form_data_summary">"나중에 사용할 수 있도록 양식에 입력한 데이터 기억"</string>
     <string name="pref_security_show_security_warning">"보안 경고 표시"</string>
-    <string name="pref_security_show_security_warning_summary">"사이트의 보안에 문제가 있는 경우 경고 표시"</string>
+    <string name="pref_security_show_security_warning_summary">"사이트 보안 관련 문제가 있는 경우 경고 표시"</string>
     <string name="pref_security_accept_cookies">"쿠키 허용"</string>
-    <string name="pref_security_accept_cookies_summary">"사이트에서 \'쿠키\' 데이터를 저장하고 읽을 수 있도록 허용"</string>
-    <string name="pref_text_size">"텍스트 크기 설정"</string>
+    <string name="pref_security_accept_cookies_summary">"사이트에서 \'쿠키\' 데이터 저장 및 읽기 허용"</string>
+    <string name="pref_text_size">"텍스트 크기"</string>
   <string-array name="pref_text_size_choices">
-    <item>"매우 작게"</item>
+    <item>"아주 작게"</item>
     <item>"작게"</item>
     <item>"보통"</item>
     <item>"크게"</item>
-    <item>"매우 크게"</item>
+    <item>"아주 크게"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"텍스트 크기"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
     <string name="pref_extras_title">"고급 설정"</string>
-    <string name="pref_extras_gears_enable">"Gears 활성화"</string>
+    <string name="pref_extras_gears_enable">"Gears 사용"</string>
     <string name="pref_extras_gears_enable_summary">"브라우저 기능을 확장하는 응용프로그램"</string>
     <string name="pref_extras_gears_settings">"Gears 설정"</string>
     <string name="pref_plugin_installed">"플러그인 목록"</string>
@@ -170,7 +179,8 @@
     <string name="pref_extras_reset_default_dlg">"모든 브라우저 데이터가 지워지고 설정이 기본값으로 돌아갑니다."</string>
     <string name="pref_extras_reset_default_dlg_title">"기본값으로 재설정"</string>
     <string name="pref_development_title">"디버그"</string>
-    <string name="pref_default_text_encoding">"텍스트 인코딩 설정"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
   <string-array name="pref_default_text_encoding_choices">
     <item>"라틴어-1(ISO-8859-1)"</item>
     <item>"유니코드(UTF-8)"</item>
@@ -182,27 +192,29 @@
     <string name="pref_default_text_encoding_default">"라틴어-1"</string>
     <string name="browserFrameRedirect">"리디렉션"</string>
     <string name="browserFrame307Post">"웹페이지가 리디렉션됩니다. 입력한 양식 데이터를 새 위치로 다시 보내시겠습니까?"</string>
-    <string name="browserFrameNetworkErrorLabel">"데이터 연결 문제"</string>
+    <string name="browserFrameNetworkErrorLabel">"데이터 연결에 문제 발생"</string>
     <string name="browserFrameFileErrorLabel">"파일 문제 발생"</string>
     <string name="browserFrameFormResubmitLabel">"확인"</string>
-    <string name="browserFrameFormResubmitMessage">"보려는 페이지에 이미 제출된 데이터(\'POSTDATA\')가 포함되어 있습니다. 데이터를 다시 보내면 페이지의 양식에서 수행한 작업(예: 검색 또는 온라인 구매)이 반복됩니다."</string>
+    <string name="browserFrameFormResubmitMessage">"보려는 페이지에 이미 제출된 데이터(\'POSTDATA\')가 있습니다. 해당 데이터를 다시 보내면 페이지의 양식에서 수행한 작업(예: 검색 또는 온라인 구매)이 반복됩니다."</string>
     <string name="loadSuspendedTitle">"네트워크 연결 없음"</string>
     <string name="loadSuspended">"연결이 복원된 후에 페이지 로드가 계속됩니다."</string>
     <string name="clear_history">"기록 지우기"</string>
     <string name="browser_history">"최근에 방문한 페이지"</string>
     <string name="empty_history">"브라우저 기록이 비어 있습니다."</string>
     <string name="add_new_bookmark">"북마크에 추가..."</string>
-    <string name="no_database">"데이터베이스 없음"</string>
+    <string name="no_database">"데이터베이스가 없습니다."</string>
     <string name="search_hint">"웹 주소 입력"</string>
     <string name="search_button_text">"이동"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"주의"</string>
     <string name="popup_window_attempt">"사이트에서 팝업 창을 열려고 합니다."</string>
     <string name="allow">"허용"</string>
     <string name="block">"차단"</string>
-    <string name="too_many_windows_dialog_title">"창 개수 제한에 도달했습니다."</string>
+    <string name="too_many_windows_dialog_title">"창 개수 한도에 도달"</string>
     <string name="too_many_windows_dialog_message">"이미 최대 개수의 창을 열었기 때문에 새 창을 열 수 없습니다."</string>
-    <string name="too_many_subwindows_dialog_title">"팝업이 이미 열려 있습니다."</string>
-    <string name="too_many_subwindows_dialog_message">"팝업 창은 하나만 열 수 있기 때문에 새 팝업 창을 열 수 없습니다."</string>
+    <string name="too_many_subwindows_dialog_title">"팝업이 이미 열려 있음"</string>
+    <string name="too_many_subwindows_dialog_message">"한 번에 하나만 열 수 있으므로 새 팝업 창을 열 수 없습니다."</string>
     <string name="download_title">"다운로드 기록"</string>
     <string name="download_unknown_filename">"&lt;알 수 없음&gt;"</string>
     <string name="download_menu_open">"열기"</string>
@@ -211,43 +223,42 @@
     <string name="download_menu_cancel_all">"모든 다운로드 취소"</string>
     <string name="download_menu_clear_all">"목록 지우기"</string>
     <string name="download_clear_dlg_title">"지우기"</string>
-    <string name="download_clear_dlg_msg">"목록에서 모든 항목이 지워지고 브라우저 캐시에서 제거됩니다."</string>
+    <string name="download_clear_dlg_msg">"목록에서 모든 항목이 지워지고 브라우저 캐시에서 삭제됩니다."</string>
     <string name="download_cancel_dlg_title">"다운로드 취소"</string>
     <string name="download_cancel_dlg_msg">"<xliff:g id="DOWNLOAD_COUNT">%d</xliff:g>개의 다운로드가 모두 취소되고 다운로드 기록에서 지워집니다."</string>
-    <string name="download_file_error_dlg_title">"공간 부족"</string>
-    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g>을(를) 다운로드하지 못했습니다."\n"전화기에서 여유 공간을 늘린 후에 다시 시도하세요."</string>
+    <string name="download_file_error_dlg_title">"여유 공간이 없음"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g>을(를) 다운로드할 수 없습니다."\n"휴대전화에서 여유 공간을 늘린 후에 다시 시도하세요."</string>
     <string name="download_failed_generic_dlg_title">"다운로드 실패"</string>
     <string name="download_no_sdcard_dlg_title">"SD 카드 없음"</string>
     <string name="download_no_sdcard_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g>을(를) 다운로드하려면 SD 카드가 필요합니다."</string>
     <string name="download_sdcard_busy_dlg_title">"SD 카드를 사용할 수 없음"</string>
     <string name="download_sdcard_busy_dlg_msg">"SD 카드가 사용 중입니다. 다운로드를 허용하려면 알림에서 \'USB 저장소 끄기\'를 선택하세요."</string>
-    <string name="download_no_application">"파일을 열 수 있는 응용프로그램이 없습니다."</string>
+    <string name="download_no_application">"이 파일을 열 수 있는 응용프로그램을 찾을 수 없습니다."</string>
     <string name="retry">"다시 시도"</string>
     <string name="no_downloads">"다운로드 기록이 비어 있습니다."</string>
-    <string name="download_error">"다운로드 실패"</string>
-    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> 다운로드 완료"</string>
+    <string name="download_error">"다운로드에 실패했습니다."</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> 다운로드가 완료되었습니다."</string>
     <string name="download_running">"다운로드 중..."</string>
     <string name="download_pending">"다운로드 시작 중..."</string>
-    <string name="download_pending_network">"데이터 연결을 기다리는 중..."</string>
+    <string name="download_pending_network">"데이터 연결 대기 중..."</string>
     <string name="download_running_paused">"데이터 연결을 기다리는 중..."</string>
     <string name="download_canceled">"다운로드가 취소되었습니다."</string>
-    <string name="download_not_acceptable">"다운로드할 수 없습니다. 전화기에서 지원하지 않는 콘텐츠입니다."</string>
-    <string name="download_file_error">"공간이 부족하여 다운로드를 완료할 수 없습니다."</string>
+    <string name="download_not_acceptable">"휴대전화에서 지원하지 않는 콘텐츠이므로 다운로드할 수 없습니다."</string>
+    <string name="download_file_error">"저장 용량이 부족하여 다운로드를 완료할 수 없습니다."</string>
     <string name="download_length_required">"항목의 크기를 확인할 수 없으므로 다운로드할 수 없습니다."</string>
-    <string name="download_precondition_failed">"다운로드 중단됨. 다시 시작할 수 없습니다."</string>
+    <string name="download_precondition_failed">"다운로드가 중단되었으며 다시 시작할 수 없습니다."</string>
     <string name="activity_instrumentation_test_runner">"브라우저 테스트 실행기"</string>
-    <string name="search_google">"Google 검색"</string>
-    <string name="permlab_readHistoryBookmarks">"브라우저의 기록 및 북마크 읽기"</string>
-    <string name="permdesc_readHistoryBookmarks">"응용프로그램이 브라우저에서 방문한 모든 URL과 브라우저의 북마크를 모두 읽을 수 있습니다."</string>
-    <string name="permlab_writeHistoryBookmarks">"브라우저의 기록 및 북마크 쓰기"</string>
-    <string name="permdesc_writeHistoryBookmarks">"응용프로그램이 전화기에 저장된 브라우저의 기록 또는 북마크를 수정할 수 있습니다. 악성 응용프로그램은 이 기능을 이용하여 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
     <string name="query_data_prompt">"저장소 허용"</string>
     <string name="query_data_message">"웹사이트에서 휴대전화에 정보를 저장하려고 합니다."</string>
     <string name="location_prompt">"사용자 위치에 액세스"</string>
     <string name="location_message">"웹사이트가 사용자의 위치에 액세스하려고 합니다."</string>
     <string name="shortcut_prompt">"바로가기 만들기"</string>
     <string name="shortcut_message">"웹사이트가 홈 화면에 이 페이지의 바로가기를 만들려고 합니다."</string>
-    <string name="settings_message">"아래 표는 Gears를 사용하려고 시도한 각 사이트에 부여한 권한을 보여줍니다."</string>
+    <string name="settings_message">"아래 표는 Gears를 사용하려는 각 사이트에 부여된 권한을 보여줍니다."</string>
     <string name="filepicker_message">"파일 선택기"</string>
     <string name="image_message">"선택한 이미지"</string>
     <string name="settings_title">"Gears 설정"</string>
@@ -267,10 +278,10 @@
     <string name="location_notification">"사이트에서 사용자의 현재 위치에 액세스할 수 있습니다."\n" 설정을 변경하려면"\n" 설정 -&gt; Gears 설정으로 이동하세요."</string>
     <string name="location_notification_alwaysdeny">"사이트에서 사용자의 현재 위치에 액세스하지 않습니다."\n" 설정을 변경하려면"\n" 설정 -&gt; Gears 설정으로 이동하세요."</string>
     <string name="shortcut_notification">"바로가기 생성됨"</string>
-    <string name="permission_button_alwaysdeny">"허용 안 함"</string>
+    <string name="permission_button_alwaysdeny">"허용 안함"</string>
     <string name="permission_button_allow">"확인"</string>
     <string name="permission_button_deny">"취소"</string>
-    <string name="shortcut_button_alwaysdeny">"허용 안 함"</string>
+    <string name="shortcut_button_alwaysdeny">"허용 안함"</string>
     <string name="shortcut_button_allow">"확인"</string>
     <string name="shortcut_button_deny">"취소"</string>
     <string name="settings_button_allow">"적용"</string>
@@ -278,14 +289,14 @@
     <string name="filepicker_button_allow">"확인"</string>
     <string name="filepicker_button_deny">"취소"</string>
     <string name="filepicker_path">"경로:"</string>
-    <string name="filepicker_no_files_selected">"선택한 파일이 없습니다."</string>
-    <string name="filepicker_one_file_selected">"1개 파일 선택됨"</string>
-    <string name="filepicker_some_files_selected">"개 파일 선택됨"</string>
-    <string name="remove">"제거"</string>
-    <string name="local_storage">"로컬 저장공간"</string>
+    <string name="filepicker_no_files_selected">"선택한 파일 없음"</string>
+    <string name="filepicker_one_file_selected">"하나의 파일이 선택됨"</string>
+    <string name="filepicker_some_files_selected">"파일을 선택함"</string>
+    <string name="remove">"삭제"</string>
+    <string name="local_storage">"로컬 저장소"</string>
     <string name="allowed">"허용됨"</string>
     <string name="denied">"거부됨"</string>
-    <string name="unrecognized_dialog_message">"인식할 수 없는 대화상자 유형"</string>
+    <string name="unrecognized_dialog_message">"인식할 수 없는 대화 유형"</string>
     <string name="default_button">"확인"</string>
     <string name="zoom_overview_button_text">"전체보기"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index d1a56fe..92310b7 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -25,6 +25,8 @@
     <string name="username">"Brukernavn"</string>
     <string name="password">"Passord"</string>
     <string name="action">"Logg inn"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
     <string name="cancel">"Avbryt"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +151,8 @@
     <string name="pref_security_show_security_warning_summary">"Vis advarsel hvis det er et problem med sikkerheten på en side"</string>
     <string name="pref_security_accept_cookies">"Godta informasjonskapsler"</string>
     <string name="pref_security_accept_cookies_summary">"Tillat nettsteder å lagre og lese informasjonskapsler"</string>
-    <string name="pref_text_size">"Sett tekststørrelse"</string>
+    <!-- no translation found for pref_text_size (3827031324346612208) -->
+    <skip />
   <string-array name="pref_text_size_choices">
     <item>"Bitteliten"</item>
     <item>"Liten"</item>
@@ -158,6 +161,13 @@
     <item>"Kjempestor"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Tekststørrelse"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
     <string name="pref_extras_title">"Avanserte innstillinger"</string>
     <string name="pref_extras_gears_enable">"Aktiver Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Applikasjoner som utvider nettleserfunksjonaliteten"</string>
@@ -170,7 +180,8 @@
     <string name="pref_extras_reset_default_dlg">"Alle data vil bli fjernet fra nettleseren, og alle innstillinger vil bli nullstilt."</string>
     <string name="pref_extras_reset_default_dlg_title">"Nullstill"</string>
     <string name="pref_development_title">"Avlusing"</string>
-    <string name="pref_default_text_encoding">"Velg tekstkoding"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +206,8 @@
     <string name="no_database">"Ingen database!"</string>
     <string name="search_hint">"Skriv inn nettadresse"</string>
     <string name="search_button_text">"Gå"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Obs"</string>
     <string name="popup_window_attempt">"Denne siden prøver å åpne et sprettoppvindu."</string>
     <string name="allow">"Tillat"</string>
@@ -236,11 +249,10 @@
     <string name="download_length_required">"Kan ikke laste ned. Klarte ikke bestemme størrelsen på filen."</string>
     <string name="download_precondition_failed">"Nedlastingen ble avbrutt. Den kan ikke fortsettes."</string>
     <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
-    <string name="search_google">"Søk på Google"</string>
-    <string name="permlab_readHistoryBookmarks">"read Browser\'s history and bookmarks"</string>
-    <string name="permdesc_readHistoryBookmarks">"Allows the application to read all the URLs that the Browser has visited, and all of the Browser\'s bookmarks."</string>
-    <string name="permlab_writeHistoryBookmarks">"write Browser\'s history and bookmarks"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Allows an application to modify the Browser\'s history or bookmarks stored on your phone. Malicious applications can use this to erase or modify your Browser\'s data."</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
     <string name="query_data_prompt">"Tillat lagring"</string>
     <string name="query_data_message">"Nettsiden under ønsker å lagre informasjon på datamaskinen ved hjelp av Gears."</string>
     <string name="location_prompt">"Få tilgang til plassering"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 87fb6f6..37dae9d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -25,6 +25,7 @@
     <string name="username">"Naam"</string>
     <string name="password">"Wachtwoord"</string>
     <string name="action">"Aanmelden"</string>
+    <string name="bookmarks_search">"Browser"</string>
     <string name="cancel">"Annuleren"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Waarschuwen als er een beveiligingsprobleem is met een site"</string>
     <string name="pref_security_accept_cookies">"Cookies toelaten"</string>
     <string name="pref_security_accept_cookies_summary">"Sites toestaan cookiegegevens te lezen en schrijven"</string>
-    <string name="pref_text_size">"Tekengrootte instellen"</string>
+    <string name="pref_text_size">"Tekengrootte"</string>
   <string-array name="pref_text_size_choices">
     <item>"Minuscuul"</item>
     <item>"Klein"</item>
@@ -158,6 +159,13 @@
     <item>"Enorm"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Tekengrootte"</string>
+    <string name="pref_default_zoom">"Standaardzoom"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Ver"</item>
+    <item>"Gemiddeld"</item>
+    <item>"Sluiten"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Standaardzoom"</string>
     <string name="pref_extras_title">"Geavanceerde instellingen"</string>
     <string name="pref_extras_gears_enable">"Gears inschakelen"</string>
     <string name="pref_extras_gears_enable_summary">"Toepassingen die de functionaliteit van de browser vergroten"</string>
@@ -170,7 +178,7 @@
     <string name="pref_extras_reset_default_dlg">"Alle browsergegevens worden gewist en de standaardinstellingen worden hersteld."</string>
     <string name="pref_extras_reset_default_dlg_title">"Standaardinstellingen herstellen"</string>
     <string name="pref_development_title">"Foutopsporing"</string>
-    <string name="pref_default_text_encoding">"Tekstcodering instellen"</string>
+    <string name="pref_default_text_encoding">"Tekstcodering"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latijns-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +203,8 @@
     <string name="no_database">"Geen database."</string>
     <string name="search_hint">"Typ het webadres"</string>
     <string name="search_button_text">"Ga"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Opgelet"</string>
     <string name="popup_window_attempt">"Deze site probeert een pop-upvenster te openen."</string>
     <string name="allow">"Toestaan"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"Kan niet downloaden. De grootte van het item kan niet worden vastgesteld."</string>
     <string name="download_precondition_failed">"Download is onderbroken. Deze kan niet worden voortgezet."</string>
     <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
-    <string name="search_google">"Zoeken met Google"</string>
-    <string name="permlab_readHistoryBookmarks">"browsergeschiedenis en bladwijzers lezen"</string>
-    <string name="permdesc_readHistoryBookmarks">"Hiermee kan een toepassing de URL\'s lezen die u via de browser heeft bezocht, evenals alle bladwijzers van de browser."</string>
-    <string name="permlab_writeHistoryBookmarks">"browsergeschiedenis en bladwijzers schrijven"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Hiermee kan een toepassing de op uw telefoon opgeslagen browsergeschiedenis of bladwijzers wijzigen. Schadelijke toepassingen kunnen hiermee uw browsergegevens verwijderen of wijzigen."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Zoeken op internet"</string>
     <string name="query_data_prompt">"Opslag toestaan"</string>
     <string name="query_data_message">"Deze website wil informatie opslaan op uw telefoon."</string>
     <string name="location_prompt">"Toegang tot uw locatie"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index f477763..0295c72 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -17,7 +17,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="application_name">"Internet"</string>
     <string name="tab_bookmarks">"Zakładki"</string>
-    <string name="tab_most_visited">"Najczęściej odwiedzane"</string>
+    <string name="tab_most_visited">"Popularne"</string>
     <string name="tab_history">"Historia"</string>
     <string name="added_to_bookmarks">"Dodano do zakładek"</string>
     <string name="removed_from_bookmarks">"Usunięto z zakładek"</string>
@@ -25,6 +25,7 @@
     <string name="username">"Nazwa"</string>
     <string name="password">"Hasło"</string>
     <string name="action">"Zaloguj się"</string>
+    <string name="bookmarks_search">"Przeglądarka"</string>
     <string name="cancel">"Anuluj"</string>
     <string name="ok">"OK"</string>
   <plurals name="matches_found">
@@ -149,7 +150,7 @@
     <string name="pref_security_show_security_warning_summary">"Wyświetl ostrzeżenie w razie problemów z zabezpieczeniami strony"</string>
     <string name="pref_security_accept_cookies">"Akceptuj pliki cookie"</string>
     <string name="pref_security_accept_cookies_summary">"Zezwalaj witrynom na zapis i odczyt danych w plikach cookie"</string>
-    <string name="pref_text_size">"Ustaw rozmiar tekstu"</string>
+    <string name="pref_text_size">"Rozmiar tekstu"</string>
   <string-array name="pref_text_size_choices">
     <item>"Bardzo mały"</item>
     <item>"Mały"</item>
@@ -158,6 +159,13 @@
     <item>"Bardzo duży"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Rozmiar tekstu"</string>
+    <string name="pref_default_zoom">"Powiększenie domyślne"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"Małe"</item>
+    <item>"Średnie"</item>
+    <item>"Duże"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"Powiększenie domyślne"</string>
     <string name="pref_extras_title">"Ustawienia zaawansowane"</string>
     <string name="pref_extras_gears_enable">"Włącz dodatek Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Aplikacje rozszerzające zakres funkcji przeglądarki"</string>
@@ -170,7 +178,7 @@
     <string name="pref_extras_reset_default_dlg">"Wszystkie dane przeglądarki zostaną wyczyszczone, a ustawienia powrócą do wartości domyślnych."</string>
     <string name="pref_extras_reset_default_dlg_title">"Przywróć wartości domyślne"</string>
     <string name="pref_development_title">"Debugowanie"</string>
-    <string name="pref_default_text_encoding">"Ustaw kodowanie tekstu"</string>
+    <string name="pref_default_text_encoding">"Kodowanie tekstu"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -195,6 +203,8 @@
     <string name="no_database">"Brak bazy danych!"</string>
     <string name="search_hint">"Wpisz adres WWW"</string>
     <string name="search_button_text">"Otwórz"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Uwaga"</string>
     <string name="popup_window_attempt">"Ta strona próbuje otworzyć okienko wyskakujące."</string>
     <string name="allow">"Zezwól"</string>
@@ -236,11 +246,8 @@
     <string name="download_length_required">"Pobieranie niemożliwe. Nie można ustalić rozmiaru elementu."</string>
     <string name="download_precondition_failed">"Pobieranie zostało przerwane. Nie można go wznowić."</string>
     <string name="activity_instrumentation_test_runner">"Uruchamianie testów przeglądarki"</string>
-    <string name="search_google">"Szukanie Google"</string>
-    <string name="permlab_readHistoryBookmarks">"odczytywanie historii i zakładek przeglądarki"</string>
-    <string name="permdesc_readHistoryBookmarks">"Zezwala aplikacji na odczytanie wszystkich adresów URL odwiedzonych przy użyciu przeglądarki oraz wszystkich zakładek przeglądarki."</string>
-    <string name="permlab_writeHistoryBookmarks">"zapisać historię i zakładki przeglądarki"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Pozwala aplikacji na zmianę historii lub zakładek przeglądarki zapisanych w telefonie. Szkodliwe aplikacje mogą to wykorzystać, aby usunąć lub zmienić dane przeglądarki."</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"Szukaj w internecie"</string>
     <string name="query_data_prompt">"Zezwól na zapis"</string>
     <string name="query_data_message">"Ta witryna internetowa chce zapisać informacje w telefonie."</string>
     <string name="location_prompt">"Dostęp do informacji o Twojej lokalizacji"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..7ac06f5
--- /dev/null
+++ b/res/values-pt-rPT/strings.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Browser"</string>
+    <string name="tab_bookmarks">"Marcadores"</string>
+    <string name="tab_most_visited">"Os mais visitados"</string>
+    <string name="tab_history">"Histórico"</string>
+    <string name="added_to_bookmarks">"Adicionado aos marcadores"</string>
+    <string name="removed_from_bookmarks">"Removido dos marcadores"</string>
+    <string name="sign_in_to">"Iniciar sessão em <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Nome"</string>
+    <string name="password">"Palavra-passe"</string>
+    <string name="action">"Iniciar sessão"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"Cancelar"</string>
+    <string name="ok">"OK"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Sem correspondência"</item>
+    <item quantity="one">"1 correspondência"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> correspondências"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> correspondências"</item>
+  </plurals>
+    <string name="page_info">"Informações da página"</string>
+    <string name="page_info_view">"Ver informações da página"</string>
+    <string name="page_info_address">"Endereço:"</string>
+    <string name="ssl_warnings_header">"Existem problemas com o certificado de segurança deste site."</string>
+    <string name="ssl_continue">"Continuar"</string>
+    <string name="security_warning">"Aviso de segurança"</string>
+    <string name="view_certificate">"Ver certificado"</string>
+    <string name="ssl_untrusted">"Este certificado não pertence a uma autoridade fidedigna."</string>
+    <string name="ssl_mismatch">"O nome do site não corresponde ao nome constante no certificado."</string>
+    <string name="ssl_expired">"Este certificado expirou."</string>
+    <string name="ssl_not_yet_valid">"Este certificado ainda não é válido."</string>
+    <string name="ssl_certificate">"Certificado de segurança"</string>
+    <string name="ssl_certificate_is_valid">"Este certificado é válido."</string>
+    <string name="issued_to">"Emitido para:"</string>
+    <string name="common_name">"Nome comum:"</string>
+    <string name="org_name">"Organização:"</string>
+    <string name="org_unit">"Unidade organizacional:"</string>
+    <string name="issued_by">"Emitido por:"</string>
+    <string name="validity_period">"Validade:"</string>
+    <string name="issued_on">"Emitido em:"</string>
+    <string name="expires_on">"Expira em:"</string>
+    <string name="retrieving_creds_dlg_msg">"A obter detalhes de início de sessão..."</string>
+    <string name="stopping">"A interromper..."</string>
+    <string name="stop">"Parar"</string>
+    <string name="reload">"Actualizar"</string>
+    <string name="forward">"Avançar"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"Cancelar"</string>
+    <string name="location">"Local"</string>
+    <string name="name">"Nome"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Adicionar aos marcadores"</string>
+    <string name="edit_bookmark">"Editar marcador"</string>
+    <string name="create_shortcut_bookmark">"Adicionar atalho à página inicial"</string>
+    <string name="open_bookmark">"Abrir"</string>
+    <string name="remove_bookmark">"Eliminar marcador"</string>
+    <string name="remove_history_item">"Remover do histórico"</string>
+    <string name="bookmark_saved">"Guardado nos marcadores"</string>
+    <string name="bookmark_needs_title">"Os marcadores têm de ter um nome."</string>
+    <string name="bookmark_needs_url">"O marcador tem de ter uma localização."</string>
+    <string name="empty_bookmark">"Não é possível criar um marcador vazio."</string>
+    <string name="bookmark_url_not_valid">"O URL não é válido."</string>
+    <string name="delete_bookmark">"Eliminar"</string>
+    <string name="bookmark_page">"Adicionar aos marcadores a última página visualizada"</string>
+    <string name="current_page">"de "</string>
+    <string name="delete_bookmark_warning">"O marcador \"<xliff:g id="BOOKMARK">%s</xliff:g>\" será eliminado."</string>
+    <string name="open_in_new_window">"Abrir numa janela nova"</string>
+    <string name="new_window">"Nova janela"</string>
+    <string name="goto_dot">"Ir"</string>
+    <string name="find_dot">"Encontrar na página"</string>
+    <string name="select_dot">"Seleccionar texto"</string>
+    <string name="view_tabs">"Visão geral das janelas"</string>
+    <string name="view_tabs_condensed">"Janelas"</string>
+    <string name="tab_picker_title">"Janelas actuais"</string>
+    <string name="tab_picker_view_tab">"Ver"</string>
+    <string name="tab_picker_new_tab">"Nova janela"</string>
+    <string name="tab_picker_remove_tab">"Fechar"</string>
+    <string name="tab_picker_bookmark">"Adicionar aos marcadores"</string>
+    <string name="tab_picker_send_url">"Partilhar link"</string>
+    <string name="bookmarks">"Marcadores"</string>
+    <string name="shortcut_bookmark">"Marcador"</string>
+    <string name="history">"Histórico"</string>
+    <string name="menu_view_download">"Transferências"</string>
+    <string name="share_page">"Partilhar página"</string>
+    <string name="contextmenu_openlink">"Abrir"</string>
+    <string name="contextmenu_openlink_newwindow">"Abrir numa janela nova"</string>
+    <string name="contextmenu_bookmark_thislink">"Adicionar link aos marcadores"</string>
+    <string name="contextmenu_savelink">"Guardar link"</string>
+    <string name="contextmenu_sharelink">"Partilhar link"</string>
+    <string name="contextmenu_copy">"Copiar"</string>
+    <string name="contextmenu_copylink">"Copiar URL do link"</string>
+    <string name="contextmenu_download_image">"Guardar imagem"</string>
+    <string name="contextmenu_view_image">"Ver imagem"</string>
+    <string name="contextmenu_dial_dot">"Marcar..."</string>
+    <string name="contextmenu_add_contact">"Adicionar contacto"</string>
+    <string name="contextmenu_send_mail">"Enviar e-mail"</string>
+    <string name="contextmenu_map">"Mapa"</string>
+    <string name="clear">"Limpar"</string>
+    <string name="replace">"Substituir"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Marcadores"</string>
+    <string name="menu_preferences">"Definições"</string>
+    <string name="pref_content_title">"Definições de conteúdo da página"</string>
+    <string name="pref_content_load_images">"Carregar imagens"</string>
+    <string name="pref_content_load_images_summary">"Apresentar imagens em páginas Web"</string>
+    <string name="pref_content_block_popups">"Bloquear janelas de pop-up"</string>
+    <string name="pref_content_javascript">"Activar JavaScript"</string>
+    <string name="pref_content_open_in_background">"Abrir em segundo plano"</string>
+    <string name="pref_content_open_in_background_summary">"As novas janelas serão abertas atrás da janela actual"</string>
+    <string name="pref_content_homepage">"Definir página inicial"</string>
+    <string name="pref_content_autofit">"Ajustar páginas automaticamente"</string>
+    <string name="pref_content_autofit_summary">"Formatar páginas Web para se ajustarem ao ecrã"</string>
+    <string name="pref_privacy_title">"Definições de privacidade"</string>
+    <string name="pref_privacy_clear_cache">"Limpar cache"</string>
+    <string name="pref_privacy_clear_cache_summary">"Eliminar todo o conteúdo de páginas em cache"</string>
+    <string name="pref_privacy_clear_cache_dlg">"A cache será limpa."</string>
+    <string name="pref_privacy_clear_cookies">"Limpar todos os dados de cookies"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Limpar todos os cookies do browser"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Todos os cookies serão limpos."</string>
+    <string name="pref_privacy_clear_history">"Limpar histórico"</string>
+    <string name="pref_privacy_clear_history_summary">"Limpar o histórico de navegação do browser"</string>
+    <string name="pref_privacy_clear_history_dlg">"O histórico de navegação do browser será limpo."</string>
+    <string name="pref_privacy_clear_form_data">"Limpar dados de formulário"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Limpar todos os dados de formulário guardados"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Todos os dados de formulário guardados serão limpos."</string>
+    <string name="pref_privacy_clear_passwords">"Limpar palavras-passe"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Limpar todas as palavras-passe guardadas"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Todas as palavras-passe guardadas serão limpas."</string>
+    <string name="pref_security_title">"Definições de segurança"</string>
+    <string name="pref_security_remember_passwords">"Lembrar palavras-passe"</string>
+    <string name="pref_security_remember_passwords_summary">"Guardar nomes de utilizador e palavras-passe de Web sites"</string>
+    <string name="pref_security_save_form_data">"Lembrar dados de formulário"</string>
+    <string name="pref_security_save_form_data_summary">"Lembrar dados introduzidos em formulários para utilização posterior"</string>
+    <string name="pref_security_show_security_warning">"Mostrar avisos de segurança"</string>
+    <string name="pref_security_show_security_warning_summary">"Mostrar aviso se ocorrer um problema com a segurança de um site"</string>
+    <string name="pref_security_accept_cookies">"Aceitar cookies"</string>
+    <string name="pref_security_accept_cookies_summary">"Permitir que os sites guardem e leiam dados de \"cookies\""</string>
+    <!-- no translation found for pref_text_size (3827031324346612208) -->
+    <skip />
+  <string-array name="pref_text_size_choices">
+    <item>"Muito pequeno"</item>
+    <item>"Pequeno"</item>
+    <item>"Normal"</item>
+    <item>"Grande"</item>
+    <item>"Muito grande"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Tamanho do texto"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Definições avançadas"</string>
+    <string name="pref_extras_gears_enable">"Activar o Gears"</string>
+    <string name="pref_extras_gears_enable_summary">"Aplicações que aumentam a funcionalidade do browser"</string>
+    <string name="pref_extras_gears_settings">"Definições do Gears"</string>
+    <string name="pref_plugin_installed">"Lista de plug-ins"</string>
+    <string name="pref_plugin_installed_empty_list">"Nenhum plug-in instalado."</string>
+    <string name="pref_extras_gears_settings_summary">"Aplicações que aumentam a funcionalidade do browser"</string>
+    <string name="pref_extras_reset_default">"Repor as predefinições"</string>
+    <string name="pref_extras_reset_default_summary">"Limpar todos os dados do browser e repor todas as predefinições"</string>
+    <string name="pref_extras_reset_default_dlg">"Todos os dados do browser serão limpos e as definições serão repostas para os valores predefinidos."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Repor as predefinições"</string>
+    <string name="pref_development_title">"Depuração"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latim-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Japonês (ISO-2022-JP)"</item>
+    <item>"Japonês (SHIFT_JIS)"</item>
+    <item>"Japonês (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Codificação do texto"</string>
+    <string name="pref_default_text_encoding_default">"Latim-1"</string>
+    <string name="browserFrameRedirect">"Redireccionar"</string>
+    <string name="browserFrame307Post">"Esta página Web está a ser redireccionada. Pretende reenviar os dados de formulário introduzidos para a nova localização?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Problema de conectividade de dados"</string>
+    <string name="browserFrameFileErrorLabel">"Problemas com o ficheiro"</string>
+    <string name="browserFrameFormResubmitLabel">"Confirmar"</string>
+    <string name="browserFrameFormResubmitMessage">"A página que está a tentar visualizar contém dados enviados anteriormente (\"REGISTDADOS\"). Se reenviar os dados, qualquer acção já tomada pelo formulário da página (como uma pesquisa ou compra on-line) será repetida."</string>
+    <string name="loadSuspendedTitle">"Sem ligação de rede"</string>
+    <string name="loadSuspended">"O carregamento desta página será retomado depois do restabelecimento da ligação."</string>
+    <string name="clear_history">"Limpar histórico"</string>
+    <string name="browser_history">"Páginas visitadas recentemente"</string>
+    <string name="empty_history">"O histórico do browser está vazio."</string>
+    <string name="add_new_bookmark">"Adicionar marcador..."</string>
+    <string name="no_database">"Não existe base de dados!"</string>
+    <string name="search_hint">"Escreva o endereço Web"</string>
+    <string name="search_button_text">"Ir"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Atenção"</string>
+    <string name="popup_window_attempt">"Este site está a tentar abrir uma janela de pop-up."</string>
+    <string name="allow">"Permitir"</string>
+    <string name="block">"Bloquear"</string>
+    <string name="too_many_windows_dialog_title">"Limite de janelas alcançado"</string>
+    <string name="too_many_windows_dialog_message">"Não foi possível abrir uma nova janela porque o número máximo de janelas abertas foi atingido."</string>
+    <string name="too_many_subwindows_dialog_title">"Janela de pop-up já aberta"</string>
+    <string name="too_many_subwindows_dialog_message">"Não foi possível abrir uma nova janela de pop-up, pois só é permitido abrir uma de cada vez."</string>
+    <string name="download_title">"Histórico de transferências"</string>
+    <string name="download_unknown_filename">"&lt;Desconhecido&gt;"</string>
+    <string name="download_menu_open">"Abrir"</string>
+    <string name="download_menu_clear">"Limpar da lista"</string>
+    <string name="download_menu_cancel">"Cancelar transferência"</string>
+    <string name="download_menu_cancel_all">"Cancelar todas as transferências"</string>
+    <string name="download_menu_clear_all">"Limpar lista"</string>
+    <string name="download_clear_dlg_title">"Limpar"</string>
+    <string name="download_clear_dlg_msg">"Todos os itens serão limpos da lista e removidos da cache do browser."</string>
+    <string name="download_cancel_dlg_title">"Cancelar transferências"</string>
+    <string name="download_cancel_dlg_msg">"As <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> transferências serão canceladas e limpas do histórico de transferências."</string>
+    <string name="download_file_error_dlg_title">"Sem espaço"</string>
+    <string name="download_file_error_dlg_msg">"Não foi possível transferir <xliff:g id="FILENAME">%s</xliff:g>. "\n"Liberte algum espaço no telefone e tente novamente."</string>
+    <string name="download_failed_generic_dlg_title">"Falha na transferência"</string>
+    <string name="download_no_sdcard_dlg_title">"Sem cartão SD"</string>
+    <string name="download_no_sdcard_dlg_msg">"É necessário um cartão SD para transferir <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_sdcard_busy_dlg_title">"Cartão SD não disponível"</string>
+    <string name="download_sdcard_busy_dlg_msg">"O cartão SD está ocupado. Para permitir as transferências, seleccione \"Desactivar armazenamento USB\" na notificação."</string>
+    <string name="download_no_application">"Nenhuma aplicação encontrada para abrir este ficheiro."</string>
+    <string name="retry">"Tentar novamente"</string>
+    <string name="no_downloads">"O histórico de transferências está vazio."</string>
+    <string name="download_error">"Falha na transferência."</string>
+    <string name="download_success">"Transferência de <xliff:g id="FILE">%s</xliff:g> concluída."</string>
+    <string name="download_running">"A transferir..."</string>
+    <string name="download_pending">"A iniciar a transferência..."</string>
+    <string name="download_pending_network">"A aguardar ligação de dados…"</string>
+    <string name="download_running_paused">"A aguardar ligação de dados…"</string>
+    <string name="download_canceled">"Transferência cancelada."</string>
+    <string name="download_not_acceptable">"Não é possível transferir. Este conteúdo não é suportado pelo telefone."</string>
+    <string name="download_file_error">"Não é possível concluir a transferência. Não existe espaço suficiente."</string>
+    <string name="download_length_required">"Não é possível transferir porque o tamanho do item é indeterminado."</string>
+    <string name="download_precondition_failed">"A transferência foi interrompida e não pode ser retomada."</string>
+    <string name="activity_instrumentation_test_runner">"Teste·de·browser"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Permitir armazenamento"</string>
+    <string name="query_data_message">"Este Web site pretende armazenar informações no seu telefone."</string>
+    <string name="location_prompt">"Aceder à sua localização"</string>
+    <string name="location_message">"Este Web site pretende ter acesso à sua localização."</string>
+    <string name="shortcut_prompt">"Criar um atalho"</string>
+    <string name="shortcut_message">"Este Web site pretende criar um atalho para esta página no seu ecrã inicial."</string>
+    <string name="settings_message">"A tabela seguinte mostra as permissões concedidas a cada site que tenha tentado utilizar o Gears."</string>
+    <string name="filepicker_message">"Seleccionador de ficheiros"</string>
+    <string name="image_message">"Imagem escolhida"</string>
+    <string name="settings_title">"Definições do Gears"</string>
+    <string name="privacy_policy">"Leia a política de privacidade do site para saber que uso será dado à sua localização."</string>
+    <string name="settings_storage_title">"Permitir armazenamento local"</string>
+    <string name="settings_storage_subtitle_on">"Este site pode guardar informações no seu telefone"</string>
+    <string name="settings_storage_subtitle_off">"Este site não consegue guardar informações no seu telefone"</string>
+    <string name="settings_location_title">"Permitir detecção de localização"</string>
+    <string name="settings_location_subtitle_on">"Este site não consegue ler a sua localização actual"</string>
+    <string name="settings_location_subtitle_off">"Este site não consegue ler a sua localização actual"</string>
+    <string name="settings_remove_site">"Remover este site do Gears"</string>
+    <string name="settings_empty">"Sem permissões definidas"</string>
+    <string name="settings_confirmation_remove_title">"Remover este site"</string>
+    <string name="settings_confirmation_remove">"Todas as permissões serão limpas e quaisquer dados armazenados no telefone pelo site serão eliminados."</string>
+    <string name="storage_notification">"Este site irá armazenar informações neste telefone. "\n" Altere esta definição em:"\n" Definições -&gt; Definições do Gears"</string>
+    <string name="storage_notification_alwaysdeny">"Este site nunca irá armazenar informações neste telefone. "\n" Altere esta definição em:"\n" Definições -&gt; Definições do Gears"</string>
+    <string name="location_notification">"Este site tem acesso à sua localização actual. "\n" Altere esta definição em: "\n" Definições -&gt; Definições do Gears"</string>
+    <string name="location_notification_alwaysdeny">"Este site não irá aceder à sua localização actual."\n" Altere esta definição em: "\n" Definições -&gt; Definições do Gears"</string>
+    <string name="shortcut_notification">"Atalho criado"</string>
+    <string name="permission_button_alwaysdeny">"Nunca permitir"</string>
+    <string name="permission_button_allow">"OK"</string>
+    <string name="permission_button_deny">"Cancelar"</string>
+    <string name="shortcut_button_alwaysdeny">"Nunca permitir"</string>
+    <string name="shortcut_button_allow">"OK"</string>
+    <string name="shortcut_button_deny">"Cancelar"</string>
+    <string name="settings_button_allow">"Aplicar"</string>
+    <string name="settings_button_deny">"Cancelar"</string>
+    <string name="filepicker_button_allow">"OK"</string>
+    <string name="filepicker_button_deny">"Cancelar"</string>
+    <string name="filepicker_path">"caminho:"</string>
+    <string name="filepicker_no_files_selected">"Nenhum ficheiro seleccionado"</string>
+    <string name="filepicker_one_file_selected">"Um ficheiro seleccionado"</string>
+    <string name="filepicker_some_files_selected">"ficheiros seleccionados"</string>
+    <string name="remove">"Remover"</string>
+    <string name="local_storage">"Armazenamento local"</string>
+    <string name="allowed">"Permitido"</string>
+    <string name="denied">"Negado"</string>
+    <string name="unrecognized_dialog_message">"Tipo de diálogo desconhecido"</string>
+    <string name="default_button">"OK"</string>
+    <string name="zoom_overview_button_text">"Visão geral"</string>
+</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
new file mode 100644
index 0000000..e4988e9
--- /dev/null
+++ b/res/values-pt/strings.xml
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Navegador"</string>
+    <string name="tab_bookmarks">"Favoritos"</string>
+    <string name="tab_most_visited">"Mais visitados"</string>
+    <string name="tab_history">"Histórico"</string>
+    <string name="added_to_bookmarks">"Adicionado aos favoritos"</string>
+    <string name="removed_from_bookmarks">"Removido dos favoritos"</string>
+    <string name="sign_in_to">"Fazer login no <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Nome"</string>
+    <string name="password">"Senha"</string>
+    <string name="action">"Fazer login"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"Cancelar"</string>
+    <string name="ok">"OK"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Sem correspondências"</item>
+    <item quantity="one">"1 correspondência"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> correspondências"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> correspondências"</item>
+  </plurals>
+    <string name="page_info">"Informações da página"</string>
+    <string name="page_info_view">"Visualizar informações da página"</string>
+    <string name="page_info_address">"Endereço:"</string>
+    <string name="ssl_warnings_header">"Há problemas com o certificado de segurança deste site."</string>
+    <string name="ssl_continue">"Continuar"</string>
+    <string name="security_warning">"Aviso de segurança"</string>
+    <string name="view_certificate">"Visualizar certificado"</string>
+    <string name="ssl_untrusted">"Este certificado não é de uma autoridade confiável."</string>
+    <string name="ssl_mismatch">"O nome do site não corresponde ao nome no certificado."</string>
+    <string name="ssl_expired">"Este certificado expirou."</string>
+    <string name="ssl_not_yet_valid">"Este certificado ainda não é válido."</string>
+    <string name="ssl_certificate">"Certificado de segurança"</string>
+    <string name="ssl_certificate_is_valid">"Este certificado é válido."</string>
+    <string name="issued_to">"Emitido para:"</string>
+    <string name="common_name">"Nome comum:"</string>
+    <string name="org_name">"Organização:"</string>
+    <string name="org_unit">"Unidade organizacional:"</string>
+    <string name="issued_by">"Emitido por:"</string>
+    <string name="validity_period">"Validade:"</string>
+    <string name="issued_on">"Emitido em:"</string>
+    <string name="expires_on">"Expira em:"</string>
+    <string name="retrieving_creds_dlg_msg">"Recuperando detalhes do login…"</string>
+    <string name="stopping">"Parando…"</string>
+    <string name="stop">"Parar"</string>
+    <string name="reload">"Atualizar"</string>
+    <string name="forward">"Encaminhar"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"Cancelar"</string>
+    <string name="location">"Local"</string>
+    <string name="name">"Nome"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Favorito"</string>
+    <string name="edit_bookmark">"Editar favorito"</string>
+    <string name="create_shortcut_bookmark">"Adicionar atalho à Página inicial"</string>
+    <string name="open_bookmark">"Abrir"</string>
+    <string name="remove_bookmark">"Excluir favorito"</string>
+    <string name="remove_history_item">"Remover do histórico"</string>
+    <string name="bookmark_saved">"Salvo nos favoritos."</string>
+    <string name="bookmark_needs_title">"O favorito precisa ter um nome."</string>
+    <string name="bookmark_needs_url">"O favorito precisa ter um local."</string>
+    <string name="empty_bookmark">"Não é possível criar um favorito vazio."</string>
+    <string name="bookmark_url_not_valid">"O URL não é válido."</string>
+    <string name="delete_bookmark">"Excluir"</string>
+    <string name="bookmark_page">"Adicionar última página visualizada aos favoritos"</string>
+    <string name="current_page">"de "</string>
+    <string name="delete_bookmark_warning">"O favorito \"<xliff:g id="BOOKMARK">%s</xliff:g>\" será excluído."</string>
+    <string name="open_in_new_window">"Abrir em uma nova janela"</string>
+    <string name="new_window">"Nova janela"</string>
+    <string name="goto_dot">"Ir"</string>
+    <string name="find_dot">"Localizar na página"</string>
+    <string name="select_dot">"Selecione o texto"</string>
+    <string name="view_tabs">"Visão geral da janela"</string>
+    <string name="view_tabs_condensed">"Janelas"</string>
+    <string name="tab_picker_title">"Janelas atuais"</string>
+    <string name="tab_picker_view_tab">"Exibir"</string>
+    <string name="tab_picker_new_tab">"Nova janela"</string>
+    <string name="tab_picker_remove_tab">"Fechar"</string>
+    <string name="tab_picker_bookmark">"Favorito"</string>
+    <string name="tab_picker_send_url">"Compartilhar link"</string>
+    <string name="bookmarks">"Favoritos"</string>
+    <string name="shortcut_bookmark">"Favorito"</string>
+    <string name="history">"Histórico"</string>
+    <string name="menu_view_download">"Downloads"</string>
+    <string name="share_page">"Compartilhar página"</string>
+    <string name="contextmenu_openlink">"Abrir"</string>
+    <string name="contextmenu_openlink_newwindow">"Abrir em uma nova janela"</string>
+    <string name="contextmenu_bookmark_thislink">"Link do favorito"</string>
+    <string name="contextmenu_savelink">"Salvar link"</string>
+    <string name="contextmenu_sharelink">"Compartilhar link"</string>
+    <string name="contextmenu_copy">"Copiar"</string>
+    <string name="contextmenu_copylink">"Copiar URL do link"</string>
+    <string name="contextmenu_download_image">"Salvar imagem"</string>
+    <string name="contextmenu_view_image">"Visualizar imagem"</string>
+    <string name="contextmenu_dial_dot">"Discar..."</string>
+    <string name="contextmenu_add_contact">"Adicionar contato"</string>
+    <string name="contextmenu_send_mail">"Enviar e-mail"</string>
+    <string name="contextmenu_map">"Mapa"</string>
+    <string name="clear">"Limpar"</string>
+    <string name="replace">"Substituir"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Favoritos"</string>
+    <string name="menu_preferences">"Configurações"</string>
+    <string name="pref_content_title">"Configurações do conteúdo da página"</string>
+    <string name="pref_content_load_images">"Carregar imagens"</string>
+    <string name="pref_content_load_images_summary">"Exibir imagens nas páginas da web"</string>
+    <string name="pref_content_block_popups">"Bloquear janelas pop-up"</string>
+    <string name="pref_content_javascript">"Ativar JavaScript"</string>
+    <string name="pref_content_open_in_background">"Abrir em segundo plano"</string>
+    <string name="pref_content_open_in_background_summary">"As novas janelas abrem atrás da janela atual."</string>
+    <string name="pref_content_homepage">"Definir a página inicial"</string>
+    <string name="pref_content_autofit">"Ajustar páginas automaticamente"</string>
+    <string name="pref_content_autofit_summary">"Formatar páginas da web para se ajustarem à tela"</string>
+    <string name="pref_privacy_title">"Configurações de privacidade"</string>
+    <string name="pref_privacy_clear_cache">"Limpar cache"</string>
+    <string name="pref_privacy_clear_cache_summary">"Excluir todo conteúdo da página armazenado em cache"</string>
+    <string name="pref_privacy_clear_cache_dlg">"O cache será limpo."</string>
+    <string name="pref_privacy_clear_cookies">"Limpar todos os dados de cookie"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Limpar todos os cookies do navegador"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Todos os cookies serão limpos."</string>
+    <string name="pref_privacy_clear_history">"Limpar histórico"</string>
+    <string name="pref_privacy_clear_history_summary">"Limpar o histórico de navegação do navegador"</string>
+    <string name="pref_privacy_clear_history_dlg">"O histórico de navegação do navegador será limpo."</string>
+    <string name="pref_privacy_clear_form_data">"Limpar dados do formulário"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Limpar todos os dados de formulário salvos"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Todos os dados de formulário salvos serão limpos."</string>
+    <string name="pref_privacy_clear_passwords">"Limpar senhas"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Limpar todas as senhas salvas"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Todas as senhas salvas serão excluídas."</string>
+    <string name="pref_security_title">"Configurações de segurança"</string>
+    <string name="pref_security_remember_passwords">"Lembrar senhas"</string>
+    <string name="pref_security_remember_passwords_summary">"Salvar nomes de usuário e senhas de sites"</string>
+    <string name="pref_security_save_form_data">"Lembrar dados do formulário"</string>
+    <string name="pref_security_save_form_data_summary">"Lembrar os dados que digitei nos formulários para uso posterior."</string>
+    <string name="pref_security_show_security_warning">"Mostrar avisos de segurança"</string>
+    <string name="pref_security_show_security_warning_summary">"Mostrar aviso se houver um problema com a segurança de um site."</string>
+    <string name="pref_security_accept_cookies">"Aceitar cookies"</string>
+    <string name="pref_security_accept_cookies_summary">"Permitir que os sites salvem e leiam dados de \"cookie\""</string>
+    <string name="pref_text_size">"Tamanho do texto"</string>
+  <string-array name="pref_text_size_choices">
+    <item>"Muito pequeno"</item>
+    <item>"Pequeno"</item>
+    <item>"Normal"</item>
+    <item>"Grande"</item>
+    <item>"Enorme"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Tamanho do texto"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Configurações avançadas"</string>
+    <string name="pref_extras_gears_enable">"Ativar o Gears"</string>
+    <string name="pref_extras_gears_enable_summary">"Aplicativos que estendem a funcionalidade do navegador"</string>
+    <string name="pref_extras_gears_settings">"Configurações do Gears"</string>
+    <string name="pref_plugin_installed">"Lista de plug-ins"</string>
+    <string name="pref_plugin_installed_empty_list">"Nenhum plug-in instalado."</string>
+    <string name="pref_extras_gears_settings_summary">"Aplicativos que estendem a funcionalidade do navegador"</string>
+    <string name="pref_extras_reset_default">"Redefinir para o padrão"</string>
+    <string name="pref_extras_reset_default_summary">"Limpar todos os dados do navegador e redefinir todas as configurações para o padrão"</string>
+    <string name="pref_extras_reset_default_dlg">"Todos os dados do navegador serão limpos e as configurações voltarão para os valores padrão."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Redefinir para o padrão"</string>
+    <string name="pref_development_title">"Depurar"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Japonês (ISO-2022-JP)"</item>
+    <item>"Japonês (SHIFT_JIS)"</item>
+    <item>"Japonês (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Codificação de texto"</string>
+    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="browserFrameRedirect">"Redirecionar"</string>
+    <string name="browserFrame307Post">"Esta página da web está sendo redirecionada. Reenviar os seus dados de formulário digitados para o novo local?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Problema de conectividade de dados"</string>
+    <string name="browserFrameFileErrorLabel">"Problema com o arquivo"</string>
+    <string name="browserFrameFormResubmitLabel">"Confirmar"</string>
+    <string name="browserFrameFormResubmitMessage">"A página que você está tentando visualizar contém dados já enviados (\"POSTDATA\"). Se você reenviar os dados, qualquer ação executada pelo formulário na página (como uma pesquisa ou uma compra on-line) será repetida."</string>
+    <string name="loadSuspendedTitle">"Nenhuma conexão de rede"</string>
+    <string name="loadSuspended">"A página continuará a carregar após a restauração da conexão."</string>
+    <string name="clear_history">"Limpar histórico"</string>
+    <string name="browser_history">"Páginas visitadas recentemente"</string>
+    <string name="empty_history">"O histórico do navegador está vazio."</string>
+    <string name="add_new_bookmark">"Adicionar favorito…"</string>
+    <string name="no_database">"Nenhum banco de dados!"</string>
+    <string name="search_hint">"Digitar endereço da web"</string>
+    <string name="search_button_text">"Ir"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Atenção"</string>
+    <string name="popup_window_attempt">"Este site está tentando abrir uma janela pop-up."</string>
+    <string name="allow">"Permitir"</string>
+    <string name="block">"Bloquear"</string>
+    <string name="too_many_windows_dialog_title">"Limite de janelas atingido"</string>
+    <string name="too_many_windows_dialog_message">"Não foi possível abrir uma nova janela porque você já abriu o número máximo."</string>
+    <string name="too_many_subwindows_dialog_title">"Pop-up já aberta"</string>
+    <string name="too_many_subwindows_dialog_message">"Não foi possível abrir uma nova janela pop-up porque apenas uma pode ser aberta por vez."</string>
+    <string name="download_title">"Fazer download do histórico"</string>
+    <string name="download_unknown_filename">"&lt;Desconhecido&gt;"</string>
+    <string name="download_menu_open">"Abrir"</string>
+    <string name="download_menu_clear">"Limpar da lista"</string>
+    <string name="download_menu_cancel">"Cancelar download"</string>
+    <string name="download_menu_cancel_all">"Cancelar todos os downloads"</string>
+    <string name="download_menu_clear_all">"Limpar lista"</string>
+    <string name="download_clear_dlg_title">"Limpar"</string>
+    <string name="download_clear_dlg_msg">"Todos os itens serão limpos da lista e removidos do cache do navegador."</string>
+    <string name="download_cancel_dlg_title">"Cancelar downloads"</string>
+    <string name="download_cancel_dlg_msg">"Todos os <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> downloads serão cancelados e limpos do histórico de downloads."</string>
+    <string name="download_file_error_dlg_title">"Sem espaço"</string>
+    <string name="download_file_error_dlg_msg">"Não foi possível fazer o download do <xliff:g id="FILENAME">%s</xliff:g>."\n"Libere espaço no seu telefone e tente novamente."</string>
+    <string name="download_failed_generic_dlg_title">"Falha no download"</string>
+    <string name="download_no_sdcard_dlg_title">"Nenhum cartão SD disponível"</string>
+    <string name="download_no_sdcard_dlg_msg">"Um cartão SD é solicitado para fazer download do <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_sdcard_busy_dlg_title">"Cartão SD não disponível"</string>
+    <string name="download_sdcard_busy_dlg_msg">"O cartão SD está ocupado. Para permitir downloads, selecione \"Desativar armazenamento USB\" na notificação."</string>
+    <string name="download_no_application">"Não é possível encontrar um aplicativo para abrir este arquivo."</string>
+    <string name="retry">"Tentar novamente"</string>
+    <string name="no_downloads">"O histórico de downloads está vazio."</string>
+    <string name="download_error">"Falha no download."</string>
+    <string name="download_success">"Download do <xliff:g id="FILE">%s</xliff:g> concluído."</string>
+    <string name="download_running">"Download em andamento..."</string>
+    <string name="download_pending">"Iniciando download…"</string>
+    <string name="download_pending_network">"Aguardando conexão dos dados…"</string>
+    <string name="download_running_paused">"Aguardando conexão dos dados…"</string>
+    <string name="download_canceled">"Download cancelado."</string>
+    <string name="download_not_acceptable">"Não foi possível fazer o download. O conteúdo não é suportado no telefone."</string>
+    <string name="download_file_error">"Não é possível concluir o download. Não há espaço suficiente."</string>
+    <string name="download_length_required">"Não é possível fazer o download. O tamanho do item não pode ser determinado."</string>
+    <string name="download_precondition_failed">"Download interrompido. Não é possível retomar."</string>
+    <string name="activity_instrumentation_test_runner">"Executador de teste do navegador"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Permitir o armazenamento"</string>
+    <string name="query_data_message">"Este site deseja armazenar informações no seu telefone."</string>
+    <string name="location_prompt">"Acesse o seu local"</string>
+    <string name="location_message">"Este site deseja ter acesso ao seu local."</string>
+    <string name="shortcut_prompt">"Criar um atalho"</string>
+    <string name="shortcut_message">"Este site deseja criar um atalho para esta página na sua tela inicial."</string>
+    <string name="settings_message">"A tabela abaixo mostra as permissões concedidas por você a cada site que tentou usar o Gears."</string>
+    <string name="filepicker_message">"Selecionador de arquivos"</string>
+    <string name="image_message">"Imagem escolhida"</string>
+    <string name="settings_title">"Configurações do Gears"</string>
+    <string name="privacy_policy">"Leia a política de privacidade do site para ver como o seu local será usado."</string>
+    <string name="settings_storage_title">"Permitir armazenamento local"</string>
+    <string name="settings_storage_subtitle_on">"Este site pode salvar informações no seu telefone."</string>
+    <string name="settings_storage_subtitle_off">"Este site não pode salvar informações no seu telefone."</string>
+    <string name="settings_location_title">"Permitir detecção de local"</string>
+    <string name="settings_location_subtitle_on">"Este site pode ler o seu local atual."</string>
+    <string name="settings_location_subtitle_off">"Este site não pode ler o seu local atual"</string>
+    <string name="settings_remove_site">"Remover este site do Gears"</string>
+    <string name="settings_empty">"Nenhuma permissão definida"</string>
+    <string name="settings_confirmation_remove_title">"Remover este site"</string>
+    <string name="settings_confirmation_remove">"Todas as permissões serão limpas e quaisquer dados armazenados no seu telefone pelo site serão excluídos."</string>
+    <string name="storage_notification">"Este site armazenará informações neste telefone."\n" Altere esta configuração em:"\n" Configurações -&gt; Configurações do Gears"</string>
+    <string name="storage_notification_alwaysdeny">"Este site nunca armazenará informações neste telefone."\n" Altere esta configuração em:"\n" Configurações -&gt; Configurações do Gears"</string>
+    <string name="location_notification">"Este site pode acessar o seu local atual."\n" Altere esta configuração em:"\n" Configurações -&gt; Configurações do Gears"</string>
+    <string name="location_notification_alwaysdeny">"Este site não acessará o seu local atual."\n" Altere esta configuração em:"\n" Configurações -&gt; Configurações do Gears"</string>
+    <string name="shortcut_notification">"Atalho criado"</string>
+    <string name="permission_button_alwaysdeny">"Nunca permitir"</string>
+    <string name="permission_button_allow">"OK"</string>
+    <string name="permission_button_deny">"Cancelar"</string>
+    <string name="shortcut_button_alwaysdeny">"Nunca permitir"</string>
+    <string name="shortcut_button_allow">"OK"</string>
+    <string name="shortcut_button_deny">"Cancelar"</string>
+    <string name="settings_button_allow">"Aplicar"</string>
+    <string name="settings_button_deny">"Cancelar"</string>
+    <string name="filepicker_button_allow">"OK"</string>
+    <string name="filepicker_button_deny">"Cancelar"</string>
+    <string name="filepicker_path">"caminho:"</string>
+    <string name="filepicker_no_files_selected">"Nenhum arquivo selecionado"</string>
+    <string name="filepicker_one_file_selected">"Um arquivo selecionado"</string>
+    <string name="filepicker_some_files_selected">"arquivos selecionados"</string>
+    <string name="remove">"Remover"</string>
+    <string name="local_storage">"Armazenamento local"</string>
+    <string name="allowed">"Permitido"</string>
+    <string name="denied">"Negado"</string>
+    <string name="unrecognized_dialog_message">"Tipo de caixa de diálogo não reconhecido"</string>
+    <string name="default_button">"OK"</string>
+    <string name="zoom_overview_button_text">"Visão geral"</string>
+</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 71dbefa..bdfb566 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -21,237 +21,248 @@
     <string name="tab_history">"История"</string>
     <string name="added_to_bookmarks">"Добавлено в закладки"</string>
     <string name="removed_from_bookmarks">"Удалено из закладок"</string>
-    <string name="sign_in_to">"Регистрация в <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
-    <string name="username">"Название"</string>
+    <string name="sign_in_to">"Войти в <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+    <string name="username">"Имя"</string>
     <string name="password">"Пароль"</string>
-    <string name="action">"Войти"</string>
+    <string name="action">"Вход"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
     <string name="cancel">"Отмена"</string>
     <string name="ok">"ОК"</string>
   <plurals name="matches_found">
-    <item quantity="zero">"Совпадений нет"</item>
-    <item quantity="one">"1 совпадение"</item>
-    <item quantity="few">"Совпадений: <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item quantity="other">"Совпадений: <xliff:g id="NUMBER">%d</xliff:g>"</item>
+    <item quantity="zero">"Соответствий нет"</item>
+    <item quantity="one">"1 соответствие"</item>
+    <item quantity="few">"Соответствий: <xliff:g id="NUMBER">%d</xliff:g>"</item>
+    <item quantity="other">"Соответствий: <xliff:g id="NUMBER">%d</xliff:g>"</item>
   </plurals>
-    <string name="page_info">"Сведения о странице"</string>
-    <string name="page_info_view">"Просмотреть сведения о странице"</string>
+    <string name="page_info">"Информация о странице"</string>
+    <string name="page_info_view">"Просмотр информации о странице"</string>
     <string name="page_info_address">"Адрес:"</string>
-    <string name="ssl_warnings_header">"Есть проблемы с сертификатом безопасности для этого сайта."</string>
+    <string name="ssl_warnings_header">"У этого сайта проблемы с сертификатом безопасности."</string>
     <string name="ssl_continue">"Продолжить"</string>
-    <string name="security_warning">"Предупреждение о безопасности"</string>
+    <string name="security_warning">"Угроза безопасности"</string>
     <string name="view_certificate">"Просмотреть сертификат"</string>
-    <string name="ssl_untrusted">"Этот сертификат получен из ненадежного центра сертификации."</string>
-    <string name="ssl_mismatch">"Название сайта не соответствует названию сертификата."</string>
+    <string name="ssl_untrusted">"Этот сертификат получен из ненадежных источников."</string>
+    <string name="ssl_mismatch">"Название сайта не соответствует названию в сертификате."</string>
     <string name="ssl_expired">"Срок действия сертификата истек."</string>
-    <string name="ssl_not_yet_valid">"Этот сертификат пока не действителен."</string>
+    <string name="ssl_not_yet_valid">"Данный сертификат еще недействителен."</string>
     <string name="ssl_certificate">"Сертификат безопасности"</string>
-    <string name="ssl_certificate_is_valid">"Это действительный сертификат."</string>
-    <string name="issued_to">"Кому выдан:"</string>
-    <string name="common_name">"Обычное название:"</string>
+    <string name="ssl_certificate_is_valid">"Этот сертификат действителен."</string>
+    <string name="issued_to">"Владелец сертификата:"</string>
+    <string name="common_name">"Стандартное имя:"</string>
     <string name="org_name">"Организация:"</string>
-    <string name="org_unit">"Подразделение:"</string>
-    <string name="issued_by">"Кем выдан:"</string>
+    <string name="org_unit">"Подразделение организации:"</string>
+    <string name="issued_by">"Выпущен:"</string>
     <string name="validity_period">"Срок действия:"</string>
-    <string name="issued_on">"Когда выдан:"</string>
-    <string name="expires_on">"Действителен до:"</string>
-    <string name="retrieving_creds_dlg_msg">"Получение сведений о входе…"</string>
-    <string name="stopping">"Остановка загрузки…"</string>
-    <string name="stop">"Остановить"</string>
+    <string name="issued_on">"Дата издания:"</string>
+    <string name="expires_on">"Дата окончания действия:"</string>
+    <string name="retrieving_creds_dlg_msg">"Получение регистрационной информации..."</string>
+    <string name="stopping">"Остановка..."</string>
+    <string name="stop">"Стоп"</string>
     <string name="reload">"Обновить"</string>
-    <string name="forward">"Вперед"</string>
+    <string name="forward">"Переслать"</string>
     <string name="save">"ОК"</string>
     <string name="do_not_save">"Отмена"</string>
-    <string name="location">"Адрес"</string>
-    <string name="name">"Название"</string>
+    <string name="location">"Место"</string>
+    <string name="name">"Имя"</string>
     <string name="http">"http://"</string>
     <string name="save_to_bookmarks">"Добавить в закладки"</string>
     <string name="edit_bookmark">"Изменить закладку"</string>
-    <string name="create_shortcut_bookmark">"Добавить ярлык на главный экран"</string>
+    <string name="create_shortcut_bookmark">"Добавить ярлык на главную страницу"</string>
     <string name="open_bookmark">"Открыть"</string>
     <string name="remove_bookmark">"Удалить закладку"</string>
     <string name="remove_history_item">"Удалить из истории"</string>
-    <string name="bookmark_saved">"Сохранено в заклкдках."</string>
-    <string name="bookmark_needs_title">"У закладки должно быть название."</string>
-    <string name="bookmark_needs_url">"У закладки должен быть адрес."</string>
+    <string name="bookmark_saved">"Сохранено в закладках."</string>
+    <string name="bookmark_needs_title">"Необходимо указать имя закладки."</string>
+    <string name="bookmark_needs_url">"Необходимо указать место закладки."</string>
     <string name="empty_bookmark">"Невозможно создать пустую закладку."</string>
     <string name="bookmark_url_not_valid">"URL недействителен."</string>
-    <string name="delete_bookmark">"Удаление"</string>
+    <string name="delete_bookmark">"Удалить"</string>
     <string name="bookmark_page">"Добавить в закладки последнюю просмотренную страницу"</string>
     <string name="current_page">"из "</string>
     <string name="delete_bookmark_warning">"Закладка \"<xliff:g id="BOOKMARK">%s</xliff:g>\" будет удалена."</string>
     <string name="open_in_new_window">"Открыть в новом окне"</string>
     <string name="new_window">"Новое окно"</string>
-    <string name="goto_dot">"Выбрать"</string>
+    <string name="goto_dot">"Поиск"</string>
     <string name="find_dot">"Найти на странице"</string>
     <string name="select_dot">"Выбрать текст"</string>
     <string name="view_tabs">"Обзор окон"</string>
     <string name="view_tabs_condensed">"Окна"</string>
-    <string name="tab_picker_title">"Текущие окна"</string>
-    <string name="tab_picker_view_tab">"Просмотреть"</string>
+    <string name="tab_picker_title">"Открытые окна"</string>
+    <string name="tab_picker_view_tab">"Просмотр"</string>
     <string name="tab_picker_new_tab">"Новое окно"</string>
     <string name="tab_picker_remove_tab">"Закрыть"</string>
     <string name="tab_picker_bookmark">"Добавить в закладки"</string>
     <string name="tab_picker_send_url">"Отправить ссылку"</string>
     <string name="bookmarks">"Закладки"</string>
-    <string name="shortcut_bookmark">"Закладка"</string>
+    <string name="shortcut_bookmark">"Добавить в закладки"</string>
     <string name="history">"История"</string>
     <string name="menu_view_download">"Загрузки"</string>
     <string name="share_page">"Отправить страницу"</string>
     <string name="contextmenu_openlink">"Открыть"</string>
     <string name="contextmenu_openlink_newwindow">"Открыть в новом окне"</string>
-    <string name="contextmenu_bookmark_thislink">"Добавить в закладки"</string>
+    <string name="contextmenu_bookmark_thislink">"Добавить ссылку в закладки"</string>
     <string name="contextmenu_savelink">"Сохранить ссылку"</string>
     <string name="contextmenu_sharelink">"Отправить ссылку"</string>
     <string name="contextmenu_copy">"Копировать"</string>
-    <string name="contextmenu_copylink">"Копировать ссылку"</string>
+    <string name="contextmenu_copylink">"Копировать URL ссылки"</string>
     <string name="contextmenu_download_image">"Сохранить изображение"</string>
-    <string name="contextmenu_view_image">"Просмотреть изображение"</string>
-    <string name="contextmenu_dial_dot">"Вызвать…"</string>
-    <string name="contextmenu_add_contact">"Добавить в адресную книгу"</string>
-    <string name="contextmenu_send_mail">"Отправить сообщение электронной почты"</string>
-    <string name="contextmenu_map">"На карте"</string>
-    <string name="clear">"Очистка"</string>
+    <string name="contextmenu_view_image">"Просмотр изображения"</string>
+    <string name="contextmenu_dial_dot">"Набор номера..."</string>
+    <string name="contextmenu_add_contact">"Добавить контакт"</string>
+    <string name="contextmenu_send_mail">"Отправить сообщение по электронной почте"</string>
+    <string name="contextmenu_map">"Карта"</string>
+    <string name="clear">"Очистить"</string>
     <string name="replace">"Заменить"</string>
     <string name="browser_bookmarks_page_bookmarks_text">"Закладки"</string>
     <string name="menu_preferences">"Настройки"</string>
-    <string name="pref_content_title">"Настройки содержания страниц"</string>
-    <string name="pref_content_load_images">"Загружать изображения"</string>
-    <string name="pref_content_load_images_summary">"Показывать изображения на страницах"</string>
-    <string name="pref_content_block_popups">"Заблокировать всплывающие окна"</string>
-    <string name="pref_content_javascript">"Разрешить JavaScript"</string>
+    <string name="pref_content_title">"Настройки содержания страницы"</string>
+    <string name="pref_content_load_images">"Загружать картинки"</string>
+    <string name="pref_content_load_images_summary">"Показывать картинки на веб-страницах"</string>
+    <string name="pref_content_block_popups">"Блокировать всплывающие окна"</string>
+    <string name="pref_content_javascript">"Включить JavaScript"</string>
     <string name="pref_content_open_in_background">"Открывать в фоновом режиме"</string>
-    <string name="pref_content_open_in_background_summary">"Новые окна открываются позади текущего"</string>
+    <string name="pref_content_open_in_background_summary">"Новые окна открываются позади текущего окна"</string>
     <string name="pref_content_homepage">"Выбрать главную страницу"</string>
-    <string name="pref_content_autofit">"Автоподбор размеров страниц"</string>
-    <string name="pref_content_autofit_summary">"Форматировать веб-страницы по размеру экрана"</string>
+    <string name="pref_content_autofit">"Подгонять страницы"</string>
+    <string name="pref_content_autofit_summary">"Подгонять веб-страницы под размер экрана"</string>
     <string name="pref_privacy_title">"Настройки конфиденциальности"</string>
     <string name="pref_privacy_clear_cache">"Очистить кэш"</string>
-    <string name="pref_privacy_clear_cache_summary">"Удалить все кэшированные страницы"</string>
+    <string name="pref_privacy_clear_cache_summary">"Удалить все кэшированное содержание страницы"</string>
     <string name="pref_privacy_clear_cache_dlg">"Кэш будет очищен."</string>
-    <string name="pref_privacy_clear_cookies">"Удалить все данные cookie"</string>
-    <string name="pref_privacy_clear_cookies_summary">"Удалить все файлы cookie браузера"</string>
+    <string name="pref_privacy_clear_cookies">"Очистить все данные cookie"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Очистить все cookie браузера"</string>
     <string name="pref_privacy_clear_cookies_dlg">"Все cookie будут удалены."</string>
     <string name="pref_privacy_clear_history">"Очистить историю"</string>
-    <string name="pref_privacy_clear_history_summary">"Очистить историю посещений браузера"</string>
-    <string name="pref_privacy_clear_history_dlg">"История посещений браузера будет удалена."</string>
-    <string name="pref_privacy_clear_form_data">"Удалить данные форм"</string>
-    <string name="pref_privacy_clear_form_data_summary">"Удалить все сохраненные данные форм"</string>
-    <string name="pref_privacy_clear_form_data_dlg">"Все сохраненные данные форм будут удалены."</string>
-    <string name="pref_privacy_clear_passwords">"Удалить пароли"</string>
+    <string name="pref_privacy_clear_history_summary">"Очистить историю браузера"</string>
+    <string name="pref_privacy_clear_history_dlg">"История браузера будет очищена."</string>
+    <string name="pref_privacy_clear_form_data">"Очистить данные формы"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Очистить все данные сохраненных форм"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Все данные сохраненных форм будут удалены."</string>
+    <string name="pref_privacy_clear_passwords">"Очистить пароли"</string>
     <string name="pref_privacy_clear_passwords_summary">"Удалить все сохраненные пароли"</string>
     <string name="pref_privacy_clear_passwords_dlg">"Все сохраненные пароли будут удалены."</string>
     <string name="pref_security_title">"Настройки безопасности"</string>
-    <string name="pref_security_remember_passwords">"Запоминать пароли"</string>
-    <string name="pref_security_remember_passwords_summary">"Сохранять имена пользователя и пароли для веб-сайтов"</string>
-    <string name="pref_security_save_form_data">"Запоминать данные форм"</string>
-    <string name="pref_security_save_form_data_summary">"Запоминать данные форм для дальнейшего использования"</string>
-    <string name="pref_security_show_security_warning">"Показывать предупреждения о безопасности"</string>
-    <string name="pref_security_show_security_warning_summary">"Показывать предупреждение при наличии проблем с безопасностью сайта"</string>
+    <string name="pref_security_remember_passwords">"Сохранять пароли"</string>
+    <string name="pref_security_remember_passwords_summary">"Сохранять имена пользователей и пароли для веб-сайтов"</string>
+    <string name="pref_security_save_form_data">"Сохранять данные форм"</string>
+    <string name="pref_security_save_form_data_summary">"Запоминать введенные данные для дальнейшего использования"</string>
+    <string name="pref_security_show_security_warning">"Показывать предупреждения безопасности"</string>
+    <string name="pref_security_show_security_warning_summary">"Сообщать о найденных проблемах с безопасностью сайта"</string>
     <string name="pref_security_accept_cookies">"Разрешить cookie"</string>
-    <string name="pref_security_accept_cookies_summary">"Разрешить сайтам сохранять и считывать данные cookie"</string>
-    <string name="pref_text_size">"Выбрать размер текста"</string>
+    <string name="pref_security_accept_cookies_summary">"Разрешить сайтам сохранять и читать файлы cookie"</string>
+    <string name="pref_text_size">"Размер текста"</string>
   <string-array name="pref_text_size_choices">
-    <item>"Очень мелкий"</item>
     <item>"Мелкий"</item>
-    <item>"Обычный"</item>
-    <item>"Крупный"</item>
-    <item>"Очень крупный"</item>
+    <item>"Маленький"</item>
+    <item>"Средний"</item>
+    <item>"Большой"</item>
+    <item>"Огромный"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"Размер текста"</string>
-    <string name="pref_extras_title">"Дополнительные настройки"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Расширенные настройки"</string>
     <string name="pref_extras_gears_enable">"Включить Gears"</string>
     <string name="pref_extras_gears_enable_summary">"Приложения, расширяющие возможности браузера"</string>
     <string name="pref_extras_gears_settings">"Настройки Gears"</string>
     <string name="pref_plugin_installed">"Список плагинов"</string>
     <string name="pref_plugin_installed_empty_list">"Нет установленных плагинов."</string>
     <string name="pref_extras_gears_settings_summary">"Приложения, расширяющие возможности браузера"</string>
-    <string name="pref_extras_reset_default">"Восстановить значения по умолчанию"</string>
-    <string name="pref_extras_reset_default_summary">"Удалить все данные браузера и восстановить настройки по умолчанию"</string>
-    <string name="pref_extras_reset_default_dlg">"Все данные бразуера будут удалены, а для настроек будут восстановлены значения по умолчанию."</string>
-    <string name="pref_extras_reset_default_dlg_title">"Восстановить значения по умолчанию"</string>
+    <string name="pref_extras_reset_default">"Восстановить настройки по умолчанию"</string>
+    <string name="pref_extras_reset_default_summary">"Очистить все данные браузера и восстановить все настройки по умолчанию"</string>
+    <string name="pref_extras_reset_default_dlg">"Все данные браузера будут удалены, настройки по умолчанию будут восстановлены."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Восстановить настройки по умолчанию"</string>
     <string name="pref_development_title">"Отладка"</string>
-    <string name="pref_default_text_encoding">"Выбрать кодировку текста"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
   <string-array name="pref_default_text_encoding_choices">
-    <item>"Латиница-1 (ISO-8859-1)"</item>
-    <item>"Юникод (UTF-8)"</item>
+    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
     <item>"Японская (ISO-2022-JP)"</item>
     <item>"Японская (SHIFT_JIS)"</item>
     <item>"Японская (EUC-JP)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle">"Кодировка текста"</string>
-    <string name="pref_default_text_encoding_default">"Латиница-1"</string>
+    <string name="pref_default_text_encoding_default">"Latin-1"</string>
     <string name="browserFrameRedirect">"Перенаправление"</string>
-    <string name="browserFrame307Post">"С этой веб-страницы выполняется перенаправление. Отправить введенные данные формы по новому адресу?"</string>
-    <string name="browserFrameNetworkErrorLabel">"Неполадка подключения для передачи данных"</string>
+    <string name="browserFrame307Post">"Вы перенаправлены с этой страницы. Отправить ваши данные формы в новое место?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Проблема с подключением"</string>
     <string name="browserFrameFileErrorLabel">"Проблема с файлом"</string>
     <string name="browserFrameFormResubmitLabel">"Подтверждение"</string>
-    <string name="browserFrameFormResubmitMessage">"Страница, которую вы пытаетесь просмотреть, содержит отправленные ранее данные (\"POSTDATA\"). При повторной отправке данных выполняемое формой действие (например поиск или онлайн-покупка) будет повторено."</string>
-    <string name="loadSuspendedTitle">"Нет сетевого подключения"</string>
-    <string name="loadSuspended">"Загрузка страницы будет продолжена после восстановления подключения."</string>
+    <string name="browserFrameFormResubmitMessage">"Страница, которую вы пытаетесь просмотреть, содержит уже отправленные данные (\"POSTDATA\"). Если отправить их еще раз, произойдет повтор всех действий, которые форма выполнила на странице (например, поиск или покупка через Интернет)."</string>
+    <string name="loadSuspendedTitle">"Сетевое подключение отсутствует"</string>
+    <string name="loadSuspended">"Загрузка страницы продолжится после восстановления соединения."</string>
     <string name="clear_history">"Очистить историю"</string>
     <string name="browser_history">"Недавно посещенные страницы"</string>
-    <string name="empty_history">"История бразуера пуста."</string>
+    <string name="empty_history">"История браузера пуста."</string>
     <string name="add_new_bookmark">"Добавить закладку…"</string>
-    <string name="no_database">"Нет базы данных!"</string>
-    <string name="search_hint">"Введите веб-адрес"</string>
-    <string name="search_button_text">"Перейти"</string>
+    <string name="no_database">"База данных отсутствует!"</string>
+    <string name="search_hint">"Укажите адрес в Интернете"</string>
+    <string name="search_button_text">"Поиск"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"Внимание"</string>
     <string name="popup_window_attempt">"Этот сайт пытается открыть всплывающее окно."</string>
     <string name="allow">"Разрешить"</string>
     <string name="block">"Заблокировать"</string>
-    <string name="too_many_windows_dialog_title">"Предельное количество окон"</string>
-    <string name="too_many_windows_dialog_message">"Открыть новое окно невозможно, потому что открыто максимальное количество окон."</string>
+    <string name="too_many_windows_dialog_title">"Открыто максимальное число окон"</string>
+    <string name="too_many_windows_dialog_message">"Открыто максимальное число окон, поэтому открыть новое окно невозможно."</string>
     <string name="too_many_subwindows_dialog_title">"Всплывающее окно уже открыто"</string>
-    <string name="too_many_subwindows_dialog_message">"Не удалось открыть всплывающее окно, потому что нельзя открыть больше одного такого окна одновременно."</string>
+    <string name="too_many_subwindows_dialog_message">"Невозможно открыть более одного всплывающего окна одновременно."</string>
     <string name="download_title">"История загрузок"</string>
-    <string name="download_unknown_filename">"&lt;Неизвестно&gt;"</string>
+    <string name="download_unknown_filename">"&lt;неизвестно&gt;"</string>
     <string name="download_menu_open">"Открыть"</string>
     <string name="download_menu_clear">"Удалить из списка"</string>
     <string name="download_menu_cancel">"Отменить загрузку"</string>
     <string name="download_menu_cancel_all">"Отменить все загрузки"</string>
     <string name="download_menu_clear_all">"Очистить список"</string>
-    <string name="download_clear_dlg_title">"Очистка"</string>
-    <string name="download_clear_dlg_msg">"Все элементы будут удалены из списка и кэша браузера."</string>
-    <string name="download_cancel_dlg_title">"Отмена загрузок"</string>
+    <string name="download_clear_dlg_title">"Очистить"</string>
+    <string name="download_clear_dlg_msg">"Будут удалены все данные из списка и кэша браузера."</string>
+    <string name="download_cancel_dlg_title">"Отменить загрузки"</string>
     <string name="download_cancel_dlg_msg">"Все загрузки (<xliff:g id="DOWNLOAD_COUNT">%d</xliff:g>) будут отменены и удалены из истории загрузок."</string>
     <string name="download_file_error_dlg_title">"Недостаточно места"</string>
-    <string name="download_file_error_dlg_msg">"Не удалось загрузить <xliff:g id="FILENAME">%s</xliff:g>."\n"Освободите пространство на телефоне и повторите попытку."</string>
-    <string name="download_failed_generic_dlg_title">"Загрузка не удалась"</string>
-    <string name="download_no_sdcard_dlg_title">"Нет карты SD"</string>
-    <string name="download_no_sdcard_dlg_msg">"Для загрузки файла <xliff:g id="FILENAME">%s</xliff:g> нужна карта SD."</string>
-    <string name="download_sdcard_busy_dlg_title">"Карта SD недоступна"</string>
+    <string name="download_file_error_dlg_msg">"Невозможно загрузить <xliff:g id="FILENAME">%s</xliff:g>."\n"Освободите место в памяти телефона и повторите попытку."</string>
+    <string name="download_failed_generic_dlg_title">"Ошибка загрузки"</string>
+    <string name="download_no_sdcard_dlg_title">"SD-карта отсутствует"</string>
+    <string name="download_no_sdcard_dlg_msg">"Для загрузки <xliff:g id="FILENAME">%s</xliff:g> необходима SD-карта."</string>
+    <string name="download_sdcard_busy_dlg_title">"SD-карта недоступна"</string>
     <string name="download_sdcard_busy_dlg_msg">"Карта SD занята. Чтобы разрешить загрузки, выберите \"Выключить USB-накопитель\" в уведомлении."</string>
-    <string name="download_no_application">"Не удалось найти приложение для открытия этого файла."</string>
-    <string name="retry">"Повторить"</string>
+    <string name="download_no_application">"Приложение для открытия этого файла не найдено."</string>
+    <string name="retry">"Повторить попытку"</string>
     <string name="no_downloads">"История загрузок пуста."</string>
-    <string name="download_error">"Загрузка безуспешна."</string>
-    <string name="download_success">"Загрузка файла <xliff:g id="FILE">%s</xliff:g> завершена."</string>
-    <string name="download_running">"Выполняется загрузка…"</string>
-    <string name="download_pending">"Загрузка начинается…"</string>
+    <string name="download_error">"Ошибка загрузки."</string>
+    <string name="download_success">"Загрузка <xliff:g id="FILE">%s</xliff:g> завершена."</string>
+    <string name="download_running">"Загрузка..."</string>
+    <string name="download_pending">"Начинается загрузка…"</string>
     <string name="download_pending_network">"Ожидание подключения для передачи данных…"</string>
     <string name="download_running_paused">"Ожидание подключения для передачи данных…"</string>
     <string name="download_canceled">"Загрузка отменена."</string>
     <string name="download_not_acceptable">"Загрузка невозможна. Содержание не поддерживается телефоном."</string>
     <string name="download_file_error">"Невозможно завершить загрузку. Недостаточно места."</string>
-    <string name="download_length_required">"Загрузка невозможна. Не удается определить размер элемента."</string>
-    <string name="download_precondition_failed">"Загрузка прервана и не может быть продолжена."</string>
-    <string name="activity_instrumentation_test_runner">"Проверка браузера"</string>
-    <string name="search_google">"Поиск в Google"</string>
-    <string name="permlab_readHistoryBookmarks">"считывать историю и закладки браузера"</string>
-    <string name="permdesc_readHistoryBookmarks">"Позволяет приложению считывать все URL, открытые через браузер, и все закладки браузера."</string>
-    <string name="permlab_writeHistoryBookmarks">"записывать историю и закладки браузера"</string>
-    <string name="permdesc_writeHistoryBookmarks">"Позволяет приложению изменять сохраненные в телефоне историю и закладки браузера. Вредоносное ПО сможет стирать или изменять данные браузера."</string>
+    <string name="download_length_required">"Загрузка невозможна. Размер файла не определен."</string>
+    <string name="download_precondition_failed">"Загрузка прервана и не может быть возобновлена."</string>
+    <string name="activity_instrumentation_test_runner">"Тестирование браузера"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
     <string name="query_data_prompt">"Разрешить сохранение"</string>
     <string name="query_data_message">"Этот веб-сайт пытается сохранить данные на вашем телефоне."</string>
     <string name="location_prompt">"Доступ к вашему местоположению"</string>
     <string name="location_message">"Этот веб-сайт пытается получить доступ к данным о вашем местоположении."</string>
     <string name="shortcut_prompt">"Создать ярлык"</string>
     <string name="shortcut_message">"Этот веб-сайт пытается создать ярлык данной страницы на главном экране телефона."</string>
-    <string name="settings_message">"В таблице ниже показаны разрешения, которые вы дали сайтам, пытавшимся использовать Gears."</string>
+    <string name="settings_message">"В таблице ниже показаны разрешения, установленные вами для всех сайтов, пытавшихся использовать Gears."</string>
     <string name="filepicker_message">"Выбор файлов"</string>
     <string name="image_message">"Выбранное изображение"</string>
     <string name="settings_title">"Настройки Gears"</string>
-    <string name="privacy_policy">"Прочитайте политику конфиденциальности сайта, чтобы узнать, как будут использованы данные о вашем местоположении."</string>
+    <string name="privacy_policy">"Ознакомьтесь с политикой конфиденциальности сайта, чтобы узнать, как будет использоваться информация о вашем местоположении."</string>
     <string name="settings_storage_title">"Разрешить сохранение в памяти"</string>
     <string name="settings_storage_subtitle_on">"Этот сайт может сохранять данные на вашем телефоне"</string>
     <string name="settings_storage_subtitle_off">"Этот сайт не может сохранять данные на вашем телефоне"</string>
@@ -280,10 +291,10 @@
     <string name="filepicker_path">"путь:"</string>
     <string name="filepicker_no_files_selected">"Файлы не выбраны"</string>
     <string name="filepicker_one_file_selected">"Выбран один файл"</string>
-    <string name="filepicker_some_files_selected">"файлов выбрано"</string>
+    <string name="filepicker_some_files_selected">"файл(ов) выбрано"</string>
     <string name="remove">"Удалить"</string>
-    <string name="local_storage">"Локальное хранение"</string>
-    <string name="allowed">"Разрешено"</string>
+    <string name="local_storage">"Сохранение в памяти"</string>
+    <string name="allowed">"Разрешенные"</string>
     <string name="denied">"Запрещено"</string>
     <string name="unrecognized_dialog_message">"Неизвестный тип диалога"</string>
     <string name="default_button">"ОК"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
new file mode 100644
index 0000000..b38dc08
--- /dev/null
+++ b/res/values-sv/strings.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Webbläsare"</string>
+    <string name="tab_bookmarks">"Bokmärken"</string>
+    <string name="tab_most_visited">"Mest besökta"</string>
+    <string name="tab_history">"Historik"</string>
+    <string name="added_to_bookmarks">"Har lagts till i Bokmärken"</string>
+    <string name="removed_from_bookmarks">"Har tagits bort från Bokmärken"</string>
+    <string name="sign_in_to">"Logga in på <xliff:g id="HOSTNAME">%s1</xliff:g> <xliff:g id="REALM">%s2</xliff:g>"</string>
+    <string name="username">"Namn"</string>
+    <string name="password">"Lösenord"</string>
+    <string name="action">"Logga in"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"Avbryt"</string>
+    <string name="ok">"OK"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Inga träffar"</item>
+    <item quantity="one">"1 träff"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> träffar"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> träffar"</item>
+  </plurals>
+    <string name="page_info">"Sidinformation"</string>
+    <string name="page_info_view">"Visa sidinformation"</string>
+    <string name="page_info_address">"Adress:"</string>
+    <string name="ssl_warnings_header">"Det har uppstått problem med säkerhetscertifikatet för den här webbplatsen."</string>
+    <string name="ssl_continue">"Fortsätt"</string>
+    <string name="security_warning">"Säkerhetsvarning"</string>
+    <string name="view_certificate">"Visa certifikat"</string>
+    <string name="ssl_untrusted">"Detta certifikat kommer inte från en betrodd utfärdare."</string>
+    <string name="ssl_mismatch">"Webbplatsens namn stämmer inte med namnet på certifikatet."</string>
+    <string name="ssl_expired">"Certifikatet har upphört att gälla."</string>
+    <string name="ssl_not_yet_valid">"Certifikatet är inte giltigt än."</string>
+    <string name="ssl_certificate">"Säkerhetscertifikat"</string>
+    <string name="ssl_certificate_is_valid">"Detta certifikat är giltigt."</string>
+    <string name="issued_to">"Utfärdat till:"</string>
+    <string name="common_name">"Nätverksnamn:"</string>
+    <string name="org_name">"Organisation:"</string>
+    <string name="org_unit">"Organisationsenhet:"</string>
+    <string name="issued_by">"Utfärdat av:"</string>
+    <string name="validity_period">"Giltighet:"</string>
+    <string name="issued_on">"Utfärdat den:"</string>
+    <string name="expires_on">"Upphör att gälla:"</string>
+    <string name="retrieving_creds_dlg_msg">"Hämtar inloggningsuppgifter…"</string>
+    <string name="stopping">"Avbryter…"</string>
+    <string name="stop">"Stoppa"</string>
+    <string name="reload">"Uppdatera"</string>
+    <string name="forward">"Vidarebefordra"</string>
+    <string name="save">"OK"</string>
+    <string name="do_not_save">"Avbryt"</string>
+    <string name="location">"Plats"</string>
+    <string name="name">"Namn"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Bokmärke"</string>
+    <string name="edit_bookmark">"Redigera bokmärke"</string>
+    <string name="create_shortcut_bookmark">"Lägg till genväg till startsidan"</string>
+    <string name="open_bookmark">"Öppna"</string>
+    <string name="remove_bookmark">"Ta bort bokmärke"</string>
+    <string name="remove_history_item">"Ta bort från historiken"</string>
+    <string name="bookmark_saved">"Bokmärke sparat."</string>
+    <string name="bookmark_needs_title">"Du måste ange ett namn på bokmärket."</string>
+    <string name="bookmark_needs_url">"Du måste ange en plats för bokmärket."</string>
+    <string name="empty_bookmark">"Det går inte att skapa tomma bokmärken."</string>
+    <string name="bookmark_url_not_valid">"Webbadressen är ogiltig."</string>
+    <string name="delete_bookmark">"Ta bort"</string>
+    <string name="bookmark_page">"Skapa bokmärke för den senast visade sidan"</string>
+    <string name="current_page">"från "</string>
+    <string name="delete_bookmark_warning">"Bokmärket <xliff:g id="BOOKMARK">%s</xliff:g> tas bort."</string>
+    <string name="open_in_new_window">"Öppna i nytt fönster"</string>
+    <string name="new_window">"Nytt fönster"</string>
+    <string name="goto_dot">"Kör"</string>
+    <string name="find_dot">"Sök på sidan"</string>
+    <string name="select_dot">"Markera text"</string>
+    <string name="view_tabs">"Översikt över fönster"</string>
+    <string name="view_tabs_condensed">"Fönster"</string>
+    <string name="tab_picker_title">"Aktuellt fönster"</string>
+    <string name="tab_picker_view_tab">"Visa"</string>
+    <string name="tab_picker_new_tab">"Nytt fönster"</string>
+    <string name="tab_picker_remove_tab">"Stäng"</string>
+    <string name="tab_picker_bookmark">"Bokmärke"</string>
+    <string name="tab_picker_send_url">"Dela länk"</string>
+    <string name="bookmarks">"Bokmärken"</string>
+    <string name="shortcut_bookmark">"Bokmärke"</string>
+    <string name="history">"Historik"</string>
+    <string name="menu_view_download">"Hämtningar"</string>
+    <string name="share_page">"Dela sida"</string>
+    <string name="contextmenu_openlink">"Öppna"</string>
+    <string name="contextmenu_openlink_newwindow">"Öppna i nytt fönster"</string>
+    <string name="contextmenu_bookmark_thislink">"Skapa ett bokmärke av länken"</string>
+    <string name="contextmenu_savelink">"Spara länk"</string>
+    <string name="contextmenu_sharelink">"Dela länk"</string>
+    <string name="contextmenu_copy">"Kopiera"</string>
+    <string name="contextmenu_copylink">"Kopiera länkens webbadress"</string>
+    <string name="contextmenu_download_image">"Spara bild"</string>
+    <string name="contextmenu_view_image">"Visa bild"</string>
+    <string name="contextmenu_dial_dot">"Ring..."</string>
+    <string name="contextmenu_add_contact">"Lägg till kontakt"</string>
+    <string name="contextmenu_send_mail">"Skicka e-post"</string>
+    <string name="contextmenu_map">"Karta"</string>
+    <string name="clear">"Rensa"</string>
+    <string name="replace">"Ersätt"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Bokmärken"</string>
+    <string name="menu_preferences">"Inställningar"</string>
+    <string name="pref_content_title">"Inställningar för sidinnehåll"</string>
+    <string name="pref_content_load_images">"Överför bilder"</string>
+    <string name="pref_content_load_images_summary">"Visa bilder på webbsidor"</string>
+    <string name="pref_content_block_popups">"Blockera popup-fönster"</string>
+    <string name="pref_content_javascript">"Aktivera JavaScript"</string>
+    <string name="pref_content_open_in_background">"Öppen i bakgrunden"</string>
+    <string name="pref_content_open_in_background_summary">"Ett nytt fönster öppnas bakom det aktuella"</string>
+    <string name="pref_content_homepage">"Ange startsida"</string>
+    <string name="pref_content_autofit">"Autoanpassa sidor"</string>
+    <string name="pref_content_autofit_summary">"Anpassa webbsidor efter skärmen"</string>
+    <string name="pref_privacy_title">"Sekretessinställningar"</string>
+    <string name="pref_privacy_clear_cache">"Rensa cacheminne"</string>
+    <string name="pref_privacy_clear_cache_summary">"Ta bort allt cachelagrat sidinnehåll"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Cacheminnet kommer att rensas."</string>
+    <string name="pref_privacy_clear_cookies">"Ta bort alla cookie-data"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Ta bort alla webbläsarens cookies"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Alla cookies tas bort."</string>
+    <string name="pref_privacy_clear_history">"Rensa historik"</string>
+    <string name="pref_privacy_clear_history_summary">"Rensa webbläsarhistoriken"</string>
+    <string name="pref_privacy_clear_history_dlg">"Webbläsarhistoriken kommer att tas bort."</string>
+    <string name="pref_privacy_clear_form_data">"Rensa data i formulär"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Rensa data från alla sparade formulär"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Alla sparade formulär kommer att rensas."</string>
+    <string name="pref_privacy_clear_passwords">"Ta bort lösenord"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Ta bort alla sparade lösenord"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Alla sparade lösenord tas bort."</string>
+    <string name="pref_security_title">"Säkerhetsinställningar"</string>
+    <string name="pref_security_remember_passwords">"Kom ihåg lösenord"</string>
+    <string name="pref_security_remember_passwords_summary">"Spara användarnamn och lösenord på webbplatser"</string>
+    <string name="pref_security_save_form_data">"Spara data i formulär"</string>
+    <string name="pref_security_save_form_data_summary">"Kom ihåg data som jag anger i formulär för senare bruk"</string>
+    <string name="pref_security_show_security_warning">"Visa säkerhetsvarningar"</string>
+    <string name="pref_security_show_security_warning_summary">"Visa varningar om det uppstår problem med en webbplats säkerhet"</string>
+    <string name="pref_security_accept_cookies">"Acceptera cookies"</string>
+    <string name="pref_security_accept_cookies_summary">"Tillåt att webbplatser sparar och läser cookie-data"</string>
+    <!-- no translation found for pref_text_size (3827031324346612208) -->
+    <skip />
+  <string-array name="pref_text_size_choices">
+    <item>"Pytteliten"</item>
+    <item>"Liten"</item>
+    <item>"Normal"</item>
+    <item>"Stor"</item>
+    <item>"Mycket stor"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Textstorlek"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Avancerade inställningar"</string>
+    <string name="pref_extras_gears_enable">"Aktivera Gears"</string>
+    <string name="pref_extras_gears_enable_summary">"Program som ger utökade webbläsarfunktioner"</string>
+    <string name="pref_extras_gears_settings">"Inställningar för Gears"</string>
+    <string name="pref_plugin_installed">"Lista över insticksprogram"</string>
+    <string name="pref_plugin_installed_empty_list">"Inga insticksprogram har installerats."</string>
+    <string name="pref_extras_gears_settings_summary">"Program som ger utökade webbläsarfunktioner"</string>
+    <string name="pref_extras_reset_default">"Återställ standardinställningarna"</string>
+    <string name="pref_extras_reset_default_summary">"Ta bort alla data i webbläsaren och återställ standardinställningarna"</string>
+    <string name="pref_extras_reset_default_dlg">"Alla data i webbläsaren tas bort och standardinställningarna återställs."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Återställ standardinställningarna"</string>
+    <string name="pref_development_title">"Felsökning"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Japansk (ISO-2022-JP)"</item>
+    <item>"Japansk (SHIFT_JIS)"</item>
+    <item>"Japansk (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Textkodning"</string>
+    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="browserFrameRedirect">"Omdirigera"</string>
+    <string name="browserFrame307Post">"Den här webbsidan omdirigeras. Vill du skicka uppgifterna i formuläret till den nya platsen?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Problem med dataanslutning"</string>
+    <string name="browserFrameFileErrorLabel">"Problem med filen"</string>
+    <string name="browserFrameFormResubmitLabel">"Bekräfta"</string>
+    <string name="browserFrameFormResubmitMessage">"Sidan du försöker öppna innehåller data som redan har skickats (POSTDATA). Om du skickar uppgifterna igen kommer alla åtgärder i formuläret på sidan (till exempel sökningar eller onlineköp) att utföras en gång till."</string>
+    <string name="loadSuspendedTitle">"Ingen nätverksanslutning"</string>
+    <string name="loadSuspended">"Sidan fortsätter att läsas in när anslutningen har återställts."</string>
+    <string name="clear_history">"Rensa historik"</string>
+    <string name="browser_history">"Nyligen besökta sidor"</string>
+    <string name="empty_history">"Det finns ingen webbläsarhistorik."</string>
+    <string name="add_new_bookmark">"Lägg till bokmärke…"</string>
+    <string name="no_database">"Ingen databas!"</string>
+    <string name="search_hint">"Ange webbadress"</string>
+    <string name="search_button_text">"Kör"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Obs!"</string>
+    <string name="popup_window_attempt">"Webbplatsen försöker öppna ett popup-fönster."</string>
+    <string name="allow">"Tillåt"</string>
+    <string name="block">"Blockera"</string>
+    <string name="too_many_windows_dialog_title">"Det går inte att öppna fler fönster"</string>
+    <string name="too_many_windows_dialog_message">"Det gick inte att öppna ett nytt fönster. Högsta antalet fönster är redan öppna."</string>
+    <string name="too_many_subwindows_dialog_title">"Ett popup-fönster är redan öppet"</string>
+    <string name="too_many_subwindows_dialog_message">"Det gick inte att öppna ett nytt popup-fönster. Endast ett fönster i taget kan vara öppet."</string>
+    <string name="download_title">"Hämtningshistorik"</string>
+    <string name="download_unknown_filename">"&lt;Okänd&gt;"</string>
+    <string name="download_menu_open">"Öppna"</string>
+    <string name="download_menu_clear">"Ta bort från listan"</string>
+    <string name="download_menu_cancel">"Avbryt hämtning"</string>
+    <string name="download_menu_cancel_all">"Avbryt alla hämtningar"</string>
+    <string name="download_menu_clear_all">"Rensa listan"</string>
+    <string name="download_clear_dlg_title">"Rensa"</string>
+    <string name="download_clear_dlg_msg">"Alla objekt tas bort från listan och från webbläsarens cacheminne."</string>
+    <string name="download_cancel_dlg_title">"Avbryt hämtningar"</string>
+    <string name="download_cancel_dlg_msg">"Alla <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> hämtningar avbryts och tas bort från hämtningshistoriken."</string>
+    <string name="download_file_error_dlg_title">"Slut på ledigt diskutrymme"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g> gick inte att hämta."\n"Frigör lite utrymme i telefonen och försök igen."</string>
+    <string name="download_failed_generic_dlg_title">"Det gick inte att hämta"</string>
+    <string name="download_no_sdcard_dlg_title">"Inget SD-kort"</string>
+    <string name="download_no_sdcard_dlg_msg">"Du behöver ett SD-kort för att hämta <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_sdcard_busy_dlg_title">"SD-kortet är inte tillgängligt"</string>
+    <string name="download_sdcard_busy_dlg_msg">"SD-kortet är upptaget. Om du vill tillåta hämtning väljer du Inaktivera USB-lagring i meddelandet."</string>
+    <string name="download_no_application">"Vi hittade inget program som kunde öppna filen."</string>
+    <string name="retry">"Försök igen"</string>
+    <string name="no_downloads">"Det finns ingen hämtningshistorik."</string>
+    <string name="download_error">"Det gick inte att hämta."</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> har hämtats."</string>
+    <string name="download_running">"Hämtar..."</string>
+    <string name="download_pending">"Startar hämtning…"</string>
+    <string name="download_pending_network">"Väntar på dataanslutning…"</string>
+    <string name="download_running_paused">"Väntar på dataanslutning…"</string>
+    <string name="download_canceled">"Hämtningen avbröts."</string>
+    <string name="download_not_acceptable">"Det gick inte att hämta. Innehållet stöds inte på telefonen."</string>
+    <string name="download_file_error">"Det går inte att hämta. Det finns inte tillräckligt med utrymme."</string>
+    <string name="download_length_required">"Det går inte att hämta eftersom objektets storlek inte kan avläsas."</string>
+    <string name="download_precondition_failed">"Hämtningen avbröts. Den kan inte återupptas."</string>
+    <string name="activity_instrumentation_test_runner">"Testprogram för webbläsaren"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Tillåt lagring"</string>
+    <string name="query_data_message">"Den här webbplatsen vill spara information i din telefon."</string>
+    <string name="location_prompt">"Få åtkomst till din plats"</string>
+    <string name="location_message">"Webbplatsen vill ha åtkomst till din plats."</string>
+    <string name="shortcut_prompt">"Skapa en genväg"</string>
+    <string name="shortcut_message">"Webbplatsen vill skapa en genväg till den här sidan på din startsida."</string>
+    <string name="settings_message">"Tabellen nedan visar vilka behörigheter du har beviljat webbplatserna som har försökt använda Gears."</string>
+    <string name="filepicker_message">"Filväljaren"</string>
+    <string name="image_message">"Vald bild"</string>
+    <string name="settings_title">"Inställningar för Gears"</string>
+    <string name="privacy_policy">"Läs webbplatsens sekretesspolicy om du vill veta hur din plats kommer att användas."</string>
+    <string name="settings_storage_title">"Tillåt lokal lagring"</string>
+    <string name="settings_storage_subtitle_on">"Webbplatsen kan spara information i din telefon"</string>
+    <string name="settings_storage_subtitle_off">"Webbplatsen kan inte spara information i din telefon"</string>
+    <string name="settings_location_title">"Tillåt identifiering av plats"</string>
+    <string name="settings_location_subtitle_on">"Webbplatsen kan läsa din aktuella plats"</string>
+    <string name="settings_location_subtitle_off">"Webbplatsen kan inte läsa din aktuella plats"</string>
+    <string name="settings_remove_site">"Ta bort webbplatsen från Gears"</string>
+    <string name="settings_empty">"Ingen behörighet har angetts"</string>
+    <string name="settings_confirmation_remove_title">"Ta bort webbplatsen"</string>
+    <string name="settings_confirmation_remove">"Alla behörigheter och alla data som webbplatsen sparat i telefonen tas bort."</string>
+    <string name="storage_notification">"Webbplatsen sparar information på den här telefonen."\n" Ändra inställningen i:"\n" Inställningar -&gt; Inställningar för Gears"</string>
+    <string name="storage_notification_alwaysdeny">"Webbplatsen sparar aldrig information på den här telefonen."\n" Ändra inställningen i:"\n" Inställningar -&gt; Inställningar för Gears"</string>
+    <string name="location_notification">"Webbplatsen har åtkomst till din aktuella plats."\n" Ändra inställningen i:"\n" Inställningar -&gt; Inställningar för Gears"</string>
+    <string name="location_notification_alwaysdeny">"Webbplatsen har inte åtkomst till din aktuella plats."\n" Ändra inställningen i:"\n" Inställningar -&gt; Inställningar för Gears"</string>
+    <string name="shortcut_notification">"Genväg har skapats"</string>
+    <string name="permission_button_alwaysdeny">"Tillåt aldrig"</string>
+    <string name="permission_button_allow">"OK"</string>
+    <string name="permission_button_deny">"Avbryt"</string>
+    <string name="shortcut_button_alwaysdeny">"Tillåt aldrig"</string>
+    <string name="shortcut_button_allow">"OK"</string>
+    <string name="shortcut_button_deny">"Avbryt"</string>
+    <string name="settings_button_allow">"Tillämpa"</string>
+    <string name="settings_button_deny">"Avbryt"</string>
+    <string name="filepicker_button_allow">"OK"</string>
+    <string name="filepicker_button_deny">"Avbryt"</string>
+    <string name="filepicker_path">"sökväg:"</string>
+    <string name="filepicker_no_files_selected">"Inga filer har valts"</string>
+    <string name="filepicker_one_file_selected">"En fil har valts"</string>
+    <string name="filepicker_some_files_selected">"valda filer"</string>
+    <string name="remove">"Ta bort"</string>
+    <string name="local_storage">"Lokal lagring"</string>
+    <string name="allowed">"Tillåts"</string>
+    <string name="denied">"Nekad"</string>
+    <string name="unrecognized_dialog_message">"Okänd dialogtyp"</string>
+    <string name="default_button">"OK"</string>
+    <string name="zoom_overview_button_text">"Översikt"</string>
+</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
new file mode 100644
index 0000000..b5dc05b
--- /dev/null
+++ b/res/values-tr/strings.xml
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="application_name">"Tarayıcı"</string>
+    <string name="tab_bookmarks">"Favoriler"</string>
+    <string name="tab_most_visited">"En çok ziyaret edilenler"</string>
+    <string name="tab_history">"Geçmiş"</string>
+    <string name="added_to_bookmarks">"Favorilere eklendi"</string>
+    <string name="removed_from_bookmarks">"Favorilerden kaldırıldı"</string>
+    <string name="sign_in_to">"<xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\" oturumu aç"</string>
+    <string name="username">"Ad"</string>
+    <string name="password">"Şifre"</string>
+    <string name="action">"Oturum aç"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
+    <string name="cancel">"İptal"</string>
+    <string name="ok">"Tamam"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"Eşleşme yok"</item>
+    <item quantity="one">"1 eşleşme"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> eşleşme"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> eşleşme"</item>
+  </plurals>
+    <string name="page_info">"Sayfa bilgileri"</string>
+    <string name="page_info_view">"Sayfa bilgilerini görüntüle"</string>
+    <string name="page_info_address">"Adres:"</string>
+    <string name="ssl_warnings_header">"Bu sitenin güvenlik sertifikasında sorunlar var."</string>
+    <string name="ssl_continue">"Devam Et"</string>
+    <string name="security_warning">"Güvenlik uyarısı"</string>
+    <string name="view_certificate">"Sertifikayı görüntüle"</string>
+    <string name="ssl_untrusted">"Bu sertifika güvenilir bir yetkiliden değil."</string>
+    <string name="ssl_mismatch">"Sitenin adı sertifika üzerindeki adla eşleşmiyor."</string>
+    <string name="ssl_expired">"Bu sertifikanın süresi dolmuş."</string>
+    <string name="ssl_not_yet_valid">"Bu sertifika henüz geçerli değil."</string>
+    <string name="ssl_certificate">"Güvenlik sertifikası"</string>
+    <string name="ssl_certificate_is_valid">"Bu sertifika geçerli."</string>
+    <string name="issued_to">"Alıcı:"</string>
+    <string name="common_name">"Ortak ad:"</string>
+    <string name="org_name">"Kuruluş:"</string>
+    <string name="org_unit">"Kuruluş birimi:"</string>
+    <string name="issued_by">"Yayınlayan:"</string>
+    <string name="validity_period">"Geçerlilik:"</string>
+    <string name="issued_on">"Yayınlanma tarihi:"</string>
+    <string name="expires_on">"Sona erme tarihi:"</string>
+    <string name="retrieving_creds_dlg_msg">"Oturum açma bilgileri alınıyor..."</string>
+    <string name="stopping">"Durduruluyor..."</string>
+    <string name="stop">"Durdur"</string>
+    <string name="reload">"Yenile"</string>
+    <string name="forward">"Yönlendir"</string>
+    <string name="save">"Tamam"</string>
+    <string name="do_not_save">"İptal"</string>
+    <string name="location">"Konum"</string>
+    <string name="name">"Ad"</string>
+    <string name="http">"http://"</string>
+    <string name="save_to_bookmarks">"Favori"</string>
+    <string name="edit_bookmark">"Favorileri düzenle"</string>
+    <string name="create_shortcut_bookmark">"Ana ekrana kısayol ekle"</string>
+    <string name="open_bookmark">"Aç"</string>
+    <string name="remove_bookmark">"Favoriyi sil"</string>
+    <string name="remove_history_item">"Geçmişten kaldır"</string>
+    <string name="bookmark_saved">"Favorilere kaydedildi."</string>
+    <string name="bookmark_needs_title">"Favorinin bir adı olmalıdır."</string>
+    <string name="bookmark_needs_url">"Favorinin bir konumu olmalıdır."</string>
+    <string name="empty_bookmark">"Boş favori oluşturulamaz."</string>
+    <string name="bookmark_url_not_valid">"URL geçerli değil."</string>
+    <string name="delete_bookmark">"Sil"</string>
+    <string name="bookmark_page">"Son görüntülenen sayfayı favori olarak işaretle"</string>
+    <string name="current_page">"kaynak: "</string>
+    <string name="delete_bookmark_warning">"Favori \"<xliff:g id="BOOKMARK">%s</xliff:g>\" silinecek."</string>
+    <string name="open_in_new_window">"Yeni pencerede aç"</string>
+    <string name="new_window">"Yeni pencere"</string>
+    <string name="goto_dot">"Git"</string>
+    <string name="find_dot">"Sayfada bul"</string>
+    <string name="select_dot">"Metni seç"</string>
+    <string name="view_tabs">"Pencereye genel bakış"</string>
+    <string name="view_tabs_condensed">"Pencereler"</string>
+    <string name="tab_picker_title">"Geçerli pencereler"</string>
+    <string name="tab_picker_view_tab">"Görüntüle"</string>
+    <string name="tab_picker_new_tab">"Yeni pencere"</string>
+    <string name="tab_picker_remove_tab">"Kapat"</string>
+    <string name="tab_picker_bookmark">"Favori"</string>
+    <string name="tab_picker_send_url">"Bağlantıyı paylaş"</string>
+    <string name="bookmarks">"Favoriler"</string>
+    <string name="shortcut_bookmark">"Favori"</string>
+    <string name="history">"Geçmiş"</string>
+    <string name="menu_view_download">"İndirme işlemleri"</string>
+    <string name="share_page">"Sayfayı paylaş"</string>
+    <string name="contextmenu_openlink">"Aç"</string>
+    <string name="contextmenu_openlink_newwindow">"Yeni pencerede aç"</string>
+    <string name="contextmenu_bookmark_thislink">"Favori bağlantısı"</string>
+    <string name="contextmenu_savelink">"Bağlantıyı kaydet"</string>
+    <string name="contextmenu_sharelink">"Bağlantıyı paylaş"</string>
+    <string name="contextmenu_copy">"Kopyala"</string>
+    <string name="contextmenu_copylink">"Bağlantı URL\'sini kopyala"</string>
+    <string name="contextmenu_download_image">"Görseli kaydet"</string>
+    <string name="contextmenu_view_image">"Görseli görüntüle"</string>
+    <string name="contextmenu_dial_dot">"Ara..."</string>
+    <string name="contextmenu_add_contact">"Kişi ekle"</string>
+    <string name="contextmenu_send_mail">"E-posta gönder"</string>
+    <string name="contextmenu_map">"Harita"</string>
+    <string name="clear">"Temizle"</string>
+    <string name="replace">"Değiştir"</string>
+    <string name="browser_bookmarks_page_bookmarks_text">"Favoriler"</string>
+    <string name="menu_preferences">"Ayarlar"</string>
+    <string name="pref_content_title">"Sayfa içeriği ayarları"</string>
+    <string name="pref_content_load_images">"Görselleri yükle"</string>
+    <string name="pref_content_load_images_summary">"Web sayfalarındaki görselleri görüntüle"</string>
+    <string name="pref_content_block_popups">"Pop-up\'ları engelle"</string>
+    <string name="pref_content_javascript">"JavaScript\'i etkinleştir"</string>
+    <string name="pref_content_open_in_background">"Arka planda aç"</string>
+    <string name="pref_content_open_in_background_summary">"Yeni pencereler geçerli olanın arkasında açılır"</string>
+    <string name="pref_content_homepage">"Ana sayfayı ayarla"</string>
+    <string name="pref_content_autofit">"Sayfaları otomatik sığdır"</string>
+    <string name="pref_content_autofit_summary">"Web sayfalarını ekrana sığacak şekilde biçimlendir"</string>
+    <string name="pref_privacy_title">"Gizlilik ayarları"</string>
+    <string name="pref_privacy_clear_cache">"Önbelleği temizle"</string>
+    <string name="pref_privacy_clear_cache_summary">"Önbelleğe alınmış tüm sayfa içeriğini sil"</string>
+    <string name="pref_privacy_clear_cache_dlg">"Önbellek temizlenecek."</string>
+    <string name="pref_privacy_clear_cookies">"Tüm çerez verilerini temizle"</string>
+    <string name="pref_privacy_clear_cookies_summary">"Tüm tarayıcı çerezlerini temizle"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"Tüm çerezler temizlenecek."</string>
+    <string name="pref_privacy_clear_history">"Geçmişi temizle"</string>
+    <string name="pref_privacy_clear_history_summary">"Tarayıcı gezinme geçmişini temizle"</string>
+    <string name="pref_privacy_clear_history_dlg">"Tarayıcının gezinme geçmişi temizlenecek."</string>
+    <string name="pref_privacy_clear_form_data">"Form verilerini temizle"</string>
+    <string name="pref_privacy_clear_form_data_summary">"Tüm kayıtlı form verilerini temizle"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"Kayıtlı tüm form verileri temizlenecek."</string>
+    <string name="pref_privacy_clear_passwords">"Şifreleri temizle"</string>
+    <string name="pref_privacy_clear_passwords_summary">"Kayıtlı tüm şifreleri temizle"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"Kayıtlı tüm şifreler temizlenecek."</string>
+    <string name="pref_security_title">"Güvenlik ayarları"</string>
+    <string name="pref_security_remember_passwords">"Şifreleri hatırla"</string>
+    <string name="pref_security_remember_passwords_summary">"Web siteleri için kullanıcı adlarını ve şifreleri kaydet"</string>
+    <string name="pref_security_save_form_data">"Form verilerini hatırla"</string>
+    <string name="pref_security_save_form_data_summary">"Daha sonra kullanmak üzere formlara yazdığım verileri hatırla"</string>
+    <string name="pref_security_show_security_warning">"Güvenlik uyarıl. göster"</string>
+    <string name="pref_security_show_security_warning_summary">"Site güvenliği ile ilgili bir sorun varsa uyarı göster"</string>
+    <string name="pref_security_accept_cookies">"Çerezleri kabul et"</string>
+    <string name="pref_security_accept_cookies_summary">"Sitelere \"çerez\" verilerini kaydetme ve okuma izni ver"</string>
+    <string name="pref_text_size">"Metin boyutu"</string>
+  <string-array name="pref_text_size_choices">
+    <item>"Çok Küçük"</item>
+    <item>"Küçük"</item>
+    <item>"Normal"</item>
+    <item>"Büyük"</item>
+    <item>"Çok büyük"</item>
+  </string-array>
+    <string name="pref_text_size_dialogtitle">"Metin boyutu"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
+    <string name="pref_extras_title">"Gelişmiş ayarlar"</string>
+    <string name="pref_extras_gears_enable">"Gears\'ı Etkinleştir"</string>
+    <string name="pref_extras_gears_enable_summary">"Tarayıcınızın işlevini artıran uygulamalar"</string>
+    <string name="pref_extras_gears_settings">"Gears ayarları"</string>
+    <string name="pref_plugin_installed">"Eklenti listesi"</string>
+    <string name="pref_plugin_installed_empty_list">"Yüklenmiş eklenti yok."</string>
+    <string name="pref_extras_gears_settings_summary">"Tarayıcınızın işlevini artıran uygulamalar"</string>
+    <string name="pref_extras_reset_default">"Varsayılana sıfırla"</string>
+    <string name="pref_extras_reset_default_summary">"Tüm tarayıcı verilerini temizle ve tüm ayarları varsayılana sıfırla"</string>
+    <string name="pref_extras_reset_default_dlg">"Tüm tarayıcı verileri temizlenecek ve ayarlar varsayılan değerlere geri döndürülecek."</string>
+    <string name="pref_extras_reset_default_dlg_title">"Varsayılana sıfırla"</string>
+    <string name="pref_development_title">"Hata Ayıklama"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
+  <string-array name="pref_default_text_encoding_choices">
+    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"Unicode (UTF-8)"</item>
+    <item>"Japonca (ISO-2022-JP)"</item>
+    <item>"Japonca (SHIFT_JIS)"</item>
+    <item>"Japonca (EUC-JP)"</item>
+  </string-array>
+    <string name="pref_default_text_encoding_dialogtitle">"Metin kodlama"</string>
+    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="browserFrameRedirect">"Yeniden yönlendir"</string>
+    <string name="browserFrame307Post">"Bu Web sayfası yeniden yönlendiriliyor. Yazılı form verileriniz yeni konuma tekrar gönderilsin mi?"</string>
+    <string name="browserFrameNetworkErrorLabel">"Veri bağlantısı sorunu"</string>
+    <string name="browserFrameFileErrorLabel">"Sorunlu dosya"</string>
+    <string name="browserFrameFormResubmitLabel">"Doğrula"</string>
+    <string name="browserFrameFormResubmitMessage">"Görüntülemeye çalıştığınız sayfa zaten gönderilmiş veriler (\"POSTDATA\") içeriyor. Verileri tekrar gönderirseniz sayfa üzerinde yapılmış tüm işlemler (arama veya çevrimiçi satın alma gibi) tekrarlanacaktır."</string>
+    <string name="loadSuspendedTitle">"Ağ bağlantısı yok"</string>
+    <string name="loadSuspended">"Bağlantı tekrar kurulduktan sonra sayfa yüklenmeye devam edecek."</string>
+    <string name="clear_history">"Geçmişi temizle"</string>
+    <string name="browser_history">"Son ziyaret edilen sayfalar"</string>
+    <string name="empty_history">"Tarayıcı geçmişi boş."</string>
+    <string name="add_new_bookmark">"Favori ekle..."</string>
+    <string name="no_database">"Veritabanı yok!"</string>
+    <string name="search_hint">"Web adresini yazın"</string>
+    <string name="search_button_text">"Git"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
+    <string name="attention">"Dikkat"</string>
+    <string name="popup_window_attempt">"Bu site pop-up pencere açmaya çalışıyor."</string>
+    <string name="allow">"İzin Ver"</string>
+    <string name="block">"Engelle"</string>
+    <string name="too_many_windows_dialog_title">"Pencere sınırına ulaşıldı"</string>
+    <string name="too_many_windows_dialog_message">"Zaten maksimum sayıda pencere açmış olduğunuz için yeni bir pencere açılamadı."</string>
+    <string name="too_many_subwindows_dialog_title">"Pop-up pencere zaten açık"</string>
+    <string name="too_many_subwindows_dialog_message">"Bir seferde yalnızca bir tane açılabileceğinden yeni pop-up pencere açılamadı."</string>
+    <string name="download_title">"İndirme geçmişi"</string>
+    <string name="download_unknown_filename">"&lt;Bilinmiyor&gt;"</string>
+    <string name="download_menu_open">"Aç"</string>
+    <string name="download_menu_clear">"Listeden temizle"</string>
+    <string name="download_menu_cancel">"İndirme işlemini iptal et"</string>
+    <string name="download_menu_cancel_all">"Tüm indirme işlemlerini iptal et"</string>
+    <string name="download_menu_clear_all">"Listeyi temizle"</string>
+    <string name="download_clear_dlg_title">"Temizle"</string>
+    <string name="download_clear_dlg_msg">"Tüm öğeler listeden silinecek ve tarayıcı önbelleğinden kaldırılacak."</string>
+    <string name="download_cancel_dlg_title">"İndirme işlemlerini iptal et"</string>
+    <string name="download_cancel_dlg_msg">"<xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> indirme işleminin tümü iptal edilecek ve indirme geçmişinden temizlenecek."</string>
+    <string name="download_file_error_dlg_title">"Alan yetersiz"</string>
+    <string name="download_file_error_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g> indirilemedi."\n"Telefonunuzda biraz yer açın ve tekrar deneyin."</string>
+    <string name="download_failed_generic_dlg_title">"İndirme işlemi başarısız"</string>
+    <string name="download_no_sdcard_dlg_title">"SD kart yok"</string>
+    <string name="download_no_sdcard_dlg_msg">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını indirmek için bir SD kart gerekli."</string>
+    <string name="download_sdcard_busy_dlg_title">"SD kart kullanılamıyor"</string>
+    <string name="download_sdcard_busy_dlg_msg">"SD kart meşgul. İndirme işlemlerine izin vermek için bildirim alanında \"USB\'de depolamayı kapat\"ı seçin."</string>
+    <string name="download_no_application">"Bu dosyayı açmak için hiçbir uygulama bulunamadı."</string>
+    <string name="retry">"Tekrar Dene"</string>
+    <string name="no_downloads">"İndirme geçmişi boş."</string>
+    <string name="download_error">"İndirme işlemi başarısız."</string>
+    <string name="download_success">"<xliff:g id="FILE">%s</xliff:g> İndirme işlemi tamamlandı."</string>
+    <string name="download_running">"İndiriliyor..."</string>
+    <string name="download_pending">"İndirme işlemi başlatılıyor..."</string>
+    <string name="download_pending_network">"Veri bağlantısı bekleniyor..."</string>
+    <string name="download_running_paused">"Veri bağlantısı bekleniyor..."</string>
+    <string name="download_canceled">"İndirme işlemi iptal edildi."</string>
+    <string name="download_not_acceptable">"İndirilemiyor. İçerik bu telefonda desteklenmiyor."</string>
+    <string name="download_file_error">"İndirme işlemi tamamlanamıyor. Yeterli alan yok."</string>
+    <string name="download_length_required">"İndirilemiyor. Öğenin boyutu belirlenemiyor."</string>
+    <string name="download_precondition_failed">"İndirme işlemi kesintiye uğradı. Sürdürülemez."</string>
+    <string name="activity_instrumentation_test_runner">"Tarayıcı Test Aracı"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
+    <string name="query_data_prompt">"Depolamaya izin ver"</string>
+    <string name="query_data_message">"Bu web sitesi telefonunuzda bilgi depolamak istiyor."</string>
+    <string name="location_prompt">"Konumunuza erişin"</string>
+    <string name="location_message">"Bu web sitesi konumunuza erişmek istiyor."</string>
+    <string name="shortcut_prompt">"Kısayol oluştur"</string>
+    <string name="shortcut_message">"Bu web sitesi ana ekranınızda bu sayfaya kısayol oluşturmak istiyor."</string>
+    <string name="settings_message">"Aşağıdaki tabloda Gears\'ı kullanmaya çalışan her siteye vermiş olduğunuz izinler gösterilmektedir."</string>
+    <string name="filepicker_message">"Dosya Toplayıcı"</string>
+    <string name="image_message">"Seçilen Görsel"</string>
+    <string name="settings_title">"Gears ayarları"</string>
+    <string name="privacy_policy">"Konumunuzun nasıl kullanılacağını görmek için sitenin gizlilik politikasını okuyun."</string>
+    <string name="settings_storage_title">"Yerel Depolamaya İzin Ver"</string>
+    <string name="settings_storage_subtitle_on">"Bu site telefonunuza bilgi kaydedebilir"</string>
+    <string name="settings_storage_subtitle_off">"Bu site telefonunuza bilgi kaydedemez"</string>
+    <string name="settings_location_title">"Konum Tespitine İzin Ver"</string>
+    <string name="settings_location_subtitle_on">"Bu site geçerli konumunuzu okuyabilir"</string>
+    <string name="settings_location_subtitle_off">"Bu site geçerli konumunuzu okuyamaz"</string>
+    <string name="settings_remove_site">"Bu siteyi Gears\'tan kaldır"</string>
+    <string name="settings_empty">"Hiçbir izin ayarlanmadı"</string>
+    <string name="settings_confirmation_remove_title">"Bu siteyi kaldır"</string>
+    <string name="settings_confirmation_remove">"Tüm izinler kaldırılacak ve site tarafından telefonunuzda depolanmış tüm veriler silinecek."</string>
+    <string name="storage_notification">"Bu site bu telefona bilgi depolayacak."\n" Bu ayarları şuradan değiştirin:"\n" Ayarlar -&gt; Gears Ayarları"</string>
+    <string name="storage_notification_alwaysdeny">"Bu site bu telefona asla bilgi depolamayacak."\n" Bu ayarları şuradan değiştirin:"\n" Ayarlar -&gt; Gears Ayarları"</string>
+    <string name="location_notification">"Bu site geçerli konumunuza erişebilir."\n" Bu ayarı şuradan değiştirin: "\n" Ayarlar -&gt; Gears Ayarları"</string>
+    <string name="location_notification_alwaysdeny">"Bu site geçerli konumunuza erişmeyecek. "\n" Bu ayarı şuradan değiştirin:"\n" Ayarlar -&gt; Gears Ayarları"</string>
+    <string name="shortcut_notification">"Kısayol oluşturuldu"</string>
+    <string name="permission_button_alwaysdeny">"Asla İzin Verme"</string>
+    <string name="permission_button_allow">"Tamam"</string>
+    <string name="permission_button_deny">"İptal"</string>
+    <string name="shortcut_button_alwaysdeny">"Asla İzin Verme"</string>
+    <string name="shortcut_button_allow">"Tamam"</string>
+    <string name="shortcut_button_deny">"İptal"</string>
+    <string name="settings_button_allow">"Uygula"</string>
+    <string name="settings_button_deny">"İptal"</string>
+    <string name="filepicker_button_allow">"Tamam"</string>
+    <string name="filepicker_button_deny">"İptal"</string>
+    <string name="filepicker_path">"yol:"</string>
+    <string name="filepicker_no_files_selected">"Seçili dosya yok"</string>
+    <string name="filepicker_one_file_selected">"Bir dosya seçildi"</string>
+    <string name="filepicker_some_files_selected">"dosyalar seçildi"</string>
+    <string name="remove">"Kaldır"</string>
+    <string name="local_storage">"Yerel depolama"</string>
+    <string name="allowed">"İzin Verildi"</string>
+    <string name="denied">"Reddedildi"</string>
+    <string name="unrecognized_dialog_message">"Tanınmayan iletişim türü"</string>
+    <string name="default_button">"Tamam"</string>
+    <string name="zoom_overview_button_text">"Genel Bakış"</string>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index d0368bb..8f005e1 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -17,40 +17,44 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="application_name">"浏览器"</string>
     <string name="tab_bookmarks">"书签"</string>
-    <string name="tab_most_visited">"访问最多的网站"</string>
+    <string name="tab_most_visited">"访问最多"</string>
     <string name="tab_history">"历史记录"</string>
-    <string name="added_to_bookmarks">"添加到书签"</string>
+    <string name="added_to_bookmarks">"已添加到书签"</string>
     <string name="removed_from_bookmarks">"从书签中删除"</string>
-    <string name="sign_in_to">"登录至 <xliff:g id="HOSTNAME">%s1</xliff:g>“<xliff:g id="REALM">%s2</xliff:g>”"</string>
+    <string name="sign_in_to">"登录 <xliff:g id="HOSTNAME">%s1</xliff:g>“<xliff:g id="REALM">%s2</xliff:g>”"</string>
     <string name="username">"名称"</string>
     <string name="password">"密码"</string>
     <string name="action">"登录"</string>
+    <!-- no translation found for bookmarks_search (5229596268214362873) -->
+    <skip />
     <string name="cancel">"取消"</string>
     <string name="ok">"确定"</string>
-    <!-- no translation found for matches_found:zero (6242659159545399963) -->
-    <!-- no translation found for matches_found:one (4352019729062956802) -->
-    <!-- no translation found for matches_found:few (5544267486978946555) -->
-    <!-- no translation found for matches_found:other (6616125067364315405) -->
-    <string name="page_info">"页面信息"</string>
-    <string name="page_info_view">"查看页面信息"</string>
+  <plurals name="matches_found">
+    <item quantity="zero">"没有匹配项"</item>
+    <item quantity="one">"1 个匹配项"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> 个匹配项"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> 个匹配项"</item>
+  </plurals>
+    <string name="page_info">"网页信息"</string>
+    <string name="page_info_view">"查看网页信息"</string>
     <string name="page_info_address">"地址:"</string>
     <string name="ssl_warnings_header">"该网站的安全证书有问题。"</string>
     <string name="ssl_continue">"继续"</string>
     <string name="security_warning">"安全警告"</string>
     <string name="view_certificate">"查看证书"</string>
-    <string name="ssl_untrusted">"该证书并非来自可信的授权机构。"</string>
+    <string name="ssl_untrusted">"该证书并非来自可信的授权中心。"</string>
     <string name="ssl_mismatch">"网站的名称与证书上的名称不一致。"</string>
     <string name="ssl_expired">"该证书已过期。"</string>
     <string name="ssl_not_yet_valid">"该证书尚未生效。"</string>
     <string name="ssl_certificate">"安全证书"</string>
     <string name="ssl_certificate_is_valid">"该证书有效。"</string>
-    <string name="issued_to">"发布位置:"</string>
+    <string name="issued_to">"颁发给:"</string>
     <string name="common_name">"常用名称:"</string>
     <string name="org_name">"组织:"</string>
     <string name="org_unit">"组织单位:"</string>
-    <string name="issued_by">"发布者:"</string>
-    <string name="validity_period">"有效性:"</string>
-    <string name="issued_on">"发布时间:"</string>
+    <string name="issued_by">"颁发者:"</string>
+    <string name="validity_period">"有效期:"</string>
+    <string name="issued_on">"颁发时间:"</string>
     <string name="expires_on">"有效期至:"</string>
     <string name="retrieving_creds_dlg_msg">"正在检索登录详细信息..."</string>
     <string name="stopping">"正在停止..."</string>
@@ -64,24 +68,24 @@
     <string name="http">"http://"</string>
     <string name="save_to_bookmarks">"书签"</string>
     <string name="edit_bookmark">"编辑书签"</string>
-    <string name="create_shortcut_bookmark">"向“主页”添加快捷方式"</string>
+    <string name="create_shortcut_bookmark">"向主屏幕添加快捷方式"</string>
     <string name="open_bookmark">"打开"</string>
     <string name="remove_bookmark">"删除书签"</string>
     <string name="remove_history_item">"从历史记录中删除"</string>
-    <string name="bookmark_saved">"保存至书签。"</string>
+    <string name="bookmark_saved">"已保存至书签。"</string>
     <string name="bookmark_needs_title">"书签必须具有名称。"</string>
     <string name="bookmark_needs_url">"书签必须具有位置。"</string>
     <string name="empty_bookmark">"无法创建空书签。"</string>
     <string name="bookmark_url_not_valid">"网址无效。"</string>
     <string name="delete_bookmark">"删除"</string>
-    <string name="bookmark_page">"将上次查看过的页面加为书签"</string>
+    <string name="bookmark_page">"将上次查看过的网页加为书签"</string>
     <string name="current_page">"来源 "</string>
-    <string name="delete_bookmark_warning">"会删除书签“<xliff:g id="BOOKMARK">%s</xliff:g>”。"</string>
+    <string name="delete_bookmark_warning">"将会删除书签“<xliff:g id="BOOKMARK">%s</xliff:g>”。"</string>
     <string name="open_in_new_window">"在新窗口中打开"</string>
     <string name="new_window">"新窗口"</string>
     <string name="goto_dot">"开始"</string>
-    <string name="find_dot">"在页面上查找"</string>
-    <string name="select_dot">"选择文本"</string>
+    <string name="find_dot">"在网页上查找"</string>
+    <string name="select_dot">"选择文字"</string>
     <string name="view_tabs">"窗口概述"</string>
     <string name="view_tabs_condensed">"窗口"</string>
     <string name="tab_picker_title">"当前窗口"</string>
@@ -89,17 +93,17 @@
     <string name="tab_picker_new_tab">"新窗口"</string>
     <string name="tab_picker_remove_tab">"关闭"</string>
     <string name="tab_picker_bookmark">"书签"</string>
-    <string name="tab_picker_send_url">"共享链接"</string>
+    <string name="tab_picker_send_url">"分享链接"</string>
     <string name="bookmarks">"书签"</string>
     <string name="shortcut_bookmark">"书签"</string>
     <string name="history">"历史记录"</string>
     <string name="menu_view_download">"下载"</string>
-    <string name="share_page">"共享页面"</string>
+    <string name="share_page">"分享网页"</string>
     <string name="contextmenu_openlink">"打开"</string>
     <string name="contextmenu_openlink_newwindow">"在新窗口中打开"</string>
     <string name="contextmenu_bookmark_thislink">"书签链接"</string>
     <string name="contextmenu_savelink">"保存链接"</string>
-    <string name="contextmenu_sharelink">"共享链接"</string>
+    <string name="contextmenu_sharelink">"分享链接"</string>
     <string name="contextmenu_copy">"复制"</string>
     <string name="contextmenu_copylink">"复制链接网址"</string>
     <string name="contextmenu_download_image">"保存图片"</string>
@@ -112,50 +116,57 @@
     <string name="replace">"替换"</string>
     <string name="browser_bookmarks_page_bookmarks_text">"书签"</string>
     <string name="menu_preferences">"设置"</string>
-    <string name="pref_content_title">"页面内容设置"</string>
+    <string name="pref_content_title">"网页内容设置"</string>
     <string name="pref_content_load_images">"载入图片"</string>
     <string name="pref_content_load_images_summary">"在网页上显示图片"</string>
-    <string name="pref_content_block_popups">"阻止弹出窗口"</string>
+    <string name="pref_content_block_popups">"阻止弹出式窗口"</string>
     <string name="pref_content_javascript">"启用 JavaScript"</string>
     <string name="pref_content_open_in_background">"在后台打开"</string>
     <string name="pref_content_open_in_background_summary">"新窗口会在当前窗口后方打开"</string>
     <string name="pref_content_homepage">"设置主页"</string>
-    <string name="pref_content_autofit">"自动适应页面"</string>
+    <string name="pref_content_autofit">"自动调整为网页大小"</string>
     <string name="pref_content_autofit_summary">"调整网页格式以适合屏幕大小"</string>
-    <string name="pref_privacy_title">"隐私设置"</string>
+    <string name="pref_privacy_title">"隐私权设置"</string>
     <string name="pref_privacy_clear_cache">"清除缓存"</string>
-    <string name="pref_privacy_clear_cache_summary">"删除所有缓存的页面内容"</string>
-    <string name="pref_privacy_clear_cache_dlg">"会清除缓存。"</string>
+    <string name="pref_privacy_clear_cache_summary">"删除所有缓存的网页内容"</string>
+    <string name="pref_privacy_clear_cache_dlg">"将会清除缓存。"</string>
     <string name="pref_privacy_clear_cookies">"清除所有 Cookie 数据"</string>
     <string name="pref_privacy_clear_cookies_summary">"清除所有浏览器 Cookie"</string>
-    <string name="pref_privacy_clear_cookies_dlg">"会清除所有 Cookie。"</string>
+    <string name="pref_privacy_clear_cookies_dlg">"将会清除所有 Cookie。"</string>
     <string name="pref_privacy_clear_history">"清除历史记录"</string>
     <string name="pref_privacy_clear_history_summary">"清除浏览器导航历史记录"</string>
-    <string name="pref_privacy_clear_history_dlg">"会清除浏览器导航历史记录。"</string>
+    <string name="pref_privacy_clear_history_dlg">"将会清除浏览器导航历史记录。"</string>
     <string name="pref_privacy_clear_form_data">"清除表单数据"</string>
     <string name="pref_privacy_clear_form_data_summary">"清除所有已保存的表单数据"</string>
-    <string name="pref_privacy_clear_form_data_dlg">"会清除所有保存的表单数据。"</string>
+    <string name="pref_privacy_clear_form_data_dlg">"将会清除所有保存的表单数据。"</string>
     <string name="pref_privacy_clear_passwords">"清除密码"</string>
     <string name="pref_privacy_clear_passwords_summary">"清除所有保存的密码"</string>
-    <string name="pref_privacy_clear_passwords_dlg">"会清除所有保存的密码。"</string>
+    <string name="pref_privacy_clear_passwords_dlg">"将会清除所有保存的密码。"</string>
     <string name="pref_security_title">"安全设置"</string>
     <string name="pref_security_remember_passwords">"记住密码"</string>
-    <string name="pref_security_remember_passwords_summary">"保存用于网站的用户名和密码"</string>
+    <string name="pref_security_remember_passwords_summary">"保存访问网站所用的用户名和密码"</string>
     <string name="pref_security_save_form_data">"记住表单数据"</string>
-    <string name="pref_security_save_form_data_summary">"记住我在表单中键入的数据以供以后使用"</string>
+    <string name="pref_security_save_form_data_summary">"记住我在表单中输入的数据以便于以后使用"</string>
     <string name="pref_security_show_security_warning">"显示安全警告"</string>
     <string name="pref_security_show_security_warning_summary">"当网站的安全有问题时显示警告"</string>
     <string name="pref_security_accept_cookies">"接受 Cookie"</string>
-    <string name="pref_security_accept_cookies_summary">"允许网站保存并读取“Cookie”数据"</string>
-    <string name="pref_text_size">"设置文字大小"</string>
+    <string name="pref_security_accept_cookies_summary">"允许网站保存并读取 Cookie 数据"</string>
+    <string name="pref_text_size">"文字大小"</string>
   <string-array name="pref_text_size_choices">
-    <item>"极小"</item>
+    <item>"超小"</item>
     <item>"小"</item>
     <item>"正常"</item>
     <item>"大"</item>
-    <item>"极大"</item>
+    <item>"超大"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"文字大小"</string>
+    <!-- no translation found for pref_default_zoom (8076142259097187395) -->
+    <skip />
+    <!-- no translation found for pref_default_zoom_choices:0 (549583171195154919) -->
+    <!-- no translation found for pref_default_zoom_choices:1 (5619034257768161024) -->
+    <!-- no translation found for pref_default_zoom_choices:2 (3840999588443167001) -->
+    <!-- no translation found for pref_default_zoom_dialogtitle (6095974367125109021) -->
+    <skip />
     <string name="pref_extras_title">"高级设置"</string>
     <string name="pref_extras_gears_enable">"启用 Gears"</string>
     <string name="pref_extras_gears_enable_summary">"扩展浏览器功能的应用程序"</string>
@@ -165,42 +176,45 @@
     <string name="pref_extras_gears_settings_summary">"扩展浏览器功能的应用程序"</string>
     <string name="pref_extras_reset_default">"重置为默认值"</string>
     <string name="pref_extras_reset_default_summary">"清除所有浏览器数据并将所有设置重置为默认值"</string>
-    <string name="pref_extras_reset_default_dlg">"会清除所有浏览器数据并且设置会恢复为默认值。"</string>
+    <string name="pref_extras_reset_default_dlg">"将会清除所有浏览器数据并将设置恢复为默认值。"</string>
     <string name="pref_extras_reset_default_dlg_title">"重置为默认值"</string>
     <string name="pref_development_title">"调试"</string>
-    <string name="pref_default_text_encoding">"设置文字编码"</string>
+    <!-- no translation found for pref_default_text_encoding (5742965543955558478) -->
+    <skip />
   <string-array name="pref_default_text_encoding_choices">
-    <item>"Latin-1 (ISO-8859-1)"</item>
+    <item>"拉丁语-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
-    <item>"Japanese (ISO-2022-JP)"</item>
-    <item>"Japanese (SHIFT_JIS)"</item>
-    <item>"Japanese (EUC-JP)"</item>
+    <item>"日文 (ISO-2022-JP)"</item>
+    <item>"日文 (SHIFT_JIS)"</item>
+    <item>"日文 (EUC-JP)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle">"文字编码"</string>
-    <string name="pref_default_text_encoding_default">"Latin-1"</string>
+    <string name="pref_default_text_encoding_default">"拉丁语-1"</string>
     <string name="browserFrameRedirect">"重定向"</string>
-    <string name="browserFrame307Post">"该网页正被重定向。是否将您键入的表单数据重新发送到新位置?"</string>
+    <string name="browserFrame307Post">"该网页正在进行重定向。是否要将您输入的表单数据重新发送到新位置?"</string>
     <string name="browserFrameNetworkErrorLabel">"数据连接性问题"</string>
     <string name="browserFrameFileErrorLabel">"文件有问题"</string>
     <string name="browserFrameFormResubmitLabel">"确认"</string>
-    <string name="browserFrameFormResubmitMessage">"您尝试查看的页面中包含已经提交的数据(“POSTDATA”)。如果重新发送数据,系统会重复该页面上的表单所执行过的一切操作(如搜索或在线购买)。"</string>
+    <string name="browserFrameFormResubmitMessage">"您尝试查看的网页中包含已经提交的数据(“POSTDATA”)。如果您重新发送这些数据,系统会重复该网页上的表单所执行过的一切操作(如搜索或在线购买)。"</string>
     <string name="loadSuspendedTitle">"没有网络连接"</string>
-    <string name="loadSuspended">"连接恢复后页面会继续载入。"</string>
+    <string name="loadSuspended">"连接恢复后网页会继续载入。"</string>
     <string name="clear_history">"清除历史记录"</string>
-    <string name="browser_history">"最近访问过的页面"</string>
+    <string name="browser_history">"最近访问过的网页"</string>
     <string name="empty_history">"浏览器历史记录为空。"</string>
     <string name="add_new_bookmark">"添加书签..."</string>
     <string name="no_database">"没有数据库!"</string>
-    <string name="search_hint">"键入网址"</string>
+    <string name="search_hint">"输入网址"</string>
     <string name="search_button_text">"转至"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"注意"</string>
-    <string name="popup_window_attempt">"该网站正试图打开一个弹出窗口。"</string>
+    <string name="popup_window_attempt">"该网站试图打开一个弹出式窗口。"</string>
     <string name="allow">"允许"</string>
     <string name="block">"阻止"</string>
-    <string name="too_many_windows_dialog_title">"已达到窗口限制"</string>
-    <string name="too_many_windows_dialog_message">"无法打开新窗口,因为您打开的窗口数已达到允许的最高数目。"</string>
-    <string name="too_many_subwindows_dialog_title">"弹出窗口已经打开"</string>
-    <string name="too_many_subwindows_dialog_message">"无法打开新的弹出窗口,因为不管何时一次都只能打开一个。"</string>
+    <string name="too_many_windows_dialog_title">"打开的窗口数已达上限"</string>
+    <string name="too_many_windows_dialog_message">"无法打开新窗口,因为打开的窗口数已达到上限。"</string>
+    <string name="too_many_subwindows_dialog_title">"弹出式窗口已经打开"</string>
+    <string name="too_many_subwindows_dialog_message">"无法打开新的弹出式窗口,因为任何时候都是一次只能打开一个窗口。"</string>
     <string name="download_title">"下载历史记录"</string>
     <string name="download_unknown_filename">"&lt;未知&gt;"</string>
     <string name="download_menu_open">"打开"</string>
@@ -209,14 +223,14 @@
     <string name="download_menu_cancel_all">"取消所有下载"</string>
     <string name="download_menu_clear_all">"清除列表"</string>
     <string name="download_clear_dlg_title">"清除"</string>
-    <string name="download_clear_dlg_msg">"所有条目都会从列表中清除并会从浏览器缓存中删除。"</string>
+    <string name="download_clear_dlg_msg">"所有项都会从列表中清除并会从浏览器缓存中删除。"</string>
     <string name="download_cancel_dlg_title">"取消下载"</string>
-    <string name="download_cancel_dlg_msg">"所有 <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> 个下载都会取消并从下载历史记录中清除。"</string>
+    <string name="download_cancel_dlg_msg">"所有 <xliff:g id="DOWNLOAD_COUNT">%d</xliff:g> 项下载都会取消并从下载历史记录中清除。"</string>
     <string name="download_file_error_dlg_title">"空间不足"</string>
-    <string name="download_file_error_dlg_msg">"无法下载<xliff:g id="FILENAME">%s</xliff:g>。"\n"请释放手机中的一些空间并重试。"</string>
+    <string name="download_file_error_dlg_msg">"无法下载<xliff:g id="FILENAME">%s</xliff:g>。"\n"请释放部分手机空间,然后重试。"</string>
     <string name="download_failed_generic_dlg_title">"下载不成功"</string>
     <string name="download_no_sdcard_dlg_title">"无 SD 卡"</string>
-    <string name="download_no_sdcard_dlg_msg">"需要 SD 卡才能下载 <xliff:g id="FILENAME">%s</xliff:g>。"</string>
+    <string name="download_no_sdcard_dlg_msg">"需要有 SD 卡才能下载<xliff:g id="FILENAME">%s</xliff:g>。"</string>
     <string name="download_sdcard_busy_dlg_title">"SD 卡不可用"</string>
     <string name="download_sdcard_busy_dlg_msg">"SD 卡正忙。要允许下载,请在通知中选择“关闭 USB 存储”。"</string>
     <string name="download_no_application">"无法找到可打开此文件的应用程序。"</string>
@@ -229,27 +243,26 @@
     <string name="download_pending_network">"正在等待数据连接..."</string>
     <string name="download_running_paused">"正在等待数据连接..."</string>
     <string name="download_canceled">"下载已取消。"</string>
-    <string name="download_not_acceptable">"无法下载。手机不支持该内容。"</string>
-    <string name="download_file_error">"无法完成下载。存储空间不足。"</string>
-    <string name="download_length_required">"无法下载。无法确定该项的大小。"</string>
+    <string name="download_not_acceptable">"无法下载,手机不支持此内容。"</string>
+    <string name="download_file_error">"无法完成下载,存储空间不足。"</string>
+    <string name="download_length_required">"无法下载,无法确定该项的大小。"</string>
     <string name="download_precondition_failed">"下载中断,无法重新开始。"</string>
-    <string name="activity_instrumentation_test_runner">"浏览器测试运行器"</string>
-    <string name="search_google">"使用 Google 进行搜索"</string>
-    <string name="permlab_readHistoryBookmarks">"读取浏览器的历史记录和书签"</string>
-    <string name="permdesc_readHistoryBookmarks">"允许应用程序读取浏览器访问过的所有网址以及浏览器的所有书签。"</string>
-    <string name="permlab_writeHistoryBookmarks">"写入浏览器的历史记录和书签"</string>
-    <string name="permdesc_writeHistoryBookmarks">"允许应用程序修改您手机中存储的浏览器的历史记录或书签。恶意应用程序可能会利用此权限清除或修改您浏览器的数据。"</string>
+    <string name="activity_instrumentation_test_runner">"浏览器测试运行程序"</string>
+    <!-- no translation found for homepage_base (7888126987935305566) -->
+    <skip />
+    <!-- no translation found for search_the_web (6046130189241962337) -->
+    <skip />
     <string name="query_data_prompt">"允许存储"</string>
     <string name="query_data_message">"此网站要将信息存储在您的手机上。"</string>
     <string name="location_prompt">"访问您所在的位置"</string>
     <string name="location_message">"此网站要访问您所在的位置。"</string>
     <string name="shortcut_prompt">"创建快捷方式"</string>
     <string name="shortcut_message">"此网站要在您的主屏幕上创建此网页的快捷方式。"</string>
-    <string name="settings_message">"下表显示了您授予尝试使用 Gears 的各个网站的权限。"</string>
+    <string name="settings_message">"下表显示了您已授予试图使用 Gears 的各个网站的权限。"</string>
     <string name="filepicker_message">"文件选择器"</string>
     <string name="image_message">"选择的图片"</string>
     <string name="settings_title">"Gears 设置"</string>
-    <string name="privacy_policy">"阅读网站的隐私政策,以了解会如何使用您的位置。"</string>
+    <string name="privacy_policy">"阅读网站的隐私权政策,了解将会如何使用您的位置。"</string>
     <string name="settings_storage_title">"允许本地存储"</string>
     <string name="settings_storage_subtitle_on">"此网站可以将信息保存到您的手机上"</string>
     <string name="settings_storage_subtitle_off">"此网站无法将信息保存到您的手机上"</string>
@@ -276,14 +289,14 @@
     <string name="filepicker_button_allow">"确定"</string>
     <string name="filepicker_button_deny">"取消"</string>
     <string name="filepicker_path">"路径:"</string>
-    <string name="filepicker_no_files_selected">"未选择文件"</string>
-    <string name="filepicker_one_file_selected">"选择了一个文件"</string>
-    <string name="filepicker_some_files_selected">"选择了文件"</string>
+    <string name="filepicker_no_files_selected">"未选定任何文件"</string>
+    <string name="filepicker_one_file_selected">"一个文件已选定"</string>
+    <string name="filepicker_some_files_selected">"个文件已选定"</string>
     <string name="remove">"删除"</string>
     <string name="local_storage">"本地存储"</string>
     <string name="allowed">"允许"</string>
     <string name="denied">"已拒绝"</string>
-    <string name="unrecognized_dialog_message">"未识别的对话类型"</string>
+    <string name="unrecognized_dialog_message">"无法识别的对话类型"</string>
     <string name="default_button">"确定"</string>
     <string name="zoom_overview_button_text">"概览"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index fd9e65c..fec7a13 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -18,19 +18,22 @@
     <string name="application_name">"瀏覽器"</string>
     <string name="tab_bookmarks">"書籤"</string>
     <string name="tab_most_visited">"常用網頁"</string>
-    <string name="tab_history">"紀錄"</string>
+    <string name="tab_history">"記錄"</string>
     <string name="added_to_bookmarks">"已加入書籤"</string>
     <string name="removed_from_bookmarks">"已自書籤中移除"</string>
     <string name="sign_in_to">"登入到 <xliff:g id="HOSTNAME">%s1</xliff:g>「<xliff:g id="REALM">%s2</xliff:g>」"</string>
     <string name="username">"名字"</string>
     <string name="password">"密碼"</string>
     <string name="action">"登入"</string>
+    <string name="bookmarks_search">"瀏覽器"</string>
     <string name="cancel">"取消"</string>
     <string name="ok">"確定"</string>
-    <!-- no translation found for matches_found:zero (6242659159545399963) -->
-    <!-- no translation found for matches_found:one (4352019729062956802) -->
-    <!-- no translation found for matches_found:few (5544267486978946555) -->
-    <!-- no translation found for matches_found:other (6616125067364315405) -->
+  <plurals name="matches_found">
+    <item quantity="zero">"沒有相配項"</item>
+    <item quantity="one">"1 個相配項"</item>
+    <item quantity="few">"<xliff:g id="NUMBER">%d</xliff:g> 個相配項"</item>
+    <item quantity="other">"<xliff:g id="NUMBER">%d</xliff:g> 個相配項"</item>
+  </plurals>
     <string name="page_info">"頁面資訊"</string>
     <string name="page_info_view">"檢視頁面資訊"</string>
     <string name="page_info_address">"位址:"</string>
@@ -67,16 +70,16 @@
     <string name="create_shortcut_bookmark">"新增捷徑至首頁"</string>
     <string name="open_bookmark">"開啟"</string>
     <string name="remove_bookmark">"刪除書籤"</string>
-    <string name="remove_history_item">"從紀錄中移除"</string>
-    <string name="bookmark_saved">"儲存至書籤。"</string>
-    <string name="bookmark_needs_title">"請輸入書籤名字。"</string>
+    <string name="remove_history_item">"從記錄中移除"</string>
+    <string name="bookmark_saved">"已儲存至書籤。"</string>
+    <string name="bookmark_needs_title">"請輸入書籤名稱。"</string>
     <string name="bookmark_needs_url">"請選取書籤位置。"</string>
     <string name="empty_bookmark">"無法建立空白書籤。"</string>
     <string name="bookmark_url_not_valid">"網址無效。"</string>
     <string name="delete_bookmark">"刪除"</string>
-    <string name="bookmark_page">"最後瀏覽的書籤頁面"</string>
+    <string name="bookmark_page">"將最後瀏覽的網頁加入書籤"</string>
     <string name="current_page">"來源 "</string>
-    <string name="delete_bookmark_warning">"<xliff:g id="BOOKMARK">%s</xliff:g>"</string>
+    <string name="delete_bookmark_warning">"刪除「<xliff:g id="BOOKMARK">%s</xliff:g>」書籤?"</string>
     <string name="open_in_new_window">"在新視窗開啟"</string>
     <string name="new_window">"新視窗"</string>
     <string name="goto_dot">"前往"</string>
@@ -88,16 +91,16 @@
     <string name="tab_picker_view_tab">"檢視"</string>
     <string name="tab_picker_new_tab">"新視窗"</string>
     <string name="tab_picker_remove_tab">"關閉"</string>
-    <string name="tab_picker_bookmark">"書籤"</string>
+    <string name="tab_picker_bookmark">"加入書籤"</string>
     <string name="tab_picker_send_url">"分享連結"</string>
     <string name="bookmarks">"書籤"</string>
     <string name="shortcut_bookmark">"書籤"</string>
-    <string name="history">"紀錄"</string>
+    <string name="history">"記錄"</string>
     <string name="menu_view_download">"下載"</string>
     <string name="share_page">"分享網頁"</string>
     <string name="contextmenu_openlink">"開啟"</string>
     <string name="contextmenu_openlink_newwindow">"在新視窗開啟"</string>
-    <string name="contextmenu_bookmark_thislink">"書籤連結"</string>
+    <string name="contextmenu_bookmark_thislink">"將連結加入書籤"</string>
     <string name="contextmenu_savelink">"儲存連結"</string>
     <string name="contextmenu_sharelink">"分享連結"</string>
     <string name="contextmenu_copy">"複製"</string>
@@ -105,7 +108,7 @@
     <string name="contextmenu_download_image">"儲存圖片"</string>
     <string name="contextmenu_view_image">"檢視圖片"</string>
     <string name="contextmenu_dial_dot">"撥打…"</string>
-    <string name="contextmenu_add_contact">"新增連絡人"</string>
+    <string name="contextmenu_add_contact">"新增聯絡人"</string>
     <string name="contextmenu_send_mail">"傳送電子郵件"</string>
     <string name="contextmenu_map">"地圖"</string>
     <string name="clear">"清除"</string>
@@ -114,14 +117,14 @@
     <string name="menu_preferences">"設定"</string>
     <string name="pref_content_title">"頁面內容設定"</string>
     <string name="pref_content_load_images">"載入圖片"</string>
-    <string name="pref_content_load_images_summary">"在網頁上顯示圖片"</string>
-    <string name="pref_content_block_popups">"阻擋快顯視窗"</string>
+    <string name="pref_content_load_images_summary">"顯示網頁上的圖片"</string>
+    <string name="pref_content_block_popups">"封鎖快顯視窗"</string>
     <string name="pref_content_javascript">"啟用 JavaScript"</string>
-    <string name="pref_content_open_in_background">"在背景開啟"</string>
-    <string name="pref_content_open_in_background_summary">"新分頁開在目前頁面後面"</string>
+    <string name="pref_content_open_in_background">"在背景中開啟"</string>
+    <string name="pref_content_open_in_background_summary">"在目前頁面後面開啟新分頁"</string>
     <string name="pref_content_homepage">"設定首頁"</string>
     <string name="pref_content_autofit">"自動調整頁面"</string>
-    <string name="pref_content_autofit_summary">"將網頁調整至適合螢幕大小"</string>
+    <string name="pref_content_autofit_summary">"將網頁調整至適合螢幕的大小"</string>
     <string name="pref_privacy_title">"隱私設定"</string>
     <string name="pref_privacy_clear_cache">"清除快取"</string>
     <string name="pref_privacy_clear_cache_summary">"刪除所有快取頁面內容"</string>
@@ -129,46 +132,53 @@
     <string name="pref_privacy_clear_cookies">"清除所有 cookie"</string>
     <string name="pref_privacy_clear_cookies_summary">"清除所有 cookie"</string>
     <string name="pref_privacy_clear_cookies_dlg">"所有 cookie 會被清除。"</string>
-    <string name="pref_privacy_clear_history">"清除紀錄"</string>
+    <string name="pref_privacy_clear_history">"清除記錄"</string>
     <string name="pref_privacy_clear_history_summary">"清除瀏覽記錄"</string>
-    <string name="pref_privacy_clear_history_dlg">"瀏覽記錄會被清除。"</string>
-    <string name="pref_privacy_clear_form_data">"清除表單資訊"</string>
+    <string name="pref_privacy_clear_history_dlg">"瀏覽記錄將被清除。"</string>
+    <string name="pref_privacy_clear_form_data">"清除表單資料"</string>
     <string name="pref_privacy_clear_form_data_summary">"清除所有表單"</string>
     <string name="pref_privacy_clear_form_data_dlg">"所有儲存的資料會被清除。"</string>
     <string name="pref_privacy_clear_passwords">"清除密碼"</string>
-    <string name="pref_privacy_clear_passwords_summary">"清除所有儲存密碼"</string>
+    <string name="pref_privacy_clear_passwords_summary">"清除所有儲存的密碼"</string>
     <string name="pref_privacy_clear_passwords_dlg">"所有儲存密碼會被清除"</string>
     <string name="pref_security_title">"安全性設定"</string>
     <string name="pref_security_remember_passwords">"記住密碼"</string>
     <string name="pref_security_remember_passwords_summary">"儲存網站使用者名稱與密碼"</string>
-    <string name="pref_security_save_form_data">"儲存表單資訊"</string>
+    <string name="pref_security_save_form_data">"儲存表單資料"</string>
     <string name="pref_security_save_form_data_summary">"儲存輸入的表單資料"</string>
     <string name="pref_security_show_security_warning">"顯示安全性警告"</string>
     <string name="pref_security_show_security_warning_summary">"當網站安全性有問題時,顯示警告訊息"</string>
     <string name="pref_security_accept_cookies">"接受 cookie"</string>
     <string name="pref_security_accept_cookies_summary">"允許網站存取 cookie"</string>
-    <string name="pref_text_size">"設定文字大小"</string>
+    <string name="pref_text_size">"文字大小"</string>
   <string-array name="pref_text_size_choices">
-    <item>"極小"</item>
+    <item>"最小"</item>
     <item>"小"</item>
-    <item>"一般"</item>
+    <item>"適中"</item>
     <item>"大"</item>
-    <item>"特大"</item>
+    <item>"最大"</item>
   </string-array>
     <string name="pref_text_size_dialogtitle">"文字大小"</string>
+    <string name="pref_default_zoom">"預設縮放"</string>
+  <string-array name="pref_default_zoom_choices">
+    <item>"遠"</item>
+    <item>"中"</item>
+    <item>"近"</item>
+  </string-array>
+    <string name="pref_default_zoom_dialogtitle">"預設縮放"</string>
     <string name="pref_extras_title">"進階設定"</string>
-    <string name="pref_extras_gears_enable">"啟用裝置"</string>
+    <string name="pref_extras_gears_enable">"啟用 Gears"</string>
     <string name="pref_extras_gears_enable_summary">"可擴充瀏覽器功能的應用程式"</string>
-    <string name="pref_extras_gears_settings">"裝置設定"</string>
+    <string name="pref_extras_gears_settings">"Gears 設定"</string>
     <string name="pref_plugin_installed">"外掛程式清單"</string>
     <string name="pref_plugin_installed_empty_list">"未安裝外掛程式。"</string>
     <string name="pref_extras_gears_settings_summary">"可擴充瀏覽器功能的應用程式"</string>
-    <string name="pref_extras_reset_default">"回復初始設定"</string>
-    <string name="pref_extras_reset_default_summary">"清除瀏覽器所有資料,並回復初始設定"</string>
-    <string name="pref_extras_reset_default_dlg">"瀏覽器所有資料會被清除, 並回復初始設定。"</string>
-    <string name="pref_extras_reset_default_dlg_title">"回復初始設定"</string>
-    <string name="pref_development_title">"除錯"</string>
-    <string name="pref_default_text_encoding">"設定文字編碼"</string>
+    <string name="pref_extras_reset_default">"還原至初始設定"</string>
+    <string name="pref_extras_reset_default_summary">"清除瀏覽器所有資料,並還原至初始設定"</string>
+    <string name="pref_extras_reset_default_dlg">"瀏覽器所有資料會被清除, 並還原至初始設定。"</string>
+    <string name="pref_extras_reset_default_dlg_title">"還原至初始設定"</string>
+    <string name="pref_development_title">"偵錯"</string>
+    <string name="pref_default_text_encoding">"文字編碼"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item>"Latin-1 (ISO-8859-1)"</item>
     <item>"Unicode (UTF-8)"</item>
@@ -183,20 +193,22 @@
     <string name="browserFrameNetworkErrorLabel">"資料連線問題"</string>
     <string name="browserFrameFileErrorLabel">"檔案有問題"</string>
     <string name="browserFrameFormResubmitLabel">"確認"</string>
-    <string name="browserFrameFormResubmitMessage">"您正在瀏覽的頁面包含已傳送的 (「POSTDATA」),若重新送出資料,此頁表單中的資料會重複 (例如:搜尋結果、線上購物狀態)。"</string>
+    <string name="browserFrameFormResubmitMessage">"您想瀏覽的頁面包含已傳送的 (「POSTDATA」),如重新送出資料,此頁表單上執行的操作將會重複 (包括搜尋或線上購物等)。"</string>
     <string name="loadSuspendedTitle">"沒有網路連線"</string>
     <string name="loadSuspended">"連線恢復後,此頁面會繼續載入。"</string>
-    <string name="clear_history">"清除紀錄"</string>
+    <string name="clear_history">"清除記錄"</string>
     <string name="browser_history">"最近瀏覽的頁面"</string>
     <string name="empty_history">"瀏覽記錄是空的。"</string>
     <string name="add_new_bookmark">"加入書籤…"</string>
     <string name="no_database">"沒有資料!"</string>
     <string name="search_hint">"輸入網頁位址"</string>
     <string name="search_button_text">"前往"</string>
+    <!-- no translation found for search_settings_description (1422401062529014107) -->
+    <skip />
     <string name="attention">"注意"</string>
     <string name="popup_window_attempt">"此網站試圖開啟快顯視窗。"</string>
     <string name="allow">"允許"</string>
-    <string name="block">"阻擋"</string>
+    <string name="block">"封鎖"</string>
     <string name="too_many_windows_dialog_title">"已達視窗數量限制"</string>
     <string name="too_many_windows_dialog_message">"已達最大視窗數量限制,無法開啟新視窗。"</string>
     <string name="too_many_subwindows_dialog_title">"已開啟快顯視窗"</string>
@@ -212,13 +224,13 @@
     <string name="download_clear_dlg_msg">"所有清單中的項目會被清除,並從快取中移除。"</string>
     <string name="download_cancel_dlg_title">"取消下載"</string>
     <string name="download_cancel_dlg_msg">"所有 (<xliff:g id="DOWNLOAD_COUNT">%d</xliff:g>) 下載會取消並從下載記錄中清除。"</string>
-    <string name="download_file_error_dlg_title">"超出空間"</string>
+    <string name="download_file_error_dlg_title">"空間不足"</string>
     <string name="download_file_error_dlg_msg">"無法下載 <xliff:g id="FILENAME">%s</xliff:g>。"\n" 請清除手機上的空間或再試一次。"</string>
     <string name="download_failed_generic_dlg_title">"下載失敗"</string>
     <string name="download_no_sdcard_dlg_title">"沒有 SD 卡"</string>
     <string name="download_no_sdcard_dlg_msg">"需要 SD 卡下載 <xliff:g id="FILENAME">%s</xliff:g>。"</string>
     <string name="download_sdcard_busy_dlg_title">"無法使用 SD 卡"</string>
-    <string name="download_sdcard_busy_dlg_msg">"SD 記憶卡忙碌中。若要允許下載,請選取通知區域中的 [停用 USB 儲存裝置]。"</string>
+    <string name="download_sdcard_busy_dlg_msg">"SD 記憶卡忙碌。如要允許下載,請選取通知中的 [停用 USB 儲存裝置]。"</string>
     <string name="download_no_application">"找不到可以開啟這個檔案的應用程式。"</string>
     <string name="retry">"重試"</string>
     <string name="no_downloads">"下載記錄是空的。"</string>
@@ -234,11 +246,8 @@
     <string name="download_length_required">"無法下載。物件大小無法估計。"</string>
     <string name="download_precondition_failed">"下載中斷。無法續傳。"</string>
     <string name="activity_instrumentation_test_runner">"Browser Test Runner"</string>
-    <string name="search_google">"搜尋 Google"</string>
-    <string name="permlab_readHistoryBookmarks">"讀取瀏覽器的瀏覽記錄和書籤"</string>
-    <string name="permdesc_readHistoryBookmarks">"允許應用程式讀取瀏覽器造訪過的所有 URL 和瀏覽器所有的書籤。"</string>
-    <string name="permlab_writeHistoryBookmarks">"寫入瀏覽器的瀏覽記錄和書籤"</string>
-    <string name="permdesc_writeHistoryBookmarks">"允許應用程式修改儲存在電話上的瀏覽器記錄或書籤。惡意應用程式可能會使用此選項來清除或修改您瀏覽器的資料。"</string>
+    <string name="homepage_base">"http://www.google.com/m?client=ms-{CID}"</string>
+    <string name="search_the_web">"搜尋網頁"</string>
     <string name="query_data_prompt">"允許儲存"</string>
     <string name="query_data_message">"此網站要在您的手機上儲存資訊。"</string>
     <string name="location_prompt">"存取您的位置資訊"</string>
@@ -248,7 +257,7 @@
     <string name="settings_message">"下表列出您為每個想要使用 Gears 之網站所授予的權限。"</string>
     <string name="filepicker_message">"檔案挑選程式"</string>
     <string name="image_message">"選擇的影像"</string>
-    <string name="settings_title">"裝置設定"</string>
+    <string name="settings_title">"Gears 設定"</string>
     <string name="privacy_policy">"讀取網站的隱私權政策,以瞭解網站將如何使用您的位置資訊。"</string>
     <string name="settings_storage_title">"允許本機儲存"</string>
     <string name="settings_storage_subtitle_on">"此網站可以在您的手機上儲存資訊"</string>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
new file mode 100644
index 0000000..219cc6b
--- /dev/null
+++ b/res/values/arrays.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+  -->
+<resources>
+   <string-array name="webstorage_quota_entries">
+      <item>No quota allowed</item>
+      <item>5 MB</item>
+      <item>10 MB</item>
+      <item>30 MB</item>
+      <item>100 MB</item>
+   </string-array>
+   <string-array name="webstorage_quota_entries_values">
+      <item>0</item>
+      <item>5</item>
+      <item>10</item>
+      <item>30</item>
+      <item>100</item>
+   </string-array>
+</resources>
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 98142ac..5f158a2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -38,6 +38,8 @@
     <string name="password">Password</string>
     <!-- The label on the "sign in" button -->
     <string name="action">Sign in</string>
+    <!-- The name of the bookmarks and history search suggestion source.  -->
+    <string name="bookmarks_search">Browser</string>
 
     <!-- Label for a cancel button.  It is used for multiple cancel buttons in different contexts -->
     <string name="cancel">Cancel</string>
@@ -56,7 +58,10 @@
         <!-- Case of several matches -->
         <item quantity="other"><xliff:g id="number" example="137">%d</xliff:g> matches</item>
     </plurals>
-    
+
+    <!-- Displayed on the title bar while the page is loading -->
+    <string name="title_bar_loading">Loading\u2026</string>
+
     <!-- Menu item -->
     <string name="page_info">Page info</string>
     <!-- Label for a button on an SSL error dialog that allows the user to see
@@ -141,8 +146,12 @@
     <string name="remove_bookmark">Delete bookmark</string>
     <!-- Menu item to remove the currently highlighted history entry from the list of previously visited sites -->
     <string name="remove_history_item">Remove from history</string>
+    <!-- Context menu item for setting the bookmark/history item as the homepage -->
+    <string name="set_as_homepage">Set as homepage</string>
     <!-- Toast informing the user that their action to save a bookmark has succeeded -->
     <string name="bookmark_saved">Saved to bookmarks.</string>
+    <!-- Toast confirming that the homepage has been set -->
+    <string name="homepage_set">Homepage set</string>
     <!-- Error that appears in the title of Bookmark dialog when user selects OK with empty Name field -->
     <string name="bookmark_needs_title">"Bookmark must have a name."</string>
         <!-- Error that appears in the title of Bookmark dialog when user selects OK with empty Location field -->
@@ -158,6 +167,9 @@
             currently on, but is not visible because the bookmarks page is 
             showing. -->
     <string name="bookmark_page">Bookmark last-viewed page</string>
+    <!-- Menu item in the page that displays all bookmarks.  Switches between
+            a vertical list view and a grid view which shows thumbnails -->
+    <string name="switch_mode">Switch viewing mode</string>
     <!-- Summary text under the New Bookmark item on the Bookmarks screen.
             Tells the user that if they select this item, it will bring up a
             dialog to bookmark the page that the browser is currently viewing,
@@ -282,14 +294,18 @@
     <string name="pref_content_autofit">Auto-fit pages</string>
     <!-- Settings summary -->
     <string name="pref_content_autofit_summary">Format Web pages to fit the screen</string>
+    <!-- Settings label for enabling a mode where the browser is always set to landscape mode -->
+    <string name="pref_content_landscape_only">Landscape only display</string>
+    <!-- Settings summary -->
+    <string name="pref_content_landscape_only_summary">Always read pages in the wider, landscape screen orientation</string>
     <!-- Settings screen, section title -->
     <string name="pref_privacy_title">Privacy settings</string>
     <!-- Settings label -->
     <string name="pref_privacy_clear_cache">Clear cache</string>
     <!-- Settings summary -->
-    <string name="pref_privacy_clear_cache_summary">Delete all cached page content</string>
+    <string name="pref_privacy_clear_cache_summary">Clear locally cached content and databases</string>
     <!-- Confirmation dialog message -->
-    <string name="pref_privacy_clear_cache_dlg">The cache will be cleared.</string>
+    <string name="pref_privacy_clear_cache_dlg">Locally cached content and databases will be cleared.</string>
     <!-- Settings label -->
     <string name="pref_privacy_clear_cookies">Clear all cookie data</string>
     <!-- Settings summary -->
@@ -314,6 +330,16 @@
     <string name="pref_privacy_clear_passwords_summary">Clear all the saved passwords</string>
     <!-- Confirmation dialog message -->
     <string name="pref_privacy_clear_passwords_dlg">All saved passwords will be cleared.</string>
+    <!-- Settings label -->
+    <string name="pref_privacy_request_location">Enable location</string>
+    <!-- Settings summary -->
+    <string name="pref_privacy_request_location_summary">Allow sites to request access to your location</string>
+    <!-- Settings label -->
+    <string name="pref_privacy_clear_location_requests">Clear location access</string>
+    <!-- Settings summary -->
+    <string name="pref_privacy_clear_location_requests_summary">Clear location access for all websites</string>
+    <!-- Confirmation dialog message -->
+    <string name="pref_privacy_clear_location_requests_dlg">Clear all previous location requests</string>
     <!-- Settings screen, section title -->
     <string name="pref_security_title">Security settings</string>
     <!-- Settings label -->
@@ -333,7 +359,7 @@
     <!-- Settings summary -->
     <string name="pref_security_accept_cookies_summary">Allow sites to save and read \"cookie\" data</string>
     <!-- Settings label -->
-    <string name="pref_text_size">Set text size</string>
+    <string name="pref_text_size">Text size</string>
     <!-- Settings text size options; appear in Text size dialog box -->
     <string-array name="pref_text_size_choices">
         <item>Tiny</item>
@@ -352,6 +378,22 @@
         <item><xliff:g>LARGER</xliff:g></item>
         <item><xliff:g>LARGEST</xliff:g></item>
     </string-array>
+    <!-- Settings label -->
+    <string name="pref_default_zoom">Default zoom</string>
+    <!-- Settings default zoom options; appear in default zoom dialog box -->
+    <string-array name="pref_default_zoom_choices">
+        <item>Far</item>
+        <item>Medium</item>
+        <item>Close</item>
+    </string-array>
+    <!-- Title of dialog for setting the default zoom -->
+    <string name="pref_default_zoom_dialogtitle">Default zoom</string>
+    <!-- Do not translate -->
+    <string-array name="pref_default_zoom_values" translatable="false">
+        <item><xliff:g>FAR</xliff:g></item>
+        <item><xliff:g>MEDIUM</xliff:g></item>
+        <item><xliff:g>CLOSE</xliff:g></item>
+    </string-array>
     <!-- Settings screen, section title -->
     <string name="pref_extras_title">Advanced settings</string>
     <!-- Settings label -->
@@ -359,6 +401,10 @@
     <!-- Settings summary -->
     <string name="pref_extras_gears_enable_summary">Applications that extend browser functionality</string>
     <!-- Settings label -->
+    <string name="pref_extras_website_settings">Website Settings</string>
+    <!-- Settings summary -->
+    <string name="pref_extras_website_settings_summary">View advanced settings for individual websites</string>
+    <!-- Settings label -->
     <string name="pref_extras_gears_settings">Gears settings</string>
     <!-- Settings summary -->
     <string name="pref_plugin_installed">Plugins list</string>
@@ -386,7 +432,7 @@
     <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_nav_dump" translatable="false">Enable nav cache dump</string>
     <!-- Do not tranlsate.  Development option -->
-    <string name="pref_development_search_url" translatable="false">Set search URL</string>
+    <string name="js_engine_flags" translatable="false">Set JS flags</string>
     <!-- Do not tranlsate.  Development option -->
     <string name="pref_development_uastring" translatable="false">UAString</string>
     <!-- Do not tranlsate.  Development option -->
@@ -402,7 +448,7 @@
         <item>2</item>
     </string-array>
     <!-- Settings screen, setting option name -->
-    <string name="pref_default_text_encoding">Set text encoding</string>
+    <string name="pref_default_text_encoding">Text encoding</string>
     <!-- Options in the Default encoding dialog box -->
     <string-array name="pref_default_text_encoding_choices">
         <item>Latin-1 (ISO-8859-1)</item>
@@ -462,6 +508,8 @@
     <!-- This string is for the browser "Go To" UI. -->
     <!-- This is the button label in the "Go To" UI. -->
     <string name="search_button_text">Go</string>
+    <!-- The string used to describe the browser as a searchable item within system search settings. -->
+    <string name="search_settings_description">Bookmarks and web history</string>
 
     <!-- Pop-up window dialog -->
     <!-- Title for a dialog informing the user that the site is attempting to
@@ -582,6 +630,11 @@
     <!-- Do not translate.  Testing only -->
     <string name="dump_nav" translatable="false">Dump navigation cache</string>
 
+    <!-- The default homepage. If it starts with "http://www.google" and the
+            user signs up the device with a Google sites account, the site's
+            domain will be appended. -->
+    <string name="homepage_base">http://www.google.com/m?client=ms-{CID}</string>
+
     <!-- Bookmarks -->
     <string-array name="bookmarks" translatable="false">
         <item>Google</item>
@@ -625,23 +678,22 @@
     <!-- Do not translate.  This string is an internal URI, not seen in the UI. -->
     <string name="google_search_base" translatable="false">
         http://www.google.com/m?hl=%1$s&amp;gl=%2$s&amp;</string>
+    
+    <!-- The description of the suggestion that lets the user search the web for the query currently
+         in the text field. -->
+    <string name="search_the_web">Search the web</string>
 
-    <!-- Used in Goto to indicate Google search -->
-    <string name="search_google">Search Google</string>
-
-    <!-- Title of an application permission, listed so the user can choose whether 
-        they want to allow the application to do this. -->
+    <!-- FIXME: the next four strings(read/write history permissions) should be removed.
+         At the moment actually removing them requires manually deleting all of the
+         existing translations. -->
+    <!-- Do not translate -->
     <string name="permlab_readHistoryBookmarks">read Browser\'s history and bookmarks</string>
-    <!-- Description of an application permission, listed so the user can choose whether
-        they want to allow the application to do this. -->
-    <string name="permdesc_readHistoryBookmarks">Allows the application to read all 
+    <!-- Do not translate -->
+    <string name="permdesc_readHistoryBookmarks">Allows the application to read all
         the URLs that the Browser has visited, and all of the Browser\'s bookmarks.</string>
-
-    <!-- Title of an application permission, listed so the user can choose whether 
-        they want to allow the application to do this. -->
+    <!-- Do not translate -->
     <string name="permlab_writeHistoryBookmarks">write Browser\'s history and bookmarks</string>
-    <!-- Description of an application permission, listed so the user can choose whether
-        they want to allow the application to do this. -->
+    <!-- Do not translate -->
     <string name="permdesc_writeHistoryBookmarks">Allows an application to modify the
         Browser\'s history or bookmarks stored on your phone. Malicious applications 
         can use this to erase or modify your Browser\'s data.</string>
@@ -649,6 +701,9 @@
     <!-- Gears Dialogs -->
     <string name="query_data_prompt">Allow storage</string>
     <string name="query_data_message">This web site would like to store information on your phone.</string>
+    <string name="query_storage_quota_prompt">Increase storage quota</string>
+    <string name="query_storage_quota_message">This web site is over its current
+      storage limit. Would you like to increase its quota limit ?</string>
     <string name="location_prompt">Access your location</string>
     <string name="location_message">This web site would like to have access to your location.</string>
     <string name="shortcut_prompt">Create a shortcut</string>
@@ -705,6 +760,20 @@
     <string name="unrecognized_dialog_message">Unrecognized dialog type</string>
     <string name="default_button">OK</string>
 
+    <!-- HTML5 dialogs -->
+    <!-- Used as a toast notification after the user close the html5 webstorage permission dialog -->
+    <string name="webstorage_notification">The quota for this site can be changed in the Local Storage section of the Browser settings</string>
+    <!-- Used in the Browser Settings -->
+    <string name="webstorage_clear_data_title">Clear Stored Data</string>
+    <string name="webstorage_clear_data_summary">Remove all databases associated with this website</string>
+    <!-- Confirmation dialog when the user ask to clear all data for an origin -->
+    <string name="webstorage_clear_data_dialog_title">Clear All Data</string>
+    <string name="webstorage_clear_data_dialog_message">All stored data by this origin will be deleted</string>
+    <string name="webstorage_clear_data_dialog_ok_button">Clear All</string>
+    <string name="webstorage_clear_data_dialog_cancel_button">Cancel</string>
+    <!-- Strings used in the summary of origins -->
+    <string name="webstorage_origin_summary_mb_stored">MB stored on your phone</string>
+
     <!-- Zoom-related strings --><skip />
     <!-- Caption for a button that is shown when the zoom widget is showing.  The button's action will switch to the zoom overview mode. -->
     <string name="zoom_overview_button_text">Overview</string>
diff --git a/res/xml/bookmarks_searchable.xml b/res/xml/bookmarks_searchable.xml
new file mode 100644
index 0000000..de56add
--- /dev/null
+++ b/res/xml/bookmarks_searchable.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+    android:label="@string/bookmarks_search"
+    android:searchButtonText="@string/search_button_text"
+    android:searchMode="queryRewriteFromData"
+    android:inputType="textUri"
+    android:imeOptions="actionGo"
+
+    android:includeInGlobalSearch="true"
+    android:searchSettingsDescription="@string/search_settings_description"
+    android:searchSuggestAuthority="browser"
+    android:searchSuggestPath="bookmarks"
+    android:searchSuggestSelection="url LIKE ?"
+    android:searchSuggestIntentAction="android.intent.action.VIEW"
+/>
diff --git a/res/xml/browser_preferences.xml b/res/xml/browser_preferences.xml
index fdfa839..dffb550 100644
--- a/res/xml/browser_preferences.xml
+++ b/res/xml/browser_preferences.xml
@@ -29,6 +29,14 @@
                 android:dialogTitle="@string/pref_text_size_dialogtitle" />
 
         <ListPreference
+                android:key="default_zoom"
+                android:title="@string/pref_default_zoom"
+                android:defaultValue="MEDIUM"
+                android:entries="@array/pref_default_zoom_choices"
+                android:entryValues="@array/pref_default_zoom_values"
+                android:dialogTitle="@string/pref_default_zoom_dialogtitle" />
+
+        <ListPreference
                 android:key="default_text_encoding"
                 android:title="@string/pref_default_text_encoding"
                 android:defaultValue="@string/pref_default_text_encoding_default"
@@ -54,6 +62,12 @@
                 android:summary="@string/pref_content_autofit_summary" />  
 
         <CheckBoxPreference
+                android:key="landscape_only"
+                android:defaultValue="false"
+                android:title="@string/pref_content_landscape_only"
+                android:summary="@string/pref_content_landscape_only_summary" />
+
+        <CheckBoxPreference
                 android:key="enable_javascript"
                 android:defaultValue="true"
                 android:title="@string/pref_content_javascript" />     
@@ -120,6 +134,24 @@
                 android:dialogTitle="@string/clear" 
                 android:dialogIcon="@android:drawable/ic_dialog_alert"/>
 
+        <!-- below preferences will be shown when html5 location is implemented -->
+        <!--
+
+        <CheckBoxPreference
+                android:key="request_location"
+                android:defaultValue="true"
+                android:title="@string/pref_privacy_request_location"
+                android:summary="@string/pref_privacy_request_location_summary" />
+
+        <com.android.browser.BrowserYesNoPreference
+                android:key="privacy_clear_location_requests"
+                android:title="@string/pref_privacy_clear_location_requests"
+                android:summary="@string/pref_privacy_clear_location_requests_summary"
+                android:dialogMessage="@string/pref_privacy_clear_location_requests_dlg"
+                android:dialogTitle="@string/clear"
+                android:dialogIcon="@android:drawable/ic_dialog_alert"/>
+        -->
+
     </PreferenceCategory>
     
         <PreferenceCategory
@@ -165,6 +197,11 @@
                     android:title="@string/pref_extras_gears_settings"
                     android:summary="@string/pref_extras_gears_settings_summary" />
 
+            <PreferenceScreen
+                  android:key="website_settings"
+                  android:title="@string/pref_extras_website_settings"
+                  android:summary="@string/pref_extras_website_settings_summary" />
+
             <com.android.browser.BrowserYesNoPreference
                     android:key="reset_default_preferences"
                     android:title="@string/pref_extras_reset_default"
diff --git a/res/xml/debug_preferences.xml b/res/xml/debug_preferences.xml
index 4f55f6b..00982fc 100644
--- a/res/xml/debug_preferences.xml
+++ b/res/xml/debug_preferences.xml
@@ -50,10 +50,10 @@
             android:defaultValue="false"
             android:title="@string/pref_development_nav_dump" />
 
-        <com.android.browser.BrowserSearchpagePreference
-                android:key="search_url" 
-                android:title="@string/pref_development_search_url"
-                android:singleLine="true" />
+        <EditTextPreference
+            android:key="js_engine_flags"
+            android:title="@string/js_engine_flags"
+            android:singleLine="true" />
 
         <ListPreference
             android:key="user_agent"
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index cf3fe70..e827a7e 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -18,18 +18,14 @@
 
 import android.app.Activity;
 import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
 import android.content.Intent;
 import android.content.res.Resources;
-import android.database.Cursor;
 import android.net.ParseException;
 import android.net.WebAddress;
 import android.os.Bundle;
 import android.provider.Browser;
 import android.view.View;
 import android.view.Window;
-import android.webkit.WebIconDatabase;
 import android.widget.EditText;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -46,11 +42,6 @@
     private View        mCancelButton;
     private boolean     mEditingExisting;
     private Bundle      mMap;
-    
-    private static final String[]   mProjection = 
-        { "_id", "url", "bookmark", "created", "title", "visits" };
-    private static final String     WHERE_CLAUSE = "url = ?";
-    private final String[]          SELECTION_ARGS = new String[1];
 
     private View.OnClickListener mSaveBookmark = new View.OnClickListener() {
         public void onClick(View v) {
@@ -151,70 +142,7 @@
                 setResult(RESULT_OK, (new Intent()).setAction(
                         getIntent().toString()).putExtras(mMap));
             } else {
-                // Want to append to the beginning of the list
-                long creationTime = new Date().getTime();
-                SELECTION_ARGS[0] = url;
-                ContentResolver cr = getContentResolver();
-                Cursor c = cr.query(Browser.BOOKMARKS_URI,
-                        mProjection,
-                        WHERE_CLAUSE,
-                        SELECTION_ARGS,
-                        null);
-                ContentValues map = new ContentValues();
-                if (c.moveToFirst() && c.getInt(c.getColumnIndexOrThrow(
-                        Browser.BookmarkColumns.BOOKMARK)) == 0) {
-                    // This means we have been to this site but not bookmarked
-                    // it, so convert the history item to a bookmark                    
-                    map.put(Browser.BookmarkColumns.CREATED, creationTime);
-                    map.put(Browser.BookmarkColumns.TITLE, title);
-                    map.put(Browser.BookmarkColumns.BOOKMARK, 1);
-                    cr.update(Browser.BOOKMARKS_URI, map, 
-                            "_id = " + c.getInt(0), null);
-                } else {
-                    int count = c.getCount();
-                    boolean matchedTitle = false;
-                    for (int i = 0; i < count; i++) {
-                        // One or more bookmarks already exist for this site.
-                        // Check the names of each
-                        c.moveToPosition(i);
-                        if (c.getString(c.getColumnIndexOrThrow(
-                                Browser.BookmarkColumns.TITLE)).equals(title)) {
-                            // The old bookmark has the same name.
-                            // Update its creation time.
-                            map.put(Browser.BookmarkColumns.CREATED,
-                                    creationTime);
-                            cr.update(Browser.BOOKMARKS_URI, map, 
-                                    "_id = " + c.getInt(0), null);
-                            matchedTitle = true;
-                        }
-                    }
-                    if (!matchedTitle) {
-                        // Adding a bookmark for a site the user has visited,
-                        // or a new bookmark (with a different name) for a site
-                        // the user has visited
-                        map.put(Browser.BookmarkColumns.TITLE, title);
-                        map.put(Browser.BookmarkColumns.URL, url);
-                        map.put(Browser.BookmarkColumns.CREATED, creationTime);
-                        map.put(Browser.BookmarkColumns.BOOKMARK, 1);
-                        map.put(Browser.BookmarkColumns.DATE, 0);
-                        int visits = 0;
-                        if (count > 0) {
-                            // The user has already bookmarked, and possibly
-                            // visited this site.  However, they are creating
-                            // a new bookmark with the same url but a different
-                            // name.  The new bookmark should have the same
-                            // number of visits as the already created bookmark.
-                            visits = c.getInt(c.getColumnIndexOrThrow(
-                                    Browser.BookmarkColumns.VISITS));
-                        }
-                        // Bookmark starts with 3 extra visits so that it will
-                        // bubble up in the most visited and goto search box
-                        map.put(Browser.BookmarkColumns.VISITS, visits + 3);
-                        cr.insert(Browser.BOOKMARKS_URI, map);
-                    }
-                }
-                WebIconDatabase.getInstance().retainIconForPageUrl(url);
-                c.deactivate();
+                Bookmarks.addBookmark(null, getContentResolver(), url, title);
                 setResult(RESULT_OK);
             }
         } catch (IllegalStateException e) {
diff --git a/src/com/android/browser/AddNewBookmark.java b/src/com/android/browser/AddNewBookmark.java
index a75d002..5308f6b 100644
--- a/src/com/android/browser/AddNewBookmark.java
+++ b/src/com/android/browser/AddNewBookmark.java
@@ -47,17 +47,7 @@
         mUrlText = (TextView) findViewById(R.id.url);
         mImageView = (ImageView) findViewById(R.id.favicon);
     }
-    
-    /**
-     *  Copy this BookmarkItem to item.
-     *  @param item BookmarkItem to receive the info from this BookmarkItem.
-     */
-    /* package */ void copyTo(AddNewBookmark item) {
-        item.mTextView.setText(mTextView.getText());
-        item.mUrlText.setText(mUrlText.getText());
-        item.mImageView.setImageDrawable(mImageView.getDrawable());
-    }
-    
+
     /**
      *  Set the new url for the bookmark item.
      *  @param url  The new url for the bookmark item.
diff --git a/src/com/android/browser/BookmarkGridPage.java b/src/com/android/browser/BookmarkGridPage.java
new file mode 100644
index 0000000..5517d9c
--- /dev/null
+++ b/src/com/android/browser/BookmarkGridPage.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.content.Context;
+import android.widget.GridView;
+
+import java.util.ArrayList;
+
+public class BookmarkGridPage extends GridView {
+    private final static int            SPACING = 10;
+    private BrowserBookmarksAdapter     mAdapter;
+
+    public BookmarkGridPage(Context context, BrowserBookmarksAdapter adapter) {
+        super(context);
+        setNumColumns(3);
+        mAdapter = adapter;
+        setAdapter(mAdapter);
+        setFocusable(true);
+        setFocusableInTouchMode(true);
+        setSelector(android.R.drawable.gallery_thumb);
+        setVerticalSpacing(SPACING);
+        setHorizontalSpacing(SPACING);
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        int thumbHeight = (h - 2 * (SPACING + getListPaddingTop()
+                + getListPaddingBottom())) / 3;
+        mAdapter.heightChanged(thumbHeight);
+        super.onSizeChanged(w, h, oldw, oldh);
+    }
+}
diff --git a/src/com/android/browser/BookmarkSearch.java b/src/com/android/browser/BookmarkSearch.java
new file mode 100644
index 0000000..4d3ca0f
--- /dev/null
+++ b/src/com/android/browser/BookmarkSearch.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+/**
+ * This activity is never started from the browser. Its purpose is to provide bookmark suggestions
+ * to global search (through its searchable meta-data), and to handle the intents produced
+ * by clicking such suggestions.
+ */
+public class BookmarkSearch extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Intent intent = getIntent();
+        if (intent != null) {
+            String action = intent.getAction();
+            if (Intent.ACTION_VIEW.equals(action)) {
+                intent.setClass(this, BrowserActivity.class);
+                startActivity(intent);
+            }
+        }
+        finish();
+    }
+
+}
diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
new file mode 100644
index 0000000..97e6b20
--- /dev/null
+++ b/src/com/android/browser/Bookmarks.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.Browser;
+import android.util.Log;
+import android.webkit.WebIconDatabase;
+import android.widget.Toast;
+
+import java.util.Date;
+
+/**
+ *  This class is purely to have a common place for adding/deleting bookmarks.
+ */
+/* package */ class Bookmarks {
+    private static final String     WHERE_CLAUSE
+            = "url = ? OR url = ? OR url = ? OR url = ?";
+    private static final String     WHERE_CLAUSE_SECURE = "url = ? OR url = ?";
+
+    private static String[]         SELECTION_ARGS;
+
+    /**
+     *  Add a bookmark to the database.
+     *  @param context Context of the calling Activity.  This is used to make
+     *          Toast confirming that the bookmark has been added.  If the
+     *          caller provides null, the Toast will not be shown.
+     *  @param cr The ContentResolver being used to add the bookmark to the db.
+     *  @param url URL of the website to be bookmarked.
+     *  @param name Provided name for the bookmark.
+     */
+    /* package */ static void addBookmark(Context context,
+            ContentResolver cr, String url, String name) {
+        // Want to append to the beginning of the list
+        long creationTime = new Date().getTime();
+        // First we check to see if the user has already visited this
+        // site.  They may have bookmarked it in a different way from
+        // how it's stored in the database, so allow different combos
+        // to map to the same url.
+        boolean secure = false;
+        String compareString = url;
+        if (compareString.startsWith("http://")) {
+            compareString = compareString.substring(7);
+        } else if (compareString.startsWith("https://")) {
+            compareString = compareString.substring(8);
+            secure = true;
+        }
+        if (compareString.startsWith("www.")) {
+            compareString = compareString.substring(4);
+        }
+        if (secure) {
+            SELECTION_ARGS = new String[2];
+            SELECTION_ARGS[0] = "https://" + compareString;
+            SELECTION_ARGS[1] = "https://www." + compareString;
+        } else {
+            SELECTION_ARGS = new String[4];
+            SELECTION_ARGS[0] = compareString;
+            SELECTION_ARGS[1] = "www." + compareString;
+            SELECTION_ARGS[2] = "http://" + compareString;
+            SELECTION_ARGS[3] = "http://" + SELECTION_ARGS[1];
+        }
+        Cursor cursor = cr.query(Browser.BOOKMARKS_URI,
+                Browser.HISTORY_PROJECTION,
+                secure ? WHERE_CLAUSE_SECURE : WHERE_CLAUSE,
+                SELECTION_ARGS,
+                null);
+        ContentValues map = new ContentValues();
+        if (cursor.moveToFirst() && cursor.getInt(
+                Browser.HISTORY_PROJECTION_BOOKMARK_INDEX) == 0) {
+            // This means we have been to this site but not bookmarked
+            // it, so convert the history item to a bookmark
+            map.put(Browser.BookmarkColumns.CREATED, creationTime);
+            map.put(Browser.BookmarkColumns.TITLE, name);
+            map.put(Browser.BookmarkColumns.BOOKMARK, 1);
+            cr.update(Browser.BOOKMARKS_URI, map,
+                    "_id = " + cursor.getInt(0), null);
+        } else {
+            int count = cursor.getCount();
+            boolean matchedTitle = false;
+            for (int i = 0; i < count; i++) {
+                // One or more bookmarks already exist for this site.
+                // Check the names of each
+                cursor.moveToPosition(i);
+                if (cursor.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX)
+                        .equals(name)) {
+                    // The old bookmark has the same name.
+                    // Update its creation time.
+                    map.put(Browser.BookmarkColumns.CREATED,
+                            creationTime);
+                    cr.update(Browser.BOOKMARKS_URI, map,
+                            "_id = " + cursor.getInt(0), null);
+                    matchedTitle = true;
+                    break;
+                }
+            }
+            if (!matchedTitle) {
+                // Adding a bookmark for a site the user has visited,
+                // or a new bookmark (with a different name) for a site
+                // the user has visited
+                map.put(Browser.BookmarkColumns.TITLE, name);
+                map.put(Browser.BookmarkColumns.URL, url);
+                map.put(Browser.BookmarkColumns.CREATED, creationTime);
+                map.put(Browser.BookmarkColumns.BOOKMARK, 1);
+                map.put(Browser.BookmarkColumns.DATE, 0);
+                int visits = 0;
+                if (count > 0) {
+                    // The user has already bookmarked, and possibly
+                    // visited this site.  However, they are creating
+                    // a new bookmark with the same url but a different
+                    // name.  The new bookmark should have the same
+                    // number of visits as the already created bookmark.
+                    visits = cursor.getInt(
+                            Browser.HISTORY_PROJECTION_VISITS_INDEX);
+                }
+                // Bookmark starts with 3 extra visits so that it will
+                // bubble up in the most visited and goto search box
+                map.put(Browser.BookmarkColumns.VISITS, visits + 3);
+                cr.insert(Browser.BOOKMARKS_URI, map);
+            }
+        }
+        WebIconDatabase.getInstance().retainIconForPageUrl(url);
+        cursor.deactivate();
+        if (context != null) {
+            Toast.makeText(context, R.string.added_to_bookmarks,
+                    Toast.LENGTH_LONG).show();
+        }
+    }
+
+    /**
+     *  Remove a bookmark from the database.  If the url is a visited site, it
+     *  will remain in the database, but only as a history item, and not as a
+     *  bookmarked site.
+     *  @param context Context of the calling Activity.  This is used to make
+     *          Toast confirming that the bookmark has been removed.  If the
+     *          caller provides null, the Toast will not be shown.
+     *  @param cr The ContentResolver being used to remove the bookmark.
+     *  @param url URL of the website to be removed.
+     */
+    /* package */ static void removeFromBookmarks(Context context,
+            ContentResolver cr, String url) {
+        Cursor cursor = cr.query(
+                Browser.BOOKMARKS_URI,
+                Browser.HISTORY_PROJECTION,
+                "url = ?",
+                new String[] { url },
+                null);
+        boolean first = cursor.moveToFirst();
+        // Should be in the database no matter what
+        if (!first) {
+            throw new AssertionError("URL is not in the database!");
+        }
+        // Remove from bookmarks
+        WebIconDatabase.getInstance().releaseIconForPageUrl(url);
+        Uri uri = ContentUris.withAppendedId(Browser.BOOKMARKS_URI,
+                cursor.getInt(Browser.HISTORY_PROJECTION_ID_INDEX));
+        int numVisits = cursor.getInt(
+                Browser.HISTORY_PROJECTION_VISITS_INDEX);
+        if (0 == numVisits) {
+            cr.delete(uri, null, null);
+        } else {
+            // It is no longer a bookmark, but it is still a visited
+            // site.
+            ContentValues values = new ContentValues();
+            values.put(Browser.BookmarkColumns.BOOKMARK, 0);
+            try {
+                cr.update(uri, values, null, null);
+            } catch (IllegalStateException e) {
+                Log.e("removeFromBookmarks", "no database!");
+            }
+        }
+        if (context != null) {
+            Toast.makeText(context, R.string.removed_from_bookmarks,
+                    Toast.LENGTH_LONG).show();
+        }
+        cursor.deactivate();
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/browser/Browser.java b/src/com/android/browser/Browser.java
index 32cee67..524f789 100644
--- a/src/com/android/browser/Browser.java
+++ b/src/com/android/browser/Browser.java
@@ -16,7 +16,6 @@
 
 package com.android.browser;
 
-import android.util.Config;
 import android.util.Log;
 
 import android.app.Application;
@@ -30,6 +29,15 @@
 
     private final static String LOGTAG = "browser";
 
+    // Set to true to enable extra debugging.
+    final static boolean DEBUG = false;
+    
+    // Set to true to enable verbose logging.
+    final static boolean LOGV_ENABLED = DEBUG;
+
+    // Set to true to enable extra debug logging.
+    final static boolean LOGD_ENABLED = true;
+
     /**
      * Specifies a heap utilization ratio that works better
      * for the browser than the default ratio does.
@@ -40,7 +48,7 @@
     }
 
     public void onCreate() {
-        if (Config.LOGV)
+        if (LOGV_ENABLED)
             Log.v(LOGTAG, "Browser.onCreate: this=" + this);
         // Fix heap utilization for better heap size characteristics.
         VMRuntime.getRuntime().setTargetHeapUtilization(
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index ca788a6..43f1acd 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -18,7 +18,6 @@
 
 import com.google.android.googleapps.IGoogleLoginService;
 import com.google.android.googlelogin.GoogleLoginServiceConstants;
-import com.google.android.providers.GoogleSettings.Partner;
 
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -29,6 +28,7 @@
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -36,6 +36,7 @@
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.DialogInterface.OnCancelListener;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.AssetManager;
@@ -75,8 +76,6 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.Contacts;
 import android.provider.Downloads;
@@ -86,7 +85,6 @@
 import android.text.TextUtils;
 import android.text.format.DateFormat;
 import android.text.util.Regex;
-import android.util.Config;
 import android.util.Log;
 import android.view.ContextMenu;
 import android.view.Gravity;
@@ -111,11 +109,14 @@
 import android.webkit.CookieSyncManager;
 import android.webkit.DownloadListener;
 import android.webkit.HttpAuthHandler;
+import android.webkit.PluginManager;
 import android.webkit.SslErrorHandler;
 import android.webkit.URLUtil;
 import android.webkit.WebChromeClient;
+import android.webkit.WebChromeClient.CustomViewCallback;
 import android.webkit.WebHistoryItem;
 import android.webkit.WebIconDatabase;
+import android.webkit.WebStorage;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.widget.EditText;
@@ -125,6 +126,7 @@
 import android.widget.Toast;
 
 import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -132,6 +134,7 @@
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.text.ParseException;
@@ -139,7 +142,6 @@
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.LinkedList;
-import java.util.Locale;
 import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -151,11 +153,27 @@
         View.OnCreateContextMenuListener,
         DownloadListener {
 
+    /* Define some aliases to make these debugging flags easier to refer to.
+     * This file imports android.provider.Browser, so we can't just refer to "Browser.DEBUG".
+     */
+    private final static boolean DEBUG = com.android.browser.Browser.DEBUG;
+    private final static boolean LOGV_ENABLED = com.android.browser.Browser.LOGV_ENABLED;
+    private final static boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED;
+
     private IGoogleLoginService mGls = null;
     private ServiceConnection mGlsConnection = null;
 
     private SensorManager mSensorManager = null;
 
+    private WebStorage.QuotaUpdater mWebStorageQuotaUpdater = null;
+
+    // These are single-character shortcuts for searching popular sources.
+    private static final int SHORTCUT_INVALID = 0;
+    private static final int SHORTCUT_GOOGLE_SEARCH = 1;
+    private static final int SHORTCUT_WIKIPEDIA_SEARCH = 2;
+    private static final int SHORTCUT_DICTIONARY_SEARCH = 3;
+    private static final int SHORTCUT_GOOGLE_MOBILE_LOCAL_SEARCH = 4;
+
     /* Whitelisted webpages
     private static HashSet<String> sWhiteList;
 
@@ -184,6 +202,9 @@
                 try {
                     if (mGls == null) return;
 
+                    if (!homepage.startsWith("http://www.google.")) return;
+                    if (homepage.indexOf('?') == -1) return;
+
                     String hostedUser = mGls.getAccount(GoogleLoginServiceConstants.PREFER_HOSTED);
                     String googleUser = mGls.getAccount(GoogleLoginServiceConstants.REQUIRE_GOOGLE);
 
@@ -203,8 +224,7 @@
 
                     if (googleUser == null || !hostedUser.equals(googleUser)) {
                         String domain = hostedUser.substring(hostedUser.lastIndexOf('@')+1);
-                        homepage = "http://www.google.com/m/a/" + domain + "?client=ms-" +
-                            Partner.getString(BrowserActivity.this.getContentResolver(), Partner.CLIENT_ID);
+                        homepage = homepage.replace("?", "/a/" + domain + "?");
                     }
                 } catch (RemoteException ignore) {
                     // Login service died; carry on
@@ -373,7 +393,7 @@
                 s.loadFromDb(mContext);
                 pluginsPath = s.getPluginsPath();
             }
-            if (Config.LOGV) {
+            if (LOGV_ENABLED) {
                 Log.v(TAG, "Plugin path: " + pluginsPath);
             }
         }
@@ -400,7 +420,7 @@
          * We delete the directory, then recreate it.
          */
         public void cleanPluginsDirectory() {
-          if (Config.LOGV) {
+          if (LOGV_ENABLED) {
             Log.v(TAG, "delete plugins directory: " + pluginsPath);
           }
           File pluginsDirectory = new File(pluginsPath);
@@ -416,7 +436,7 @@
          */
         public void copyBuildInfos() {
           try {
-            if (Config.LOGV) {
+            if (LOGV_ENABLED) {
               Log.v(TAG, "Copy build infos to the plugins directory");
             }
             File buildInfoFile = new File(SYSTEM_BUILD_INFOS_FILE);
@@ -448,7 +468,7 @@
             File buildInfoFile = new File(SYSTEM_BUILD_INFOS_FILE);
             File buildInfoPlugins = new File(pluginsPath, BUILD_INFOS_FILE);
             if (!buildInfoPlugins.exists()) {
-              if (Config.LOGV) {
+              if (LOGV_ENABLED) {
                 Log.v(TAG, "build.prop in plugins directory " + pluginsPath
                   + " does not exist, therefore it's a new system image");
               }
@@ -458,7 +478,7 @@
               String buildInfoPlugin = contentsOfFile(buildInfoPlugins);
               if (buildInfo == null || buildInfoPlugin == null
                   || buildInfo.compareTo(buildInfoPlugin) != 0) {
-                if (Config.LOGV) {
+                if (LOGV_ENABLED) {
                   Log.v(TAG, "build.prop are different, "
                     + " therefore it's a new system image");
                 }
@@ -491,7 +511,7 @@
               String path = entry.getName().substring(zipFilterLength);
               File outputFile = new File(pluginsPath, path);
               if (!outputFile.exists()) {
-                if (Config.LOGV) {
+                if (LOGV_ENABLED) {
                   Log.v(TAG, "checkIsDifferentVersions(): extracted file "
                     + path + " does not exist, we have a different version");
                 }
@@ -536,7 +556,7 @@
                     outputFile.getParentFile().mkdirs();
 
                     if (outputFile.exists() && !mDoOverwrite) {
-                        if (Config.LOGV) {
+                        if (LOGV_ENABLED) {
                             Log.v(TAG, path + " already extracted.");
                         }
                     } else {
@@ -548,7 +568,7 @@
                                 path + TEMPORARY_EXTENSION);
                         }
                         FileOutputStream fos = new FileOutputStream(outputFile);
-                        if (Config.LOGV) {
+                        if (LOGV_ENABLED) {
                             Log.v(TAG, "copy " + entry + " to "
                                 + pluginsPath + "/" + path);
                         }
@@ -563,7 +583,7 @@
                     File renamedFile = (File) elems.nextElement();
                     File sourceFile = new File(renamedFile.getPath()
                         + TEMPORARY_EXTENSION);
-                    if (Config.LOGV) {
+                    if (LOGV_ENABLED) {
                         Log.v(TAG, "rename " + sourceFile.getPath()
                             + " to " + renamedFile.getPath());
                     }
@@ -571,11 +591,6 @@
                 }
 
                 copyBuildInfos();
-
-                // Refresh the plugin list.
-                if (mTabControl.getCurrentWebView() != null) {
-                    mTabControl.getCurrentWebView().refreshPlugins(false);
-                }
             } catch (IOException e) {
                 Log.e(TAG, "IO Exception: " + e);
             }
@@ -622,16 +637,22 @@
         }
     }
 
+    // Flag to enable the touchable browser bar with buttons
+    private final boolean CUSTOM_BROWSER_BAR = true;
+
     @Override public void onCreate(Bundle icicle) {
-        if (Config.LOGV) {
+        if (LOGV_ENABLED) {
             Log.v(LOGTAG, this + " onStart");
         }
         super.onCreate(icicle);
-        this.requestWindowFeature(Window.FEATURE_LEFT_ICON);
-        this.requestWindowFeature(Window.FEATURE_RIGHT_ICON);
-        this.requestWindowFeature(Window.FEATURE_PROGRESS);
-        this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
-
+        if (CUSTOM_BROWSER_BAR) {
+            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
+        } else {
+            this.requestWindowFeature(Window.FEATURE_LEFT_ICON);
+            this.requestWindowFeature(Window.FEATURE_RIGHT_ICON);
+            this.requestWindowFeature(Window.FEATURE_PROGRESS);
+            this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+        }
         // test the browser in OpenGL
         // requestWindowFeature(Window.FEATURE_OPENGL);
 
@@ -639,9 +660,6 @@
 
         mResolver = getContentResolver();
 
-        setBaseSearchUrl(PreferenceManager.getDefaultSharedPreferences(this)
-                .getString("search_url", ""));
-
         //
         // start MASF proxy service
         //
@@ -659,8 +677,28 @@
         mGenericFavicon = getResources().getDrawable(
                 R.drawable.app_web_browser_sm);
 
-        mContentView = (FrameLayout) getWindow().getDecorView().findViewById(
-                com.android.internal.R.id.content);
+        FrameLayout frameLayout = (FrameLayout) getWindow().getDecorView()
+                .findViewById(com.android.internal.R.id.content);
+        if (CUSTOM_BROWSER_BAR) {
+            // This FrameLayout will hold the custom FrameLayout and a LinearLayout
+            // that contains the title bar and a FrameLayout, which
+            // holds everything else.
+            FrameLayout browserFrameLayout = (FrameLayout) LayoutInflater.from(this)
+                    .inflate(R.layout.custom_screen, null);
+            mTitleBar = (TitleBar) browserFrameLayout.findViewById(R.id.title_bar);
+            mTitleBar.setBrowserActivity(this);
+            mContentView = (FrameLayout) browserFrameLayout.findViewById(
+                    R.id.main_content);
+            mCustomViewContainer = (FrameLayout) browserFrameLayout
+                    .findViewById(R.id.fullscreen_custom_content);
+            frameLayout.addView(browserFrameLayout, COVER_SCREEN_PARAMS);
+        } else {
+            mCustomViewContainer = new FrameLayout(this);
+            mCustomViewContainer.setBackgroundColor(Color.BLACK);
+            mContentView = new FrameLayout(this);
+            frameLayout.addView(mCustomViewContainer, COVER_SCREEN_PARAMS);
+            frameLayout.addView(mContentView, COVER_SCREEN_PARAMS);
+        }
 
         // Create the tab control and our initial tab
         mTabControl = new TabControl(this);
@@ -676,6 +714,12 @@
         PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
         mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
 
+        // If this was a web search request, pass it on to the default web search provider.
+        if (handleWebSearchIntent(getIntent())) {
+            moveTaskToBack(true);
+            return;
+        }
+
         if (!mTabControl.restoreState(icicle)) {
             // clear up the thumbnail directory if we can't restore the state as
             // none of the files in the directory are referenced any more.
@@ -687,11 +731,12 @@
             // If the intent is ACTION_VIEW and data is not null, the Browser is
             // invoked to view the content by another application. In this case,
             // the tab will be close when exit.
-            String url = getUrlFromIntent(intent);
+            UrlData urlData = getUrlDataFromIntent(intent);
+
             final TabControl.Tab t = mTabControl.createNewTab(
                     Intent.ACTION_VIEW.equals(intent.getAction()) &&
                     intent.getData() != null,
-                    intent.getStringExtra(Browser.EXTRA_APPLICATION_ID), url);
+                    intent.getStringExtra(Browser.EXTRA_APPLICATION_ID), urlData.mUrl);
             mTabControl.setCurrentTab(t);
             // This is one of the only places we call attachTabToContentView
             // without animating from the tab picker.
@@ -713,14 +758,18 @@
             }
             copyPlugins(true);
 
-            if (url == null || url.length() == 0) {
+            if (urlData.isEmpty()) {
                 if (mSettings.isLoginInitialized()) {
                     webView.loadUrl(mSettings.getHomePage());
                 } else {
                     waitForCredentials();
                 }
             } else {
-                webView.loadUrl(url);
+                if (extra != null) {
+                    urlData.setPostData(extra
+                            .getByteArray(Browser.EXTRA_POST_DATA));
+                }
+                urlData.loadIn(webView);
             }
         } else {
             // TabControl.restoreState() will create a new tab even if
@@ -728,6 +777,11 @@
             // are not animating from the tab picker.
             attachTabToContentView(mTabControl.getCurrentTab());
         }
+        // Read JavaScript flags if it exists.
+        String jsFlags = mSettings.getJsFlags();
+        if (jsFlags.trim().length() != 0) {
+            mTabControl.getCurrentWebView().setJsFlags(jsFlags);
+        }
 
         /* enables registration for changes in network status from
            http stack */
@@ -745,6 +799,52 @@
                     }
                 }
             };
+
+        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        filter.addDataScheme("package");
+        mPackageInstallationReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                final String action = intent.getAction();
+                final String packageName = intent.getData()
+                        .getSchemeSpecificPart();
+                final boolean replacing = intent.getBooleanExtra(
+                        Intent.EXTRA_REPLACING, false);
+                if (Intent.ACTION_PACKAGE_REMOVED.equals(action) && replacing) {
+                    // if it is replacing, refreshPlugins() when adding
+                    return;
+                }
+                PackageManager pm = BrowserActivity.this.getPackageManager();
+                PackageInfo pkgInfo = null;
+                try {
+                    pkgInfo = pm.getPackageInfo(packageName,
+                            PackageManager.GET_PERMISSIONS);
+                } catch (PackageManager.NameNotFoundException e) {
+                    return;
+                }
+                if (pkgInfo != null) {
+                    String permissions[] = pkgInfo.requestedPermissions;
+                    if (permissions == null) {
+                        return;
+                    }
+                    boolean permissionOk = false;
+                    for (String permit : permissions) {
+                        if (PluginManager.PLUGIN_PERMISSION.equals(permit)) {
+                            permissionOk = true;
+                            break;
+                        }
+                    }
+                    if (permissionOk) {
+                        PluginManager.getInstance(BrowserActivity.this)
+                                .refreshPlugins(
+                                        Intent.ACTION_PACKAGE_ADDED
+                                                .equals(action));
+                    }
+                }
+            }
+        };
+        registerReceiver(mPackageInstallationReceiver, filter);
     }
 
     @Override
@@ -774,10 +874,19 @@
                 || Intent.ACTION_SEARCH.equals(action)
                 || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
                 || Intent.ACTION_WEB_SEARCH.equals(action)) {
-            String url = getUrlFromIntent(intent);
-            if (url == null || url.length() == 0) {
-                url = mSettings.getHomePage();
+            // If this was a search request (e.g. search query directly typed into the address bar),
+            // pass it on to the default web search provider.
+            if (handleWebSearchIntent(intent)) {
+                return;
             }
+
+            UrlData urlData = getUrlDataFromIntent(intent);
+            if (urlData.isEmpty()) {
+                urlData = new UrlData(mSettings.getHomePage());
+            }
+            urlData.setPostData(intent
+                    .getByteArrayExtra(Browser.EXTRA_POST_DATA));
+
             if (Intent.ACTION_VIEW.equals(action) &&
                     (flags & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
                 final String appId =
@@ -794,20 +903,21 @@
                     // If the WebView has the same original url and is on that
                     // page, it can be reused.
                     boolean needsLoad =
-                            mTabControl.recreateWebView(appTab, url);
+                            mTabControl.recreateWebView(appTab, urlData.mUrl);
+                    
                     if (current != appTab) {
-                        showTab(appTab, needsLoad ? url : null);
+                        showTab(appTab, needsLoad ? urlData : EMPTY_URL_DATA);
                     } else {
                         if (mTabOverview != null && mAnimationCount == 0) {
                             sendAnimateFromOverview(appTab, false,
-                                    needsLoad ? url : null, TAB_OVERVIEW_DELAY,
-                                    null);
+                                    needsLoad ? urlData : EMPTY_URL_DATA,
+                                    TAB_OVERVIEW_DELAY, null);
                         } else {
                             // If the tab was the current tab, we have to attach
                             // it to the view system again.
                             attachTabToContentView(appTab);
                             if (needsLoad) {
-                                appTab.getWebView().loadUrl(url);
+                                urlData.loadIn(appTab.getWebView());
                             }
                         }
                     }
@@ -817,27 +927,96 @@
                 // opened in a new tab unless we have reached MAX_TABS. Then the
                 // url will be opened in the current tab. If a new tab is
                 // created, it will have "true" for exit on close.
-                openTabAndShow(url, null, true, appId);
+                openTabAndShow(urlData, null, true, appId);
             } else {
-                if ("about:debug".equals(url)) {
+                if ("about:debug".equals(urlData.mUrl)) {
                     mSettings.toggleDebugSettings();
                     return;
                 }
                 // If the Window overview is up and we are not in the midst of
                 // an animation, animate away from the Window overview.
                 if (mTabOverview != null && mAnimationCount == 0) {
-                    sendAnimateFromOverview(current, false, url,
+                    sendAnimateFromOverview(current, false, urlData,
                             TAB_OVERVIEW_DELAY, null);
                 } else {
                     // Get rid of the subwindow if it exists
                     dismissSubWindow(current);
-                    current.getWebView().loadUrl(url);
+                    urlData.loadIn(current.getWebView());
                 }
             }
         }
     }
 
-    private String getUrlFromIntent(Intent intent) {
+    private int parseUrlShortcut(String url) {
+        if (url == null) return SHORTCUT_INVALID;
+
+        // FIXME: quick search, need to be customized by setting
+        if (url.length() > 2 && url.charAt(1) == ' ') {
+            switch (url.charAt(0)) {
+            case 'g': return SHORTCUT_GOOGLE_SEARCH;
+            case 'w': return SHORTCUT_WIKIPEDIA_SEARCH;
+            case 'd': return SHORTCUT_DICTIONARY_SEARCH;
+            case 'l': return SHORTCUT_GOOGLE_MOBILE_LOCAL_SEARCH;
+            }
+        }
+        return SHORTCUT_INVALID;
+    }
+
+    /**
+     * Launches the default web search activity with the query parameters if the given intent's data
+     * are identified as plain search terms and not URLs/shortcuts.
+     * @return true if the intent was handled and web search activity was launched, false if not.
+     */
+    private boolean handleWebSearchIntent(Intent intent) {
+        if (intent == null) return false;
+
+        String url = null;
+        final String action = intent.getAction();
+        if (Intent.ACTION_VIEW.equals(action)) {
+            url = intent.getData().toString();
+        } else if (Intent.ACTION_SEARCH.equals(action)
+                || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
+                || Intent.ACTION_WEB_SEARCH.equals(action)) {
+            url = intent.getStringExtra(SearchManager.QUERY);
+        }
+        return handleWebSearchRequest(url, intent.getBundleExtra(SearchManager.APP_DATA));
+    }
+
+    /**
+     * Launches the default web search activity with the query parameters if the given url string
+     * was identified as plain search terms and not URL/shortcut.
+     * @return true if the request was handled and web search activity was launched, false if not.
+     */
+    private boolean handleWebSearchRequest(String inUrl, Bundle appData) {
+        if (inUrl == null) return false;
+
+        // In general, we shouldn't modify URL from Intent.
+        // But currently, we get the user-typed URL from search box as well.
+        String url = fixUrl(inUrl).trim();
+
+        // URLs and site specific search shortcuts are handled by the regular flow of control, so
+        // return early.
+        if (Regex.WEB_URL_PATTERN.matcher(url).matches()
+                || ACCEPTED_URI_SCHEMA.matcher(url).matches()
+                || parseUrlShortcut(url) != SHORTCUT_INVALID) {
+            return false;
+        }
+
+        Browser.updateVisitedHistory(mResolver, url, false);
+        Browser.addSearchUrl(mResolver, url);
+
+        Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
+        intent.addCategory(Intent.CATEGORY_DEFAULT);
+        intent.putExtra(SearchManager.QUERY, url);
+        if (appData != null) {
+            intent.putExtra(SearchManager.APP_DATA, appData);
+        }
+        startActivity(intent);
+
+        return true;
+    }
+
+    private UrlData getUrlDataFromIntent(Intent intent) {
         String url = null;
         if (intent != null) {
             final String action = intent.getAction();
@@ -850,6 +1029,13 @@
                         url += "?" + mimeType;
                     }
                 }
+                if ("inline:".equals(url)) {
+                    return new InlinedUrlData(
+                            intent.getStringExtra(Browser.EXTRA_INLINE_CONTENT),
+                            intent.getType(),
+                            intent.getStringExtra(Browser.EXTRA_INLINE_ENCODING),
+                            intent.getStringExtra(Browser.EXTRA_INLINE_FAILURL));
+                }
             } else if (Intent.ACTION_SEARCH.equals(action)
                     || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
                     || Intent.ACTION_WEB_SEARCH.equals(action)) {
@@ -880,7 +1066,7 @@
                 }
             }
         }
-        return url;
+        return new UrlData(url);
     }
 
     /* package */ static String fixUrl(String inUrl) {
@@ -990,7 +1176,7 @@
 
     @Override protected void onResume() {
         super.onResume();
-        if (Config.LOGV) {
+        if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
         }
 
@@ -999,8 +1185,9 @@
             return;
         }
 
+        mTabControl.resumeCurrentTab();
         mActivityInPause = false;
-        resumeWebView();
+        resumeWebViewTimers();
 
         if (mWakeLock.isHeld()) {
             mHandler.removeMessages(RELEASE_WAKELOCK);
@@ -1037,7 +1224,7 @@
      *  the saved state.
      */
     @Override protected void onSaveInstanceState(Bundle outState) {
-        if (Config.LOGV) {
+        if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
         }
         // the default implementation requires each view to have an id. As the
@@ -1058,8 +1245,9 @@
             return;
         }
 
+        mTabControl.pauseCurrentTab();
         mActivityInPause = true;
-        if (mTabControl.getCurrentIndex() >= 0 && !pauseWebView()) {
+        if (mTabControl.getCurrentIndex() >= 0 && !pauseWebViewTimers()) {
             mWakeLock.acquire();
             mHandler.sendMessageDelayed(mHandler
                     .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
@@ -1083,14 +1271,16 @@
     }
 
     @Override protected void onDestroy() {
-        if (Config.LOGV) {
+        if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onDestroy: this=" + this);
         }
         super.onDestroy();
         // Remove the current tab and sub window
         TabControl.Tab t = mTabControl.getCurrentTab();
-        dismissSubWindow(t);
-        removeTabFromContentView(t);
+        if (t != null) {
+            dismissSubWindow(t);
+            removeTabFromContentView(t);
+        }
         // Destroy all the tabs
         mTabControl.destroy();
         WebIconDatabase.getInstance().close();
@@ -1108,6 +1298,8 @@
         //        "com.android.masfproxyservice",
         //        "com.android.masfproxyservice.MasfProxyService"));
         //stopService(proxyServiceIntent);
+
+        unregisterReceiver(mPackageInstallationReceiver);
     }
 
     @Override
@@ -1156,7 +1348,7 @@
         mTabControl.freeMemory();
     }
 
-    private boolean resumeWebView() {
+    private boolean resumeWebViewTimers() {
         if ((!mActivityInPause && !mPageStarted) ||
                 (mActivityInPause && mPageStarted)) {
             CookieSyncManager.getInstance().startSync();
@@ -1170,7 +1362,7 @@
         }
     }
 
-    private boolean pauseWebView() {
+    private boolean pauseWebViewTimers() {
         if (mActivityInPause && !mPageStarted) {
             CookieSyncManager.getInstance().stopSync();
             WebView w = mTabControl.getCurrentWebView();
@@ -1294,6 +1486,9 @@
         mCanChord = true;
         int id = item.getItemId();
         final WebView webView = getTopWindow();
+        if (null == webView) {
+            return false;
+        }
         final HashMap hrefMap = new HashMap();
         hrefMap.put("webview", webView);
         final Message msg = mHandler.obtainMessage(
@@ -1328,7 +1523,8 @@
      */
     @Override
     public boolean onSearchRequested() {
-        startSearch(null, false,
+        String url = getTopWindow().getUrl();
+        startSearch(mSettings.getHomePage().equals(url) ? null : url, false,
                 createGoogleSearchSourceBundle(GOOGLE_SEARCH_SOURCE_SEARCHKEY), false);
         return true;
     }
@@ -1349,6 +1545,16 @@
             // menu key.
             return false;
         }
+        if (null == mTabOverview && null == getTopWindow()) {
+            return false;
+        }
+        if (mMenuIsDown) {
+            // The shortcut action consumes the MENU. Even if it is still down,
+            // it won't trigger the next shortcut action. In the case of the
+            // shortcut action triggering a new activity, like Bookmarks, we
+            // won't get onKeyUp for MENU. So it is important to reset it here.
+            mMenuIsDown = false;
+        }
         switch (item.getItemId()) {
             // -- Main menu
             case R.id.goto_menu_id: {
@@ -1796,7 +2002,7 @@
 
     // Send the ANIMTE_FROM_OVERVIEW message after changing the current tab.
     private void sendAnimateFromOverview(final TabControl.Tab tab,
-            final boolean newTab, final String url, final int delay,
+            final boolean newTab, final UrlData urlData, final int delay,
             final Message msg) {
         // Set the current tab.
         mTabControl.setCurrentTab(tab);
@@ -1820,9 +2026,9 @@
         // Load the url after the AnimatingView has captured the picture. This
         // prevents any bad layout or bad scale from being used during
         // animation.
-        if (url != null) {
+        if (!urlData.isEmpty()) {
             dismissSubWindow(tab);
-            tab.getWebView().loadUrl(url);
+            urlData.loadIn(tab.getWebView());
         }
         map.put("msg", msg);
         mHandler.sendMessageDelayed(mHandler.obtainMessage(
@@ -1838,15 +2044,15 @@
     }
 
     // 500ms animation with 800ms delay
-    private static final int TAB_ANIMATION_DURATION = 500;
-    private static final int TAB_OVERVIEW_DELAY     = 800;
+    private static final int TAB_ANIMATION_DURATION = 200;
+    private static final int TAB_OVERVIEW_DELAY     = 500;
 
     // Called by TabControl when a tab is requesting focus
     /* package */ void showTab(TabControl.Tab t) {
-        showTab(t, null);
+        showTab(t, EMPTY_URL_DATA);
     }
 
-    private void showTab(TabControl.Tab t, String url) {
+    private void showTab(TabControl.Tab t, UrlData urlData) {
         // Disallow focus change during a tab animation.
         if (mAnimationCount > 0) {
             return;
@@ -1858,7 +2064,14 @@
             delay = TAB_ANIMATION_DURATION + TAB_OVERVIEW_DELAY;
             tabPicker(false, mTabControl.getTabIndex(t), false);
         }
-        sendAnimateFromOverview(t, false, url, delay, null);
+        sendAnimateFromOverview(t, false, urlData, delay, null);
+    }
+
+    // A wrapper function of {@link #openTabAndShow(UrlData, Message, boolean, String)}
+    // that accepts url as string.
+    private TabControl.Tab openTabAndShow(String url, final Message msg,
+            boolean closeOnExit, String appId) {
+        return openTabAndShow(new UrlData(url), msg, closeOnExit, appId);
     }
 
     // This method does a ton of stuff. It will attempt to create a new tab
@@ -1869,7 +2082,7 @@
     // the given Message. If the tab overview is already showing (i.e. this
     // method is called from TabListener.onClick(), the method will animate
     // away from the tab overview.
-    private void openTabAndShow(String url, final Message msg,
+    private TabControl.Tab openTabAndShow(UrlData urlData, final Message msg,
             boolean closeOnExit, String appId) {
         final boolean newTab = mTabControl.getTabCount() != TabControl.MAX_TABS;
         final TabControl.Tab currentTab = mTabControl.getCurrentTab();
@@ -1878,14 +2091,14 @@
             // If the tab overview is up and there are animations, just load
             // the url.
             if (mTabOverview != null && mAnimationCount > 0) {
-                if (url != null) {
+                if (!urlData.isEmpty()) {
                     // We should not have a msg here since onCreateWindow
                     // checks the animation count and every other caller passes
                     // null.
                     assert msg == null;
                     // just dismiss the subwindow and load the given url.
                     dismissSubWindow(currentTab);
-                    currentTab.getWebView().loadUrl(url);
+                    urlData.loadIn(currentTab.getWebView());
                 }
             } else {
                 // show mTabOverview if it is not there.
@@ -1898,23 +2111,25 @@
                 }
                 // Animate from the Tab overview after any animations have
                 // finished.
-                sendAnimateFromOverview(
-                        mTabControl.createNewTab(closeOnExit, appId, url), true,
-                        url, delay, msg);
+                final TabControl.Tab tab = mTabControl.createNewTab(
+                        closeOnExit, appId, urlData.mUrl);
+                sendAnimateFromOverview(tab, true, urlData, delay, msg);
+                return tab;
             }
-        } else if (url != null) {
+        } else if (!urlData.isEmpty()) {
             // We should not have a msg here.
             assert msg == null;
             if (mTabOverview != null && mAnimationCount == 0) {
-                sendAnimateFromOverview(currentTab, false, url,
+                sendAnimateFromOverview(currentTab, false, urlData,
                         TAB_OVERVIEW_DELAY, null);
             } else {
                 // Get rid of the subwindow if it exists
                 dismissSubWindow(currentTab);
                 // Load the given url.
-                currentTab.getWebView().loadUrl(url);
+                urlData.loadIn(currentTab.getWebView());
             }
         }
+        return currentTab;
     }
 
     private Animation createTabAnimation(final AnimatingView view,
@@ -1959,10 +2174,12 @@
         final Animation.AnimationListener l =
                 new Animation.AnimationListener() {
                     public void onAnimationStart(Animation a) {
-                        mTabOverview.requestFocus();
-                        // Clear the listener so we don't trigger a tab
-                        // selection.
-                        mTabOverview.setListener(null);
+                        if (mTabOverview != null) {
+                            mTabOverview.requestFocus();
+                            // Clear the listener so we don't trigger a tab
+                            // selection.
+                            mTabOverview.setListener(null);
+                        }
                     }
                     public void onAnimationRepeat(Animation a) {}
                     public void onAnimationEnd(Animation a) {
@@ -2126,19 +2343,23 @@
                     .setVisibility(View.VISIBLE);
         }
         mContentView.removeView(mTabOverview);
+        // Clear all the data for tab picker so next time it will be
+        // recreated.
+        mTabControl.wipeAllPickerData();
         mTabOverview.clear();
         mTabOverview = null;
         mTabListener = null;
     }
 
-    private void openTab(String url) {
+    private TabControl.Tab openTab(String url) {
         if (mSettings.openInBackground()) {
             TabControl.Tab t = mTabControl.createNewTab();
             if (t != null) {
                 t.getWebView().loadUrl(url);
             }
+            return t;
         } else {
-            openTabAndShow(url, null, false, null);
+            return openTabAndShow(url, null, false, null);
         }
     }
 
@@ -2238,7 +2459,11 @@
         // While the tab overview is animating or being shown, block changes
         // to the title.
         if (mAnimationCount == 0 && mTabOverview == null) {
-            setTitle(buildUrlTitle(url, title));
+            if (CUSTOM_BROWSER_BAR) {
+                mTitleBar.setTitleAndUrl(title, url);
+            } else {
+                setTitle(buildUrlTitle(url, title));
+            }
         }
     }
 
@@ -2279,7 +2504,7 @@
      * or an empty string if, for example, the URL in question is a
      * file:// URL with no hostname.
      */
-    private static String buildTitleUrl(String url) {
+    /* package */ static String buildTitleUrl(String url) {
         String titleUrl = null;
 
         if (url != null) {
@@ -2315,18 +2540,34 @@
         if (mAnimationCount > 0 || mTabOverview != null) {
             return;
         }
-        Drawable[] array = new Drawable[2];
-        PaintDrawable p = new PaintDrawable(Color.WHITE);
-        p.setCornerRadius(3f);
-        array[0] = p;
-        if (icon == null) {
-            array[1] = mGenericFavicon;
+        if (CUSTOM_BROWSER_BAR) {
+            Drawable[] array = new Drawable[3];
+            array[0] = new PaintDrawable(Color.BLACK);
+            PaintDrawable p = new PaintDrawable(Color.WHITE);
+            array[1] = p;
+            if (icon == null) {
+                array[2] = mGenericFavicon;
+            } else {
+                array[2] = new BitmapDrawable(icon);
+            }
+            LayerDrawable d = new LayerDrawable(array);
+            d.setLayerInset(1, 1, 1, 1, 1);
+            d.setLayerInset(2, 2, 2, 2, 2);
+            mTitleBar.setFavicon(d);
         } else {
-            array[1] = new BitmapDrawable(icon);
+            Drawable[] array = new Drawable[2];
+            PaintDrawable p = new PaintDrawable(Color.WHITE);
+            p.setCornerRadius(3f);
+            array[0] = p;
+            if (icon == null) {
+                array[1] = mGenericFavicon;
+            } else {
+                array[1] = new BitmapDrawable(icon);
+            }
+            LayerDrawable d = new LayerDrawable(array);
+            d.setLayerInset(1, 2, 2, 2, 2);
+            getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, d);
         }
-        LayerDrawable d = new LayerDrawable(array);
-        d.setLayerInset(1, 2, 2, 2, 2);
-        getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, d);
     }
 
     /**
@@ -2346,7 +2587,7 @@
     private void revertLockIcon() {
         mLockIconType = mPrevLockType;
 
-        if (Config.LOGV) {
+        if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.revertLockIcon:" +
                   " revert lock icon to " + mLockIconType);
         }
@@ -2362,7 +2603,7 @@
         // Change to the parent tab
         final TabControl.Tab tab = mTabControl.getTab(indexToShow);
         if (tab != null) {
-            sendAnimateFromOverview(tab, false, null, delay, null);
+            sendAnimateFromOverview(tab, false, EMPTY_URL_DATA, delay, null);
         } else {
             // Increment this here so that no other animations can happen in
             // between the end of the tab picker transition and the beginning
@@ -2404,9 +2645,9 @@
                         finish();
                         return;
                     }
-                    // call pauseWebView() now, we won't be able to call it in
-                    // onPause() as the WebView won't be valid.
-                    pauseWebView();
+                    // call pauseWebViewTimers() now, we won't be able to call
+                    // it in onPause() as the WebView won't be valid.
+                    pauseWebViewTimers();
                     removeTabFromContentView(current);
                     mTabControl.removeTab(current);
                 }
@@ -2430,10 +2671,15 @@
         // because of accumulated key events,
         // we should ignore it as browser is not active any more.
         WebView topWindow = getTopWindow();
-        if (topWindow == null)
+        if (topWindow == null && mCustomView == null)
             return KeyTracker.State.NOT_TRACKING;
 
         if (keyCode == KeyEvent.KEYCODE_BACK) {
+            // Check if a custom view is currently showing and, if it is, hide it.
+            if (mCustomView != null) {
+                mWebChromeClient.onHideCustomView();
+                return KeyTracker.State.DONE_TRACKING;
+            }
             // During animations, block the back key so that other animations
             // are not triggered and so that we don't end up destroying all the
             // WebViews before finishing the animation.
@@ -2467,6 +2713,11 @@
     @Override public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_MENU) {
             mMenuIsDown = true;
+        } else if (mMenuIsDown) {
+            // The default key mode is DEFAULT_KEYS_SEARCH_LOCAL. As the MENU is
+            // still down, we don't want to trigger the search. Pretend to
+            // consume the key and do nothing.
+            return true;
         }
         boolean handled =  mKeyTracker.doKeyDown(keyCode, event);
         if (!handled) {
@@ -2572,7 +2823,12 @@
                             loadURL(getTopWindow(), url);
                             break;
                         case R.id.open_newtab_context_menu_id:
-                            openTab(url);
+                            final TabControl.Tab parent = mTabControl
+                                    .getCurrentTab();
+                            final TabControl.Tab newTab = openTab(url);
+                            if (newTab != parent) {
+                                parent.addChildTab(newTab);
+                            }
                             break;
                         case R.id.bookmark_context_menu_id:
                             Intent intent = new Intent(BrowserActivity.this,
@@ -2697,8 +2953,9 @@
 
             if (!mPageStarted) {
                 mPageStarted = true;
-                // if onResume() has been called, resumeWebView() does nothing.
-                resumeWebView();
+                // if onResume() has been called, resumeWebViewTimers() does
+                // nothing.
+                resumeWebViewTimers();
             }
 
             // reset sync timer to avoid sync starts during loading a page
@@ -2733,6 +2990,48 @@
             // Update the lock icon image only once we are done loading
             updateLockIconImage(mLockIconType);
 
+            // If this is a bookmarked site, add a screenshot to the database.
+            // FIXME: When should we update?  Every time?
+            String original = view.getOriginalUrl();
+            if (original != null) {
+                // copied from BrowserBookmarksAdapter
+                int query = original.indexOf('?');
+                String noQuery = original;
+                if (query != -1) {
+                    noQuery = original.substring(0, query);
+                }
+                String URL = noQuery + '?';
+                String[] selArgs = new String[] { noQuery, URL };
+                final String where = "(url == ? OR url GLOB ? || '*') AND bookmark == 1";
+                final String[] projection = new String[] { Browser.BookmarkColumns._ID };
+                ContentResolver cr = getContentResolver();
+                final Cursor c = cr.query(Browser.BOOKMARKS_URI, projection, where, selArgs, null);
+                boolean succeed = c.moveToFirst();
+                ContentValues values = null;
+                while (succeed) {
+                    if (values == null) {
+                        final ByteArrayOutputStream os = new ByteArrayOutputStream();
+                        Picture thumbnail = view.capturePicture();
+                        // Height was arbitrarily chosen
+                        Bitmap bm = Bitmap.createBitmap(100, 100,
+                                Bitmap.Config.ARGB_4444);
+                        Canvas canvas = new Canvas(bm);
+                        // Scale chosen to be about one third, since we want
+                        // roughly three rows/columns for bookmark page
+                        canvas.scale(.3f, .3f);
+                        thumbnail.draw(canvas);
+                        bm.compress(Bitmap.CompressFormat.PNG, 100, os);
+                        values = new ContentValues();
+                        values.put(Browser.BookmarkColumns.THUMBNAIL,
+                                os.toByteArray());
+                    }
+                    cr.update(ContentUris.withAppendedId(Browser.BOOKMARKS_URI,
+                            c.getInt(0)), values, null, null);
+                    succeed = c.moveToNext();
+                }
+                c.close();
+            }
+
             // Performance probe
             if (false) {
                 long[] sysCpu = new long[7];
@@ -2741,7 +3040,7 @@
                     String uiInfo = "UI thread used "
                             + (SystemClock.currentThreadTimeMillis() - mUiStart)
                             + " ms";
-                    if (Config.LOGD) {
+                    if (LOGD_ENABLED) {
                         Log.d(LOGTAG, uiInfo);
                     }
                     //The string that gets written to the log
@@ -2758,7 +3057,7 @@
                             + " ms and irq took "
                             + (sysCpu[4] + sysCpu[5] + sysCpu[6] - mIrqStart)
                             * 10 + " ms, " + uiInfo;
-                    if (Config.LOGD) {
+                    if (LOGD_ENABLED) {
                         Log.d(LOGTAG, performanceString + "\nWebpage: " + url);
                     }
                     if (url != null) {
@@ -2773,7 +3072,7 @@
                         } else if (newUrl.startsWith("https://")) {
                             newUrl = newUrl.substring(8);
                         }
-                        if (Config.LOGD) {
+                        if (LOGD_ENABLED) {
                             Log.d(LOGTAG, newUrl + " loaded");
                         }
                         /*
@@ -2819,9 +3118,9 @@
 
             if (mPageStarted) {
                 mPageStarted = false;
-                // pauseWebView() will do nothing and return false if onPause()
-                // is not called yet.
-                if (pauseWebView()) {
+                // pauseWebViewTimers() will do nothing and return false if
+                // onPause() is not called yet.
+                if (pauseWebViewTimers()) {
                     if (mWakeLock.isHeld()) {
                         mHandler.removeMessages(RELEASE_WAKELOCK);
                         mWakeLock.release();
@@ -2862,16 +3161,41 @@
                 }
             }
 
-            Uri uri;
+            // The "about:" schemes are internal to the browser; don't
+            // want these to be dispatched to other apps.
+            if (url.startsWith("about:")) {
+                return false;
+            }
+            
+            Intent intent;
+            
+            // perform generic parsing of the URI to turn it into an Intent.
             try {
-                uri = Uri.parse(url);
-            } catch (IllegalArgumentException ex) {
+                intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
+            } catch (URISyntaxException ex) {
+                Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
                 return false;
             }
 
-            // check whether other activities want to handle this url
-            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+            // check whether the intent can be resolved. If not, we will see
+            // whether we can download it from the Market.
+            if (getPackageManager().resolveActivity(intent, 0) == null) {
+                String packagename = intent.getPackage();
+                if (packagename != null) {
+                    intent = new Intent(Intent.ACTION_VIEW, Uri
+                            .parse("market://search?q=pname:" + packagename));
+                    intent.addCategory(Intent.CATEGORY_BROWSABLE);
+                    startActivity(intent);
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+
+            // sanitize the Intent, ensuring web pages can not bypass browser
+            // security (only access to BROWSABLE activities).
             intent.addCategory(Intent.CATEGORY_BROWSABLE);
+            intent.setComponent(null);
             try {
                 if (startActivityIfNeeded(intent, -1)) {
                     return true;
@@ -2905,7 +3229,7 @@
                     // If NOT a 'safe' url, change the lock to mixed content!
                     if (!(URLUtil.isHttpsUrl(url) || URLUtil.isDataUrl(url) || URLUtil.isAboutUrl(url))) {
                         mLockIconType = LOCK_ICON_MIXED;
-                        if (Config.LOGV) {
+                        if (LOGV_ENABLED) {
                             Log.v(LOGTAG, "BrowserActivity.updateLockIcon:" +
                                   " updated lock icon to " + mLockIconType + " due to " + url);
                         }
@@ -3232,8 +3556,11 @@
                 // openTabAndShow will dispatch the message after creating the
                 // new WebView. This will prevent another request from coming
                 // in during the animation.
-                openTabAndShow(null, msg, false, null);
-                parent.addChildTab(mTabControl.getCurrentTab());
+                final TabControl.Tab newTab =
+                        openTabAndShow(EMPTY_URL_DATA, msg, false, null);
+                if (newTab != parent) {
+                    parent.addChildTab(newTab);
+                }
                 WebView.WebViewTransport transport =
                         (WebView.WebViewTransport) msg.obj;
                 transport.setWebView(mTabControl.getCurrentWebView());
@@ -3339,8 +3666,13 @@
             // Block progress updates to the title bar while the tab overview
             // is animating or being displayed.
             if (mAnimationCount == 0 && mTabOverview == null) {
-                getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
-                        newProgress * 100);
+                if (CUSTOM_BROWSER_BAR) {
+                    mTitleBar.setProgress(newProgress);
+                } else {
+                    getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
+                            newProgress * 100);
+
+                }
             }
 
             if (newProgress == 100) {
@@ -3365,7 +3697,7 @@
 
         @Override
         public void onReceivedTitle(WebView view, String title) {
-            String url = view.getOriginalUrl();
+            String url = view.getUrl();
 
             // here, if url is null, we want to reset the title
             setUrlTitle(url, title);
@@ -3374,6 +3706,8 @@
                 url.length() >= SQLiteDatabase.SQLITE_MAX_LIKE_PATTERN_LENGTH) {
                 return;
             }
+            // See if we can find the current url in our history database and
+            // add the new title to it.
             if (url.startsWith("http://www.")) {
                 url = url.substring(11);
             } else if (url.startsWith("http://")) {
@@ -3388,15 +3722,12 @@
                 Cursor c = mResolver.query(Browser.BOOKMARKS_URI,
                     Browser.HISTORY_PROJECTION, where, selArgs, null);
                 if (c.moveToFirst()) {
-                    if (Config.LOGV) {
-                        Log.v(LOGTAG, "updating cursor");
-                    }
                     // Current implementation of database only has one entry per
                     // url.
-                    int titleIndex =
-                            c.getColumnIndex(Browser.BookmarkColumns.TITLE);
-                    c.updateString(titleIndex, title);
-                    c.commitUpdates();
+                    ContentValues map = new ContentValues();
+                    map.put(Browser.BookmarkColumns.TITLE, title);
+                    mResolver.update(Browser.BOOKMARKS_URI, map,
+                            "_id = " + c.getInt(0), null);
                 }
                 c.close();
             } catch (IllegalStateException e) {
@@ -3410,6 +3741,89 @@
         public void onReceivedIcon(WebView view, Bitmap icon) {
             updateIcon(view.getUrl(), icon);
         }
+
+        @Override
+        public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
+            if (mCustomView != null)
+                return;
+
+            // Add the custom view to its container.
+            mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
+            mCustomView = view;
+            mCustomViewCallback = callback;
+            // Save the menu state and set it to empty while the custom
+            // view is showing.
+            mOldMenuState = mMenuState;
+            mMenuState = EMPTY_MENU;
+            // Hide the content view.
+            mContentView.setVisibility(View.GONE);
+            // Finally show the custom view container.
+            mCustomViewContainer.setVisibility(View.VISIBLE);
+            mCustomViewContainer.bringToFront();
+        }
+
+        @Override
+        public void onHideCustomView() {
+            if (mCustomView == null)
+                return;
+
+            // Hide the custom view.
+            mCustomView.setVisibility(View.GONE);
+            // Remove the custom view from its container.
+            mCustomViewContainer.removeView(mCustomView);
+            mCustomView = null;
+            // Reset the old menu state.
+            mMenuState = mOldMenuState;
+            mOldMenuState = EMPTY_MENU;
+            mCustomViewContainer.setVisibility(View.GONE);
+            mCustomViewCallback.onCustomViewHidden();
+            // Show the content view.
+            mContentView.setVisibility(View.VISIBLE);
+        }
+
+        /**
+         * The origin has exceeded it's database quota.
+         * @param url the URL that exceeded the quota
+         * @param databaseIdentifier the identifier of the database on
+         *     which the transaction that caused the quota overflow was run
+         * @param currentQuota the current quota for the origin.
+         * @param quotaUpdater The callback to run when a decision to allow or
+         *     deny quota has been made. Don't forget to call this!
+         */
+        @Override
+        public void onExceededDatabaseQuota(String url,
+            String databaseIdentifier, long currentQuota,
+            WebStorage.QuotaUpdater quotaUpdater) {
+            if(LOGV_ENABLED) {
+                Log.v(LOGTAG,
+                      "BrowserActivity received onExceededDatabaseQuota for "
+                      + url +
+                      ":"
+                      + databaseIdentifier +
+                      "(current quota: "
+                      + currentQuota +
+                      ")");
+            }
+            mWebStorageQuotaUpdater = quotaUpdater;
+            String DIALOG_PACKAGE = "com.android.browser";
+            String DIALOG_CLASS = DIALOG_PACKAGE + ".PermissionDialog";
+            Intent intent = new Intent();
+            intent.setClassName(DIALOG_PACKAGE, DIALOG_CLASS);
+            intent.putExtra(PermissionDialog.PARAM_ORIGIN, url);
+            intent.putExtra(PermissionDialog.PARAM_QUOTA, currentQuota);
+            startActivityForResult(intent, WEBSTORAGE_QUOTA_DIALOG);
+        }
+
+        /* Adds a JavaScript error message to the system log.
+         * @param message The error message to report.
+         * @param lineNumber The line number of the error.
+         * @param sourceID The name of the source file that caused the error.
+         */
+        @Override
+        public void addMessageToConsole(String message, int lineNumber, String sourceID) {
+            Log.w(LOGTAG, "Console: " + message + " (" + sourceID + ":" + lineNumber + ")");
+        }
+
     };
 
     /**
@@ -3438,7 +3852,7 @@
                     startActivity(intent);
                     return;
                 } catch (ActivityNotFoundException ex) {
-                    if (Config.LOGD) {
+                    if (LOGD_ENABLED) {
                         Log.d(LOGTAG, "activity not found for " + mimetype
                                 + " over " + Uri.parse(url).getScheme(), ex);
                     }
@@ -3562,7 +3976,7 @@
         mLockIconType = LOCK_ICON_UNSECURE;
         if (URLUtil.isHttpsUrl(url)) {
             mLockIconType = LOCK_ICON_SECURE;
-            if (Config.LOGV) {
+            if (LOGV_ENABLED) {
                 Log.v(LOGTAG, "BrowserActivity.resetLockIcon:" +
                       " reset lock icon to " + mLockIconType);
             }
@@ -3582,7 +3996,7 @@
 
         mLockIconType = LOCK_ICON_UNSECURE;
 
-        if (Config.LOGV) {
+        if (LOGV_ENABLED) {
           Log.v(LOGTAG, "BrowserActivity.resetLockIcon:" +
                 " reset lock icon to " + mLockIconType);
         }
@@ -3603,7 +4017,11 @@
         // If the tab overview is animating or being shown, do not update the
         // lock icon.
         if (mAnimationCount == 0 && mTabOverview == null) {
-            getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, d);
+            if (CUSTOM_BROWSER_BAR) {
+                mTitleBar.setLock(d);
+            } else {
+                getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, d);
+            }
         }
     }
 
@@ -4096,7 +4514,17 @@
                     String data = intent.getAction();
                     Bundle extras = intent.getExtras();
                     if (extras != null && extras.getBoolean("new_window", false)) {
-                        openTab(data);
+                        final TabControl.Tab newTab = openTab(data);
+                        if (mSettings.openInBackground() &&
+                                newTab != null && mTabOverview != null) {
+                            mTabControl.populatePickerData(newTab);
+                            mTabControl.setCurrentTab(newTab);
+                            mTabOverview.add(newTab);
+                            mTabOverview.setCurrentIndex(
+                                    mTabControl.getCurrentIndex());
+                            sendAnimateFromOverview(newTab, false,
+                                    EMPTY_URL_DATA, TAB_OVERVIEW_DELAY, null);
+                        }
                     } else {
                         final TabControl.Tab currentTab =
                                 mTabControl.getCurrentTab();
@@ -4104,8 +4532,8 @@
                         // middle of an animation, animate away from it to the
                         // current tab.
                         if (mTabOverview != null && mAnimationCount == 0) {
-                            sendAnimateFromOverview(currentTab, false, data,
-                                    TAB_OVERVIEW_DELAY, null);
+                            sendAnimateFromOverview(currentTab, false,
+                                    new UrlData(data), TAB_OVERVIEW_DELAY, null);
                         } else {
                             dismissSubWindow(currentTab);
                             if (data != null && data.length() != 0) {
@@ -4115,6 +4543,14 @@
                     }
                 }
                 break;
+            case WEBSTORAGE_QUOTA_DIALOG:
+                long currentQuota = 0;
+                if (resultCode == RESULT_OK && intent != null) {
+                    currentQuota = intent.getLongExtra(
+                        PermissionDialog.PARAM_QUOTA, currentQuota);
+                }
+                mWebStorageQuotaUpdater.updateQuota(currentQuota);
+                break;
             default:
                 break;
         }
@@ -4140,7 +4576,7 @@
     private class TabListener implements ImageGrid.Listener {
         public void remove(int position) {
             // Note: Remove is not enabled if we have only one tab.
-            if (Config.DEBUG && mTabControl.getTabCount() == 1) {
+            if (DEBUG && mTabControl.getTabCount() == 1) {
                 throw new AssertionError();
             }
 
@@ -4155,8 +4591,8 @@
                 // was clicked on.
                 if (mTabControl.getTabCount() == 0) {
                     current = mTabControl.createNewTab();
-                    sendAnimateFromOverview(current, true,
-                            mSettings.getHomePage(), TAB_OVERVIEW_DELAY, null);
+                    sendAnimateFromOverview(current, true, new UrlData(
+                            mSettings.getHomePage()), TAB_OVERVIEW_DELAY, null);
                 } else {
                     final int index = position > 0 ? (position - 1) : 0;
                     current = mTabControl.getTab(index);
@@ -4188,16 +4624,12 @@
                 }
             }
 
-            // Clear all the data for tab picker so next time it will be
-            // recreated.
-            mTabControl.wipeAllPickerData();
-
             // NEW_TAB means that the "New Tab" cell was clicked on.
             if (index == ImageGrid.NEW_TAB) {
                 openTabAndShow(mSettings.getHomePage(), null, false, null);
             } else {
-                sendAnimateFromOverview(mTabControl.getTab(index),
-                        false, null, 0, null);
+                sendAnimateFromOverview(mTabControl.getTab(index), false,
+                        EMPTY_URL_DATA, 0, null);
             }
         }
     }
@@ -4219,13 +4651,19 @@
         AnimatingView(Context ctxt, TabControl.Tab t) {
             super(ctxt);
             mTab = t;
-            // Use the top window in the animation since the tab overview will
-            // display the top window in each cell.
-            final WebView w = t.getTopWindow();
-            mPicture = w.capturePicture();
-            mScale = w.getScale() / w.getWidth();
-            mScrollX = w.getScrollX();
-            mScrollY = w.getScrollY();
+            if (t != null && t.getTopWindow() != null) {
+                // Use the top window in the animation since the tab overview
+                // will display the top window in each cell.
+                final WebView w = t.getTopWindow();
+                mPicture = w.capturePicture();
+                mScale = w.getScale() / w.getWidth();
+                mScrollX = w.getScrollX();
+                mScrollY = w.getScrollY();
+            } else {
+                mPicture = null;
+                mScale = 1.0f;
+                mScrollX = mScrollY = 0;
+            }
         }
 
         @Override
@@ -4299,16 +4737,20 @@
         mAnimationCount++;
         // Always change the title bar to the window overview title while
         // animating.
-        getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, null);
-        getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, null);
-        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
-                Window.PROGRESS_VISIBILITY_OFF);
-        setTitle(R.string.tab_picker_title);
+        if (CUSTOM_BROWSER_BAR) {
+            mTitleBar.setToTabPicker();
+        } else {
+            getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, null);
+            getWindow().setFeatureDrawable(Window.FEATURE_RIGHT_ICON, null);
+            getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
+                    Window.PROGRESS_VISIBILITY_OFF);
+            setTitle(R.string.tab_picker_title);
+        }
         // Make the menu empty until the animation completes.
         mMenuState = EMPTY_MENU;
     }
 
-    private void bookmarksOrHistoryPicker(boolean startWithHistory) {
+    /* package */ void bookmarksOrHistoryPicker(boolean startWithHistory) {
         WebView current = mTabControl.getCurrentWebView();
         if (current == null) {
             return;
@@ -4384,11 +4826,11 @@
       return 0;
     }
 
-    static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
+    protected static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
             "(?i)" + // switch on case insensitive matching
             "(" +    // begin group for schema
             "(?:http|https|file):\\/\\/" +
-            "|(?:data|about|content|javascript):" +
+            "|(?:inline|data|about|content|javascript):" +
             ")" +
             "(.*)" );
 
@@ -4409,46 +4851,34 @@
 
         Matcher matcher = ACCEPTED_URI_SCHEMA.matcher(inUrl);
         if (matcher.matches()) {
-            if (hasSpace) {
-                inUrl = inUrl.replace(" ", "%20");
-            }
             // force scheme to lowercase
             String scheme = matcher.group(1);
             String lcScheme = scheme.toLowerCase();
             if (!lcScheme.equals(scheme)) {
-                return lcScheme + matcher.group(2);
+                inUrl = lcScheme + matcher.group(2);
+            }
+            if (hasSpace) {
+                inUrl = inUrl.replace(" ", "%20");
             }
             return inUrl;
         }
         if (hasSpace) {
-            // FIXME: quick search, need to be customized by setting
-            if (inUrl.length() > 2 && inUrl.charAt(1) == ' ') {
-                // FIXME: Is this the correct place to add to searches?
-                // what if someone else calls this function?
-                char char0 = inUrl.charAt(0);
-
-                if (char0 == 'g') {
-                    Browser.addSearchUrl(mResolver, inUrl);
-                    return composeSearchUrl(inUrl.substring(2));
-
-                } else if (char0 == 'w') {
-                    Browser.addSearchUrl(mResolver, inUrl);
-                    return URLUtil.composeSearchUrl(inUrl.substring(2),
-                            QuickSearch_W,
-                            QUERY_PLACE_HOLDER);
-
-                } else if (char0 == 'd') {
-                    Browser.addSearchUrl(mResolver, inUrl);
-                    return URLUtil.composeSearchUrl(inUrl.substring(2),
-                            QuickSearch_D,
-                            QUERY_PLACE_HOLDER);
-
-                } else if (char0 == 'l') {
-                    Browser.addSearchUrl(mResolver, inUrl);
+            // FIXME: Is this the correct place to add to searches?
+            // what if someone else calls this function?
+            int shortcut = parseUrlShortcut(inUrl);
+            if (shortcut != SHORTCUT_INVALID) {
+                Browser.addSearchUrl(mResolver, inUrl);
+                String query = inUrl.substring(2);
+                switch (shortcut) {
+                case SHORTCUT_GOOGLE_SEARCH:
+                    return URLUtil.composeSearchUrl(query, QuickSearch_G, QUERY_PLACE_HOLDER);
+                case SHORTCUT_WIKIPEDIA_SEARCH:
+                    return URLUtil.composeSearchUrl(query, QuickSearch_W, QUERY_PLACE_HOLDER);
+                case SHORTCUT_DICTIONARY_SEARCH:
+                    return URLUtil.composeSearchUrl(query, QuickSearch_D, QUERY_PLACE_HOLDER);
+                case SHORTCUT_GOOGLE_MOBILE_LOCAL_SEARCH:
                     // FIXME: we need location in this case
-                    return URLUtil.composeSearchUrl(inUrl.substring(2),
-                            QuickSearch_L,
-                            QUERY_PLACE_HOLDER);
+                    return URLUtil.composeSearchUrl(query, QuickSearch_L, QUERY_PLACE_HOLDER);
                 }
             }
         } else {
@@ -4458,39 +4888,7 @@
         }
 
         Browser.addSearchUrl(mResolver, inUrl);
-        return composeSearchUrl(inUrl);
-    }
-
-    /* package */ String composeSearchUrl(String search) {
-        return URLUtil.composeSearchUrl(search, QuickSearch_G,
-                QUERY_PLACE_HOLDER);
-    }
-
-    /* package */void setBaseSearchUrl(String url) {
-        if (url == null || url.length() == 0) {
-            /*
-             * get the google search url based on the SIM. Default is US. NOTE:
-             * This code uses resources to optionally select the search Uri,
-             * based on the MCC value from the SIM. The default string will most
-             * likely be fine. It is parameterized to accept info from the
-             * Locale, the language code is the first parameter (%1$s) and the
-             * country code is the second (%2$s). This code must function in the
-             * same way as a similar lookup in
-             * com.android.googlesearch.SuggestionProvider#onCreate(). If you
-             * change either of these functions, change them both. (The same is
-             * true for the underlying resource strings, which are stored in
-             * mcc-specific xml files.)
-             */
-            Locale l = Locale.getDefault();
-            QuickSearch_G = getResources().getString(
-                    R.string.google_search_base, l.getLanguage(),
-                    l.getCountry().toLowerCase())
-                    + "client=ms-"
-                    + Partner.getString(this.getContentResolver(), Partner.CLIENT_ID)
-                    + "&source=android-" + GOOGLE_SEARCH_SOURCE_SUGGEST + "&q=%s";
-        } else {
-            QuickSearch_G = url;
-        }
+        return URLUtil.composeSearchUrl(inUrl, QuickSearch_G, QUERY_PLACE_HOLDER);
     }
 
     private final static int LOCK_ICON_UNSECURE = 0;
@@ -4505,11 +4903,15 @@
     private ContentResolver mResolver;
     private FrameLayout     mContentView;
     private ImageGrid       mTabOverview;
+    private View            mCustomView;
+    private FrameLayout     mCustomViewContainer;
+    private WebChromeClient.CustomViewCallback mCustomViewCallback;
 
     // FIXME, temp address onPrepareMenu performance problem. When we move everything out of
     // view, we should rewrite this.
     private int mCurrentMenuState = 0;
     private int mMenuState = R.id.MAIN_MENU;
+    private int mOldMenuState = EMPTY_MENU;
     private static final int EMPTY_MENU = -1;
     private Menu mMenu;
 
@@ -4600,9 +5002,13 @@
                                             new FrameLayout.LayoutParams(
                                             ViewGroup.LayoutParams.FILL_PARENT,
                                             ViewGroup.LayoutParams.FILL_PARENT);
-    // We may provide UI to customize these
-    // Google search from the browser
-    static String QuickSearch_G;
+    /*package*/ static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =
+                                            new FrameLayout.LayoutParams(
+                                            ViewGroup.LayoutParams.FILL_PARENT,
+                                            ViewGroup.LayoutParams.FILL_PARENT,
+                                            Gravity.CENTER);
+    // Google search
+    final static String QuickSearch_G = "http://www.google.com/m?q=%s";
     // Wikipedia search
     final static String QuickSearch_W = "http://en.wikipedia.org/w/index.php?search=%s&go=Go";
     // Dictionary search
@@ -4634,6 +5040,8 @@
 
     private Toast mStopToast;
 
+    private TitleBar mTitleBar;
+
     // Used during animations to prevent other animations from being triggered.
     // A count is used since the animation to and from the Window overview can
     // overlap. A count of 0 means no animation where a count of > 0 means
@@ -4651,11 +5059,70 @@
     private IntentFilter mNetworkStateChangedFilter;
     private BroadcastReceiver mNetworkStateIntentReceiver;
 
+    private BroadcastReceiver mPackageInstallationReceiver;
+
     // activity requestCode
-    final static int COMBO_PAGE             = 1;
-    final static int DOWNLOAD_PAGE          = 2;
-    final static int PREFERENCES_PAGE       = 3;
+    final static int COMBO_PAGE                 = 1;
+    final static int DOWNLOAD_PAGE              = 2;
+    final static int PREFERENCES_PAGE           = 3;
+    final static int WEBSTORAGE_QUOTA_DIALOG    = 4;
 
     // the frenquency of checking whether system memory is low
     final static int CHECK_MEMORY_INTERVAL = 30000;     // 30 seconds
+
+    /**
+     * A UrlData class to abstract how the content will be set to WebView.
+     * This base class uses loadUrl to show the content.
+     */
+    private static class UrlData {
+        String mUrl;
+        byte[] mPostData;
+
+        UrlData(String url) {
+            this.mUrl = url;
+        }
+
+        void setPostData(byte[] postData) {
+            mPostData = postData;
+        }
+
+        boolean isEmpty() {
+            return mUrl == null || mUrl.length() == 0;
+        }
+
+        public void loadIn(WebView webView) {
+            if (mPostData != null) {
+                webView.postUrl(mUrl, mPostData);
+            } else {
+                webView.loadUrl(mUrl);
+            }
+        }
+    };
+
+    /**
+     * A subclass of UrlData class that can display inlined content using
+     * {@link WebView#loadDataWithBaseURL(String, String, String, String, String)}.
+     */
+    private static class InlinedUrlData extends UrlData {
+        InlinedUrlData(String inlined, String mimeType, String encoding, String failUrl) {
+            super(failUrl);
+            mInlined = inlined;
+            mMimeType = mimeType;
+            mEncoding = encoding;
+        }
+        String mMimeType;
+        String mInlined;
+        String mEncoding;
+        @Override
+        boolean isEmpty() {
+            return mInlined == null || mInlined.length() == 0 || super.isEmpty(); 
+        }
+
+        @Override
+        public void loadIn(WebView webView) {
+            webView.loadDataWithBaseURL(null, mInlined, mMimeType, mEncoding, mUrl);
+        }
+    }
+
+    private static final UrlData EMPTY_URL_DATA = new UrlData(null);
 }
diff --git a/src/com/android/browser/BrowserBackupAgent.java b/src/com/android/browser/BrowserBackupAgent.java
new file mode 100644
index 0000000..9e10370
--- /dev/null
+++ b/src/com/android/browser/BrowserBackupAgent.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import java.io.IOException;
+
+import android.app.BackupAgent;
+import android.backup.BackupDataInput;
+import android.backup.BackupDataOutput;
+import android.database.Cursor;
+import android.os.ParcelFileDescriptor;
+import android.provider.Browser;
+import android.provider.Browser.BookmarkColumns;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+import java.util.zip.CRC32;
+
+/**
+ * Settings backup agent for the Android browser.  Currently the only thing
+ * stored is the set of bookmarks.  It's okay if I/O exceptions are thrown
+ * out of the agent; the calling code handles it and the backup operation
+ * simply fails.
+ */
+public class BrowserBackupAgent extends BackupAgent {
+    static final String BOOKMARK_KEY = "_bookmarks_";
+
+    /**
+     * In order to determine whether the bookmark set has changed since the
+     * last time we did a backup, we store the following bits of info in the
+     * state file after a backup:
+     *
+     * 1. the size of the flattened bookmark file
+     * 2. the CRC32 of that file
+     *
+     * After we flatten the bookmarks file here in onBackup, we compare its
+     * metrics with the values from the saved state.  If they match, it means
+     * the bookmarks didn't really change and we don't need to send the data.
+     * (If they don't match, of course, then they've changed and we do indeed
+     * send the new flattened file to be backed up.)
+     */
+    @Override
+    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
+            ParcelFileDescriptor newState) throws IOException {
+        long savedFileSize = -1;
+        long savedCrc = -1;
+
+        // Extract the previous bookmark file size & CRC from the saved state
+        DataInputStream in = new DataInputStream(
+                new FileInputStream(oldState.getFileDescriptor()));
+        try {
+            savedFileSize = in.readLong();
+            savedCrc = in.readLong();
+        } catch (EOFException e) {
+            // It means we had no previous state; that's fine
+        }
+
+        // TODO: BUILD THE FLATTENED BOOKMARK FILE FROM THE DB (into tmpfile)
+        File tmpfile = getFilesDir().createTempFile("bkp", null);
+        CRC32 crc = new CRC32();
+        try {
+            Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI,
+                    new String[] { BookmarkColumns.URL, BookmarkColumns.VISITS,
+                    BookmarkColumns.DATE, BookmarkColumns.CREATED,
+                    BookmarkColumns.TITLE },
+                    BookmarkColumns.BOOKMARK + " == 1 ", null, null);
+            int count = cursor.getCount();
+            FileOutputStream out = new FileOutputStream(tmpfile);
+            for (int i = 0; i < count; i++) {
+                StringBuilder sb = new StringBuilder();
+                // URL
+                sb.append("'");
+                sb.append(cursor.getString(0));
+                sb.append("','");
+                // VISITS
+                sb.append(cursor.getInt(1));
+                sb.append("','");
+                // DATE
+                sb.append(cursor.getLong(2));
+                sb.append("','");
+                // CREATED
+                sb.append(cursor.getLong(3));
+                sb.append("','");
+                // TITLE
+                sb.append(cursor.getString(4));
+                sb.append("'");
+                out.write(sb.toString().getBytes());
+
+                cursor.moveToNext();
+            }
+            out.close();
+            /*
+                    android.util.Log.d("s", "backing up data" +
+                            getContentResolver().openFileDescriptor(Browser.BOOKMARKS_URI, "r").toString());
+             */
+            // NOTE: feed the flattened data through the crc engine on the fly
+            // to save re-reading it later just to checksum it
+
+            // Once the file is built, compare its metrics with the saved ones
+            if ((crc.getValue() != savedCrc) || (tmpfile.length() != savedFileSize)) {
+                // Different checksum or different size, so we need to back it up
+                copyFileToBackup(BOOKMARK_KEY, tmpfile, data);
+            }
+
+            // Last, record the metrics of the bookmark file that we just stored
+            writeBackupState(tmpfile.length(), crc.getValue(), newState);
+        } finally {
+            // Make sure to tidy up when we're done
+            tmpfile.delete();
+        }
+    }
+
+    /**
+     * Restore from backup -- reads in the flattened bookmark file as supplied from
+     * the backup service, parses that out, and rebuilds the bookmarks table in the
+     * browser database from it.
+     */
+    @Override
+    public void onRestore(BackupDataInput data, int appVersionCode,
+            ParcelFileDescriptor newState) throws IOException {
+        long crc = -1;
+        File tmpfile = getFilesDir().createTempFile("rst", null);
+        try {
+            while (data.readNextHeader()) {
+                if (BOOKMARK_KEY.equals(data.getKey())) {
+                    // Read the flattened bookmark data into a temp file
+                    crc = copyBackupToFile(data, tmpfile, data.getDataSize());
+
+                    // TODO: READ THE FLAT BOOKMARKS FILE 'tmpfile' AND REBUILD THE DB TABLE
+                }
+
+                // Last, write the state we just restored from so we can discern
+                // changes whenever we get invoked for backup in the future
+                writeBackupState(tmpfile.length(), crc, newState);
+            }
+        } finally {
+            // Whatever happens, delete the temp file
+            tmpfile.delete();
+        }
+    }
+
+    /*
+     * Utility functions
+     */
+
+    // Write the file to backup as a single record under the given key
+    private void copyFileToBackup(String key, File file, BackupDataOutput data)
+            throws IOException {
+        final int CHUNK = 8192;
+        byte[] buf = new byte[CHUNK];
+
+        int toCopy = (int) file.length();
+        data.writeEntityHeader(key, toCopy);
+
+        FileInputStream in = new FileInputStream(file);
+        int nRead;
+        while (toCopy > 0) {
+            nRead = in.read(buf, 0, CHUNK);
+            data.writeEntityData(buf, nRead);
+            toCopy -= nRead;
+        }
+        in.close();
+    }
+
+    // Read the given file from backup to a file, calculating a CRC32 along the way
+    private long copyBackupToFile(BackupDataInput data, File file, int toRead)
+            throws IOException {
+        final int CHUNK = 8192;
+        byte[] buf = new byte[CHUNK];
+        CRC32 crc = new CRC32();
+
+        while (toRead > 0) {
+            int numRead = data.readEntityData(buf, 0, CHUNK);
+            crc.update(buf, 0, numRead);
+            toRead -= numRead;
+        }
+
+        return crc.getValue();
+    }
+
+    // Write the given metrics to the new state file
+    private void writeBackupState(long fileSize, long crc, ParcelFileDescriptor stateFile)
+            throws IOException {
+        DataOutputStream out = new DataOutputStream(
+                new FileOutputStream(stateFile.getFileDescriptor()));
+        out.writeLong(fileSize);
+        out.writeLong(crc);
+    }
+}
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 27782e0..c7210af 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -30,30 +30,30 @@
 import android.provider.Browser;
 import android.provider.Browser.BookmarkColumns;
 import android.view.KeyEvent;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.webkit.WebIconDatabase;
 import android.webkit.WebIconDatabase.IconListener;
 import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
 
 import java.io.ByteArrayOutputStream;
 
 class BrowserBookmarksAdapter extends BaseAdapter {
 
-    private final String            LOGTAG = "Bookmarks";
-
     private String                  mCurrentPage;
     private Cursor                  mCursor;
     private int                     mCount;
-    private String                  mLastWhereClause;
-    private String[]                mLastSelectionArgs;
-    private String                  mLastOrderBy;
     private BrowserBookmarksPage    mBookmarksPage;
     private ContentResolver         mContentResolver;
-    private ChangeObserver          mChangeObserver;
-    private DataSetObserver         mDataSetObserver;
     private boolean                 mDataValid;
 
+    // The following variables are used for the grid mode
+    private boolean                 mGridMode;
+    private int                     mThumbHeight;
+
     // When true, this adapter is used to pick a bookmark to create a shortcut
     private boolean mCreateShortcut;
     private int mExtraOffset;
@@ -93,11 +93,21 @@
         mCurrentPage = b.getResources().getString(R.string.current_page) + 
                 curPage;
         mContentResolver = b.getContentResolver();
-        mLastOrderBy = Browser.BookmarkColumns.CREATED + " DESC";
-        mChangeObserver = new ChangeObserver();
-        mDataSetObserver = new MyDataSetObserver();
+        mGridMode = false;
+
         // FIXME: Should have a default sort order that the user selects.
-        search(null);
+        String whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0";
+        String orderBy = Browser.BookmarkColumns.VISITS + " DESC";
+        mCursor = b.managedQuery(Browser.BOOKMARKS_URI,
+                Browser.HISTORY_PROJECTION, whereClause, null, orderBy);
+        mCursor.registerContentObserver(new ChangeObserver());
+        mCursor.registerDataSetObserver(new MyDataSetObserver());
+
+        mDataValid = true;
+        notifyDataSetChanged();
+
+        mCount = mCursor.getCount() + mExtraOffset;
+
         // FIXME: This requires another query of the database after the
         // initial search(null). Can we optimize this?
         Browser.requestAllIcons(mContentResolver,
@@ -181,18 +191,7 @@
         }
         mCursor.moveToPosition(position- mExtraOffset);
         String url = mCursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
-        WebIconDatabase.getInstance().releaseIconForPageUrl(url);
-        Uri uri = ContentUris.withAppendedId(Browser.BOOKMARKS_URI, mCursor
-                .getInt(Browser.HISTORY_PROJECTION_ID_INDEX));
-        int numVisits = mCursor.getInt(Browser.HISTORY_PROJECTION_VISITS_INDEX);
-        if (0 == numVisits) {
-            mContentResolver.delete(uri, null, null);
-        } else {
-            // It is no longer a bookmark, but it is still a visited site.
-            ContentValues values = new ContentValues();
-            values.put(Browser.BookmarkColumns.BOOKMARK, 0);
-            mContentResolver.update(uri, values, null, null);
-        }
+        Bookmarks.removeFromBookmarks(null, mContentResolver, url);
         refreshList();
     }
     
@@ -253,52 +252,9 @@
      *  Refresh list to recognize a change in the database.
      */
     public void refreshList() {
-        // FIXME: consider using requery().
-        // Need to do more work to get it to function though.
-        searchInternal(mLastWhereClause, mLastSelectionArgs, mLastOrderBy);
-    }
-
-    /**
-     *  Search the database for bookmarks that match the input string.
-     *  @param like String to use to search the database.  Strings with spaces 
-     *              are treated as having multiple search terms using the
-     *              OR operator.  Search both the title and url.
-     */
-    public void search(String like) {
-        String whereClause = Browser.BookmarkColumns.BOOKMARK + " == 1";
-        String[] selectionArgs = null;
-        if (like != null) {
-            String[] likes = like.split(" ");
-            int count = 0;
-            boolean firstTerm = true;
-            StringBuilder andClause = new StringBuilder(256);
-            for (int j = 0; j < likes.length; j++) {
-                if (likes[j].length() > 0) {
-                    if (firstTerm) {
-                        firstTerm = false;
-                    } else {
-                        andClause.append(" OR ");
-                    }
-                    andClause.append(Browser.BookmarkColumns.TITLE
-                            + " LIKE ? OR " + Browser.BookmarkColumns.URL
-                            + " LIKE ? ");
-                    count += 2;
-                }
-            }
-            if (count > 0) {
-                selectionArgs = new String[count];
-                count = 0;
-                for (int j = 0; j < likes.length; j++) {
-                    if (likes[j].length() > 0) {
-                        like = "%" + likes[j] + "%";
-                        selectionArgs[count++] = like;
-                        selectionArgs[count++] = like;
-                    }
-                }
-                whereClause += " AND (" + andClause + ")";
-            }
-        }
-        searchInternal(whereClause, selectionArgs, mLastOrderBy);
+        mCursor.requery();
+        mCount = mCursor.getCount() + mExtraOffset;
+        notifyDataSetChanged();
     }
 
     /**
@@ -348,46 +304,6 @@
     }
 
     /**
-     *  This sorts alphabetically, with non-capitalized titles before 
-     *  capitalized.
-     */
-    public void sortAlphabetical() {
-        searchInternal(mLastWhereClause, mLastSelectionArgs,
-                Browser.BookmarkColumns.TITLE + " COLLATE UNICODE ASC");
-    }
-
-    /**
-     *  Internal function used in search, sort, and refreshList.
-     */
-    private void searchInternal(String whereClause, String[] selectionArgs,
-            String orderBy) {
-        if (mCursor != null) {
-            mCursor.unregisterContentObserver(mChangeObserver);
-            mCursor.unregisterDataSetObserver(mDataSetObserver);
-            mBookmarksPage.stopManagingCursor(mCursor);
-            mCursor.deactivate();
-        }
-
-        mLastWhereClause = whereClause;
-        mLastSelectionArgs = selectionArgs;
-        mLastOrderBy = orderBy;
-        mCursor = mContentResolver.query(
-            Browser.BOOKMARKS_URI,
-            Browser.HISTORY_PROJECTION,
-            whereClause,
-            selectionArgs, 
-            orderBy);
-        mCursor.registerContentObserver(mChangeObserver);
-        mCursor.registerDataSetObserver(mDataSetObserver);
-        mBookmarksPage.startManagingCursor(mCursor);
-
-        mDataValid = true;
-        notifyDataSetChanged();
-
-        mCount = mCursor.getCount() + mExtraOffset;
-    }
-
-    /**
      * How many items should be displayed in the list.
      * @return Count of items.
      */
@@ -425,6 +341,24 @@
         return position;
     }
 
+    /* package */ void heightChanged(int newHeight) {
+        mThumbHeight = newHeight;
+    }
+
+    /* package */ void switchViewMode(boolean toGrid) {
+        mGridMode = toGrid;
+    }
+
+    /* package */ void populateBookmarkItem(BookmarkItem b, int position) {
+        mCursor.moveToPosition(position - mExtraOffset);
+        b.setUrl(mCursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX));
+        b.setName(mCursor.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
+        byte[] data = mCursor.getBlob(Browser.HISTORY_PROJECTION_FAVICON_INDEX);
+        Bitmap bitmap = (null == data) ? null :
+                BitmapFactory.decodeByteArray(data, 0, data.length);
+        b.setFavicon(bitmap);
+    }
+
     /**
      * Get a View that displays the data at the specified position
      * in the list.
@@ -440,6 +374,57 @@
             throw new AssertionError(
                     "BrowserBookmarksAdapter tried to get a view out of range");
         }
+        if (mGridMode) {
+            if (convertView == null || convertView instanceof AddNewBookmark
+                    || convertView instanceof BookmarkItem) {
+                LayoutInflater factory = LayoutInflater.from(mBookmarksPage);
+                convertView
+                        = factory.inflate(R.layout.bookmark_thumbnail, null);
+            }
+            ImageView thumb = (ImageView) convertView.findViewById(R.id.thumb);
+            // Favicon disabled for now.
+            //ImageView fav = (ImageView) convertView.findViewById(R.id.fav);
+            TextView tv = (TextView) convertView.findViewById(R.id.label);
+
+            ViewGroup.LayoutParams lp = thumb.getLayoutParams();
+            if (lp.height != mThumbHeight) {
+                lp.height = mThumbHeight;
+                thumb.requestLayout();
+            }
+
+            if (0 == position && !mCreateShortcut) {
+                // This is to create a bookmark for the current page.
+                tv.setText(R.string.add_new_bookmark);
+                thumb.setImageResource(
+                        R.drawable.ic_tab_browser_bookmark_selected);
+                return convertView;
+            }
+            mCursor.moveToPosition(position - mExtraOffset);
+            tv.setText(mCursor.getString(
+                    Browser.HISTORY_PROJECTION_TITLE_INDEX));
+            byte[] data = mCursor.getBlob(
+                    Browser.HISTORY_PROJECTION_THUMBNAIL_INDEX);
+            if (data == null) {
+                // Backup is to just show white
+                thumb.setImageResource(R.drawable.blank);
+            } else {
+                thumb.setImageBitmap(
+                        BitmapFactory.decodeByteArray(data, 0, data.length));
+            }
+/*
+            // Now show the favicon
+            data = mCursor.getBlob(Browser.HISTORY_PROJECTION_FAVICON_INDEX);
+            if (data == null) {
+                fav.setVisibility(View.GONE);
+            } else {
+                fav.setVisibility(View.VISIBLE);
+                fav.setImageBitmap(
+                        BitmapFactory.decodeByteArray(data, 0, data.length));
+            }
+*/
+            return convertView;
+
+        }
         if (position == 0 && !mCreateShortcut) {
             AddNewBookmark b;
             if (convertView instanceof AddNewBookmark) {
@@ -450,7 +435,7 @@
             b.setUrl(mCurrentPage);
             return b;
         }
-        if (convertView == null || convertView instanceof AddNewBookmark) {
+        if (convertView == null || !(convertView instanceof BookmarkItem)) {
             convertView = new BookmarkItem(mBookmarksPage);
         }
         bind((BookmarkItem)convertView, position);
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index dd34c14..513ce3e 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -36,6 +36,7 @@
 import android.util.Log;
 import android.view.ContextMenu;
 import android.view.KeyEvent;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -44,6 +45,7 @@
 import android.view.ContextMenu.ContextMenuInfo;
 import android.widget.AdapterView;
 import android.widget.ListView;
+import android.widget.Toast;
 
 /**
  *  View showing the user's bookmarks in the browser.
@@ -51,6 +53,9 @@
 public class BrowserBookmarksPage extends Activity implements 
         View.OnCreateContextMenuListener {
 
+    private boolean                 mGridMode;
+    private BookmarkGridPage        mGridPage;
+    private View                    mVerticalList;
     private BrowserBookmarksAdapter mBookmarksAdapter;
     private static final int        BOOKMARKS_SAVE = 1;
     private boolean                 mMaxTabsOpen;
@@ -107,7 +112,13 @@
             break;
         case R.id.copy_url_context_menu_id:
             copy(getUrl(i.position));
-            
+            break;
+        case R.id.homepage_context_menu_id:
+            BrowserSettings.getInstance().setHomePage(this,
+                    getUrl(i.position));
+            Toast.makeText(this, R.string.homepage_set,
+                    Toast.LENGTH_LONG).show();
+            break;
         default:
             return super.onContextItemSelected(item);
         }
@@ -131,25 +142,29 @@
                     ((ViewGroup) mAddHeader.getParent()).
                             removeView(mAddHeader);
                 }
-                ((AddNewBookmark) i.targetView).copyTo(mAddHeader);
+                mAddHeader.setUrl(getIntent().getStringExtra("url"));
                 menu.setHeaderView(mAddHeader);
                 return;
             }
             menu.setGroupVisible(R.id.ADD_MENU, false);
-            BookmarkItem b = (BookmarkItem) i.targetView;
+            if (mMaxTabsOpen) {
+                menu.findItem(R.id.new_window_context_menu_id).setVisible(
+                        false);
+            }
             if (mContextHeader == null) {
                 mContextHeader = new BookmarkItem(BrowserBookmarksPage.this);
             } else if (mContextHeader.getParent() != null) {
                 ((ViewGroup) mContextHeader.getParent()).
                         removeView(mContextHeader);
             }
-            b.copyTo(mContextHeader);
-            menu.setHeaderView(mContextHeader);
-
-            if (mMaxTabsOpen) {
-                menu.findItem(R.id.new_window_context_menu_id).setVisible(
-                        false);
+            if (mGridMode) {
+                mBookmarksAdapter.populateBookmarkItem(mContextHeader,
+                        i.position);
+            } else {
+                BookmarkItem b = (BookmarkItem) i.targetView;
+                b.copyTo(mContextHeader);
             }
+            menu.setHeaderView(mContextHeader);
         }
 
     /**
@@ -159,25 +174,52 @@
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
-        setContentView(R.layout.browser_bookmarks_page);
-        setTitle(R.string.browser_bookmarks_page_bookmarks_text);
-
         if (Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) {
             mCreateShortcut = true;
         }
-
-        mBookmarksAdapter = new BrowserBookmarksAdapter(this, 
-                getIntent().getStringExtra("url"), mCreateShortcut);
         mMaxTabsOpen = getIntent().getBooleanExtra("maxTabsOpen", false);
 
-        ListView listView = (ListView) findViewById(R.id.list);
-        listView.setAdapter(mBookmarksAdapter);
-        listView.setDrawSelectorOnTop(false);
-        listView.setVerticalScrollBarEnabled(true);
-        listView.setOnItemClickListener(mListener);
+        setTitle(R.string.browser_bookmarks_page_bookmarks_text);
+        mBookmarksAdapter = new BrowserBookmarksAdapter(this,
+                        getIntent().getStringExtra("url"), mCreateShortcut);
+        mGridMode = true;
+        switchViewMode(mGridMode);
+    }
 
-        if (!mCreateShortcut) {
-            listView.setOnCreateContextMenuListener(this);
+    /**
+     *  Set the ContentView to be either the grid of thumbnails or the vertical
+     *  list.  Pass true to set it to the grid.
+     */
+    private void switchViewMode(boolean gridMode) {
+        mGridMode = gridMode;
+        mBookmarksAdapter.switchViewMode(gridMode);
+        if (mGridMode) {
+            if (mGridPage == null) {
+                mGridPage = new BookmarkGridPage(this, mBookmarksAdapter);
+                mGridPage.setOnItemClickListener(mListener);
+                if (!mCreateShortcut) {
+                    mGridPage.setOnCreateContextMenuListener(this);
+                }
+            }
+            setContentView(mGridPage);
+        } else {
+            if (null == mVerticalList) {
+                LayoutInflater factory = LayoutInflater.from(this);
+                mVerticalList = factory.inflate(R.layout.browser_bookmarks_page,
+                        null);
+
+                ListView listView
+                        = (ListView) mVerticalList.findViewById(R.id.list);
+                listView.setAdapter(mBookmarksAdapter);
+                listView.setDrawSelectorOnTop(false);
+                listView.setVerticalScrollBarEnabled(true);
+                listView.setOnItemClickListener(mListener);
+
+                if (!mCreateShortcut) {
+                    listView.setOnCreateContextMenuListener(this);
+                }
+            }
+            setContentView(mVerticalList);
         }
     }
 
@@ -196,7 +238,7 @@
             // It is possible that the view has been canceled when we get to
             // this point as back has a higher priority 
             if (mCanceled) {
-                android.util.Log.e("browser", "item clicked when dismising");
+                android.util.Log.e(LOGTAG, "item clicked when dismissing");
                 return;
             }
             if (!mCreateShortcut) {
@@ -294,12 +336,16 @@
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
-            case R.id.new_context_menu_id:
-                saveCurrentPage();
-                break;
-                
-            default:
-                return super.onOptionsItemSelected(item);
+        case R.id.new_context_menu_id:
+            saveCurrentPage();
+            break;
+
+        case R.id.switch_mode_menu_id:
+            switchViewMode(!mGridMode);
+            break;
+
+        default:
+            return super.onOptionsItemSelected(item);
         }
         return true;
     }
@@ -370,7 +416,7 @@
     /**
      *  Refresh the shown list after the database has changed.
      */
-    public void refreshList() {
+    private void refreshList() {
         mBookmarksAdapter.refreshList();
     }
     
diff --git a/src/com/android/browser/BrowserDownloadPage.java b/src/com/android/browser/BrowserDownloadPage.java
index 9776834..22e0e65 100644
--- a/src/com/android/browser/BrowserDownloadPage.java
+++ b/src/com/android/browser/BrowserDownloadPage.java
@@ -66,11 +66,7 @@
         setTitle(getText(R.string.download_title));
 
         mListView = (ListView) findViewById(R.id.list);
-        LayoutInflater factory = LayoutInflater.from(this);
-        View v = factory.inflate(R.layout.no_downloads, null);
-        addContentView(v, new LayoutParams(LayoutParams.FILL_PARENT,
-                LayoutParams.FILL_PARENT));
-        mListView.setEmptyView(v);
+        mListView.setEmptyView(findViewById(R.id.empty));
         
         mDownloadCursor = managedQuery(Downloads.CONTENT_URI, 
                 new String [] {"_id", Downloads.COLUMN_TITLE, Downloads.COLUMN_STATUS,
@@ -93,7 +89,7 @@
             // Create a list "controller" for the data
             mDownloadAdapter = new BrowserDownloadAdapter(this, 
                     R.layout.browser_download_item, mDownloadCursor);
-            
+
             mListView.setAdapter(mDownloadAdapter);
             mListView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
             mListView.setOnCreateContextMenuListener(this);
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 42ca848..e333416 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -41,6 +41,7 @@
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
 import android.view.ContextMenu.ContextMenuInfo;
+import android.view.ViewStub;
 import android.webkit.DateSorter;
 import android.webkit.WebIconDatabase.IconListener;
 import android.widget.AdapterView;
@@ -48,6 +49,7 @@
 import android.widget.ExpandableListView;
 import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import java.util.List;
 import java.util.Vector;
@@ -110,8 +112,7 @@
         setListAdapter(mAdapter);
         final ExpandableListView list = getExpandableListView();
         list.setOnCreateContextMenuListener(this);
-        LayoutInflater factory = LayoutInflater.from(this);
-        View v = factory.inflate(R.layout.empty_history, null);
+        View v = new ViewStub(this, R.layout.empty_history);
         addContentView(v, new LayoutParams(LayoutParams.FILL_PARENT,
                 LayoutParams.FILL_PARENT));
         list.setEmptyView(v);
@@ -222,6 +223,11 @@
                 Browser.deleteFromHistory(getContentResolver(), url);
                 mAdapter.refreshData();
                 return true;
+            case R.id.homepage_context_menu_id:
+                BrowserSettings.getInstance().setHomePage(this, url);
+                Toast.makeText(this, R.string.homepage_set,
+                    Toast.LENGTH_LONG).show();
+                return true;
             default:
                 break;
         }
@@ -267,18 +273,25 @@
         
         // Array for each of our bins.  Each entry represents how many items are
         // in that bin.
-        int mItemMap[];
+        private int mItemMap[];
         // This is our GroupCount.  We will have at most DateSorter.DAY_COUNT
         // bins, less if the user has no items in one or more bins.
-        int mNumberOfBins;
-        Vector<DataSetObserver> mObservers;
-        Cursor mCursor;
+        private int mNumberOfBins;
+        private Vector<DataSetObserver> mObservers;
+        private Cursor mCursor;
         
         HistoryAdapter() {
             mObservers = new Vector<DataSetObserver>();
             
-            String whereClause = Browser.BookmarkColumns.VISITS + " > 0 ";
-            String orderBy = Browser.BookmarkColumns.DATE + " DESC";
+            final String whereClause = Browser.BookmarkColumns.VISITS + " > 0"
+                    // In AddBookmarkPage, where we save new bookmarks, we add
+                    // three visits to newly created bookmarks, so that
+                    // bookmarks that have not been visited will show up in the
+                    // most visited, and higher in the goto search box.
+                    // However, this puts the site in the history, unless we
+                    // ignore sites with a DATE of 0, which the next line does.
+                    + " AND " + Browser.BookmarkColumns.DATE + " > 0";
+            final String orderBy = Browser.BookmarkColumns.DATE + " DESC";
            
             mCursor = managedQuery(
                     Browser.BOOKMARKS_URI,
diff --git a/src/com/android/browser/BrowserHomepagePreference.java b/src/com/android/browser/BrowserHomepagePreference.java
index d4708c3..7324f24 100644
--- a/src/com/android/browser/BrowserHomepagePreference.java
+++ b/src/com/android/browser/BrowserHomepagePreference.java
@@ -50,8 +50,8 @@
         if (dialog != null) {
             String url = s.toString();
             dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(
-                    url.length() == 0 || url.equals("about:blank") ||
-                    Regex.WEB_URL_PATTERN.matcher(url).matches());
+                url.length() == 0 || 
+                BrowserActivity.ACCEPTED_URI_SCHEMA.matcher(url).matches());
         }
     }
 
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index 5d6795b..2524eb8 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -17,12 +17,19 @@
 package com.android.browser;
 
 import java.util.List;
+import java.util.Vector;
 
+import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
 import android.preference.EditTextPreference;
+import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+import android.webkit.Plugin;
+import android.webkit.WebStorage;
 import android.webkit.WebView;
 import android.webkit.Plugin;
 
@@ -30,6 +37,8 @@
         implements Preference.OnPreferenceChangeListener, 
         Preference.OnPreferenceClickListener {
 
+    String TAG = "BrowserPreferencesPage";
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -51,6 +60,12 @@
                 getPreferenceScreen().getSharedPreferences()
                 .getString(BrowserSettings.PREF_TEXT_SIZE, null)) );
         
+        e = findPreference(BrowserSettings.PREF_DEFAULT_ZOOM);
+        e.setOnPreferenceChangeListener(this);
+        e.setSummary(getVisualDefaultZoomName(
+                getPreferenceScreen().getSharedPreferences()
+                .getString(BrowserSettings.PREF_DEFAULT_ZOOM, null)) );
+
         e = findPreference(BrowserSettings.PREF_DEFAULT_TEXT_ENCODING);
         e.setOnPreferenceChangeListener(this);
         
@@ -60,6 +75,28 @@
         
         e = findPreference(BrowserSettings.PREF_GEARS_SETTINGS);
         e.setOnPreferenceClickListener(this);
+
+        PreferenceScreen manageDatabases = (PreferenceScreen)
+            findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
+        Intent intent = new Intent(this, WebsiteSettingsActivity.class);
+        manageDatabases.setIntent(intent);
+    }
+
+    /*
+     * We need to set the manageDatabases PreferenceScreen state
+     * in the onResume(), as the number of origins with databases
+     * could have changed after calling the WebsiteSettingsActivity.
+     */
+    @Override
+    protected void onResume() {
+        super.onResume();
+        PreferenceScreen manageDatabases = (PreferenceScreen)
+            findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
+        manageDatabases.setEnabled(false);
+        Vector origins = WebStorage.getInstance().getOrigins();
+        if ((origins != null) && (origins.size() > 0)) {
+            manageDatabases.setEnabled(true);
+        }
     }
 
     @Override
@@ -104,6 +141,9 @@
         } else if (pref.getKey().equals(BrowserSettings.PREF_TEXT_SIZE)) {
             pref.setSummary(getVisualTextSizeName((String) objValue));
             return true;
+        } else if (pref.getKey().equals(BrowserSettings.PREF_DEFAULT_ZOOM)) {
+            pref.setSummary(getVisualDefaultZoomName((String) objValue));
+            return true;
         } else if (pref.getKey().equals(
                 BrowserSettings.PREF_DEFAULT_TEXT_ENCODING)) {
             pref.setSummary((String) objValue);
@@ -126,24 +166,44 @@
         }
         return true;
     }
-    
+
     private CharSequence getVisualTextSizeName(String enumName) {
-        CharSequence[] visualNames = 
-                getResources().getTextArray(R.array.pref_text_size_choices);
-        CharSequence[] enumNames = 
-                getResources().getTextArray(R.array.pref_text_size_values);
-        
+        CharSequence[] visualNames = getResources().getTextArray(
+                R.array.pref_text_size_choices);
+        CharSequence[] enumNames = getResources().getTextArray(
+                R.array.pref_text_size_values);
+
         // Sanity check
         if (visualNames.length != enumNames.length) {
             return "";
         }
-        
+
         for (int i = 0; i < enumNames.length; i++) {
             if (enumNames[i].equals(enumName)) {
                 return visualNames[i];
             }
         }
-        
+
+        return "";
+    }
+
+    private CharSequence getVisualDefaultZoomName(String enumName) {
+        CharSequence[] visualNames = getResources().getTextArray(
+                R.array.pref_default_zoom_choices);
+        CharSequence[] enumNames = getResources().getTextArray(
+                R.array.pref_default_zoom_values);
+
+        // Sanity check
+        if (visualNames.length != enumNames.length) {
+            return "";
+        }
+
+        for (int i = 0; i < enumNames.length; i++) {
+            if (enumNames[i].equals(enumName)) {
+                return visualNames[i];
+            }
+        }
+
         return "";
     }
 }
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index 42e22a5..29c65e8 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -17,33 +17,38 @@
 package com.android.browser;
 
 import com.google.android.providers.GoogleSettings.Partner;
-import java.util.Date;
 
-import android.app.ISearchManager;
 import android.app.SearchManager;
 import android.content.ComponentName;
 import android.content.ContentProvider;
 import android.content.ContentUris;
-import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.UriMatcher;
 import android.content.SharedPreferences.Editor;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.database.AbstractCursor;
+import android.database.ContentObserver;
 import android.database.Cursor;
-import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
 import android.net.Uri;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemProperties;
+import android.os.Handler;
 import android.preference.PreferenceManager;
 import android.provider.Browser;
-import android.util.Log;
+import android.provider.Settings;
 import android.server.search.SearchableInfo;
+import android.text.TextUtils;
 import android.text.util.Regex;
+import android.util.Log;
+import android.util.TypedValue;
+
+import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 public class BrowserProvider extends ContentProvider {
@@ -62,9 +67,10 @@
     private static final String[] SUGGEST_PROJECTION = new String[] {
             "_id", "url", "title", "bookmark"
     };
-    private static final String SUGGEST_SELECTION = 
-            "url LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ?";
-    private String[] SUGGEST_ARGS = new String[4];
+    private static final String SUGGEST_SELECTION =
+            "url LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ?"
+                + " OR title LIKE ?";
+    private String[] SUGGEST_ARGS = new String[5];
 
     // shared suggestion array index, make sure to match COLUMNS
     private static final int SUGGEST_COLUMN_INTENT_ACTION_ID = 1;
@@ -74,6 +80,7 @@
     private static final int SUGGEST_COLUMN_ICON_1_ID = 5;
     private static final int SUGGEST_COLUMN_ICON_2_ID = 6;
     private static final int SUGGEST_COLUMN_QUERY_ID = 7;
+    private static final int SUGGEST_COLUMN_FORMAT = 8;
 
     // shared suggestion columns
     private static final String[] COLUMNS = new String[] {
@@ -84,10 +91,13 @@
             SearchManager.SUGGEST_COLUMN_TEXT_2,
             SearchManager.SUGGEST_COLUMN_ICON_1,
             SearchManager.SUGGEST_COLUMN_ICON_2,
-            SearchManager.SUGGEST_COLUMN_QUERY};
+            SearchManager.SUGGEST_COLUMN_QUERY,
+            SearchManager.SUGGEST_COLUMN_FORMAT};
 
     private static final int MAX_SUGGESTION_SHORT_ENTRIES = 3;
     private static final int MAX_SUGGESTION_LONG_ENTRIES = 6;
+    private static final String MAX_SUGGESTION_LONG_ENTRIES_STRING =
+            Integer.valueOf(MAX_SUGGESTION_LONG_ENTRIES).toString();
 
     // make sure that these match the index of TABLE_NAMES
     private static final int URI_MATCH_BOOKMARKS = 0;
@@ -97,6 +107,7 @@
     private static final int URI_MATCH_SEARCHES_ID = 11;
     //
     private static final int URI_MATCH_SUGGEST = 20;
+    private static final int URI_MATCH_BOOKMARKS_SUGGEST = 21;
 
     private static final UriMatcher URI_MATCHER;
 
@@ -112,6 +123,9 @@
                 URI_MATCH_SEARCHES_ID);
         URI_MATCHER.addURI("browser", SearchManager.SUGGEST_URI_PATH_QUERY,
                 URI_MATCH_SUGGEST);
+        URI_MATCHER.addURI("browser",
+                TABLE_NAMES[URI_MATCH_BOOKMARKS] + "/" + SearchManager.SUGGEST_URI_PATH_QUERY,
+                URI_MATCH_BOOKMARKS_SUGGEST);
     }
 
     // 1 -> 2 add cache table
@@ -131,17 +145,30 @@
     // 15 -> 17 Set it up for the SearchManager
     // 17 -> 18 Added favicon in bookmarks table for Home shortcuts
     // 18 -> 19 Remove labels table
-    private static final int DATABASE_VERSION = 19;
+    // 19 -> 20 Added thumbnail
+    private static final int DATABASE_VERSION = 20;
+
+    // Regular expression which matches http://, followed by some stuff, followed by
+    // optionally a trailing slash, all matched as separate groups.
+    private static final Pattern STRIP_URL_PATTERN = Pattern.compile("^(http://)(.*?)(/$)?");
+
+    private SearchManager mSearchManager;
+
+    // The ID of the ColorStateList to be applied to urls of website suggestions, as derived from
+    // the current theme. This is not set until/unless beautifyUrl is called, at which point
+    // this variable caches the color value.
+    private static String mSearchUrlColorId;
 
     public BrowserProvider() {
     }
-  
+
 
     private static CharSequence replaceSystemPropertyInString(Context context, CharSequence srcString) {
         StringBuffer sb = new StringBuffer();
         int lastCharLoc = 0;
-        
-        final String client_id = Partner.getString(context.getContentResolver(), Partner.CLIENT_ID);
+
+        final String client_id = Partner.getString(context.getContentResolver(),
+                                                    Partner.CLIENT_ID, "android-google");
 
         for (int i = 0; i < srcString.length(); ++i) {
             char c = srcString.charAt(i);
@@ -191,7 +218,8 @@
                     "created LONG," +
                     "description TEXT," +
                     "bookmark INTEGER," +
-                    "favicon BLOB DEFAULT NULL" +
+                    "favicon BLOB DEFAULT NULL," +
+                    "thumbnail BLOB DEFAULT NULL" +
                     ");");
 
             final CharSequence[] bookmarks = mContext.getResources()
@@ -202,7 +230,7 @@
                     CharSequence bookmarkDestination = replaceSystemPropertyInString(mContext, bookmarks[i + 1]);
                     db.execSQL("INSERT INTO bookmarks (title, url, visits, " +
                             "date, created, bookmark)" + " VALUES('" +
-                            bookmarks[i] + "', '" + bookmarkDestination + 
+                            bookmarks[i] + "', '" + bookmarkDestination +
                             "', 0, 0, 0, 1);");
                 }
             } catch (ArrayIndexOutOfBoundsException e) {
@@ -218,9 +246,12 @@
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
             Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
-                    + newVersion + ", which will destroy all old data");
+                    + newVersion);
             if (oldVersion == 18) {
                 db.execSQL("DROP TABLE IF EXISTS labels");
+            }
+            if (oldVersion <= 19) {
+                db.execSQL("ALTER TABLE bookmarks ADD COLUMN thumbnail BLOB DEFAULT NULL;");
             } else {
                 db.execSQL("DROP TABLE IF EXISTS bookmarks");
                 db.execSQL("DROP TABLE IF EXISTS searches");
@@ -233,7 +264,7 @@
     public boolean onCreate() {
         final Context context = getContext();
         mOpenHelper = new DatabaseHelper(context);
-        // we added "picasa web album" into default bookmarks for version 19. 
+        // we added "picasa web album" into default bookmarks for version 19.
         // To avoid erasing the bookmark table, we added it explicitly for
         // version 18 and 19 as in the other cases, we will erase the table.
         if (DATABASE_VERSION == 18 || DATABASE_VERSION == 19) {
@@ -247,9 +278,66 @@
                 ed.commit();
             }
         }
+        mSearchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
+        mShowWebSuggestionsSettingChangeObserver
+            = new ShowWebSuggestionsSettingChangeObserver();
+        context.getContentResolver().registerContentObserver(
+                Settings.System.getUriFor(
+                        Settings.System.SHOW_WEB_SUGGESTIONS),
+                true, mShowWebSuggestionsSettingChangeObserver);
+        updateShowWebSuggestions();
         return true;
     }
 
+    /**
+     * This Observer will ensure that if the user changes the system
+     * setting of whether to display web suggestions, we will
+     * change accordingly.
+     */
+    /* package */ class ShowWebSuggestionsSettingChangeObserver
+            extends ContentObserver {
+        public ShowWebSuggestionsSettingChangeObserver() {
+            super(new Handler());
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            updateShowWebSuggestions();
+        }
+    }
+
+    private ShowWebSuggestionsSettingChangeObserver
+            mShowWebSuggestionsSettingChangeObserver;
+
+    // If non-null, then the system is set to show web suggestions,
+    // and this is the SearchableInfo to use to get them.
+    private SearchableInfo mSearchableInfo;
+
+    /**
+     * Check the system settings to see whether web suggestions are
+     * allowed.  If so, store the SearchableInfo to grab suggestions
+     * while the user is typing.
+     */
+    private void updateShowWebSuggestions() {
+        mSearchableInfo = null;
+        Context context = getContext();
+        if (Settings.System.getInt(context.getContentResolver(),
+                Settings.System.SHOW_WEB_SUGGESTIONS,
+                1 /* default on */) == 1) {
+            Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
+            intent.addCategory(Intent.CATEGORY_DEFAULT);
+            ResolveInfo info = context.getPackageManager().resolveActivity(
+                    intent, PackageManager.MATCH_DEFAULT_ONLY);
+            if (info != null) {
+                ComponentName googleSearchComponent =
+                        new ComponentName(info.activityInfo.packageName,
+                                info.activityInfo.name);
+                mSearchableInfo = mSearchManager.getSearchableInfo(
+                        googleSearchComponent, false);
+            }
+        }
+    }
+
     private void fixPicasaBookmark() {
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
         Cursor cursor = db.rawQuery("SELECT _id FROM bookmarks WHERE " +
@@ -274,9 +362,9 @@
      * Subclass AbstractCursor so we can combine multiple Cursors and add
      * "Google Search".
      * Here are the rules.
-     * 1. We only have MAX_SUGGESTION_LONG_ENTRIES in the list plus 
+     * 1. We only have MAX_SUGGESTION_LONG_ENTRIES in the list plus
      *      "Google Search";
-     * 2. If bookmark/history entries are less than 
+     * 2. If bookmark/history entries are less than
      *      (MAX_SUGGESTION_SHORT_ENTRIES -1), we include Google suggest.
      */
     private class MySuggestionCursor extends AbstractCursor {
@@ -286,6 +374,9 @@
         private int     mSuggestionCount;
         private boolean mBeyondCursor;
         private String  mString;
+        private int     mSuggestText1Id;
+        private int     mSuggestText2Id;
+        private int     mSuggestQueryId;
 
         public MySuggestionCursor(Cursor hc, Cursor sc, String string) {
             mHistoryCursor = hc;
@@ -297,6 +388,22 @@
             }
             mString = string;
             mBeyondCursor = false;
+
+            // Some web suggest providers only give suggestions and have no description string for
+            // items. The order of the result columns may be different as well. So retrieve the
+            // column indices for the fields we need now and check before using below.
+            if (mSuggestCursor == null) {
+                mSuggestText1Id = -1;
+                mSuggestText2Id = -1;
+                mSuggestQueryId = -1;
+            } else {
+                mSuggestText1Id = mSuggestCursor.getColumnIndex(
+                                SearchManager.SUGGEST_COLUMN_TEXT_1);
+                mSuggestText2Id = mSuggestCursor.getColumnIndex(
+                                SearchManager.SUGGEST_COLUMN_TEXT_2);
+                mSuggestQueryId = mSuggestCursor.getColumnIndex(
+                                SearchManager.SUGGEST_COLUMN_QUERY);
+            }
         }
 
         @Override
@@ -350,50 +457,60 @@
 
                     case SUGGEST_COLUMN_TEXT_1_ID:
                         if (mHistoryCount > mPos) {
-                            return mHistoryCursor.getString(1);
+                            return getHistoryTitle();
                         } else if (!mBeyondCursor) {
-                            return mSuggestCursor.getString(1);
+                            if (mSuggestText1Id == -1) return null;
+                            return mSuggestCursor.getString(mSuggestText1Id);
                         } else {
                             return mString;
                         }
 
                     case SUGGEST_COLUMN_TEXT_2_ID:
                         if (mHistoryCount > mPos) {
-                            return mHistoryCursor.getString(2);
+                            return getHistorySubtitle();
                         } else if (!mBeyondCursor) {
-                            return mSuggestCursor.getString(2);
+                            if (mSuggestText2Id == -1) return null;
+                            return mSuggestCursor.getString(mSuggestText2Id);
                         } else {
-                            return getContext().getString(R.string.search_google);
+                            return getContext().getString(R.string.search_the_web);
                         }
 
                     case SUGGEST_COLUMN_ICON_1_ID:
                         if (mHistoryCount > mPos) {
                             if (mHistoryCursor.getInt(3) == 1) {
-                                return new Integer(
+                                return Integer.valueOf(
                                         R.drawable.ic_search_category_bookmark)
                                         .toString();
                             } else {
-                                return new Integer(
+                                return Integer.valueOf(
                                         R.drawable.ic_search_category_history)
                                         .toString();
                             }
                         } else {
-                            return new Integer(
+                            return Integer.valueOf(
                                     R.drawable.ic_search_category_suggest)
                                     .toString();
                         }
 
                     case SUGGEST_COLUMN_ICON_2_ID:
-                        return new String("0");
+                        return "0";
 
                     case SUGGEST_COLUMN_QUERY_ID:
                         if (mHistoryCount > mPos) {
-                            return null;
+                            // Return the url in the intent query column. This is ignored
+                            // within the browser because our searchable is set to
+                            // android:searchMode="queryRewriteFromData", but it is used by
+                            // global search for query rewriting.
+                            return mHistoryCursor.getString(1);
                         } else if (!mBeyondCursor) {
-                            return mSuggestCursor.getString(3);
+                            if (mSuggestQueryId == -1) return null;
+                            return mSuggestCursor.getString(mSuggestQueryId);
                         } else {
                             return mString;
                         }
+
+                    case SUGGEST_COLUMN_FORMAT:
+                        return "html";
                 }
             }
             return null;
@@ -460,11 +577,57 @@
                 mSuggestCursor = null;
             }
         }
+
+        /**
+         * Provides the title (text line 1) for a browser suggestion, which should be the
+         * webpage title. If the webpage title is empty, returns the stripped url instead.
+         *
+         * @return the title string to use
+         */
+        private String getHistoryTitle() {
+            String title = mHistoryCursor.getString(2 /* webpage title */);
+            if (TextUtils.isEmpty(title) || TextUtils.getTrimmedLength(title) == 0) {
+                title = beautifyUrl(mHistoryCursor.getString(1 /* url */));
+            }
+            return title;
+        }
+
+        /**
+         * Provides the subtitle (text line 2) for a browser suggestion, which should be the
+         * webpage url. If the webpage title is empty, then the url should go in the title
+         * instead, and the subtitle should be empty, so this would return null.
+         *
+         * @return the subtitle string to use, or null if none
+         */
+        private String getHistorySubtitle() {
+            String title = mHistoryCursor.getString(2 /* webpage title */);
+            if (TextUtils.isEmpty(title) || TextUtils.getTrimmedLength(title) == 0) {
+                return null;
+            } else {
+                return beautifyUrl(mHistoryCursor.getString(1 /* url */));
+            }
+        }
+
+        /**
+         * Strips "http://" from the beginning of a url and "/" from the end,
+         * and adds html formatting to make it green.
+         */
+        private String beautifyUrl(String url) {
+            if (mSearchUrlColorId == null) {
+                // Get the color used for this purpose from the current theme.
+                TypedValue colorValue = new TypedValue();
+                getContext().getTheme().resolveAttribute(
+                        com.android.internal.R.attr.textColorSearchUrl, colorValue, true);
+                mSearchUrlColorId = Integer.toString(colorValue.resourceId);
+            }
+
+            return "<font color=\"@" + mSearchUrlColorId + "\">" + stripUrl(url) + "</font>";
+        }
     }
 
     @Override
     public Cursor query(Uri url, String[] projectionIn, String selection,
-            String[] selectionArgs, String sortOrder) 
+            String[] selectionArgs, String sortOrder)
             throws IllegalStateException {
         SQLiteDatabase db = mOpenHelper.getReadableDatabase();
 
@@ -473,7 +636,7 @@
             throw new IllegalArgumentException("Unknown URL");
         }
 
-        if (match == URI_MATCH_SUGGEST) {
+        if (match == URI_MATCH_SUGGEST || match == URI_MATCH_BOOKMARKS_SUGGEST) {
             String suggestSelection;
             String [] myArgs;
             if (selectionArgs[0] == null || selectionArgs[0].equals("")) {
@@ -481,7 +644,8 @@
                 myArgs = null;
             } else {
                 String like = selectionArgs[0] + "%";
-                if (selectionArgs[0].startsWith("http")) {
+                if (selectionArgs[0].startsWith("http")
+                        || selectionArgs[0].startsWith("file")) {
                     myArgs = new String[1];
                     myArgs[0] = like;
                     suggestSelection = selection;
@@ -490,6 +654,8 @@
                     SUGGEST_ARGS[1] = "http://www." + like;
                     SUGGEST_ARGS[2] = "https://" + like;
                     SUGGEST_ARGS[3] = "https://www." + like;
+                    // To match against titles.
+                    SUGGEST_ARGS[4] = like;
                     myArgs = SUGGEST_ARGS;
                     suggestSelection = SUGGEST_SELECTION;
                 }
@@ -497,52 +663,18 @@
 
             Cursor c = db.query(TABLE_NAMES[URI_MATCH_BOOKMARKS],
                     SUGGEST_PROJECTION, suggestSelection, myArgs, null, null,
-                    ORDER_BY,
-                    (new Integer(MAX_SUGGESTION_LONG_ENTRIES)).toString());
+                    ORDER_BY, MAX_SUGGESTION_LONG_ENTRIES_STRING);
 
-            if (Regex.WEB_URL_PATTERN.matcher(selectionArgs[0]).matches()) {
+            if (match == URI_MATCH_BOOKMARKS_SUGGEST
+                    || Regex.WEB_URL_PATTERN.matcher(selectionArgs[0]).matches()) {
                 return new MySuggestionCursor(c, null, "");
             } else {
                 // get Google suggest if there is still space in the list
                 if (myArgs != null && myArgs.length > 1
+                        && mSearchableInfo != null
                         && c.getCount() < (MAX_SUGGESTION_SHORT_ENTRIES - 1)) {
-                    ISearchManager sm = ISearchManager.Stub
-                            .asInterface(ServiceManager
-                                    .getService(Context.SEARCH_SERVICE));
-                    SearchableInfo si = null;
-                    try {
-                        // use the global search to get Google suggest provider
-                        si = sm.getSearchableInfo(new ComponentName(
-                                getContext(), "com.android.browser"), true);
-
-                        // similar to the getSuggestions() in SearchDialog.java
-                        StringBuilder uriStr = new StringBuilder("content://");
-                        uriStr.append(si.getSuggestAuthority());
-                        // if content path provided, insert it now
-                        final String contentPath = si.getSuggestPath();
-                        if (contentPath != null) {
-                            uriStr.append('/');
-                            uriStr.append(contentPath);
-                        }
-                        // append standard suggestion query path 
-                        uriStr.append('/' + SearchManager.SUGGEST_URI_PATH_QUERY);
-                        // inject query, either as selection args or inline
-                        String[] selArgs = null;
-                        if (si.getSuggestSelection() != null) {
-                            selArgs = new String[] {selectionArgs[0]};
-                        } else {
-                            uriStr.append('/');
-                            uriStr.append(Uri.encode(selectionArgs[0]));
-                        }
-
-                        // finally, make the query
-                        Cursor sc = getContext().getContentResolver().query(
-                                Uri.parse(uriStr.toString()), null,
-                                si.getSuggestSelection(), selArgs, null);
-
-                        return new MySuggestionCursor(c, sc, selectionArgs[0]);
-                    } catch (RemoteException e) {
-                    }
+                    Cursor sc = mSearchManager.getSuggestions(mSearchableInfo, selectionArgs[0]);
+                    return new MySuggestionCursor(c, sc, selectionArgs[0]);
                 }
                 return new MySuggestionCursor(c, null, selectionArgs[0]);
             }
@@ -694,4 +826,26 @@
         getContext().getContentResolver().notifyChange(url, null);
         return ret;
     }
+
+    /**
+     * Strips the provided url of preceding "http://" and any trailing "/". Does not
+     * strip "https://". If the provided string cannot be stripped, the original string
+     * is returned.
+     *
+     * TODO: Put this in TextUtils to be used by other packages doing something similar.
+     *
+     * @param url a url to strip, like "http://www.google.com/"
+     * @return a stripped url like "www.google.com", or the original string if it could
+     *         not be stripped
+     */
+    private static String stripUrl(String url) {
+        if (url == null) return null;
+        Matcher m = STRIP_URL_PATTERN.matcher(url);
+        if (m.matches() && m.groupCount() == 3) {
+            return m.group(2);
+        } else {
+            return url;
+        }
+    }
+
 }
diff --git a/src/com/android/browser/BrowserSearchpagePreference.java b/src/com/android/browser/BrowserSearchpagePreference.java
deleted file mode 100644
index 09e8993..0000000
--- a/src/com/android/browser/BrowserSearchpagePreference.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.preference.EditTextPreference;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.text.util.Regex;
-import android.util.AttributeSet;
-
-public class BrowserSearchpagePreference extends EditTextPreference implements
-        TextWatcher {
-
-    public BrowserSearchpagePreference(Context context, AttributeSet attrs,
-            int defStyle) {
-        super(context, attrs, defStyle);
-        getEditText().addTextChangedListener(this);
-    }
-
-    public BrowserSearchpagePreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        getEditText().addTextChangedListener(this);
-    }
-
-    public BrowserSearchpagePreference(Context context) {
-        super(context);
-        getEditText().addTextChangedListener(this);
-    }
-
-    public void afterTextChanged(Editable s) {
-        AlertDialog dialog = (AlertDialog) getDialog();
-        // This callback is called before the dialog has been fully constructed
-        if (dialog != null) {
-            String string = s.toString();
-            int length = string.length();
-            int first = length > 0 ? string
-                    .indexOf(BrowserActivity.QUERY_PLACE_HOLDER) : -1;
-            int last = length > 0 ? string
-                    .lastIndexOf(BrowserActivity.QUERY_PLACE_HOLDER) : -1;
-            dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(
-                    length == 0 || (first > 0 && first == last));
-        }
-    }
-
-    public void beforeTextChanged(CharSequence s, int start, int count,
-            int after) {
-    }
-
-    public void onTextChanged(CharSequence s, int start, int before, int count) {
-    }
-}
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 0e2c5af..aa7e103 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -18,20 +18,19 @@
 
 import com.google.android.providers.GoogleSettings.Partner;
 
-import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.pm.ActivityInfo;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
-import android.os.SystemProperties;
-import android.view.WindowManager;
-import android.webkit.CacheManager;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
 import android.webkit.CookieManager;
 import android.webkit.WebView;
 import android.webkit.WebViewDatabase;
 import android.webkit.WebIconDatabase;
 import android.webkit.WebSettings;
+import android.webkit.WebStorage;
 import android.preference.PreferenceManager;
 import android.provider.Browser;
 
@@ -53,7 +52,7 @@
  */
 class BrowserSettings extends Observable {
 
-    // Public variables for settings
+    // Private variables for settings
     // NOTE: these defaults need to be kept in sync with the XML
     // until the performance of PreferenceManager.setDefaultValues()
     // is improved.
@@ -67,10 +66,21 @@
     private boolean saveFormData = true;
     private boolean openInBackground = false;
     private String defaultTextEncodingName;
-    private String homeUrl = "http://www.google.com/m?client=ms-";
+    private String homeUrl = "";
     private boolean loginInitialized = false;
     private boolean autoFitPage = true;
+    private boolean landscapeOnly = false;
     private boolean showDebugSettings = false;
+    private String databasePath; // default value set in loadFromDb()
+    private boolean databaseEnabled = true;
+    private long webStorageDefaultQuota = 5 * 1024 * 1024;
+    // The Browser always enables Application Caches.
+    private boolean appCacheEnabled = true;
+    private String appCachePath;  // default value set in loadFromDb().
+    private boolean domStorageEnabled = true;
+    private String jsFlags = "";
+
+    private final static String TAG = "BrowserSettings";
 
     // Development settings
     public WebSettings.LayoutAlgorithm layoutAlgorithm =
@@ -80,6 +90,7 @@
     private boolean tracing = false;
     private boolean lightTouch = false;
     private boolean navDump = false;
+
     // Browser only settings
     private boolean doFlick = false;
 
@@ -90,6 +101,8 @@
     private static int defaultFixedFontSize = 13;
     private static WebSettings.TextSize textSize =
         WebSettings.TextSize.NORMAL;
+    private static WebSettings.ZoomDensity zoomDensity =
+        WebSettings.ZoomDensity.MEDIUM;
 
     // Preference keys that are used outside this class
     public final static String PREF_CLEAR_CACHE = "privacy_clear_cache";
@@ -100,21 +113,25 @@
             "privacy_clear_form_data";
     public final static String PREF_CLEAR_PASSWORDS =
             "privacy_clear_passwords";
+    public final static String PREF_DEFAULT_QUOTA =
+            "webstorage_default_quota";
     public final static String PREF_EXTRAS_RESET_DEFAULTS =
             "reset_default_preferences";
     public final static String PREF_DEBUG_SETTINGS = "debug_menu";
     public final static String PREF_GEARS_SETTINGS = "gears_settings";
+    public final static String PREF_WEBSITE_SETTINGS = "website_settings";
     public final static String PREF_TEXT_SIZE = "text_size";
+    public final static String PREF_DEFAULT_ZOOM = "default_zoom";
     public final static String PREF_DEFAULT_TEXT_ENCODING =
             "default_text_encoding";
 
     private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
-            "U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/525.18 (KHTML, " +
-            "like Gecko) Version/3.1.2 Safari/525.20.1";
+            "U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, " +
+            "like Gecko) Version/4.0 Safari/530.17";
 
     private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
-            "CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/525.18.1 " +
-            "(KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20";
+            "CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 " +
+            "(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";
 
     // Value to truncate strings when adding them to a TextView within
     // a ListView
@@ -159,7 +176,6 @@
             s.setLoadsImagesAutomatically(b.loadsImagesAutomatically);
             s.setJavaScriptEnabled(b.javaScriptEnabled);
             s.setPluginsEnabled(b.pluginsEnabled);
-            s.setPluginsPath(b.pluginsPath);
             s.setJavaScriptCanOpenWindowsAutomatically(
                     b.javaScriptCanOpenWindowsAutomatically);
             s.setDefaultTextEncodingName(b.defaultTextEncodingName);
@@ -169,6 +185,7 @@
             s.setDefaultFixedFontSize(b.defaultFixedFontSize);
             s.setNavDump(b.navDump);
             s.setTextSize(b.textSize);
+            s.setDefaultZoom(b.zoomDensity);
             s.setLightTouchEnabled(b.lightTouch);
             s.setSaveFormData(b.saveFormData);
             s.setSavePassword(b.rememberPasswords);
@@ -179,6 +196,15 @@
             s.setSupportMultipleWindows(true);
             // Turn off file access
             s.setAllowFileAccess(false);
+
+            s.setDatabasePath(b.databasePath);
+            s.setDatabaseEnabled(b.databaseEnabled);
+            s.setDomStorageEnabled(b.domStorageEnabled);
+            s.setWebStorageDefaultQuota(b.webStorageDefaultQuota);
+
+            // Turn on Application Caches.
+            s.setAppCachePath(b.appCachePath);
+            s.setAppCacheEnabled(b.appCacheEnabled);
         }
     }
 
@@ -198,8 +224,12 @@
         // Set the default value for the plugins path to the application's
         // local directory.
         pluginsPath = ctx.getDir("plugins", 0).getPath();
+        // Set the default value for the Application Caches path.
+        appCachePath = ctx.getDir("appcache", 0).getPath();
+        // Set the default value for the Database path.
+        databasePath = ctx.getDir("databases", 0).getPath();
 
-        homeUrl += Partner.getString(ctx.getContentResolver(), Partner.CLIENT_ID);
+        homeUrl = getFactoryResetHomeUrl(ctx);
 
         // Load the defaults from the xml
         // This call is TOO SLOW, need to manually keep the defaults
@@ -220,6 +250,15 @@
         pluginsEnabled = p.getBoolean("enable_plugins",
                 pluginsEnabled);
         pluginsPath = p.getString("plugins_path", pluginsPath);
+        databasePath = p.getString("database_path", databasePath);
+        databaseEnabled = p.getBoolean("enable_database", databaseEnabled);
+        webStorageDefaultQuota = Long.parseLong(p.getString(PREF_DEFAULT_QUOTA,
+                String.valueOf(webStorageDefaultQuota)));
+        appCacheEnabled = p.getBoolean("enable_appcache",
+                appCacheEnabled);
+        domStorageEnabled = p.getBoolean("enable_domstorage",
+                domStorageEnabled);
+        appCachePath = p.getString("appcache_path", appCachePath);
         javaScriptCanOpenWindowsAutomatically = !p.getBoolean(
             "block_popup_windows",
             !javaScriptCanOpenWindowsAutomatically);
@@ -236,7 +275,17 @@
         loginInitialized = p.getBoolean("login_initialized", loginInitialized);
         textSize = WebSettings.TextSize.valueOf(
                 p.getString(PREF_TEXT_SIZE, textSize.name()));
+        zoomDensity = WebSettings.ZoomDensity.valueOf(
+                p.getString(PREF_DEFAULT_ZOOM, zoomDensity.name()));
         autoFitPage = p.getBoolean("autofit_pages", autoFitPage);
+        boolean landscapeOnlyTemp =
+                p.getBoolean("landscape_only", landscapeOnly);
+        if (landscapeOnlyTemp != landscapeOnly) {
+            landscapeOnly = landscapeOnlyTemp;
+            mTabControl.getBrowserActivity().setRequestedOrientation(
+                    landscapeOnly ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+                    : ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+        }
         useWideViewPort = true; // use wide view port for either setting
         if (autoFitPage) {
             layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS;
@@ -272,10 +321,10 @@
             navDump = p.getBoolean("enable_nav_dump", navDump);
             doFlick = p.getBoolean("enable_flick", doFlick);
             userAgent = Integer.parseInt(p.getString("user_agent", "0"));
-            mTabControl.getBrowserActivity().setBaseSearchUrl(
-                    p.getString("search_url", ""));
         }
-        update();
+        // JS flags is loaded from DB even if showDebugSettings is false,
+        // so that it can be set once and be effective all the time.
+        jsFlags = p.getString("js_engine_flags", "");
     }
 
     public String getPluginsPath() {
@@ -286,6 +335,10 @@
         return homeUrl;
     }
 
+    public String getJsFlags() {
+        return jsFlags;
+    }
+
     public void setHomePage(Context context, String url) {
         Editor ed = PreferenceManager.
                 getDefaultSharedPreferences(context).edit();
@@ -310,6 +363,10 @@
         return textSize;
     }
 
+    public WebSettings.ZoomDensity getDefaultZoom() {
+        return zoomDensity;
+    }
+
     public boolean openInBackground() {
         return openInBackground;
     }
@@ -433,12 +490,33 @@
         db.clearHttpAuthUsernamePassword();
     }
 
-    /*package*/ void resetDefaultPreferences(Context context) {
+    /*package*/ void clearDatabases(Context context) {
+        WebStorage.getInstance().deleteAllDatabases();
+        // Remove all listed databases from the preferences
+        PreferenceActivity activity = (PreferenceActivity) context;
+        PreferenceScreen screen = (PreferenceScreen)
+            activity.findPreference(BrowserSettings.PREF_WEBSITE_SETTINGS);
+        screen.removeAll();
+        screen.setEnabled(false);
+    }
+
+    /*package*/ void resetDefaultPreferences(Context ctx) {
         SharedPreferences p =
-            PreferenceManager.getDefaultSharedPreferences(context);
+            PreferenceManager.getDefaultSharedPreferences(ctx);
         p.edit().clear().commit();
-        PreferenceManager.setDefaultValues(context, R.xml.browser_preferences,
+        PreferenceManager.setDefaultValues(ctx, R.xml.browser_preferences,
                 true);
+        // reset homeUrl
+        setHomePage(ctx, getFactoryResetHomeUrl(ctx));
+    }
+
+    private String getFactoryResetHomeUrl(Context context) {
+        String url = context.getResources().getString(R.string.homepage_base);
+        if (url.indexOf("{CID}") != -1) {
+            url = url.replace("{CID}", Partner.getString(context
+                    .getContentResolver(), Partner.CLIENT_ID, "android-google"));
+        }
+        return url;
     }
 
     // Private constructor that does nothing.
diff --git a/src/com/android/browser/BrowserYesNoPreference.java b/src/com/android/browser/BrowserYesNoPreference.java
index 65cde71..ae93882 100644
--- a/src/com/android/browser/BrowserYesNoPreference.java
+++ b/src/com/android/browser/BrowserYesNoPreference.java
@@ -38,6 +38,7 @@
             Context context = getContext();
             if (BrowserSettings.PREF_CLEAR_CACHE.equals(getKey())) {
                 BrowserSettings.getInstance().clearCache(context);
+                BrowserSettings.getInstance().clearDatabases(context);
             } else if (BrowserSettings.PREF_CLEAR_COOKIES.equals(getKey())) {
                 BrowserSettings.getInstance().clearCookies(context);
             } else if (BrowserSettings.PREF_CLEAR_HISTORY.equals(getKey())) {
diff --git a/src/com/android/browser/FakeWebView.java b/src/com/android/browser/FakeWebView.java
index 633b799..da5ef5f 100644
--- a/src/com/android/browser/FakeWebView.java
+++ b/src/com/android/browser/FakeWebView.java
@@ -33,17 +33,9 @@
  *  overrides ImageView so it can be used for the new tab image as well.
  */
 public class FakeWebView extends ImageView {
-    private TabControl.Tab mTab;
-    private Picture        mPicture;
+    private TabControl.PickerData mPickerData;
     private boolean        mUsesResource;
 
-    private class Listener implements WebView.PictureListener {
-        public void onNewPicture(WebView view, Picture p) {
-            FakeWebView.this.mPicture = p;
-            FakeWebView.this.invalidate();
-        }
-    };
-
     public FakeWebView(Context context) {
         this(context, null);
     }
@@ -68,17 +60,21 @@
             // would be nice to know if the picture is empty so we can avoid
             // drawing white.
             canvas.drawColor(Color.WHITE);
-            if (mTab != null) {
-                final WebView w = mTab.getTopWindow();
-                if (w != null) {
-                    if (mPicture != null) {
-                        canvas.save();
-                        float scale = getWidth() * w.getScale() / w.getWidth();
-                        canvas.scale(scale, scale);
-                        canvas.translate(-w.getScrollX(), -w.getScrollY());
-                        canvas.drawPicture(mPicture);
-                        canvas.restore();
+            if (mPickerData != null) {
+                final Picture p = mPickerData.mPicture;
+                if (p != null) {
+                    canvas.save();
+                    float scale = getWidth() * mPickerData.mScale
+                            / mPickerData.mWidth;
+                    // Check for NaN and infinity.
+                    if (Float.isNaN(scale) || Float.isInfinite(scale)) {
+                        scale = 1.0f;
                     }
+                    canvas.scale(scale, scale);
+                    canvas.translate(-mPickerData.mScrollX,
+                            -mPickerData.mScrollY);
+                    canvas.drawPicture(p);
+                    canvas.restore();
                 }
             }
         }
@@ -87,25 +83,24 @@
     @Override
     public void setImageResource(int resId) {
         mUsesResource = true;
-        mTab = null;
+        mPickerData = null;
         super.setImageResource(resId);
     }
 
     /**
      *  Set a WebView for this FakeWebView to represent.
-     *  @param  v WebView whose picture and other data will be used in onDraw.
+     *  @param  t The tab whose picture and other data will be used in onDraw.
      */
     public void setTab(TabControl.Tab t) {
         mUsesResource = false;
-        mTab = t;
-        if (t != null && t.getWebView() != null) {
-            Listener l = new Listener();
-            if (t.getSubWebView() != null) {
-                t.getSubWebView().setPictureListener(l);
-            } else {
-                t.getWebView().setPictureListener(l);
-            }
-            mPicture = mTab.getTopWindow().capturePicture();
+        if (mPickerData != null) {
+            // Clear the old tab's view first
+            mPickerData.mFakeWebView = null;
+        }
+        mPickerData = null;
+        if (t != null && t.getPickerData() != null) {
+            mPickerData = t.getPickerData();
+            mPickerData.mFakeWebView = this;
         }
     }
 }
diff --git a/src/com/android/browser/FindDialog.java b/src/com/android/browser/FindDialog.java
index 6e9574c..2049bd0 100644
--- a/src/com/android/browser/FindDialog.java
+++ b/src/com/android/browser/FindDialog.java
@@ -42,7 +42,6 @@
     private BrowserActivity mBrowserActivity;
     
     // Views with which the user can interact.
-    private View            mOk;
     private EditText        mEditText;
     private View            mNextButton;
     private View            mPrevButton;
@@ -129,7 +128,6 @@
         
         button = findViewById(R.id.done);
         button.setOnClickListener(mFindCancelListener);
-        mOk = button;
         
         mMatches = (TextView) findViewById(R.id.matches);
         mMatchesView = findViewById(R.id.matches_view);
@@ -143,23 +141,14 @@
         mBrowserActivity.closeFind();
         mWebView.clearMatches();
     }
-    
+
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
-        int code = event.getKeyCode();
-        boolean up = event.getAction() == KeyEvent.ACTION_UP;
-        switch (code) {
-            case KeyEvent.KEYCODE_DPAD_CENTER:
-            case KeyEvent.KEYCODE_ENTER:
-                if (!mEditText.hasFocus()) {
-                    break;
-                }
-                if (up) {
-                    findNext();
-                }
-                return true;
-            default:
-                break;
+        if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER
+                && event.getAction() == KeyEvent.ACTION_UP
+                && mEditText.hasFocus()) {
+            findNext();
+            return true;
         }
         return super.dispatchKeyEvent(event);
     }
diff --git a/src/com/android/browser/GearsNativeDialog.java b/src/com/android/browser/GearsNativeDialog.java
index ecf166d..b44ec2a 100644
--- a/src/com/android/browser/GearsNativeDialog.java
+++ b/src/com/android/browser/GearsNativeDialog.java
@@ -23,7 +23,6 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.util.Config;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.KeyEvent;
@@ -137,7 +136,7 @@
       return;
     }
 
-    if (Config.LOGV) {
+    if (Browser.LOGV_ENABLED) {
       Log.v(TAG, "dialogtype: " + dialogTypeString);
     }
 
diff --git a/src/com/android/browser/HistoryItem.java b/src/com/android/browser/HistoryItem.java
index 55e43f0..b37a3bd 100644
--- a/src/com/android/browser/HistoryItem.java
+++ b/src/com/android/browser/HistoryItem.java
@@ -17,23 +17,13 @@
  
 package com.android.browser;
 
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
 import android.content.Context;
-import android.database.Cursor;
 import android.graphics.Bitmap;
-import android.net.Uri;
 import android.provider.Browser;
-import android.util.Log;
 import android.view.View;
-import android.webkit.WebIconDatabase;
 import android.widget.CompoundButton;
 import android.widget.ImageView;
 import android.widget.TextView;
-import android.widget.Toast;
-
-import java.util.Date;
 
 /**
  *  Layout representing a history item in the classic history viewer.
@@ -54,56 +44,13 @@
         mListener = new CompoundButton.OnCheckedChangeListener() {
             public void onCheckedChanged(CompoundButton buttonView,
                     boolean isChecked) {
-                ContentResolver cr = mContext.getContentResolver();
-                Cursor cursor = cr.query(
-                        Browser.BOOKMARKS_URI,
-                        Browser.HISTORY_PROJECTION,
-                        "url = ?",
-                        new String[] { mUrl },
-                        null);
-                boolean first = cursor.moveToFirst();
-                // Should be in the database no matter what
-                if (!first) {
-                    throw new AssertionError("URL is not in the database!");
-                }
                 if (isChecked) {
-                    // Add to bookmarks
-                    // FIXME: Share code with AddBookmarkPage.java
-                    ContentValues map = new ContentValues();
-                    map.put(Browser.BookmarkColumns.CREATED,
-                            new Date().getTime());
-                    map.put(Browser.BookmarkColumns.TITLE, getName());
-                    map.put(Browser.BookmarkColumns.BOOKMARK, 1);
-                    try {
-                        cr.update(Browser.BOOKMARKS_URI, map, 
-                                "_id = " + cursor.getInt(0), null);
-                    } catch (IllegalStateException e) {
-                        Log.e("HistoryItem", "no database!");
-                    }
-                    WebIconDatabase.getInstance().retainIconForPageUrl(mUrl);
-                    // catch IllegalStateException?
-                    Toast.makeText(mContext, R.string.added_to_bookmarks,
-                            Toast.LENGTH_LONG).show();
+                    Bookmarks.addBookmark(mContext,
+                            mContext.getContentResolver(), mUrl, getName());
                 } else {
-                    // Remove from bookmarks
-                    // FIXME: This code should be shared with
-                    // BrowserBookmarksAdapter.java
-                    WebIconDatabase.getInstance().releaseIconForPageUrl(mUrl);
-                    Uri uri = ContentUris.withAppendedId(Browser.BOOKMARKS_URI,
-                            cursor.getInt(Browser.HISTORY_PROJECTION_ID_INDEX));
-                    // It is no longer a bookmark, but it is still a visited
-                    // site.
-                    ContentValues values = new ContentValues();
-                    values.put(Browser.BookmarkColumns.BOOKMARK, 0);
-                    try {
-                        cr.update(uri, values, null, null);
-                    } catch (IllegalStateException e) {
-                        Log.e("HistoryItem", "no database!");
-                    }
-                    Toast.makeText(mContext, R.string.removed_from_bookmarks,
-                            Toast.LENGTH_LONG).show();
+                    Bookmarks.removeFromBookmarks(mContext,
+                            mContext.getContentResolver(), mUrl);
                 }
-                cursor.deactivate();
             }
         };
     }
diff --git a/src/com/android/browser/ImageAdapter.java b/src/com/android/browser/ImageAdapter.java
index e957143..f95753a 100644
--- a/src/com/android/browser/ImageAdapter.java
+++ b/src/com/android/browser/ImageAdapter.java
@@ -27,7 +27,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.LayoutInflater;
-import android.webkit.WebView;
 import android.widget.ImageView;
 import android.widget.ListAdapter;
 import android.widget.TextView;
@@ -73,22 +72,10 @@
      * Clear the internal WebViews and remove their picture listeners.
      */
     public void clear() {
-        for (TabControl.Tab t : mItems) {
-            clearPictureListeners(t);
-        }
         mItems.clear();
         notifyObservers();
     }
 
-    private void clearPictureListeners(TabControl.Tab t) {
-        if (t.getWebView() != null) {
-            t.getWebView().setPictureListener(null);
-            if (t.getSubWebView() != null) {
-                t.getSubWebView().setPictureListener(null);
-            }
-        }
-    }
-
     /**
      * Add a new window web page to the grid
      * 
@@ -113,7 +100,7 @@
      */
     public void remove(int index) {
         if (index >= 0 && index < mItems.size()) {
-            clearPictureListeners(mItems.remove(index));
+            mItems.remove(index);
             notifyObservers();
             mMaxedOut = false;
         }
diff --git a/src/com/android/browser/ImageGrid.java b/src/com/android/browser/ImageGrid.java
index 9eccb16..9967f36 100644
--- a/src/com/android/browser/ImageGrid.java
+++ b/src/com/android/browser/ImageGrid.java
@@ -17,7 +17,6 @@
 package com.android.browser;
 
 import android.content.Context;
-import android.util.Config;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.KeyEvent;
@@ -109,7 +108,7 @@
      * @param index Window to remove, from 0 to MAX_TABS-1
      */
     public void remove(int index) {
-        if (Config.DEBUG && (index < 0 || index >= TabControl.MAX_TABS)) {
+        if (Browser.DEBUG && (index < 0 || index >= TabControl.MAX_TABS)) {
             throw new AssertionError();
         }
         mAdapter.remove(index);
diff --git a/src/com/android/browser/MostVisitedActivity.java b/src/com/android/browser/MostVisitedActivity.java
index 704ee27..90052d3 100644
--- a/src/com/android/browser/MostVisitedActivity.java
+++ b/src/com/android/browser/MostVisitedActivity.java
@@ -35,6 +35,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
+import android.view.ViewStub;
 
 import java.util.Vector;
 
@@ -50,8 +51,7 @@
                 .addListener(new IconReceiver());
         setListAdapter(mAdapter);
         ListView list = getListView();
-        LayoutInflater factory = LayoutInflater.from(this);
-        View v = factory.inflate(R.layout.empty_history, null);
+        View v = new ViewStub(this, R.layout.empty_history);
         addContentView(v, new LayoutParams(LayoutParams.FILL_PARENT,
                 LayoutParams.FILL_PARENT));
         list.setEmptyView(v);
@@ -84,9 +84,9 @@
         private Vector<DataSetObserver> mObservers;
         private Cursor mCursor;
         // These correspond with projection below.
-        private final int mUrlIndex = 0;
-        private final int mTitleIndex = 1;
-        private final int mBookmarkIndex = 2;
+        private static final int mUrlIndex = 0;
+        private static final int mTitleIndex = 1;
+        private static final int mBookmarkIndex = 2;
 
         MyAdapter() {
             mObservers = new Vector<DataSetObserver>();
diff --git a/src/com/android/browser/PermissionDialog.java b/src/com/android/browser/PermissionDialog.java
new file mode 100644
index 0000000..b71261a
--- /dev/null
+++ b/src/com/android/browser/PermissionDialog.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.Window;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * Permission dialog for HTML5
+ * @hide
+ */
+public class PermissionDialog extends Activity {
+
+    private static final String TAG = "PermissionDialog";
+    public static final String PARAM_ORIGIN = "origin";
+    public static final String PARAM_QUOTA = "quota";
+
+    private String mWebStorageOrigin;
+    private long mWebStorageQuota = 0;
+    private int mNotification = 0;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        getParameters();
+        setupDialog();
+    }
+
+    private void getParameters() {
+        Intent intent = getIntent();
+        mWebStorageOrigin = intent.getStringExtra(PARAM_ORIGIN);
+        mWebStorageQuota = intent.getLongExtra(PARAM_QUOTA, 0);
+    }
+
+    private void setupDialog() {
+        requestWindowFeature(Window.FEATURE_NO_TITLE);
+        setContentView(R.layout.permission_dialog);
+
+        setIcon(R.id.icon, android.R.drawable.ic_popup_disk_full);
+        setText(R.id.dialog_title, R.string.query_storage_quota_prompt);
+        setText(R.id.dialog_message, R.string.query_storage_quota_message);
+        setCharSequence(R.id.origin, mWebStorageOrigin);
+
+        setupButton(R.id.button_allow, R.string.permission_button_allow,
+            new View.OnClickListener() {
+                public void onClick(View v) { allow(); }
+            });
+        setupButton(R.id.button_alwaysdeny, R.string.permission_button_alwaysdeny,
+            new View.OnClickListener() {
+                public void onClick(View v) { alwaysdeny(); }
+            });
+        setupButton(R.id.button_deny, R.string.permission_button_deny,
+            new View.OnClickListener() {
+                public void onClick(View v) { deny(); }
+            });
+    }
+
+    private void setText(int viewID, int stringID) {
+        setCharSequence(viewID, getString(stringID));
+    }
+
+    private void setCharSequence(int viewID, CharSequence string) {
+        View view = findViewById(viewID);
+        if (view == null) {
+            return;
+        }
+        view.setVisibility(View.VISIBLE);
+        TextView textView = (TextView) view;
+        textView.setText(string);
+    }
+
+    private void setIcon(int viewID, int imageID) {
+        View view = findViewById(viewID);
+        if (view == null) {
+            return;
+        }
+        view.setVisibility(View.VISIBLE);
+        ImageView icon = (ImageView) view;
+        icon.setImageResource(imageID);
+    }
+
+    private void setupButton(int viewID, int stringID,
+                             View.OnClickListener listener) {
+        View view = findViewById(viewID);
+        if (view == null) {
+            return;
+        }
+        setText(viewID, stringID);
+        view.setOnClickListener(listener);
+    }
+
+    private void useNextQuota() {
+        CharSequence[] values = getResources().getTextArray(
+            R.array.webstorage_quota_entries_values);
+        for (int i=0; i<values.length; i++) {
+            long value = Long.parseLong(values[i].toString());
+            value *= (1024 * 1024); // the string array is expressed in MB
+            if (value > mWebStorageQuota) {
+                mWebStorageQuota = value;
+                break;
+            }
+        }
+    }
+
+    private void allow() {
+        // If somehow there is no "next quota" in the ladder,
+        // we'll add 1MB anyway.
+        mWebStorageQuota += 1024*1024;
+        useNextQuota();
+        mNotification = R.string.webstorage_notification;
+        closeDialog();
+    }
+
+    private void alwaysdeny() {
+        // Setting the quota to 0 will prevent any new data to be
+        // added, but the existing data will not be deleted.
+        mWebStorageQuota = 0;
+        mNotification = R.string.webstorage_notification;
+        closeDialog();
+    }
+
+    private void deny() {
+        closeDialog();
+    }
+
+    private void closeDialog() {
+        Intent intent = new Intent();
+        intent.putExtra(PARAM_QUOTA, mWebStorageQuota);
+        setResult(RESULT_OK, intent);
+        showToast();
+        finish();
+    }
+
+    private void showToast() {
+        if (mNotification != 0) {
+            Toast toast = Toast.makeText(this, mNotification, Toast.LENGTH_LONG);
+            toast.setGravity(Gravity.BOTTOM, 0, 0);
+            toast.show();
+        }
+    }
+
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK)
+              && (event.getAction() == KeyEvent.ACTION_DOWN)) {
+            closeDialog();
+            return true; // event consumed
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
+}
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index ee63f2c..274598a 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -17,10 +17,10 @@
 package com.android.browser;
 
 import android.content.Context;
+import android.graphics.Picture;
 import android.net.http.SslError;
 import android.os.Bundle;
 import android.os.Message;
-import android.util.Config;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -40,6 +40,7 @@
 import android.widget.ImageButton;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.Vector;
 
@@ -126,7 +127,7 @@
         }
         @Override
         public void onCloseWindow(WebView window) {
-            if (Config.DEBUG && window != mTab.mSubView) {
+            if (Browser.DEBUG && window != mTab.mSubView) {
                 throw new AssertionError("Can't close the window");
             }
             mActivity.dismissSubWindow(mTab);
@@ -143,10 +144,24 @@
         }
     }
 
+    // Extra saved information for displaying the tab in the picker.
+    public static class PickerData {
+        String  mUrl;
+        String  mTitle;
+        float   mScale;
+        int     mScrollX;
+        int     mScrollY;
+        int     mWidth;
+        Picture mPicture;
+        // This can be null. When a new picture comes in, this view should be
+        // invalidated to show the new picture.
+        FakeWebView mFakeWebView;
+    }
+
     /**
      * Private class for maintaining Tabs with a main WebView and a subwindow.
      */
-    public class Tab {
+    public class Tab implements WebView.PictureListener {
         // Main WebView
         private WebView mMainView;
         // Subwindow WebView
@@ -161,10 +176,9 @@
         // information needed to restore the WebView if the user goes back to
         // the tab.
         private Bundle mSavedState;
-        // Extra saved information for displaying the tab in the picker.
-        private String mUrl;
-        private String mTitle;
- 
+        // Data used when displaying the tab in the picker.
+        private PickerData mPickerData;
+
         // Parent Tab. This is the Tab that created this Tab, or null
         // if the Tab was created by the UI
         private Tab mParentTab;
@@ -235,7 +249,10 @@
          * @return The WebView's url or null.
          */
         public String getUrl() {
-            return mUrl;
+            if (mPickerData != null) {
+                return mPickerData.mUrl;
+            }
+            return null;
         }
 
         /**
@@ -246,7 +263,17 @@
          * @return The WebView's title (or url) or null.
          */
         public String getTitle() {
-            return mTitle;
+            if (mPickerData != null) {
+                return mPickerData.mTitle;
+            }
+            return null;
+        }
+
+        /**
+         * Returns the picker data.
+         */
+        public PickerData getPickerData() {
+            return mPickerData;
         }
 
         private void setParentTab(Tab parent) {
@@ -308,6 +335,18 @@
         public boolean closeOnExit() {
             return mCloseOnExit;
         }
+
+        public void onNewPicture(WebView view, Picture p) {
+            if (mPickerData == null) {
+                return;
+            }
+
+            mPickerData.mPicture = p;
+            // Tell the FakeWebView to redraw.
+            if (mPickerData.mFakeWebView != null) {
+                mPickerData.mFakeWebView.invalidate();
+            }
+        }
     };
 
     // Directory to store thumbnails for each WebView.
@@ -407,6 +446,9 @@
      * @return index of Tab or -1 if not found
      */
     int getTabIndex(Tab tab) {
+        if (tab == null) {
+            return -1;
+        }
         return mTabs.indexOf(tab);
     }
 
@@ -484,8 +526,8 @@
         // This tab may have been pushed in to the background and then closed.
         // If the saved state contains a picture file, delete the file.
         if (t.mSavedState != null) {
-            if (t.mSavedState.containsKey("picture")) {
-                new File(t.mSavedState.getString("picture")).delete();
+            if (t.mSavedState.containsKey(CURRPICTURE)) {
+                new File(t.mSavedState.getString(CURRPICTURE)).delete();
             }
         }
 
@@ -544,6 +586,8 @@
     private static final String CURRTAB = "currentTab";
     private static final String CURRURL = "currentUrl";
     private static final String CURRTITLE = "currentTitle";
+    private static final String CURRWIDTH = "currentWidth";
+    private static final String CURRPICTURE = "currentPicture";
     private static final String CLOSEONEXIT = "closeonexit";
     private static final String PARENTTAB = "parentTab";
     private static final String APPID = "appid";
@@ -596,8 +640,7 @@
                     Tab t = new Tab(null, false, null, null);
                     t.mSavedState = inState.getBundle(WEBVIEW + i);
                     if (t.mSavedState != null) {
-                        t.mUrl = t.mSavedState.getString(CURRURL);
-                        t.mTitle = t.mSavedState.getString(CURRTITLE);
+                        populatePickerDataFromSavedState(t);
                         // Need to maintain the app id and original url so we
                         // can possibly reuse this tab.
                         t.mAppId = t.mSavedState.getString(APPID);
@@ -641,11 +684,11 @@
             return;
         }
 
-        // free the WebView cache
-        Log.w(LOGTAG, "Free WebView cache");
+        // free the WebView's unused memory (this includes the cache)
+        Log.w(LOGTAG, "Free WebView's unused memory and cache");
         WebView view = getCurrentWebView();
         if (view != null) {
-            view.clearCache(false);
+            view.freeMemory();
         }
         // force a gc
         System.gc();
@@ -669,8 +712,9 @@
             t = mTabQueue.get(i++);
         } while (i < queueSize && t != null && t.mMainView == null);
 
-        // Don't do anything if the last remaining tab is the current one.
-        if (t == getCurrentTab()) {
+        // Don't do anything if the last remaining tab is the current one or if
+        // the last tab has been freed already.
+        if (t == getCurrentTab() || t.mMainView == null) {
             return null;
         }
 
@@ -793,8 +837,7 @@
         // Clear the saved state except for the app id and close-on-exit
         // values.
         t.mSavedState = null;
-        t.mUrl = null;
-        t.mTitle = null;
+        t.mPickerData = null;
         // Save the new url in order to avoid deleting the WebView.
         t.mOriginalUrl = url;
         return true;
@@ -825,6 +868,48 @@
         return setCurrentTab(newTab, false);
     }
 
+    /*package*/ void pauseCurrentTab() {
+        Tab t = getCurrentTab();
+        if (t != null) {
+            t.mMainView.onPause();
+            if (t.mSubView != null) {
+                t.mSubView.onPause();
+            }
+        }
+    }
+
+    /*package*/ void resumeCurrentTab() {
+        Tab t = getCurrentTab();
+        if (t != null) {
+            t.mMainView.onResume();
+            if (t.mSubView != null) {
+                t.mSubView.onResume();
+            }
+        }
+    }
+
+    private void putViewInForeground(WebView v, WebViewClient vc,
+                                     WebChromeClient cc) {
+        v.setWebViewClient(vc);
+        v.setWebChromeClient(cc);
+        v.setOnCreateContextMenuListener(mActivity);
+        v.setDownloadListener(mActivity);
+        v.onResume();
+    }
+
+    private void putViewInBackground(WebView v) {
+        // Set an empty callback so that default actions are not triggered.
+        v.setWebViewClient(mEmptyClient);
+        v.setWebChromeClient(mBackgroundChromeClient);
+        v.setOnCreateContextMenuListener(null);
+        // Leave the DownloadManager attached so that downloads can start in
+        // a non-active window. This can happen when going to a site that does
+        // a redirect after a period of time. The user could have switched to
+        // another tab while waiting for the download to start.
+        v.setDownloadListener(mActivity);
+        v.onPause();
+    }
+
     /**
      * If force is true, this method skips the check for newTab == current.
      */
@@ -850,7 +935,6 @@
         mTabQueue.add(newTab);
 
         WebView mainView;
-        WebView subView;
 
         // Display the new current tab
         mCurrentTab = mTabs.indexOf(newTab);
@@ -860,17 +944,12 @@
             // Same work as in createNewTab() except don't do new Tab()
             newTab.mMainView = mainView = createNewWebView();
         }
-        mainView.setWebViewClient(mActivity.getWebViewClient());
-        mainView.setWebChromeClient(mActivity.getWebChromeClient());
-        mainView.setOnCreateContextMenuListener(mActivity);
-        mainView.setDownloadListener(mActivity);
+        putViewInForeground(mainView, mActivity.getWebViewClient(),
+                            mActivity.getWebChromeClient());
         // Add the subwindow if it exists
         if (newTab.mSubViewContainer != null) {
-            subView = newTab.mSubView;
-            subView.setWebViewClient(newTab.mSubViewClient);
-            subView.setWebChromeClient(newTab.mSubViewChromeClient);
-            subView.setOnCreateContextMenuListener(mActivity);
-            subView.setDownloadListener(mActivity);
+            putViewInForeground(newTab.mSubView, newTab.mSubViewClient,
+                                newTab.mSubViewChromeClient);
         }
         if (needRestore) {
             // Have to finish setCurrentTab work before calling restoreState
@@ -885,23 +964,9 @@
      * Put the tab in the background using all the empty/background clients.
      */
     private void putTabInBackground(Tab t) {
-        WebView mainView = t.mMainView;
-        // Set an empty callback so that default actions are not triggered.
-        mainView.setWebViewClient(mEmptyClient);
-        mainView.setWebChromeClient(mBackgroundChromeClient);
-        mainView.setOnCreateContextMenuListener(null);
-        // Leave the DownloadManager attached so that downloads can start in
-        // a non-active window. This can happen when going to a site that does
-        // a redirect after a period of time. The user could have switched to
-        // another tab while waiting for the download to start.
-        mainView.setDownloadListener(mActivity);
-        WebView subView = t.mSubView;
-        if (subView != null) {
-            // Set an empty callback so that default actions are not triggered.
-            subView.setWebViewClient(mEmptyClient);
-            subView.setWebChromeClient(mBackgroundChromeClient);
-            subView.setOnCreateContextMenuListener(null);
-            subView.setDownloadListener(mActivity);
+        putViewInBackground(t.mMainView);
+        if (t.mSubView != null) {
+            putViewInBackground(t.mSubView);
         }
     }
 
@@ -919,30 +984,94 @@
     }
 
     /**
-     * Ensure that Tab t has a title, url, and favicon.
+     * Ensure that Tab t has data to display in the tab picker.
      * @param  t   Tab to populate.
      */
     /* package */ void populatePickerData(Tab t) {
-        if (t == null || t.mMainView == null) {
+        if (t == null) {
             return;
         }
+
+        // mMainView == null indicates that the tab has been freed.
+        if (t.mMainView == null) {
+            populatePickerDataFromSavedState(t);
+            return;
+        }
+
         // FIXME: The only place we cared about subwindow was for 
         // bookmarking (i.e. not when saving state). Was this deliberate?
         final WebBackForwardList list = t.mMainView.copyBackForwardList();
         final WebHistoryItem item =
                 list != null ? list.getCurrentItem() : null;
         populatePickerData(t, item);
+
+        // This method is only called during the tab picker creation. At this
+        // point we need to listen for new pictures since the WebView is still
+        // active.
+        final WebView w = t.getTopWindow();
+        w.setPictureListener(t);
+        // Capture the picture here instead of populatePickerData since it can
+        // be called when saving the state of a tab.
+        t.mPickerData.mPicture = w.capturePicture();
     }
 
-    // Populate the picker data
-    private void populatePickerData(Tab t, WebHistoryItem item) {
-        if (item != null) {
-            t.mUrl = item.getUrl();
-            t.mTitle = item.getTitle();
-            if (t.mTitle == null) {
-                t.mTitle = t.mUrl;
+    // Create the PickerData and populate it using the saved state of the tab.
+    private void populatePickerDataFromSavedState(Tab t) {
+        if (t.mSavedState == null) {
+            return;
+        }
+
+        final PickerData data = new PickerData();
+        final Bundle state = t.mSavedState;
+        data.mUrl = state.getString(CURRURL);
+        data.mTitle = state.getString(CURRTITLE);
+        data.mWidth = state.getInt(CURRWIDTH, 0);
+        // XXX: These keys are from WebView.savePicture so if they change, this
+        // will break.
+        data.mScale = state.getFloat("scale", 1.0f);
+        data.mScrollX = state.getInt("scrollX", 0);
+        data.mScrollY = state.getInt("scrollY", 0);
+
+        if (state.containsKey(CURRPICTURE)) {
+            final File f = new File(t.mSavedState.getString(CURRPICTURE));
+            try {
+                final FileInputStream in = new FileInputStream(f);
+                data.mPicture = Picture.createFromStream(in);
+                in.close();
+            } catch (Exception ex) {
+                // Ignore any problems with inflating the picture. We just
+                // won't draw anything.
             }
         }
+
+        // Set the tab's picker data.
+        t.mPickerData = data;
+    }
+
+    // Populate the picker data using the given history item and the current
+    // top WebView.
+    private void populatePickerData(Tab t, WebHistoryItem item) {
+        final PickerData data = new PickerData();
+        if (item != null) {
+            data.mUrl = item.getUrl();
+            data.mTitle = item.getTitle();
+            if (data.mTitle == null) {
+                data.mTitle = data.mUrl;
+            }
+        }
+        // We want to display the top window in the tab picker but use the url
+        // and title of the main window.
+        final WebView w = t.getTopWindow();
+        data.mWidth = w.getWidth();
+        data.mScale = w.getScale();
+        data.mScrollX = w.getScrollX();
+        data.mScrollY = w.getScrollY();
+
+        // Remember the old picture if possible.
+        if (t.mPickerData != null) {
+            data.mPicture = t.mPickerData.mPicture;
+        }
+        t.mPickerData = data;
     }
     
     /**
@@ -953,8 +1082,14 @@
         for (int i = 0; i < size; i++) {
             final Tab t = getTab(i);
             if (t != null && t.mSavedState == null) {
-                t.mUrl = null;
-                t.mTitle = null;
+                t.mPickerData = null;
+            }
+            if (t.mMainView != null) {
+                // Clear the picture listeners.
+                t.mMainView.setPictureListener(null);
+                if (t.mSubView != null) {
+                    t.mSubView.setPictureListener(null);
+                }
             }
         }
     }
@@ -976,7 +1111,7 @@
                 final File f = new File(mThumbnailDir, w.hashCode()
                         + "_pic.save");
                 if (w.savePicture(b, f)) {
-                    b.putString("picture", f.getPath());
+                    b.putString(CURRPICTURE, f.getPath());
                 }
             }
 
@@ -984,12 +1119,17 @@
             final WebHistoryItem item =
                     list != null ? list.getCurrentItem() : null;
             populatePickerData(t, item);
-            if (t.mUrl != null) {
-                b.putString(CURRURL, t.mUrl);
+
+            // XXX: WebView.savePicture stores the scale and scroll positions
+            // in the bundle so we don't have to do it here.
+            final PickerData data = t.mPickerData;
+            if (data.mUrl != null) {
+                b.putString(CURRURL, data.mUrl);
             }
-            if (t.mTitle != null) {
-                b.putString(CURRTITLE, t.mTitle);
+            if (data.mTitle != null) {
+                b.putString(CURRTITLE, data.mTitle);
             }
+            b.putInt(CURRWIDTH, data.mWidth);
             b.putBoolean(CLOSEONEXIT, t.mCloseOnExit);
             if (t.mAppId != null) {
                 b.putString(APPID, t.mAppId);
@@ -1020,8 +1160,7 @@
         // Restore the internal state even if the WebView fails to restore.
         // This will maintain the app id, original url and close-on-exit values.
         t.mSavedState = null;
-        t.mUrl = null;
-        t.mTitle = null;
+        t.mPickerData = null;
         t.mCloseOnExit = b.getBoolean(CLOSEONEXIT);
         t.mAppId = b.getString(APPID);
         t.mOriginalUrl = b.getString(ORIGINALURL);
@@ -1031,8 +1170,8 @@
         if (list == null) {
             return false;
         }
-        if (b.containsKey("picture")) {
-            final File f = new File(b.getString("picture"));
+        if (b.containsKey(CURRPICTURE)) {
+            final File f = new File(b.getString(CURRPICTURE));
             w.restorePicture(b, f);
             f.delete();
         }
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
new file mode 100644
index 0000000..b818dd2
--- /dev/null
+++ b/src/com/android/browser/TitleBar.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.webkit.WebView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+public class TitleBar extends LinearLayout {
+    private TextView        mTitle;
+    private TextView        mUrl;
+    private ImageView       mLftButton;
+    private Drawable        mBookmarkDrawable;
+    private View            mRtButton;
+    private View            mDivider;
+    private ProgressBar     mCircularProgress;
+    private ProgressBar     mHorizontalProgress;
+    private ImageView       mFavicon;
+    private ImageView       mLockIcon;
+    private boolean         mInLoad;
+
+    public TitleBar(Context context) {
+        this(context, null);
+    }
+
+    public TitleBar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        LayoutInflater factory = LayoutInflater.from(context);
+        factory.inflate(R.layout.title_bar, this);
+
+        mTitle = (TextView) findViewById(R.id.title);
+        mUrl = (TextView) findViewById(R.id.url);
+
+        mLftButton = (ImageView) findViewById(R.id.lft_button);
+        mRtButton = findViewById(R.id.rt_button);
+
+        mCircularProgress = (ProgressBar) findViewById(R.id.progress_circular);
+        mHorizontalProgress = (ProgressBar) findViewById(
+                R.id.progress_horizontal);
+        mFavicon = (ImageView) findViewById(R.id.favicon);
+        mLockIcon = (ImageView) findViewById(R.id.lock_icon);
+        mDivider = findViewById(R.id.divider);
+    }
+
+    /* package */ void setBrowserActivity(final BrowserActivity activity) {
+        mLftButton.setOnClickListener(new View.OnClickListener() {
+                    public void onClick(View v) {
+                        if (mInLoad) {
+                            WebView webView = activity.getTopWindow();
+                            if (webView != null) {
+                                webView.stopLoading();
+                            }
+                        } else {
+                            activity.bookmarksOrHistoryPicker(false);
+                        }
+                    }
+                });
+        mRtButton.setOnClickListener(new View.OnClickListener() {
+                    public void onClick(View v) {
+                        WebView webView = activity.getTopWindow();
+                        if (webView != null) {
+                            webView.zoomScrollOut();
+                        }
+                    }
+                });
+        setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                activity.onSearchRequested();
+            }
+        });
+    }
+
+    /* package */ void setFavicon(Drawable d) {
+        mFavicon.setImageDrawable(d);
+    }
+
+    /* package */ void setLock(Drawable d) {
+        if (d == null) {
+            mLockIcon.setVisibility(View.GONE);
+        } else {
+            mLockIcon.setImageDrawable(d);
+            mLockIcon.setVisibility(View.VISIBLE);
+        }
+    }
+
+    /* package */ void setProgress(int newProgress) {
+        if (newProgress == mCircularProgress.getMax()) {
+            mCircularProgress.setVisibility(View.GONE);
+            mHorizontalProgress.setVisibility(View.GONE);
+            mDivider.setVisibility(View.VISIBLE);
+            mRtButton.setVisibility(View.VISIBLE);
+            mLftButton.setImageDrawable(mBookmarkDrawable);
+            mInLoad = false;
+        } else {
+            mCircularProgress.setProgress(newProgress);
+            mHorizontalProgress.setProgress(newProgress);
+            mCircularProgress.setVisibility(View.VISIBLE);
+            mHorizontalProgress.setVisibility(View.VISIBLE);
+            mDivider.setVisibility(View.GONE);
+            mRtButton.setVisibility(View.GONE);
+            if (mBookmarkDrawable == null) {
+                // The drawable was assigned in the xml file, so it already
+                // exists.  Keep a pointer to it when we switch to the resource
+                // so we can easily switch back.
+                mBookmarkDrawable = mLftButton.getDrawable();
+            }
+            mLftButton.setImageResource(
+                    com.android.internal.R.drawable.ic_menu_stop);
+            mInLoad = true;
+        }
+    }
+
+    /* package */ void setTitleAndUrl(CharSequence title, CharSequence url) {
+        if (null == title) {
+            mTitle.setText(R.string.title_bar_loading);
+        } else {
+            mTitle.setText(title);
+        }
+        if (url != null) {
+            url = BrowserActivity.buildTitleUrl(url.toString());
+        }
+        mUrl.setText(url);
+    }
+
+    /* package */ void setToTabPicker() {
+        mTitle.setText(R.string.tab_picker_title);
+        setFavicon(null);
+        setLock(null);
+        mCircularProgress.setVisibility(View.GONE);
+        mHorizontalProgress.setVisibility(View.GONE);
+    }
+}
diff --git a/src/com/android/browser/WebsiteSettingsActivity.java b/src/com/android/browser/WebsiteSettingsActivity.java
new file mode 100644
index 0000000..7fea766
--- /dev/null
+++ b/src/com/android/browser/WebsiteSettingsActivity.java
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.AlertDialog;
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Browser;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebIconDatabase;
+import android.webkit.WebStorage;
+import android.widget.ArrayAdapter;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Vector;
+
+/**
+ * Manage the settings for an origin.
+ * We use it to keep track of the HTML5 settings, i.e. database (webstorage).
+ */
+public class WebsiteSettingsActivity extends ListActivity {
+
+    private String LOGTAG = "WebsiteSettingsActivity";
+    private static String sMBStored = null;
+    private SiteAdapter mAdapter = null;
+
+    class Site {
+        private String mOrigin;
+        private String mTitle;
+        private Bitmap mIcon;
+
+        public Site(String origin, String title, Bitmap icon) {
+            mOrigin = origin;
+            mTitle = title;
+            mIcon = icon;
+        }
+
+        public String getOrigin() {
+            return mOrigin;
+        }
+
+        public void setTitle(String title) {
+            mTitle = title;
+        }
+
+        public String getTitle() {
+            return mTitle;
+        }
+
+        public void setIcon(Bitmap icon) {
+            mIcon = icon;
+        }
+
+        public Bitmap getIcon() {
+            return mIcon;
+        }
+    }
+
+    class SiteAdapter extends ArrayAdapter<Site>
+            implements AdapterView.OnItemClickListener {
+        private int mResource;
+        private LayoutInflater mInflater;
+        private Bitmap mDefaultIcon;
+        private Site mCurrentSite;
+        private final static int STORED_DATA = 0;
+
+        public SiteAdapter(Context context, int rsc) {
+            super(context, rsc);
+            mResource = rsc;
+            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            mDefaultIcon = BitmapFactory.decodeResource(getResources(),
+                    R.drawable.ic_launcher_shortcut_browser_bookmark);
+            populateOrigins();
+        }
+
+        public void populateOrigins() {
+            clear();
+
+            // Get the list of origins we want to display
+            HashMap<String, Site> uris = new HashMap<String, Site>();
+            Vector origins = WebStorage.getInstance().getOrigins();
+            if (origins != null) {
+                for (int i = 0;  i < origins.size(); i++) {
+                    String origin = (String) origins.get(i);
+                    Site site = new Site(origin, origin, null);
+                    uris.put(Uri.parse(origin).getHost(), site);
+                }
+            }
+
+            // Check the bookmark db -- if one of our origin matches,
+            // we set its title and favicon
+            Cursor c = getContext().getContentResolver().query(Browser.BOOKMARKS_URI,
+                    new String[] { Browser.BookmarkColumns.URL, Browser.BookmarkColumns.TITLE,
+                    Browser.BookmarkColumns.FAVICON }, "bookmark = 1", null, null);
+
+            if ((c != null) && c.moveToFirst()) {
+                int urlIndex = c.getColumnIndex(Browser.BookmarkColumns.URL);
+                int titleIndex = c.getColumnIndex(Browser.BookmarkColumns.TITLE);
+                int faviconIndex = c.getColumnIndex(Browser.BookmarkColumns.FAVICON);
+                do {
+                    String url = c.getString(urlIndex);
+                    String host = Uri.parse(url).getHost();
+                    if (uris.containsKey(host)) {
+                        String title = c.getString(titleIndex);
+                        Site site = uris.get(host);
+                        site.setTitle(title);
+                        byte[] data = c.getBlob(faviconIndex);
+                        if (data != null) {
+                            Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
+                            if (bmp != null) {
+                                site.setIcon(bmp);
+                            }
+                        }
+                    }
+                } while (c.moveToNext());
+            }
+
+            // We can now simply populate our array with Site instances
+            Set keys = uris.keySet();
+            Iterator iter = keys.iterator();
+            while (iter.hasNext()) {
+                String origin = (String) iter.next();
+                Site site = uris.get(origin);
+                add(site);
+            }
+
+            if (getCount() == 0) {
+                finish(); // we close the screen
+            }
+        }
+
+        public int getCount() {
+            if (mCurrentSite == null) {
+                return super.getCount();
+            }
+            return 1; // db view
+        }
+
+        public String sizeValueToString(long value) {
+            float mb = (float) value / (1024.0F * 1024.0F);
+            int val = (int) (mb * 10);
+            float ret = (float) (val / 10.0F);
+            if (ret <= 0) {
+                return "0";
+            }
+            return String.valueOf(ret);
+        }
+
+        /*
+         * If we receive the back event and are displaying
+         * site's settings, we want to go back to the main
+         * list view. If not, we just do nothing (see
+         * dispatchKeyEvent() below).
+         */
+        public boolean backKeyPressed() {
+            if (mCurrentSite != null) {
+                mCurrentSite = null;
+                populateOrigins();
+                notifyDataSetChanged();
+                return true;
+            }
+            return false;
+        }
+
+        public View getView(int position, View convertView, ViewGroup parent) {
+            View view;
+            TextView title;
+            TextView subtitle;
+            ImageView icon;
+
+            if (convertView == null) {
+                view = mInflater.inflate(mResource, parent, false);
+            } else {
+                view = convertView;
+            }
+
+            title = (TextView) view.findViewById(R.id.title);
+            subtitle = (TextView) view.findViewById(R.id.subtitle);
+            icon = (ImageView) view.findViewById(R.id.icon);
+
+            if (mCurrentSite == null) {
+                Site site = getItem(position);
+                title.setText(site.getTitle());
+                subtitle.setText(site.getOrigin());
+                icon.setVisibility(View.VISIBLE);
+                Bitmap bmp = site.getIcon();
+                if (bmp == null) {
+                    bmp = mDefaultIcon;
+                }
+                icon.setImageBitmap(bmp);
+                // We set the site as the view's tag,
+                // so that we can get it in onItemClick()
+                view.setTag(site);
+            } else {
+                icon.setVisibility(View.GONE);
+                if (position == STORED_DATA) {
+                    String origin = mCurrentSite.getOrigin();
+                    long usageValue = WebStorage.getInstance().getUsageForOrigin(origin);
+                    String usage = sizeValueToString(usageValue) + " " + sMBStored;
+
+                    title.setText(R.string.webstorage_clear_data_title);
+                    subtitle.setText(usage);
+                }
+            }
+
+            return view;
+        }
+
+        public void onItemClick(AdapterView<?> parent,
+                                View view,
+                                int position,
+                                long id) {
+            if (mCurrentSite != null) {
+                if (position == STORED_DATA) {
+                    new AlertDialog.Builder(getContext())
+                        .setTitle(R.string.webstorage_clear_data_dialog_title)
+                        .setMessage(R.string.webstorage_clear_data_dialog_message)
+                        .setPositiveButton(R.string.webstorage_clear_data_dialog_ok_button,
+                                           new AlertDialog.OnClickListener() {
+                            public void onClick(DialogInterface dlg, int which) {
+                                WebStorage.getInstance().deleteOrigin(mCurrentSite.getOrigin());
+                                mCurrentSite = null;
+                                populateOrigins();
+                                notifyDataSetChanged();
+                            }})
+                        .setNegativeButton(R.string.webstorage_clear_data_dialog_cancel_button, null)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .show();
+                }
+            } else {
+                mCurrentSite = (Site) view.getTag();
+                notifyDataSetChanged();
+            }
+        }
+    }
+
+    /**
+     * Intercepts the back key to immediately notify
+     * NativeDialog that we are done.
+     */
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK)
+            && (event.getAction() == KeyEvent.ACTION_DOWN)) {
+            if ((mAdapter != null) && (mAdapter.backKeyPressed())){
+                return true; // event consumed
+            }
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        if (sMBStored == null) {
+            sMBStored = getString(R.string.webstorage_origin_summary_mb_stored);
+        }
+        mAdapter = new SiteAdapter(this, R.layout.application);
+        setListAdapter(mAdapter);
+        getListView().setOnItemClickListener(mAdapter);
+    }
+}