Merge remote-tracking branch 'goog/ics-aah'
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3a281c9..0c2e6b3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -41,6 +41,8 @@
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+    <uses-permission android:name="android.permission.READ_PROFILE" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
     <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="com.android.launcher.permission.INSTALL_SHORTCUT"/>
@@ -54,7 +56,7 @@
 
         <provider android:name=".provider.BrowserProvider2"
                   android:authorities="com.android.browser;browser"
-                  android:multiprocess="true"
+                  android:multiprocess="false"
                   android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
                   android:writePermission="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS">
             <path-permission android:path="/bookmarks/search_suggest_query"
@@ -64,7 +66,7 @@
                   android:label="@string/application_name"
                   android:launchMode="singleTask"
                   android:alwaysRetainTaskState="true"
-                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
+                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
                   android:theme="@style/BrowserTheme"
                   android:windowSoftInputMode="adjustResize" >
             <intent-filter>
diff --git a/res/layout-port/autofill_settings_fragment.xml b/res/layout-port/autofill_settings_fragment.xml
index 097074b..9f26fd9 100644
--- a/res/layout-port/autofill_settings_fragment.xml
+++ b/res/layout-port/autofill_settings_fragment.xml
@@ -43,37 +43,19 @@
                 android:layout_width="match_parent" />
 
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_name" />
             <EditText android:id="@+id/autofill_profile_editor_name_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:inputType="textPersonName|textCapWords"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textPersonName|textCapWords" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_company_name" />
             <EditText android:id="@+id/autofill_profile_editor_company_name_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:inputType="textCapWords"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapWords" />
+
             <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -93,14 +75,9 @@
                     android:text="@string/autofill_profile_editor_address_line_1_hint" />
             </LinearLayout>
             <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:inputType="textCapWords"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapWords" />
+
             <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -120,122 +97,51 @@
                     android:text="@string/autofill_profile_editor_address_line_2_hint" />
             </LinearLayout>
             <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="bottom"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:inputType="textCapWords"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapWords" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_city" />
             <EditText android:id="@+id/autofill_profile_editor_city_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:inputType="textCapWords"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapWords" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_state" />
             <EditText android:id="@+id/autofill_profile_editor_state_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:inputType="textCapWords"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapWords" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_zip_code" />
             <EditText android:id="@+id/autofill_profile_editor_zip_code_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:inputType="textCapCharacters"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapCharacters" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_country" />
             <EditText android:id="@+id/autofill_profile_editor_country_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:inputType="textCapWords"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:inputType="textCapWords" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_phone_number" />
             <EditText android:id="@+id/autofill_profile_editor_phone_number_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true"
-                android:phoneNumber="true"
-                android:imeOptions="actionNext" />
+                style="@style/AutofillProfileEditText"
+                android:phoneNumber="true" />
+
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileTextView"
                 android:text="@string/autofill_profile_editor_email_address" />
             <EditText android:id="@+id/autofill_profile_editor_email_address_edit"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:layout_margin="2dip"
-                android:textAppearance="?android:attr/textAppearanceMedium"
+                style="@style/AutofillProfileEditText"
                 android:inputType="textEmailAddress"
-                android:singleLine="true"
-                android:imeOptions="actionDone" />
+                android:imeOptions="actionDone|flagNoExtractUi" />
         </LinearLayout>
     </ScrollView>
-
-    <View
-        android:layout_height="12dip"
-        android:layout_width="match_parent" />
-
-    <Button
-        android:id="@+id/autofill_profile_editor_save_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/autofill_profile_editor_save_profile"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-
 </LinearLayout>
diff --git a/res/layout/autofill_settings_fragment.xml b/res/layout/autofill_settings_fragment.xml
index 44bf8f0..e667b86 100644
--- a/res/layout/autofill_settings_fragment.xml
+++ b/res/layout/autofill_settings_fragment.xml
@@ -49,39 +49,19 @@
                 android:stretchColumns="1">
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_name" />
                     <EditText android:id="@+id/autofill_profile_editor_name_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:inputType="textPersonName|textCapWords"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textPersonName|textCapWords" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_company_name" />
                     <EditText android:id="@+id/autofill_profile_editor_company_name_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:inputType="textCapWords"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapWords" />
                 </TableRow>
                 <TableRow>
                     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -103,14 +83,8 @@
                             android:text="@string/autofill_profile_editor_address_line_1_hint" />
                     </LinearLayout>
                     <EditText android:id="@+id/autofill_profile_editor_address_line_1_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:inputType="textCapWords"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapWords" />
                 </TableRow>
                 <TableRow>
                     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -132,137 +106,60 @@
                             android:text="@string/autofill_profile_editor_address_line_2_hint" />
                     </LinearLayout>
                     <EditText android:id="@+id/autofill_profile_editor_address_line_2_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="bottom"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:inputType="textCapWords"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapWords" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_city" />
                     <EditText android:id="@+id/autofill_profile_editor_city_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:inputType="textCapWords"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapWords" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_state" />
                     <EditText android:id="@+id/autofill_profile_editor_state_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:inputType="textCapWords"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapWords" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_zip_code" />
                     <EditText android:id="@+id/autofill_profile_editor_zip_code_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:inputType="textCapCharacters"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapCharacters" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_country" />
                     <EditText android:id="@+id/autofill_profile_editor_country_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:inputType="textCapWords"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:inputType="textCapWords" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_phone_number" />
                     <EditText android:id="@+id/autofill_profile_editor_phone_number_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true"
-                        android:phoneNumber="true"
-                        android:imeOptions="actionNext" />
+                        style="@style/AutofillProfileEditText"
+                        android:phoneNumber="true" />
                 </TableRow>
                 <TableRow>
                     <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileTextView"
                         android:text="@string/autofill_profile_editor_email_address" />
                     <EditText android:id="@+id/autofill_profile_editor_email_address_edit"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:gravity="center_vertical"
-                        android:layout_margin="2dip"
-                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        style="@style/AutofillProfileEditText"
                         android:inputType="textEmailAddress"
-                        android:singleLine="true"
-                        android:imeOptions="actionDone" />
+                        android:imeOptions="actionDone|flagNoExtractUi" />
                 </TableRow>
             </TableLayout>
        </LinearLayout>
     </ScrollView>
-
-    <View
-        android:layout_height="12dip"
-        android:layout_width="match_parent" />
-
-    <Button
-        android:id="@+id/autofill_profile_editor_save_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/autofill_profile_editor_save_profile"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-
 </LinearLayout>
 
diff --git a/res/layout/browser_subwindow.xml b/res/layout/browser_subwindow.xml
index a3868cd..fb6fa37 100644
--- a/res/layout/browser_subwindow.xml
+++ b/res/layout/browser_subwindow.xml
@@ -14,34 +14,28 @@
      limitations under the License.
 -->
 
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/subwindow_container"
+    android:orientation="vertical"
+    android:background="@android:drawable/dialog_frame"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:padding="10dip" >
-        <LinearLayout
-            android:id="@+id/inner_container"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="vertical"
-            android:background="@android:drawable/dialog_frame" >
-        </LinearLayout>
-    </FrameLayout>
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical"
+        android:background="@color/black"
         android:layout_gravity="right"
         android:gravity="right" >
         <ImageButton android:id="@+id/subwindow_close"
+            style="@style/HoloButton"
             android:focusable="true"
-            android:padding="0dip"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:background="@android:drawable/btn_default"
-            android:src="@android:drawable/ic_menu_close_clear_cancel" />
+            android:src="@drawable/ic_close_window_holo_dark" />
     </LinearLayout>
-</RelativeLayout>
+    <LinearLayout
+        android:id="@+id/inner_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" />
+</LinearLayout>
diff --git a/res/menu/autofill_profile_editor.xml b/res/menu/autofill_profile_editor.xml
index 4e746e5..9dab635 100644
--- a/res/menu/autofill_profile_editor.xml
+++ b/res/menu/autofill_profile_editor.xml
@@ -15,6 +15,11 @@
 -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/autofill_profile_editor_save_profile_menu_id"
+        android:title="@string/autofill_profile_editor_save_profile"
+        android:icon="@android:drawable/ic_menu_save"
+        android:showAsAction="ifRoom|withText" />
+
     <item android:id="@+id/autofill_profile_editor_delete_profile_menu_id"
         android:title="@string/autofill_profile_editor_delete_profile"
         android:icon="@android:drawable/ic_menu_delete"
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index bd40c51..b0c25ea 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -96,10 +96,6 @@
             android:id="@+id/dump_nav_menu_id"
             android:title="@string/dump_nav"
             android:visible="false" />
-        <item
-            android:id="@+id/dump_counters_menu_id"
-            android:title="@string/dump_counters"
-            android:visible="false" />
     </group>
     <group android:id="@+id/MAIN_SHORTCUT_MENU" android:visible="false">
         <item android:id="@+id/view_downloads_menu_id"
diff --git a/res/menu/browsercontext.xml b/res/menu/browsercontext.xml
index a8ae5c8..8137a67 100644
--- a/res/menu/browsercontext.xml
+++ b/res/menu/browsercontext.xml
@@ -52,6 +52,8 @@
             android:title="@string/contextmenu_view_image"/>
         <item android:id="@+id/set_wallpaper_context_menu_id"
             android:title="@string/contextmenu_set_wallpaper"/>
+        <item android:id="@+id/share_link_context_menu_id"
+            android:title="@string/contextmenu_sharelink"/>
     </group>
     <group android:id="@+id/SELECT_TEXT_MENU">
         <item android:id="@+id/select_text_menu_id"
diff --git a/res/raw/folder_view.ktpl b/res/raw/folder_view.ktpl
new file mode 100644
index 0000000..2f360cc
--- /dev/null
+++ b/res/raw/folder_view.ktpl
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

+

+<html>

+<head>

+<title>Index of <%= path %></title>

+<meta name="viewport" content="width=device-width; initial-scale=1.0; user-scalable=0" />

+

+<style type="text/css">

+

+* {

+    padding: 0;

+    margin: 0;

+}

+

+body {

+    padding: 0 8px 0 8px;

+}

+

+.table {

+    border-collapse: collapse;

+}

+

+tr.header {

+    font-weight: bold;

+}

+

+tr.alt {

+    background: #EEE;

+}

+

+td.details {

+    padding-left: 2em;

+    text-align: right;

+    white-space: nowrap;

+}

+

+.row {

+    padding: 8px 0 8px 8px;

+    display: block;

+    text-decoration: none;

+}

+

+h2 {

+    padding-top: 8px;

+    padding-bottom: 8px;

+}

+

+.icon {

+    padding-left: 1.5em;

+}

+

+.file {

+    background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC ") left top no-repeat;

+}

+

+.dir {

+    background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= ") left top no-repeat;

+}

+

+.up {

+    background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ") left top no-repeat;

+}

+

+</style>

+

+</head>

+<body>

+    <h2>Index of <%= path %></h2>

+    <table class="table">

+        <tr class="header">

+            <td>Name</th>

+            <td class="details">Size</th>

+            <td class="details">Date Modified</th>

+        </tr>

+        <tr>

+            <td>

+                <a href="<%= parent_url %>" class="row">

+                    <span class="icon up">[parent directory]</span>

+                </a>

+            </td>

+            <td class="details"></td>

+            <td class="details"></td>

+        </tr>

+        <%{ files %>

+            <tr class="<%= alt %>">

+                <td>

+                    <a href="<%= url %>" class="row">

+                        <span class="icon <%= type %>"><%= name %></span>

+                    </a>

+                </td>

+                <td class="details"><%= size %></td>

+                <td class="details"><%= last_modified %></td>

+            </tr>

+        <%} files %>

+    </table>

+</body>

+</html>

diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 86cced1..821135d 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Outo-invul-teks gestoor."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Outo-invul-teks uitgevee."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Vee uit"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Die blaaier kan outomaties webvorms soos hierdie een voltooi. Wil jy jou outo-invul-teks opstel?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Die blaaier kan outomaties webvorms soos hierdie een voltooi. Wil jy nou outo-invul-teks opstel?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Jy kan altyd jou outo-invul-teks opstel in Blaaier &gt; Instellings &gt; Algemeen."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Deaktiveer outo-invul"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privaatheid en sekuriteit"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 023a12e..f8297d6 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"ራስ ሰር-ሙላ ጽሑፍ ተቀምጧል::"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"ራስ ሰር-ሙላ ጽሑፍ ተሰርዟል::"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"ሰርዝ"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"አሳሹ እንደዚህ ዓይነቶቹን የድር ቅርጾች በራስ ሰር ያሟላል፡፡ የራስህን ራስ-ሙላ ጽሑፍ ማዘጋጀት ትፈልጋለህ?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"አሳሹ እንደዚህ ዓይነቶቹን የድር ቅርጾች በራስ ሰር ያሟላል፡፡ የራስህን ራስ-ሙላ ጽሑፍ ማዘጋጀት ትፈልጋለህ?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"የራስህን ራስ ሰር ሙላ ጽሑፍ ከአሳሽ ላይ&gt;  ቅንጅቶች&gt;  አጠቃላይ ማያ ላይ ሁልጊዜ ማዘጋጀት ትችላለህ፡፡"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"ራስ-ሙላ አቦዝን"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"ግላዊነት&amp; ደህንነት"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c4992e6..cb026d8 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -138,7 +138,7 @@
   </string-array>
     <string name="pref_content_open_in_background_summary" msgid="955411158407739504">"فتح علامات تبويب جديدة وراء علامة التبويب الحالية"</string>
     <string name="pref_content_homepage" msgid="3324574611613105696">"تعيين الصفحة الرئيسية"</string>
-    <string name="pref_content_search_engine" msgid="1620101310821644144">"تعين محرك بحث"</string>
+    <string name="pref_content_search_engine" msgid="1620101310821644144">"تعيين محرك بحث"</string>
     <string name="pref_content_search_engine_summary" msgid="304003941861818133">"اختر محرك بحث"</string>
     <string name="pref_set_homepage_to" msgid="7838684355145561242">"تعيين على"</string>
   <string-array name="pref_homepage_choices">
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"تم حفظ نص الملء التلقائي."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"تم حذف نص الملء التلقائي."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"حذف"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"يمكن للمتصفح إكمال نماذج الويب مثل هذه تلقائيًا. هل تريد إعداد نص الملء التلقائي؟"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"المتصفح يمكنه تلقائيًا إكمال نماذج الويب مثل هذا النموذج. هل تريد إعداد نص الملء التلقائي؟"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"يمكنك دائمًا إعداد نص الملء التلقائي من المتصفح &gt; الإعدادات &gt; الشاشة العامة."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"تعطيل الملء التلقائي"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"الخصوصية والأمان"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 1047951..6a5c87c 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Аўтазапаўненне тэксту захавана."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Аўтазапаўненне тэксту адменена."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Выдаліць"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Браўзэр можа аўтаматычна запаўняць вэб-формы, падобныя на гэту. Хочаце ўсталяваць аўтазапаўненне?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Браўзер можа аўтаматычна запаўняць вэб-формы, падобныя на гэту. Хочаце уключыць аўтазапаўненне?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Вы заўсёды можаце наладзіць аўтазапаўненне тэксту ў браўзэры: Параметры &gt; Налады &gt; Агульны экран."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Адключыць аўтаматычнае запаўненне"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Канфідэнцыяльнасць і бяспека"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 3f3812d..9504531 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текстът за автоматично попълване е запазен."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текстът за автоматично попълване е изтрит."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Изтриване"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да зададете текст за автоматично попълване?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Браузърът може автоматично да попълва уеб формуляри като този. Искате ли да зададете текст за автоматично попълване?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Винаги можете да зададете текст за автоматично попълване от екрана „Браузър“ &gt; „Настройки“ &gt; „Общи“."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Деактивиране на автоматичното попълване"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Поверителност и сигурност"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 09f1d56..d93d14b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"S\'ha desat el text d\'emplenament automàtic."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"S\'ha suprimit el text d\'emplenament automàtic."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Suprimeix"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"El navegador pot emplenar automàticament formularis web com aquest. Vols configurar el text d\'emplenament automàtic?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"El navegador pot emplenar automàticament formularis web com aquest. Vols configurar el text d\'emplenament automàtic?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Pots configurar el text d\'emplenament automàtic sempre que vulguis des de la pantalla Navegador &gt; Configuració &gt; General."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Desactiva l\'emplenament automàtic"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privadesa i seguretat"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 017b25f..2acfdf5 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Text pro automatické vyplňování byl uložen."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Text automatického vyplňování byl smazán."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Smazat"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Podobné webové formuláře může prohlížeč vyplňovat automaticky. Chcete nastavit automatické vyplňování textu?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Podobné webové formuláře může prohlížeč vyplňovat automaticky. Chcete nastavit automatické vyplňování textu?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automatické vyplňování můžete kdykoliv nastavit na obrazovce Prohlížeč &gt; Nastavení &gt; Obecné."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Vypnout automatické vyplňování"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ochrana osobních údajů a zabezpečení"</string>
@@ -293,7 +293,7 @@
     <string name="go_home" msgid="109129207276086793">"Domovská stránka"</string>
     <string name="add_new_bookmark" msgid="3158497555612337238">"Přidat záložku"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Přidat"</string>
-    <string name="search_hint" msgid="4647356319916631820">"Vyhledávejte nebo zadejte adresu URL"</string>
+    <string name="search_hint" msgid="4647356319916631820">"Vyhledávejte či zadejte URL"</string>
     <string name="search_button_text" msgid="5235226933877634410">"Přejít"</string>
     <string name="search_settings_description" msgid="1422401062529014107">"Záložky a webová historie"</string>
     <string name="popup_window_attempt" msgid="31565781154067629">"Umožnit tomuto webu otevřít vyskakovací okno?"</string>
@@ -322,7 +322,7 @@
     <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Zrušit"</string>
     <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"MB uloženo ve vašem telefonu"</string>
     <string name="loading_video" msgid="7886324933131962321">"Načítání videa..."</string>
-    <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"Web <xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> požaduje informace o vaší poloze"</string>
+    <string name="geolocation_permissions_prompt_message" msgid="356796102004052471">"<xliff:g id="WEBSITE_ORIGIN">%s</xliff:g> žádá informace o vaší poloze"</string>
     <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Sdílet polohu"</string>
     <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Odmítnout"</string>
     <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Zapamatovat předvolbu"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a790f42..73f84bb 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -34,17 +34,17 @@
     <string name="bookmarks_search" msgid="5229596268214362873">"Browser"</string>
     <string name="cancel" msgid="3017274947407233702">"Annuller"</string>
     <string name="ok" msgid="1509280796718850364">"OK"</string>
-    <string name="title_bar_loading" msgid="7438217780834640678">"Indlæser ..."</string>
+    <string name="title_bar_loading" msgid="7438217780834640678">"Indlæser..."</string>
     <string name="page_info" msgid="4048529256302257195">"Sideoplysninger"</string>
     <string name="page_info_view" msgid="5303490449842635158">"Vis sideoplysninger"</string>
     <string name="page_info_address" msgid="2222306609532903254">"Adresse:"</string>
-    <string name="ssl_warnings_header" msgid="79744901983636370">"Der er problemer med sikkerhedscertifikatet for dette websted."</string>
+    <string name="ssl_warnings_header" msgid="79744901983636370">"Der er problemer med sikkerhedscertifikatet for dette website."</string>
     <string name="ssl_continue" msgid="8031515015829358457">"Fortsæt"</string>
     <string name="security_warning" msgid="6607795404322797541">"Sikkerhedsadvarsel"</string>
     <string name="view_certificate" msgid="1472768887529093862">"Vis certifikat"</string>
     <string name="ssl_go_back" msgid="4598951822061593819">"Tilbage"</string>
     <string name="ssl_untrusted" msgid="7754507359360636447">"Dette certifikat stammer ikke fra en troværdig autoritet."</string>
-    <string name="ssl_mismatch" msgid="3809794439740523641">"Navnet på webstedet stemmer ikke overens med navnet på certifikatet."</string>
+    <string name="ssl_mismatch" msgid="3809794439740523641">"Navnet på websitet stemmer ikke overens med navnet på certifikatet."</string>
     <string name="ssl_expired" msgid="5739349389499575559">"Dette certifikat er udløbet."</string>
     <string name="ssl_not_yet_valid" msgid="8193083327719048247">"Dette certifikat er endnu ikke gyldigt."</string>
     <string name="ssl_date_invalid" msgid="3705563379257285534">"Dette certifikat har en ugyldig dato."</string>
@@ -145,7 +145,7 @@
     <item msgid="844041670142910837">"Aktuel side"</item>
     <item msgid="4430498748295169195">"Tom side"</item>
     <item msgid="5747608191946904074">"Standardside"</item>
-    <item msgid="6092441301001006473">"Mest besøgte websteder"</item>
+    <item msgid="6092441301001006473">"Mest besøgte websites"</item>
     <item msgid="6569304572171444894">"Andre"</item>
   </string-array>
     <string name="pref_content_autofit" msgid="8260474534053660809">"Tilpas sider automatisk"</string>
@@ -158,7 +158,7 @@
     <string name="pref_autofill_profile_editor" msgid="8934844472922113166">"AutoFyld-tekst"</string>
     <string name="pref_autofill_profile_editor_summary" msgid="4864447251676856190">"Opret tekst, som skal indsættes i webformularer med AutoFyld"</string>
     <string name="pref_autologin_title" msgid="4421187193809267096">"Automatisk Google-login"</string>
-    <string name="pref_autologin_progress" msgid="8333244467048833461">"Logger ind på Google-websteder med <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"Logger ind på Google-websites med <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="autologin_bar_text" msgid="3684581827167173371">"Log ind som"</string>
     <string name="autologin_bar_login_text" msgid="3336615320510851879">"Log ind"</string>
     <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Skjul"</string>
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"AutoFyld-tekst er gemt."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"AutoFyld-teksten er slettet."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Slet"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Browseren kan automatisk udfylde webformularer som denne. Vil du oprette din AutoFyld-tekst?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Browseren kan automatisk udfylde webformularer som denne. Vil du oprette din AutoFyld-tekst?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Du kan altid oprette din AutoFyld-tekst fra skærmen Browser &gt; Indstillinger &gt; Generelt."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Deaktiver AutoFyld"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Sikkerhed og personlige oplysninger"</string>
@@ -204,19 +204,19 @@
     <string name="pref_privacy_clear_passwords_dlg" msgid="5836576259947160045">"Vil du slette alle gemte adgangskoder?"</string>
     <string name="pref_privacy_location_title" msgid="7458378016606081067">"Placering"</string>
     <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Aktiver placering"</string>
-    <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Tillad, at websteder anmoder om adgang til din placering"</string>
+    <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Tillad, at websites anmoder om adgang til din placering"</string>
     <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Ryd placeringsadgang"</string>
-    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Placeringsadgang for alle websteder ryddes"</string>
-    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Vil du rydde webstedets placeringsadgang?"</string>
+    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Placeringsadgang for alle websites ryddes"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Vil du rydde websitets placeringsadgang?"</string>
     <string name="pref_security_passwords_title" msgid="5734190542383756711">"Adgangskoder"</string>
     <string name="pref_security_remember_passwords" msgid="6492957683454529549">"Husk adgangskoder"</string>
-    <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Gem brugernavne og adgangskoder til websteder"</string>
+    <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Gem brugernavne og adgangskoder til websites"</string>
     <string name="pref_security_save_form_data" msgid="1213669802810198893">"Husk formulardata"</string>
     <string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Husk data, jeg indtaster i formularer, til senere brug"</string>
     <string name="pref_security_show_security_warning" msgid="8901135676266754559">"Vis sikkerhedsadvarsler"</string>
-    <string name="pref_security_show_security_warning_summary" msgid="5260098316025397525">"Vis en advarsel, hvis der er problemer med sikkerheden på et websted"</string>
+    <string name="pref_security_show_security_warning_summary" msgid="5260098316025397525">"Vis en advarsel, hvis der er problemer med sikkerheden på et website"</string>
     <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Accepter cookies"</string>
-    <string name="pref_security_accept_cookies_summary" msgid="1907951236154433751">"Tillad, at websteder gemmer og læser cookie-data"</string>
+    <string name="pref_security_accept_cookies_summary" msgid="1907951236154433751">"Tillad, at websites gemmer og læser cookie-data"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Lillebitte"</item>
     <item msgid="1950030433642671460">"Lille"</item>
@@ -229,7 +229,7 @@
     <string name="pref_text_zoom" msgid="5171056101805125497">"Skalering af tekst"</string>
     <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Zoom ved dobbeltklik"</string>
     <string name="pref_force_userscalable" msgid="5641500562399892621">"Tving aktivering af zoom"</string>
-    <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Tilsidesæt et websteds anmodning om at kontrollere zoom-adfærd"</string>
+    <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Tilsidesæt et websites anmodning om at kontrollere zoom-adfærd"</string>
     <string name="pref_inverted_category" msgid="1280639705117152207">"Omvendt skærmgengivelse"</string>
     <string name="pref_inverted" msgid="7613556986776824112">"Omvendt gengivelse"</string>
     <string name="pref_inverted_summary" msgid="7357225897413923085">"Sort bliver hvidt og vice versa"</string>
@@ -244,8 +244,8 @@
     <string name="pref_content_load_page" msgid="2219810141690955452">"Åbn sider i oversigt"</string>
     <string name="pref_content_load_page_summary" msgid="9168803276420332955">"Vis oversigt over sider, som er åbnet for nylig"</string>
     <string name="pref_extras_title" msgid="7075456173747370647">"Avanceret"</string>
-    <string name="pref_extras_website_settings" msgid="67866640052455549">"Indstillinger for websteder"</string>
-    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Avancerede indstillinger for individuelle websteder"</string>
+    <string name="pref_extras_website_settings" msgid="67866640052455549">"Indstillinger for websites"</string>
+    <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Avancerede indstillinger for individuelle websites"</string>
     <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Gendannelse af standardindstillinger"</string>
     <string name="pref_extras_reset_default" msgid="8904000515846202110">"Nulstil til standard"</string>
     <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Gendan standardindstillinger"</string>
@@ -293,10 +293,10 @@
     <string name="go_home" msgid="109129207276086793">"Startside"</string>
     <string name="add_new_bookmark" msgid="3158497555612337238">"Tilføj bogmærke"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Tilføj"</string>
-    <string name="search_hint" msgid="4647356319916631820">"Søg efter eller indtast en webadresse"</string>
+    <string name="search_hint" msgid="4647356319916631820">"Søg eller indtast en webadresse"</string>
     <string name="search_button_text" msgid="5235226933877634410">"Gå"</string>
-    <string name="search_settings_description" msgid="1422401062529014107">"Bogmærker og weboversigt"</string>
-    <string name="popup_window_attempt" msgid="31565781154067629">"Vil du tillade, at dette websted åbner et pop op-vindue?"</string>
+    <string name="search_settings_description" msgid="1422401062529014107">"Bogmærker og webhistorik"</string>
+    <string name="popup_window_attempt" msgid="31565781154067629">"Vil du tillade, at dette website åbner et pop op-vindue?"</string>
     <string name="allow" msgid="1157313689171991335">"Tillad"</string>
     <string name="block" msgid="9172175889884707800">"Bloker"</string>
     <string name="too_many_windows_dialog_title" msgid="5709782301477380438">"Grænsen for faner er nået"</string>
@@ -317,7 +317,7 @@
     <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Browserlageret er fuldt"</string>
     <string name="webstorage_outofspace_notification_text" msgid="47273584426988640">"Tryk for at frigøre plads."</string>
     <string name="webstorage_clear_data_title" msgid="689484577124333977">"Ryd lagrede data"</string>
-    <string name="webstorage_clear_data_dialog_message" msgid="6200681632891775881">"Vil du slette alle data, som dette websted har gemt?"</string>
+    <string name="webstorage_clear_data_dialog_message" msgid="6200681632891775881">"Vil du slette alle data, som dette website har gemt?"</string>
     <string name="webstorage_clear_data_dialog_ok_button" msgid="6682570951259237542">"OK"</string>
     <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Annuller"</string>
     <string name="webstorage_origin_summary_mb_stored" msgid="1985885826292236210">"Mb lagret på din telefon"</string>
@@ -326,16 +326,16 @@
     <string name="geolocation_permissions_prompt_share" msgid="9084486342048347976">"Del placering"</string>
     <string name="geolocation_permissions_prompt_dont_share" msgid="6303025160237860300">"Afvis"</string>
     <string name="geolocation_permissions_prompt_remember" msgid="3118526300707348308">"Husk indstilling"</string>
-    <string name="geolocation_permissions_prompt_toast_allowed" msgid="7201417941112726112">"Dette websted kan få adgang til din placering. Du kan ændre dette på skærmen Indstillinger &gt; Avanceret &gt; Websted."</string>
-    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="156443445797377409">"Dette websted kan ikke få adgang til din placering. Du kan ændre dette på skærmen Indstillinger &gt; Avanceret &gt; Websted."</string>
+    <string name="geolocation_permissions_prompt_toast_allowed" msgid="7201417941112726112">"Dette website kan få adgang til din placering. Du kan ændre dette på skærmen Indstillinger &gt; Avanceret &gt; Website."</string>
+    <string name="geolocation_permissions_prompt_toast_disallowed" msgid="156443445797377409">"Dette website kan ikke få adgang til din placering. Du kan ændre dette på skærmen Indstillinger &gt; Avanceret &gt; Website."</string>
     <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Ryd placeringsadgang"</string>
-    <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Dette websted har i øjeblikket adgang til din placering"</string>
-    <string name="geolocation_settings_page_summary_not_allowed" msgid="7941769772784366199">"Dette websted har i øjeblikket ikke adgang til din placering"</string>
-    <string name="geolocation_settings_page_dialog_message" msgid="8772923416296868537">"Vil du rydde placeringsadgang for dette websted?"</string>
+    <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Dette website har i øjeblikket adgang til din placering"</string>
+    <string name="geolocation_settings_page_summary_not_allowed" msgid="7941769772784366199">"Dette website har i øjeblikket ikke adgang til din placering"</string>
+    <string name="geolocation_settings_page_dialog_message" msgid="8772923416296868537">"Vil du rydde placeringsadgang for dette website?"</string>
     <string name="geolocation_settings_page_dialog_ok_button" msgid="2113465477131017852">"OK"</string>
     <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Annuller"</string>
     <string name="website_settings_clear_all" msgid="8739804325997655980">"Ryd alle"</string>
-    <string name="website_settings_clear_all_dialog_message" msgid="1551164275687475061">"Vil du slette alle webstedsdata og placeringstilladelser?"</string>
+    <string name="website_settings_clear_all_dialog_message" msgid="1551164275687475061">"Vil du slette alle websitedata og placeringstilladelser?"</string>
     <string name="website_settings_clear_all_dialog_ok_button" msgid="7858504776529106243">"OK"</string>
     <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Annuller"</string>
     <string name="progress_dialog_setting_wallpaper" msgid="2031391201442335889">"Angiver baggrund..."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 99f00fb..c73e78c 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -36,12 +36,12 @@
     <string name="ok" msgid="1509280796718850364">"OK"</string>
     <string name="title_bar_loading" msgid="7438217780834640678">"Wird geladen..."</string>
     <string name="page_info" msgid="4048529256302257195">"Seiteninfo"</string>
-    <string name="page_info_view" msgid="5303490449842635158">"Seiteninfo anzeigen"</string>
+    <string name="page_info_view" msgid="5303490449842635158">"Seiteninfo ansehen"</string>
     <string name="page_info_address" msgid="2222306609532903254">"Adresse:"</string>
     <string name="ssl_warnings_header" msgid="79744901983636370">"Es ist ein Problem mit dem Sicherheitszertifikat für diese Website aufgetreten."</string>
     <string name="ssl_continue" msgid="8031515015829358457">"Fortfahren"</string>
     <string name="security_warning" msgid="6607795404322797541">"Sicherheitswarnung"</string>
-    <string name="view_certificate" msgid="1472768887529093862">"Zertifikat anzeigen"</string>
+    <string name="view_certificate" msgid="1472768887529093862">"Zertifikat ansehen"</string>
     <string name="ssl_go_back" msgid="4598951822061593819">"Zurück"</string>
     <string name="ssl_untrusted" msgid="7754507359360636447">"Dieses Zertifikat wurde nicht von einer vertrauenswürdigen Stelle ausgegeben."</string>
     <string name="ssl_mismatch" msgid="3809794439740523641">"Name der Website stimmt nicht mit dem Namen auf dem Zertifikat überein."</string>
@@ -113,7 +113,7 @@
     <string name="contextmenu_copy" msgid="398860586635404030">"Kopieren"</string>
     <string name="contextmenu_copylink" msgid="5153657160294534270">"Link-URL kopieren"</string>
     <string name="contextmenu_download_image" msgid="4243829645180686912">"Bild speichern"</string>
-    <string name="contextmenu_view_image" msgid="3870625602053600905">"Bild anzeigen"</string>
+    <string name="contextmenu_view_image" msgid="3870625602053600905">"Bild ansehen"</string>
     <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"Als Hintergrund festlegen"</string>
     <string name="contextmenu_dial_dot" msgid="5856550683415933806">"Wählen..."</string>
     <string name="contextmenu_add_contact" msgid="3183511922223645716">"Kontakt hinzufügen"</string>
@@ -181,11 +181,11 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"AutoFill-Text gespeichert"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"AutoFill-Text gelöscht"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Löschen"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Webformulare dieser Art können vom Browser automatisch ausgefüllt werden. Möchten Sie Formulare automatisch ausfüllen?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Webformulare dieser Art können vom Browser automatisch ausgefüllt werden. Möchten Sie Formulare automatisch ausfüllen?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Den AutoFill-Text können Sie jederzeit im Browser unter &gt; \"Einstellungen\" &gt; \"Allgemein\" einrichten."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"AutoFill deaktivieren"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Datenschutz &amp; Sicherheit"</string>
-    <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Cache löschen"</string>
+    <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Cache leeren"</string>
     <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Inhalte und Datenbanken aus dem lokalen Cache löschen"</string>
     <string name="pref_privacy_clear_cache_dlg" msgid="4344512581716422465">"Inhalte und Datenbanken aus dem lokalen Cache löschen?"</string>
     <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Cookies"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index f37b50a..93f7bb8 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Το κείμενο αυτόματης συμπλήρωσης αποθηκεύτηκε."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Το κείμενο αυτόματης συμπλήρωσης διαγράφηκε."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Διαγραφή"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Το πρόγραμμα περιήγησης μπορεί να συμπληρώσει αυτόματα φόρμες ιστού όπως αυτή. Θέλετε να ρυθμίσετε το κείμενο αυτόματης συμπλήρωσης;"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Το πρόγραμμα περιήγησης μπορεί να συμπληρώσει αυτόματα φόρμες ιστού όπως αυτή. Θέλετε να ορίσετε το κείμενο αυτόματης συμπλήρωσης;"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Μπορείτε πάντα να ρυθμίσετε το κείμενο αυτόματης συμπλήρωσης από το στοιχείο Πρόγραμμα περιήγησης &gt; Ρυθμίσεις &gt; Γενική οθόνη."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Απενεργοποιήστε τη λειτουργία αυτόματης συμπλήρωσης"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Απόρρητο και ασφάλεια"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 656f565..3f74588 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Auto-fill text saved."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Auto-fill text deleted."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Delete"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"The browser can automatically complete web forms like this one. Would you like to set up your auto-fill text?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"The browser can automatically complete web forms like this one. Do you want to set up your auto-fill text?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"You can always set up your auto-fill text from the Browser &gt; Settings &gt; General screen."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Disable auto-fill"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy &amp; security"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index beb0050..504a1a3 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texto de autocompletado guardado"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texto autocompletado eliminado"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Borrar"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"El navegador puede completar formularios web como este de forma automática. ¿Te gustaría configurar el completado automático de texto?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"El navegador puede completar formularios web como este automáticamente. ¿Deseas configurar tu texto para autocompletar?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Siempre puedes configurar el autocompletado de texto desde la pantalla Navegador &gt; Configuración &gt; General."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Inhabilitar Autocompletar"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacidad y seguridad"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index fdc3872..81b533a 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Se ha guardado el texto de la función Autocompletar."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Se ha eliminado el texto de la función Autocompletar."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Eliminar"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"El navegador puede completar automáticamente formularios web como el que aparece a continuación. ¿Quieres configurar la función Autocompletar?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"El navegador puede rellenar automáticamente formularios web como el que aparece a continuación. ¿Quieres configurar la función Autocompletar?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Siempre puedes configurar la opción Autocompletar desde la pantalla Navegador &gt; Ajustes &gt; Generales."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Inhabilitar autocompletar"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Seguridad y privacidad"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index b258f81..8ae17f0 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automaatse täitmise tekst on salvestatud."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automaatse täitmise tekst kustutatud."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Kustuta"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Brauser suudab automaatselt täita selliseid veebivorme nagu see. Kas soovite seadistada automaatse täitmise teksti?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Brauser suudab selliseid veebivorme automaatselt täita. Kas soovite seadistada teksti automaatse täitmise?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automaatse täitmise teksti saate alati seadistada, tehes valikud Brauser &gt; Seaded &gt; Üldine kuva."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Keela automaatne täitmine"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privaatsus ja turvalisus"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index cc7872a..1b49893 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"نوشتاری که بطور خودکار تکمیل شده ذخیره شد."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"تکمیل خودکار نوشتار حذف شد."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"حذف"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"مرورگر می‌تواند به طور خودکار فرم‌های وب مثل این را کامل کند. آیا می‌خواهید تکمیل خودکار نوشتار را تنظیم کنید؟"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"این مرورگر میتواند بصورت خودکار فرمهای وب را تکمیل کند، مانند این فرم. میخواهید ویژگی پر شدن خودکار متن را تنظیم کنید؟"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"شما همیشه می‌توانید تکمیل خودکار نوشتار خود را از مرورگر &amp;gt؛ تنظیمات &amp;gt؛ صفحه عمومی تنظیم کنید."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"غیرفعال کردن تکمیل خودکار"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"حریم خصوصی و امنیت"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6b475f2..4fbbc80 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automaattisen täytön teksti tallennettu."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automaattisen täytön teksti poistettu."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Poista"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Selain voi täyttää automaattisesti tällaiset verkkolomakkeet. Haluatko määrittää automaattisen täytön tekstin?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Selain voi täyttää automaattisesti tällaiset verkkolomakkeet. Haluatko määrittää automaattisen täytön tekstin?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Voit määrittää automaattisen täytön tekstin kohdassa Selain &gt; Asetukset &gt; Yleisasetukset."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Poista automaattinen täyttö käytöstä"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Tietosuoja ja turvallisuus"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 2873ccb..c4b7f7c 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texte de saisie automatique enregistré."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texte de saisie automatique supprimé."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Supprimer"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Le navigateur peut remplir automatiquement les formulaires Web similaires à celui-ci. Voulez-vous créer un texte de saisie automatique ?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Le navigateur peut remplir automatiquement les formulaires Web similaires à celui-ci. Voulez-vous créer un texte de saisie automatique ?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Vous pourrez définir un texte de saisie automatique en accédant à Navigateur &gt; Paramètres &gt; Général."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Désactiver la saisie automatique"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Confidentialité et sécurité"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index def9ec7..a1fc39a 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"स्‍वत: भरण पाठ सहेजा गया."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"स्‍वत: भरण पाठ हटाया गया."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"हटाएं"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"इसी की तरह ब्राउज़र स्‍वचालित रूप से वेब फ़ॉर्म पूर्ण कर सकता है. क्‍या आप अपना स्‍वत: भरण पाठ सेट करना चाहते हैं?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"इसकी तरह ब्राउज़र स्‍वचालित रूप से वेब फ़ॉर्म पूर्ण कर सकता है. क्‍या आप अपना स्‍वत: भरण पाठ सेट करना चाहते हैं?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"आप कभी भी ब्राउज़र &gt; सेटिंग &gt; सामान्‍य स्‍क्रीन से अपना स्‍वत: भरण पाठ सेट कर सकते हैं."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"स्‍वत: भरण अक्षम करें"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"गोपनीयता और सुरक्षा"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 8270eca..d4c5a1a 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Tekst automatskog ispunjavanja spremljen."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tekst automatskog ispunjavanja izbrisan."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Izbriši"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Preglednik može automatski ispuniti web-obrasce kao što je ovaj. Želite li postaviti svoj tekst za automatsko ispunjavanje?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Preglednik automatski može dovršiti web-obrasce kao što je ovaj jedan. Želite li postaviti automatsko ispunjavanje teksta?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Uvijek možete postaviti tekst za automatsko ispunjavanje sa zaslona Preglednik &gt; Postavke &gt; Općenito."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Onemogući automatsko popunjavanje"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privatnost i sigurnost"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 8289439..34f3982 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automatikus kitöltés szövege elmentve."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automatikus kitöltés szövege törölve."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Törlés"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"A böngésző automatikusan kitölti az ehhez hasonló webes űrlapokat. Szeretné létrehozni az automatikus kitöltés szövegét?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"A böngésző automatikusan ki tudja tölteni az ilyen típusú internetes űrlapokat. Szeretné beállítani az automatikus kitöltés szövegét?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Bármikor beállíthatja az automatikus kitöltése szövegét a Böngésző &gt; Beállítások &gt; Általános képernyőn."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Automatikus kitöltés letiltása"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Adatvédelem és biztonság"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 54e770f..5c6355e 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -16,9 +16,9 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="application_name" msgid="1935869255545976415">"Peramban"</string>
-    <string name="choose_upload" msgid="3649366287575002063">"Pilih berkas untuk diunggah"</string>
-    <string name="uploads_disabled" msgid="463761197575372994">"Pengunggahan berkas dinonaktifkan."</string>
+    <string name="application_name" msgid="1935869255545976415">"Browser"</string>
+    <string name="choose_upload" msgid="3649366287575002063">"Pilih file untuk diunggah"</string>
+    <string name="uploads_disabled" msgid="463761197575372994">"Pengunggahan file dinonaktifkan."</string>
     <string name="new_tab" msgid="7971857320679510529">"Tab baru"</string>
     <string name="new_incognito_tab" msgid="3606197964239039478">"Tab penyamaran baru"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Bookmark"</string>
@@ -31,7 +31,7 @@
     <string name="username" msgid="5057566336518215922">"Nama"</string>
     <string name="password" msgid="1177138552305184404">"Sandi"</string>
     <string name="action" msgid="183105774472071343">"Masuk"</string>
-    <string name="bookmarks_search" msgid="5229596268214362873">"Peramban"</string>
+    <string name="bookmarks_search" msgid="5229596268214362873">"Browser"</string>
     <string name="cancel" msgid="3017274947407233702">"Batal"</string>
     <string name="ok" msgid="1509280796718850364">"OK"</string>
     <string name="title_bar_loading" msgid="7438217780834640678">"Memuat…"</string>
@@ -49,7 +49,7 @@
     <string name="ssl_not_yet_valid" msgid="8193083327719048247">"Sertifikat ini belum valid."</string>
     <string name="ssl_date_invalid" msgid="3705563379257285534">"Tanggal sertifikat ini tidak valid."</string>
     <string name="ssl_invalid" msgid="9041704741505449967">"Sertifikat ini tidak valid."</string>
-    <string name="ssl_unknown" msgid="5679243486524754571">"Galat sertifikat tak dikenal."</string>
+    <string name="ssl_unknown" msgid="5679243486524754571">"Kesalahan sertifikat tak dikenal."</string>
     <string name="stopping" msgid="4839698519340302982">"Menghentikan"</string>
     <string name="stop" msgid="5687251076030630074">"Berhenti"</string>
     <string name="reload" msgid="8585220783228408062">"Segarkan"</string>
@@ -60,13 +60,13 @@
     <string name="location" msgid="3411848697912600125">"Alamat"</string>
     <string name="account" msgid="5179824606448077042">"Akun"</string>
     <string name="containing_folder" msgid="6771180232953030479">"Tambahkan ke"</string>
-    <string name="new_folder" msgid="7743540149088867917">"Map baru"</string>
-    <string name="edit_folder" msgid="621817453133656156">"Edit map"</string>
-    <string name="delete_folder" msgid="2046483129024501116">"Hapus map"</string>
-    <string name="no_subfolders" msgid="3303645239686962674">"Tanpa submap."</string>
+    <string name="new_folder" msgid="7743540149088867917">"Folder baru"</string>
+    <string name="edit_folder" msgid="621817453133656156">"Edit folder"</string>
+    <string name="delete_folder" msgid="2046483129024501116">"Hapus folder"</string>
+    <string name="no_subfolders" msgid="3303645239686962674">"Tanpa subfolder."</string>
     <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"Bookmark"</string>
     <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"Layar utama"</string>
-    <string name="add_to_other_folder_menu_option" msgid="5947586525822134105">"Map lainnya"</string>
+    <string name="add_to_other_folder_menu_option" msgid="5947586525822134105">"Folder lainnya"</string>
     <string name="name" msgid="5462672162695365387">"Label"</string>
     <string name="http" msgid="2163722670597250102">"http://"</string>
     <string name="save_to_bookmarks" msgid="1679286010089780932">"Simpan ke bookmark"</string>
@@ -101,10 +101,10 @@
     <string name="menu_view_download" msgid="2124570321712995120">"Unduhan"</string>
     <string name="copy_page_url" msgid="1188679152608889555">"Salin URL laman"</string>
     <string name="share_page" msgid="593756995297268343">"Bagikan lama"</string>
-    <string name="menu_save_snapshot" msgid="6935080344031126139">"Simpan untuk dibaca secara luring"</string>
-    <string name="snapshot_failed" msgid="4584580873565876033">"Tidak dapat menyimpan untuk dibaca secara luring."</string>
+    <string name="menu_save_snapshot" msgid="6935080344031126139">"Simpan untuk dibaca secara offline"</string>
+    <string name="snapshot_failed" msgid="4584580873565876033">"Tidak dapat menyimpan untuk dibaca secara offline."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> bookmark"</string>
-    <string name="contextheader_folder_empty" msgid="974171637803391651">"Map kosong"</string>
+    <string name="contextheader_folder_empty" msgid="974171637803391651">"Folder kosong"</string>
     <string name="contextmenu_openlink" msgid="7237961252214188935">"Buka"</string>
     <string name="contextmenu_openlink_newwindow" msgid="1205313604181761403">"Buka di tab baru"</string>
     <string name="contextmenu_openlink_newwindow_background" msgid="4690381019116746687">"Buka di tab latar belakang baru"</string>
@@ -144,7 +144,7 @@
   <string-array name="pref_homepage_choices">
     <item msgid="844041670142910837">"Laman ini"</item>
     <item msgid="4430498748295169195">"Laman kosong"</item>
-    <item msgid="5747608191946904074">"Laman bawaan"</item>
+    <item msgid="5747608191946904074">"Laman default"</item>
     <item msgid="6092441301001006473">"Situs yang paling sering dikunjungi"</item>
     <item msgid="6569304572171444894">"Lainnya"</item>
   </string-array>
@@ -181,20 +181,20 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Teks isi-otomatis disimpan."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Teks isi-otomatis dihapus."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Hapus"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Peramban dapat melengkapi formulir web seperti ini secara otomatis. Apakah Anda ingin menyiapkan teks isi-otomatis?"</string>
-    <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Anda selalu dapat menyiapkan teks isi-otomatis dari layar Peramban &gt; Setelan &gt; Umum."</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Browser dapat melengkapi formulir web seperti ini secara otomatis. Apakah Anda ingin menyiapkan teks isi-otomatis?"</string>
+    <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Anda selalu dapat menyiapkan teks isi-otomatis dari layar Browser &gt; Setelan &gt; Umum."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Nonaktifkan isi-otomatis"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privasi &amp; keamanan"</string>
     <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Hapus tembolok"</string>
     <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Hapus konten dan basis data yang disimpan dalam tembolok secara lokal"</string>
     <string name="pref_privacy_clear_cache_dlg" msgid="4344512581716422465">"Hapus basis data dan konten dalam tembolok lokal?"</string>
     <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Kuki"</string>
-    <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Hapus semua data kuki"</string>
-    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Menghapus semua kuki peramban"</string>
-    <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Hapus semua kuki?"</string>
+    <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Hapus semua data cookie"</string>
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Menghapus semua cookie browser"</string>
+    <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Hapus semua cookie?"</string>
     <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Hapus riwayat"</string>
-    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Hapus riwayat navigasi peramban"</string>
-    <string name="pref_privacy_clear_history_dlg" msgid="6934317391642846227">"Hapus riwayat navigasi peramban?"</string>
+    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Hapus riwayat navigasi browser"</string>
+    <string name="pref_privacy_clear_history_dlg" msgid="6934317391642846227">"Hapus riwayat navigasi browser?"</string>
     <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Data formulir"</string>
     <string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Hapus data formulir"</string>
     <string name="pref_privacy_clear_form_data_summary" msgid="7702091143640546200">"Hapus semua data formulir tersimpan"</string>
@@ -215,8 +215,8 @@
     <string name="pref_security_save_form_data_summary" msgid="4994074685153708026">"Ingat data yang saya ketik untuk digunakan lagi nanti"</string>
     <string name="pref_security_show_security_warning" msgid="8901135676266754559">"Tampilkan peringatan keamanan"</string>
     <string name="pref_security_show_security_warning_summary" msgid="5260098316025397525">"Tampilkan peringatan jika ada masalah dengan keamanan situs"</string>
-    <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Terima kuki"</string>
-    <string name="pref_security_accept_cookies_summary" msgid="1907951236154433751">"Izinkan situs menyimpan dan membaca data kuki"</string>
+    <string name="pref_security_accept_cookies" msgid="3201367661925047989">"Terima cookie"</string>
+    <string name="pref_security_accept_cookies_summary" msgid="1907951236154433751">"Izinkan situs menyimpan dan membaca data cookie"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Kecil"</item>
     <item msgid="1950030433642671460">"Kecil"</item>
@@ -224,7 +224,7 @@
     <item msgid="5043128215356351184">"Besar"</item>
     <item msgid="7201512237890458902">"Sangat besar"</item>
   </string-array>
-    <string name="pref_min_font_size" msgid="8811125835817449131">"Ukuran fon minimal"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Ukuran font minimal"</string>
     <string name="pref_min_font_size_value" msgid="2924708480509060209">"<xliff:g id="FONT_SIZE">%d</xliff:g> pn"</string>
     <string name="pref_text_zoom" msgid="5171056101805125497">"Penskalaan teks"</string>
     <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Zoom dengan mengetuk dua kali"</string>
@@ -234,22 +234,22 @@
     <string name="pref_inverted" msgid="7613556986776824112">"Penampilan terinversi"</string>
     <string name="pref_inverted_summary" msgid="7357225897413923085">"Hitam menjadi putih dan sebaliknya"</string>
     <string name="pref_inverted_contrast" msgid="8527441236225288169">"Kontras"</string>
-    <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom bawaan"</string>
+    <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom default"</string>
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Jauh"</item>
     <item msgid="5619034257768161024">"Sedang"</item>
     <item msgid="3840999588443167001">"Tutup"</item>
   </string-array>
-    <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom bawaan"</string>
+    <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom default"</string>
     <string name="pref_content_load_page" msgid="2219810141690955452">"Buka laman di ikhtisar"</string>
     <string name="pref_content_load_page_summary" msgid="9168803276420332955">"Menampilkan ikhtisar laman yang baru dibuka"</string>
     <string name="pref_extras_title" msgid="7075456173747370647">"Lanjutan"</string>
     <string name="pref_extras_website_settings" msgid="67866640052455549">"Setelan situs web"</string>
     <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Setelan lanjutan untuk masing-masing situs web"</string>
-    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Setel ulang bawaan"</string>
-    <string name="pref_extras_reset_default" msgid="8904000515846202110">"Setel ulang ke bawaan"</string>
-    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Pulihkan setelan bawaan"</string>
-    <string name="pref_extras_reset_default_dlg" msgid="7922814420184322450">"Kembalikan setelan ke nilai bawaan?"</string>
+    <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Setel ulang default"</string>
+    <string name="pref_extras_reset_default" msgid="8904000515846202110">"Setel ulang ke default"</string>
+    <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Pulihkan setelan default"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="7922814420184322450">"Kembalikan setelan ke nilai default?"</string>
     <string name="pref_development_title" msgid="3263854204533056480">"Debug"</string>
     <string name="pref_default_text_encoding" msgid="5742965543955558478">"Penyandiaksaraan teks"</string>
   <string-array name="pref_default_text_encoding_choices">
@@ -279,17 +279,17 @@
     <item msgid="1791664748778640002">"Hanya pada Wi-Fi"</item>
     <item msgid="3944061253437827617">"Selalu"</item>
   </string-array>
-    <string name="pref_data_preload_summary" msgid="3809168910751382727">"Mengizinkan peramban mem-pramuat hasil penelusuran pasti di latar belakang"</string>
+    <string name="pref_data_preload_summary" msgid="3809168910751382727">"Mengizinkan browser mem-pramuat hasil penelusuran pasti di latar belakang"</string>
     <string name="pref_data_preload_dialogtitle" msgid="8421297746110796536">"Pramuatan hasil penelusuran"</string>
     <string name="browserFrameNetworkErrorLabel" msgid="8102515020625680714">"Masalah sambungan"</string>
-    <string name="browserFrameFileErrorLabel" msgid="4703792279852977350">"Masalah berkas"</string>
+    <string name="browserFrameFileErrorLabel" msgid="4703792279852977350">"Masalah file"</string>
     <string name="browserFrameFormResubmitLabel" msgid="2385512101948178841"></string>
-    <string name="browserFrameFormResubmitMessage" msgid="5244059279866705254">"Laman yang Anda coba lihat berisi data yang telah dikirimkan (\"POSTDATA\"). Jika Anda mengirimkan ulang data, tindakan apa pun berupa pengisian formulir pada laman (seperti penelusuran atau pembelian daring) akan diulangi."</string>
+    <string name="browserFrameFormResubmitMessage" msgid="5244059279866705254">"Laman yang Anda coba lihat berisi data yang telah dikirimkan (\"POSTDATA\"). Jika Anda mengirimkan ulang data, tindakan apa pun berupa pengisian formulir pada laman (seperti penelusuran atau pembelian online) akan diulangi."</string>
     <string name="loadSuspendedTitle" msgid="6453376579109644551">"Tidak ada sambungan"</string>
-    <string name="loadSuspended" msgid="3843343290039218668">"Peramban tidak dapat memuat laman ini karena tidak ada sambungan internet."</string>
+    <string name="loadSuspended" msgid="3843343290039218668">"Browser tidak dapat memuat laman ini karena tidak ada sambungan internet."</string>
     <string name="clear_history" msgid="5998307092715979619">"Hapus riwayat"</string>
     <string name="browser_history" msgid="2979476257919939232">"Laman yang baru dikunjungi"</string>
-    <string name="empty_history" msgid="7013369425484218985">"Tidak ada riwayat peramban."</string>
+    <string name="empty_history" msgid="7013369425484218985">"Tidak ada riwayat browser."</string>
     <string name="go_home" msgid="109129207276086793">"Beranda"</string>
     <string name="add_new_bookmark" msgid="3158497555612337238">"Tambahkan bookmark"</string>
     <string name="add_bookmark_short" msgid="3783984330998103735">"Tambahkan"</string>
@@ -314,7 +314,7 @@
     <string name="cannot_download" msgid="8150552478556798780">"Hanya dapat mengunduh URL \"http\" atau \"https\"."</string>
     <string name="download_pending" msgid="2599683668575349559">"Memulai unduhan..."</string>
     <string name="search_the_web" msgid="6046130189241962337">"Telusuri web"</string>
-    <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Penyimpanan peramban penuh"</string>
+    <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Penyimpanan browser penuh"</string>
     <string name="webstorage_outofspace_notification_text" msgid="47273584426988640">"Sentuh untuk mengosongkan ruang."</string>
     <string name="webstorage_clear_data_title" msgid="689484577124333977">"Hapus data tersimpan"</string>
     <string name="webstorage_clear_data_dialog_message" msgid="6200681632891775881">"Hapus semua data yang disimpan situs web ini?"</string>
@@ -365,7 +365,7 @@
     <string name="permission_preload_label" msgid="4856971662337877316">"Lakukan pramuat hasil"</string>
     <string name="empty_snapshots_folder" msgid="7675378008107026013">"Tidak ada laman tersimpan."</string>
     <string name="remove_snapshot" msgid="1624447424544976849">"Hapus laman tersimpan"</string>
-    <string name="snapshot_go_live" msgid="1209542802541168497">"Buka laman daring"</string>
+    <string name="snapshot_go_live" msgid="1209542802541168497">"Buka laman online"</string>
     <string name="accessibility_button_back" msgid="6194680634245279407">"Kembali"</string>
     <string name="accessibility_button_forward" msgid="1236827218480658168">"Maju"</string>
     <string name="accessibility_button_refresh" msgid="1023441396241841313">"Menyegarkan laman"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3abe99a..8bb41f7 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Testo per compilazione automatica salvato."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Testo per compilazione automatica eliminato."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Elimina"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Il browser può completare automaticamente i moduli web come questo. Vuoi impostare il testo per la compilazione automatica?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Il browser può completare automaticamente i moduli web come questo. Vuoi impostare il testo per la compilazione automatica?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Puoi sempre impostare il testo per la compilazione automatica dalla schermata Browser &gt; Impostazioni &gt; Generali."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Disattiva compilazione automatica"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy e sicurezza"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 8ef7c98..6196117 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -20,7 +20,7 @@
     <string name="choose_upload" msgid="3649366287575002063">"בחר קובץ להעלאה"</string>
     <string name="uploads_disabled" msgid="463761197575372994">"העלאות הקובץ הושבתו."</string>
     <string name="new_tab" msgid="7971857320679510529">"כרטיסייה חדשה"</string>
-    <string name="new_incognito_tab" msgid="3606197964239039478">"כרטיסייה חדשה של גלישה בסתר"</string>
+    <string name="new_incognito_tab" msgid="3606197964239039478">"כרטיסיית גלישה בסתר חדשה"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"סימניות"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"אתרים שבהם אתה מבקר הכי הרבה"</string>
     <string name="tab_history" msgid="1979267558744613746">"היסטוריה"</string>
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"מילוי אוטומטי של טקסט נשמר."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"מילוי אוטומטי של טקסט נמחק."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"מחק"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"הדפדפן יכול למלא באופן אוטומטי טופסי אינטרנט כמו זה. האם תרצה להגדיר מילוי אוטומטי של טקסט?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"הדפדפן יכול לבצע השלמה אוטומטית של טופסי אינטרנט כמו טופס זה. האם ברצונך להגדיר טקסט למילוי אוטומטי?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"תוכל תמיד להגדיר את המילוי האוטומטי של הטקסט דרך המסך \'דפדפן\' &gt; \'הגדרות\' &gt; \'כללי\'."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"השבת את \'מילוי אוטומטי\'"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"פרטיות ואבטחה"</string>
@@ -376,7 +376,7 @@
     <string name="accessibility_button_bookmarks" msgid="7435055677299151649">"סימניות"</string>
     <string name="accessibility_button_closetab" msgid="6954807842756927737">"סגור כרטיסייה"</string>
     <string name="accessibility_button_newtab" msgid="4116986240706315748">"פתח כרטיסייה חדשה"</string>
-    <string name="accessibility_button_newincognitotab" msgid="5254901889040012964">"פתח כרטיסייה חדשה של גלישה בסתר"</string>
+    <string name="accessibility_button_newincognitotab" msgid="5254901889040012964">"פתח כרטיסיית גלישה בסתר חדשה"</string>
     <string name="accessibility_button_clear" msgid="6943152307986161598">"נקה תוכן"</string>
     <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"החלף סוכן משתמש"</string>
     <string name="accessibility_button_go" msgid="1182818872083055958">"בצע"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 111784d..8938f25 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"自動入力テキストを保存しました。"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"自動入力テキストを削除しました。"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"削除"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"このようにウェブフォームのデータを自動的に入力できます。自動入力テキストを設定しますか?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"このようにウェブフォームのデータを自動的に入力できます。自動入力テキストを設定しますか?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"自動入力テキストは[ブラウザ] &gt; [設定] &gt; [全般]でいつでも設定できます。"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"自動入力を無効にする"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"プライバシーとセキュリティ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 3d4ab49..c78b3aa 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"자동 입력 텍스트를 저장했습니다."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"자동 입력 텍스트가 삭제되었습니다."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"삭제"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"브라우저에서 이 양식과 같은 웹 양식을 자동으로 완성할 수 있습니다. 자동 입력 텍스트를 설정하시겠습니까?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"브라우저에서 이 양식과 같은 웹 양식을 자동으로 완성할 수 있습니다. 자동 입력 텍스트를 설정하시겠습니까?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"브라우저 &gt; 설정 &gt; 일반 화면에서 언제든지 자동 입력 텍스트를 설정할 수 있습니다."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"자동 입력 사용중지"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"개인정보 보호 및 보안"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f488f5d..58da84c 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automatinio pildymo tekstas išsaugotas."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automatinis teksto pildymas ištrintas."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Ištrinti"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Naršyklė gali automatiškai užpildyti tokias žiniatinklio formas kaip ši. Ar norėtumėte nustatyti automatinį teksto pildymą?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Naršyklė gali automatiškai užpildyti tokias formas kaip ši. Ar norite nustatyti automatinį teksto pildymą?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automatinį teksto pildymą galite bet kada nustatyti ekrane „Naršyklė“ &gt; „Nustatymai“ &gt; „Bendra“."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Neleisti automatinio pildymo"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privatumas ir sauga"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 1a7a3c5..4234ee2 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automātiskās aizpildes teksts saglabāts."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automātiskās aizpildes teksts ir izdzēsts."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Dzēst"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Pārlūkprogramma var automātiski aizpildīt šādas tīmekļa veidlapas. Vai vēlaties iestatīt automātiskās aizpildes tekstu?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Pārlūkprogrammā var tikt automātiski aizpildītas šādas tīmekļa veidlapas. Vai vēlaties iestatīt automātiskās aizpildes tekstu?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Jebkurā laikā varat iestatīt automātiskās aizpildes tekstu, atverot šādus ekrānus:  Pārlūkprogramma &gt; Iestatījumi &gt; Vispārīgi."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Atspējot automātisko aizpildi"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Konfidencialitāte un drošība"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 38e5921..6f69194 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Teks auto isi disimpan."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Teks auto-isi dipadamkan."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Padam"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Penyemak imbas boleh melengkapkan borang web seperti ini secara automatik. Adakah anda ingin menyediakan teks auto-isi anda?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Penyemak imbas boleh melengkapkan borang web seperti ini secara automatik. Adakah anda ingin menyediakan teks auto-isi anda?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Anda boleh menyediakan teks auto-isi anda daripada skrin Penyemak Imbas &gt; Tetapan &gt; Umum."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Lumpuhkan auto isi"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privasi &amp; keselamatan"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index eb412e9..b6ab845 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Tekst for automatisk utfylling lagret."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tekst for automatisk utfylling er slettet."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Slett"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Nettleseren kan automatisk fullføre nettskjemaer som dette. Vil du konfigurere tekst for automatisk utfylling?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Nettleseren kan automatisk fullføre nettskjemaer som dette. Vil du konfigurere tekst for automatisk utfylling?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Du kan konfigurere tekst for automatisk utfylling senere, fra skjermen Nettleser &gt; Innstillinger &gt; Generelt."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Deaktiver automatisk utfylling"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Personvern og sikkerhet"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b06152f..50528e9 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Tekst voor automatisch aanvullen opgeslagen."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tekst voor automatisch aanvullen verwijderd."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Verwijderen"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"De browser kan webformulieren zoals deze automatisch invullen. Wilt u uw instellingen voor het automatisch aanvullen van tekst opgeven?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"De browser kan webformulieren zoals deze automatisch invullen. Wilt u het automatisch aanvullen van tekst instellen?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"U kunt de tekst voor automatisch aanvullen altijd instellen via \'Browser\' &gt; \'Instellingen\' &gt; \'Algemeen\'."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Automatisch aanvullen uitschakelen"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy en beveiliging"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b99a181..a897f2d 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -172,7 +172,7 @@
     <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"Adres, wiersz 2:"</string>
     <string name="autofill_profile_editor_address_line_2_hint" msgid="8529642768127569254">"Mieszkanie, apartament, wydział, budynek, piętro itp."</string>
     <string name="autofill_profile_editor_city" msgid="7306716145784997135">"Miasto/miejscowość:"</string>
-    <string name="autofill_profile_editor_state" msgid="2150403366835080407">"Województwo/region:"</string>
+    <string name="autofill_profile_editor_state" msgid="2150403366835080407">"Województwo / region:"</string>
     <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"Kod pocztowy:"</string>
     <string name="autofill_profile_editor_country" msgid="7234470301239156656">"Kraj:"</string>
     <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Telefon:"</string>
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Autouzupełniany tekst został zapisany."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Autouzupełniany tekst został usunięty."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Usuń"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Przeglądarka może automatycznie wypełniać takie formularze internetowe. Chcesz skonfigurować autouzupełniany tekst?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Przeglądarka może automatycznie wypełniać takie formularze internetowe. Chcesz skonfigurować autouzupełnianie?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Zawsze możesz skonfigurować autouzupełniany tekst na ekranie Przeglądarka &gt; Ustawienia &gt; Ogólne."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Wyłącz autouzupełnianie"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Prywatność i bezpieczeństwo"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index fd1bc6e..5ebc993 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texto de preenchimento automático guardado."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texto de preenchimento automático eliminado."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Eliminar"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"O navegador pode preencher automaticamente formulários Web como este. Pretende configurar o texto de preenchimento automático?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"O navegador pode preencher automaticamente formulários Web como este. Pretende configurar o texto de preenchimento automático?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Pode sempre configurar o texto de preenchimento automático no ecrã Navegador &gt; Definições &gt; Geral."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Desativar preenchimento automático"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacidade e segurança"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f144851..f80a356 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Texto de preenchimento automático salvo."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Texto de preenchimento automático excluído."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Excluir"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"O navegador pode preencher automaticamente formulários da web como este. Deseja configurar o preenchimento automático de texto?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"O navegador pode preencher automaticamente formulários da web como este. Deseja configurar o preenchimento automático de texto?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"É possível configurar o preenchimento automático de texto na tela Navegador &gt; Configurações &gt; Geral."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Desativar o preenchimento automático"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacidade e segurança"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index c70c6cd..2eca8ed 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -260,7 +260,7 @@
     <skip />
     <!-- no translation found for autofill_profile_editor_delete_profile (3098369314558164153) -->
     <skip />
-    <!-- no translation found for autofill_setup_dialog_message (1096164985825394616) -->
+    <!-- no translation found for autofill_setup_dialog_message (7123905786076456503) -->
     <skip />
     <!-- no translation found for autofill_setup_dialog_negative_toast (3288881675232206984) -->
     <skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 32bca42..8b1e5bd 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Textul pentru completare automată a fost salvat."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Textul pentru completarea automată a fost şters."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Ştergeţi"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Browserul poate completa automat formulare web ca acesta. Doriţi să configuraţi textul pentru completarea automată?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Browserul poate completa automat formulare web ca acesta. Doriţi să configuraţi textul pentru completarea automată?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Puteţi configura oricând textul dvs. pentru completarea automată din ecranul Browser &gt; Setări &gt; General."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Dezactivaţi completarea automată"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Confidenţialitate şi securitate"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 850e13e..2fcad2c 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текст автозаполнения сохранен."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текст автозаполнения удален."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Удалить"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Браузер может автоматически заполнять такие веб-формы. Включить автозаполнение?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Браузер может автоматически заполнять такие веб-формы. Включить автозаполнение?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Автозаполнение можно настроить в общих настройках браузера."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Отключить автозаполнение"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Личные данные"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b100d14..c503da5 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Automaticky dopĺňaný text bol uložený."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Automaticky dopĺňaný text bol odstránený."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Odstrániť"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Podobné webové formuláre môže prehliadač vypĺňať automaticky. Chcete nastaviť automatické dopĺňanie textu?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Podobné webové formuláre môže prehliadač vypĺňať automaticky. Chcete nastaviť automatické dopĺňanie textu?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Automatické dopĺňanie textu môžete v prehliadači kedykoľvek nastaviť v časti Nastavenia &gt; Hlavná obrazovka."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Zakázať automatické dopĺňanie"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ochrana osobných údajov a zabezpečenie"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index c512488..1377bc5 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Besedilo za samodejno izpolnjevanje je bilo shranjeno."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Besedilo za samodejno izpolnjevanje je bilo izbrisano."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Izbriši"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Brskalnik lahko samodejno izpolni spletne obrazce, kot je ta. Ali želite nastaviti besedilo za samodejno izpolnjevanje?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Brskalnik lahko samodejno izpolni spletne obrazce, kot je ta. Ali želite nastaviti besedilo za samodejno izpolnjevanje?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Besedilo za samodejno izpolnjevanje lahko vedno nastavite na zaslonu Brskalnik &gt; Nastavitve &gt; Splošno."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Onemogoči samodejno izpolnjevanje"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Zasebnost in varnost"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5bc8433..f109e31 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текст за аутоматско попуњавање је сачуван."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текст за аутоматско попуњавање је избрисан."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Избриши"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Прегледач може аутоматски да попуњава веб обрасце попут овог. Желите ли да подесите текст за аутоматско попуњавање?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Прегледач може аутоматски да попуњава веб обрасце попут овог. Желите ли да подесите текст за аутоматско попуњавање?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Увек можете да подесите текст за аутоматско попуњавање на екрану Прегледач &gt; Подешавања &gt; Опште."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Онемогући аутоматско попуњавање"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Приватност и безбедност"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 48874a0..d9fe103 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Text för autofyll har sparats."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Text för autofyll har tagits bort."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Ta bort"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Den här typen av webbformulär kan fyllas i automatiskt. Vill du ange en text för autofyll?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Den här typen av webbformulär kan fyllas i automatiskt. Vill du ange en text för autofyll?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Du kan alltid ange texten för autofyll på skärmen Webbläsare &gt; Inställningar &gt; Allmänt."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Inaktivera Autofyll"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Sekretess och säkerhet"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 4883c84..fd41f49 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Maandishi kujaza-oto yamehifadhiwa."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Maandishi ya oto-kujaza imefutwa."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Futa"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Kivinjari inaweza kukamilisha kiotomatiki fomu za wavuti kama hii. Je ungependa kusanidi maandishi ya kujaza-oto?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Kivinjari kinaweza kukamilisha kiotomati fomu za wavuti kama hii. Je, unataka kusanidi maandishi yako ya jaza-oto?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Wakati wowote unaweza kusanidi oto-kujaza maandishi kutoka kwa Broswer &gt; Settings &gt; Skrini ya kawaida."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Zima uwezo wa kujaza kiotomatiki"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Faragha na Usalama"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index c5a08f9..5a4d6c1 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"บันทึกการป้อนข้อความอัตโนมัติแล้ว"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"ลบการป้อนข้อความอัตโนมัติแล้ว"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"ลบ"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"เบราว์เซอร์สามารถกรอกเว็บฟอร์มโดยอัตโนมัติได้เหมือนกับฟอร์มนี้ คุณต้องการตั้งค่าการป้อนข้อความอัตโนมัติหรือไม่"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"เบราว์เซอร์สามารถกรอกเว็บฟอร์มโดยอัตโนมัติได้เหมือนกับฟอร์มนี้ คุณต้องการตั้งค่าการป้อนข้อความอัตโนมัติหรือไม่"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"คุณสามารถตั้งค่าการป้อนข้อความอัตโนมัติจากหน้าจอเบราว์เซอร์ &gt; การตั้งค่า &gt; ทั่วไป ได้เสมอ"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"ปิดใช้งานการป้อนอัตโนมัติ"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"ข้อมูลส่วนบุคคลและความปลอดภัย"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index dfbf947..b926947 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Na-save ang auto-fill text."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Tinanggal ang auto-fill text."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Tanggalin"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Maaaring awtomatikong kumpletuhin ng browser ang mga web form tulad nito. Gusto mo bang i-set up ang iyong auto-fill text?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Awtomatikong makapagkukumpleto ang browser ng mga form sa web tulad nito. Nais mo bang i-set up ang iyong auto-fill na teksto?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Maaari mong i-set up ang iyong auto-fill text anumang oras mula sa Browser &gt; Mga Setting &gt; Pangkalahatang screen."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Huwag paganahin ang auto-fill"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Privacy at seguridad"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ed27976..e497097 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Otomatik doldurma metni kaydedildi."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Otomatik doldurma metni silindi."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Sil"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Tarayıcı, bunun gibi web formlarını otomatik olarak doldurabilir. Otomatik doldurma metninizi ayarlamak ister misiniz?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Tarayıcı, bunun gibi web formlarını otomatik olarak doldurabilir. Otomatik doldurma metninizi ayarlamak ister misiniz?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Otomatik doldurma metninizi istediğiniz zaman Tarayıcı &gt; Ayarlar &gt; Genel ekranından ayarlayabilirsiniz."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Otomatik doldurmayı devre dışı bırak"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Gizlilik ve güvenlik"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index d064872..827ab2e 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Текст автозаповнення збережено."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Текст автозаповнення видалено."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Видалити"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Веб-переглядач може автоматично заповнювати подібні веб-форми. Налаштувати текст автозаповнення?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Веб-переглядач може автоматично заповнювати подібні веб-форми. Налаштувати текст автозаповнення?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Ви завжди можете налаштувати текст автозаповнення на екрані Веб-переглядач &gt; Налаштування &gt; Загальні."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Вимкнути автозаповнення"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Конфіденційність і безпека"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f49ed21..c00ffa8 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Đã lưu văn bản tự động điền."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Đã xóa văn bản tự động điền."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Xóa"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Trình duyệt có thể tự động hoàn tất các biểu mẫu web giống như biểu mẫu này. Bạn có muốn thiết lập văn bản tự động điền của mình không?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Trình duyệt có thể tự động hoàn tất các biểu mẫu web giống như biểu mẫu này. Bạn có muốn thiết lập văn bản tự động điền của mình không?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Bạn luôn có thể thiết lập văn bản tự động điền của mình từ màn hình Trình duyệt &gt; Cài đặt &gt; Chung."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Tắt tính năng tự động điền"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Riêng tư &amp; bảo mật"</string>
@@ -263,7 +263,7 @@
     <item msgid="2193955365569270096">"Tiếng Hàn (EUC-KR)"</item>
   </string-array>
     <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Mã hóa văn bản"</string>
-    <string name="pref_accessibility_title" msgid="5127836981587423215">"Khả năng truy cập"</string>
+    <string name="pref_accessibility_title" msgid="5127836981587423215">"Hỗ trợ truy cập"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Kích thước văn bản"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Lab"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Các điều khiển nhanh"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ba3a71d..7ae6c9d 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -168,7 +168,7 @@
     <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"电子邮件地址:"</string>
     <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"公司名称:"</string>
     <string name="autofill_profile_editor_address_line_1" msgid="836433242509243081">"地址行 1:"</string>
-    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"街道地址、邮政信箱、转交"</string>
+    <string name="autofill_profile_editor_address_line_1_hint" msgid="5965659598509327172">"街道地址、邮政信箱、转交人"</string>
     <string name="autofill_profile_editor_address_line_2" msgid="8194745202893822479">"地址行 2:"</string>
     <string name="autofill_profile_editor_address_line_2_hint" msgid="8529642768127569254">"公寓、套房、单元、楼栋、楼层等等。"</string>
     <string name="autofill_profile_editor_city" msgid="7306716145784997135">"城市/乡镇:"</string>
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"自动填充文本已保存。"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"自动填充文本已删除。"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"删除"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"浏览器可以自动填写与此类似的网络表单。您要设置自动填充文本吗?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"浏览器可以自动填写与此类似的网络表单。要设置自动填充文字吗?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"您可以随时通过“浏览器”&gt;“设置”&gt;“常规”屏幕设置自动填充文本。"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"停用自动填充"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"隐私和安全"</string>
@@ -267,7 +267,7 @@
     <string name="pref_font_size_category" msgid="6683754355084218254">"文字大小"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"实验室"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"快速控制"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"从左侧或右侧边缘滑动拇指可打开快速控件并隐藏应用程序和网址栏"</string>
+    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"从左侧或右侧边缘滑动拇指可打开快速控件并隐藏应用和网址栏"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 即搜即得"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"借助 Google 即搜即得,您可以在使用 Google 搜索时一边键入内容一边查看结果(此功能可能会增加数据使用量)。"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全屏"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 02eefbb..168814c 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"已儲存自動填入文字。"</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"已刪除自動填入文字。"</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"刪除"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"瀏覽器可以自動完成這類網路表單,您要設定自動填入文字嗎?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"瀏覽器可以自動輸入這類網路表單,您要設定自動填入文字嗎?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"您隨時可以前往 [瀏覽器] &gt; [設定] &gt; [一般] 畫面設定自動填入文字。"</string>
     <string name="disable_autofill" msgid="8305901059849400354">"停用自動填入功能"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"隱私權與安全性"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index a625e0b..6ea0e55 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -181,7 +181,7 @@
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Ukuzifakekela kombhalo kulondoloziwe."</string>
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Ukuzifakekela kwamagama kususiwe."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Susa"</string>
-    <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Isiphequluli singazigcwalisela amafomu ewebhu afana nalawa. Ungathanda ukulungisa uhlelo lokuzigcwalisela umbhalo?"</string>
+    <string name="autofill_setup_dialog_message" msgid="7123905786076456503">"Isiphequluli singaqedela amafomu ewebhu afana laleli. Ufuna ukusetha umbhalo wakho wokuqedela ngokuzenzakalela?"</string>
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Ungakwazi njalo ukuthi usethe ukuzifakekela kombhalo usuka Esipheqululini &gt; Izisetho &gt; Iskrini esijwayelekile."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Khubaza ukufaka-okuzenzakalelayo"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ubumfihlo nokuvikela"</string>
diff --git a/res/values/all_search_engines.xml b/res/values/all_search_engines.xml
index 58992a4..e472915 100644
--- a/res/values/all_search_engines.xml
+++ b/res/values/all_search_engines.xml
@@ -207,10 +207,10 @@
   <string-array name="google" translatable="false">
     <item>Google</item>
     <item>google.com</item>
-    <item>http://www.google.com/favicon.ico</item>
-    <item>http://www.google.com/search?hl={language}&amp;ie={inputEncoding}&amp;source=android-browser&amp;q={searchTerms}</item>
+    <item>https://www.google.com/favicon.ico</item>
+    <item>https://www.google.com/search?ie={inputEncoding}&amp;source=android-browser&amp;q={searchTerms}</item>
     <item>UTF-8</item>
-    <item>http://www.google.com/complete/search?hl={language}&amp;client=android&amp;q={searchTerms}</item>
+    <item>https://www.google.com/complete/search?client=android&amp;q={searchTerms}</item>
   </string-array>
   <string-array name="bing_en_NZ" translatable="false">
     <item>Bing</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6a1a6f1..2a7fa96 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -408,7 +408,7 @@
     <string name="autofill_profile_editor_delete_profile">Delete</string>
 
     <!-- Text on a dialog shown to the user when they are prompted to set up the autofill feature [CHAR-LIMIT=NONE] -->
-    <string name="autofill_setup_dialog_message">The browser can automatically complete web forms like this one. Would you like to set up your auto-fill text?</string>
+    <string name="autofill_setup_dialog_message">The browser can automatically complete web forms like this one. Do you want to set up your auto-fill text?</string>
     <!-- Toast message displayed when the user decides to not set up autofill at this time. We want to remind them that they can configure
          it through the Browser Settings menu. [CHAR-LIMIT=NONE] -->
     <string name="autofill_setup_dialog_negative_toast">You can always set up your auto-fill text from the Browser &gt; Settings &gt; General screen.</string>
@@ -664,6 +664,28 @@
     <string name="pref_data_preload_summary">Allow browser to preload high confidence search results in the background</string>
     <!-- Title of dialog for search preloading [CHAR LIMIT=40] -->
     <string name="pref_data_preload_dialogtitle">Search result preloading</string>
+    <!-- Title for link prefetching [CHAR LIMIT=40] -->
+    <string name="pref_link_prefetch_title">Web page preloading</string>
+    <!-- Link prefetching options [CHAR LIMIT=20] -->
+    <string-array name="pref_link_prefetch_choices">
+        <item>Never</item>
+        <item>Only on Wi-Fi</item>
+        <item>Always</item>
+    </string-array>
+    <!-- Do not translate -->
+    <string name="pref_link_prefetch_value_never" translatable="false">NEVER</string>
+    <string name="pref_link_prefetch_value_wifi_only" translatable="false">WIFI_ONLY</string>
+    <string name="pref_link_prefetch_value_always" translatable="false">ALWAYS</string>
+    <string name="pref_link_prefetch_default_value" translatable="false">@string/pref_link_prefetch_value_wifi_only</string>
+    <string-array name="pref_link_prefetch_values" translatable="false">
+        <item><xliff:g>@string/pref_link_prefetch_value_never</xliff:g></item>
+        <item><xliff:g>@string/pref_link_prefetch_value_wifi_only</xliff:g></item>
+        <item><xliff:g>@string/pref_link_prefetch_value_always</xliff:g></item>
+    </string-array>
+    <!-- Summary for link prefetching [CHAR LIMIT=80] -->
+    <string name="pref_link_prefetch_summary">Allow browser to preload linked web pages in the background</string>
+    <!-- Title of dialog for link prefetching [CHAR LIMIT=40] -->
+    <string name="pref_link_prefetch_dialogtitle">Web page preloading</string>
     <!-- Title for a dialog displayed when the browser has a data connectivity
             problem -->
     <string name="browserFrameNetworkErrorLabel">Connection problem</string>
@@ -762,17 +784,10 @@
 
     <!-- Do not translate.  Testing only -->
     <string name="dump_nav" translatable="false">Dump navigation cache</string>
-    <!-- Do not translate.  Testing only -->
-    <string name="dump_counters" translatable="false">Dump V8 counters</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. -->
+    <!-- The default homepage. -->
     <string name="homepage_base" translatable="false">
-        http://www.google.com/webhp?client={CID}&amp;source=android-home</string>
-    <!-- The default url for the instant_base_page. -->
-    <string name="instant_base" translatable="false">
-        http://www.google.com/webhp?client={CID}&amp;source=android-instant&amp;ion=1</string>
+        https://www.google.com/webhp?client={CID}&amp;source=android-home</string>
 
     <!-- Bookmarks -->
     <string-array name="bookmarks" translatable="false">
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 361702e..17c5eb2 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -80,4 +80,17 @@
         <item name="android:textColor">?android:attr/textColorSecondary</item>
         <item name="android:textStyle">normal</item>
     </style>
+
+    <style name="AutofillProfileTextView">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center_vertical</item>
+        <item name="android:layout_margin">2dip</item>
+        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
+    </style>
+    <style name="AutofillProfileEditText" parent="@style/AutofillProfileTextView">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:imeOptions">flagNoExtractUi|actionNext</item>
+        <item name="android:singleLine">true</item>
+    </style>
 </resources>
diff --git a/res/xml/bandwidth_preferences.xml b/res/xml/bandwidth_preferences.xml
index bb1688e..9946b48 100644
--- a/res/xml/bandwidth_preferences.xml
+++ b/res/xml/bandwidth_preferences.xml
@@ -24,6 +24,14 @@
         android:entryValues="@array/pref_data_preload_values"
         android:dialogTitle="@string/pref_data_preload_dialogtitle" />
 
+    <ListPreference
+        android:key="link_prefetch_when"
+        android:title="@string/pref_link_prefetch_title"
+        android:summary="@string/pref_link_prefetch_summary"
+        android:entries="@array/pref_link_prefetch_choices"
+        android:entryValues="@array/pref_link_prefetch_values"
+        android:dialogTitle="@string/pref_link_prefetch_dialogtitle" />
+
     <CheckBoxPreference
         android:key="load_images"
         android:defaultValue="true"
diff --git a/src/com/android/browser/AutoFillProfileDatabase.java b/src/com/android/browser/AutoFillProfileDatabase.java
index 3345e92..9666926 100644
--- a/src/com/android/browser/AutoFillProfileDatabase.java
+++ b/src/com/android/browser/AutoFillProfileDatabase.java
@@ -22,7 +22,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.provider.BaseColumns;
 import android.util.Log;
-import android.webkit.WebSettings.AutoFillProfile;
+import android.webkit.WebSettingsClassic.AutoFillProfile;
 
 public class AutoFillProfileDatabase {
 
diff --git a/src/com/android/browser/AutoFillSettingsFragment.java b/src/com/android/browser/AutoFillSettingsFragment.java
index 04f45b5..68b325e 100644
--- a/src/com/android/browser/AutoFillSettingsFragment.java
+++ b/src/com/android/browser/AutoFillSettingsFragment.java
@@ -32,7 +32,7 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.inputmethod.InputMethodManager;
-import android.webkit.WebSettings.AutoFillProfile;
+import android.webkit.WebSettingsClassic.AutoFillProfile;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.Toast;
@@ -52,7 +52,9 @@
     private EditText mCountryEdit;
     private EditText mPhoneEdit;
 
-    private Button mSaveButton;
+    private MenuItem mSaveMenuItem;
+
+    private boolean mInitialised;
 
     // Used to display toast after DB interactions complete.
     private Handler mHandler;
@@ -87,7 +89,7 @@
                 mPhoneEdit.setError(null);
             }
 
-            updateButtonState();
+            updateSaveMenuItemState();
         }
 
         public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -99,7 +101,7 @@
 
     private class FieldChangedListener implements TextWatcher {
         public void afterTextChanged(Editable s) {
-            updateButtonState();
+            updateSaveMenuItemState();
         }
 
         public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -147,11 +149,14 @@
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         inflater.inflate(R.menu.autofill_profile_editor, menu);
+        mSaveMenuItem = menu.findItem(R.id.autofill_profile_editor_save_profile_menu_id);
+        updateSaveMenuItemState();
     }
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == R.id.autofill_profile_editor_delete_profile_menu_id) {
+        switch (item.getItemId()) {
+        case R.id.autofill_profile_editor_delete_profile_menu_id:
             // Clear the UI.
             mFullNameEdit.setText("");
             mEmailEdit.setText("");
@@ -168,10 +173,30 @@
             // trigger the current profile to get deleted from the DB.
             mSettings.setAutoFillProfile(null,
                     mHandler.obtainMessage(PROFILE_DELETED_MSG));
-            updateButtonState();
+            updateSaveMenuItemState();
             return true;
+
+        case R.id.autofill_profile_editor_save_profile_menu_id:
+            AutoFillProfile newProfile = new AutoFillProfile(
+                    mUniqueId,
+                    mFullNameEdit.getText().toString(),
+                    mEmailEdit.getText().toString(),
+                    mCompanyEdit.getText().toString(),
+                    mAddressLine1Edit.getText().toString(),
+                    mAddressLine2Edit.getText().toString(),
+                    mCityEdit.getText().toString(),
+                    mStateEdit.getText().toString(),
+                    mZipEdit.getText().toString(),
+                    mCountryEdit.getText().toString(),
+                    mPhoneEdit.getText().toString());
+
+            mSettings.setAutoFillProfile(newProfile,
+                    mHandler.obtainMessage(PROFILE_SAVED_MSG));
+            return true;
+
+        default:
+            return false;
         }
-        return false;
     }
 
     @Override
@@ -203,27 +228,6 @@
         mCountryEdit.addTextChangedListener(mFieldChangedListener);
         mPhoneEdit.addTextChangedListener(new PhoneNumberValidator());
 
-        mSaveButton = (Button)v.findViewById(R.id.autofill_profile_editor_save_button);
-        mSaveButton.setOnClickListener(new OnClickListener() {
-            public void onClick(View button) {
-                AutoFillProfile newProfile = new AutoFillProfile(
-                        mUniqueId,
-                        mFullNameEdit.getText().toString(),
-                        mEmailEdit.getText().toString(),
-                        mCompanyEdit.getText().toString(),
-                        mAddressLine1Edit.getText().toString(),
-                        mAddressLine2Edit.getText().toString(),
-                        mCityEdit.getText().toString(),
-                        mStateEdit.getText().toString(),
-                        mZipEdit.getText().toString(),
-                        mCountryEdit.getText().toString(),
-                        mPhoneEdit.getText().toString());
-
-                mSettings.setAutoFillProfile(newProfile,
-                        mHandler.obtainMessage(PROFILE_SAVED_MSG));
-            }
-        });
-
         // Populate the text boxes with any pre existing AutoFill data.
         AutoFillProfile activeProfile = mSettings.getAutoFillProfile();
         if (activeProfile != null) {
@@ -239,14 +243,25 @@
             mPhoneEdit.setText(activeProfile.getPhoneNumber());
         }
 
-        updateButtonState();
+        mInitialised = true;
+
+        updateSaveMenuItemState();
 
         return v;
     }
 
-    public void updateButtonState() {
+    private void updateSaveMenuItemState() {
+        if (mSaveMenuItem == null) {
+            return;
+        }
 
-        boolean valid = (mFullNameEdit.getText().toString().length() > 0 ||
+        if (!mInitialised) {
+            mSaveMenuItem.setEnabled(false);
+            return;
+        }
+
+        boolean currentState = mSaveMenuItem.isEnabled();
+        boolean newState = (mFullNameEdit.getText().toString().length() > 0 ||
             mEmailEdit.getText().toString().length() > 0 ||
             mCompanyEdit.getText().toString().length() > 0 ||
             mAddressLine1Edit.getText().toString().length() > 0 ||
@@ -257,9 +272,9 @@
             mCountryEdit.getText().toString().length() > 0) &&
             mPhoneEdit.getError() == null;
 
-        // Only enable the save buttons if we have at least one field completed
-        // and the phone number (if present is valid).
-        mSaveButton.setEnabled(valid);
+        if (currentState != newState) {
+            mSaveMenuItem.setEnabled(newState);
+        }
     }
 
     private void closeEditor() {
diff --git a/src/com/android/browser/AutofillHandler.java b/src/com/android/browser/AutofillHandler.java
index c4b14d7..99ee6a0 100644
--- a/src/com/android/browser/AutofillHandler.java
+++ b/src/com/android/browser/AutofillHandler.java
@@ -21,10 +21,12 @@
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.database.Cursor;
+import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Message;
 import android.preference.PreferenceManager;
-import android.webkit.WebSettings.AutoFillProfile;
+import android.provider.ContactsContract;
+import android.webkit.WebSettingsClassic.AutoFillProfile;
 
 import java.util.concurrent.CountDownLatch;
 
@@ -114,8 +116,62 @@
             c.close();
             autoFillDb.close();
 
+            if (mAutoFillProfile == null) {
+                // We did not load a profile from disk. Try to populate one with the user's
+                // "me" contact.
+                final Uri profileUri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
+                        ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
+
+                String name = getContactField(profileUri,
+                        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
+                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
+                // Only attempt to read other data and set a profile if we could successfully
+                // get a name.
+                if (name != null) {
+                    String email = getContactField(profileUri,
+                            ContactsContract.CommonDataKinds.Email.ADDRESS,
+                            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
+                    String phone = getContactField(profileUri,
+                            ContactsContract.CommonDataKinds.Phone.NUMBER,
+                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+                    String company = getContactField(profileUri,
+                            ContactsContract.CommonDataKinds.Organization.COMPANY,
+                            ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
+
+                    // Can't easily get structured postal address information (even using
+                    // CommonDataKinds.StructuredPostal) so omit prepopulating that for now.
+                    // When querying structured postal data, it often all comes back as a string
+                    // inside the "street" field.
+
+                    mAutoFillProfile = new AutoFillProfile(
+                            1, name, email, company, null, null, null, null,
+                            null, null, phone);
+                }
+            }
+
             mLoaded.countDown();
         }
+
+        private String getContactField(Uri uri, String field, String itemType) {
+            String result = null;
+
+            Cursor c = mContext.getContentResolver().query(uri, new String[] { field },
+                    ContactsContract.Data.MIMETYPE + "=?", new String[] { itemType }, null);
+
+            if (c == null) {
+                return null;
+            }
+
+            try {
+                // Just use the first returned value if we get more than one.
+                if (c.moveToFirst()) {
+                    result = c.getString(0);
+                }
+            } finally {
+                c.close();
+            }
+            return result;
+        }
     }
 
     public void setAutoFillProfile(AutoFillProfile profile, Message msg) {
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 69063eb..ffb2928 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -47,6 +47,7 @@
 import android.view.inputmethod.InputMethodManager;
 import android.webkit.WebChromeClient;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
@@ -236,6 +237,7 @@
 
     @Override
     public void setActiveTab(final Tab tab) {
+        if (tab == null) return;
         mHandler.removeMessages(MSG_HIDE_TITLEBAR);
         if ((tab != mActiveTab) && (mActiveTab != null)) {
             removeTabFromContentView(mActiveTab);
@@ -343,7 +345,7 @@
         // Remove the container from the content and then remove the
         // WebView from the container. This will trigger a focus change
         // needed by WebView.
-        mainView.setEmbeddedTitleBar(null);
+        WebViewClassic.fromWebView(mainView).setEmbeddedTitleBar(null);
         FrameLayout wrapper =
                 (FrameLayout) container.findViewById(R.id.webview_wrapper);
         wrapper.removeView(mainView);
@@ -394,7 +396,8 @@
         final WebView cancelSubView = subView;
         cancel.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
-                cancelSubView.getWebChromeClient().onCloseWindow(cancelSubView);
+                WebViewClassic.fromWebView(cancelSubView).getWebChromeClient().onCloseWindow(
+                        cancelSubView);
             }
         });
         tab.setSubWebView(subView);
@@ -475,7 +478,7 @@
     protected void setTitleGravity(int gravity) {
         WebView web = getWebView();
         if (web != null) {
-            web.setTitleBarGravity(gravity);
+            WebViewClassic.fromWebView(web).setTitleBarGravity(gravity);
         }
     }
 
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 23aeed5..77fac4f 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -62,7 +62,7 @@
             finish();
             return;
         }
-        mController = new Controller(this, icicle == null);
+        mController = new Controller(this);
         boolean xlarge = isTablet(this);
         if (xlarge) {
             mUi = new XLargeUi(this, mController);
@@ -71,12 +71,8 @@
         }
         mController.setUi(mUi);
 
-        Bundle state = getIntent().getBundleExtra(EXTRA_STATE);
-        if (state != null && icicle == null) {
-            icicle = state;
-        }
-
-        mController.start(icicle, getIntent());
+        Intent intent = (icicle == null) ? getIntent() : null;
+        mController.start(intent);
     }
 
     public static boolean isTablet(Context context) {
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 2369554..415e72d 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -22,6 +22,8 @@
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 import android.os.Build;
 import android.os.Message;
 import android.preference.PreferenceManager;
@@ -32,11 +34,12 @@
 import android.webkit.GeolocationPermissions;
 import android.webkit.WebIconDatabase;
 import android.webkit.WebSettings;
-import android.webkit.WebSettings.AutoFillProfile;
 import android.webkit.WebSettings.LayoutAlgorithm;
 import android.webkit.WebSettings.PluginState;
 import android.webkit.WebSettings.TextSize;
 import android.webkit.WebSettings.ZoomDensity;
+import android.webkit.WebSettingsClassic;
+import android.webkit.WebSettingsClassic.AutoFillProfile;
 import android.webkit.WebStorage;
 import android.webkit.WebView;
 import android.webkit.WebViewDatabase;
@@ -114,6 +117,9 @@
     private boolean mNeedsSharedSync = true;
     private float mFontSizeMult = 1.0f;
 
+    // Current state of network-dependent settings
+    private boolean mLinkPrefetchAllowed = true;
+
     // Cached values
     private int mPageCacheCapacity = 1;
     private String mAppCachePath;
@@ -149,16 +155,28 @@
     }
 
     public void startManagingSettings(WebSettings settings) {
+        WebSettingsClassic settingsClassic = (WebSettingsClassic) settings;
         if (mNeedsSharedSync) {
             syncSharedSettings();
         }
         synchronized (mManagedSettings) {
-            syncStaticSettings(settings);
-            syncSetting(settings);
+            syncStaticSettings(settingsClassic);
+            syncSetting(settingsClassic);
             mManagedSettings.add(new WeakReference<WebSettings>(settings));
         }
     }
 
+    public void stopManagingSettings(WebSettings settings) {
+        Iterator<WeakReference<WebSettings>> iter = mManagedSettings.iterator();
+        while (iter.hasNext()) {
+            WeakReference<WebSettings> ref = iter.next();
+            if (ref.get() == settings) {
+                iter.remove();
+                return;
+            }
+        }
+    }
+
     private Runnable mSetup = new Runnable() {
 
         @Override
@@ -174,8 +192,6 @@
             mWebStorageSizeManager = new WebStorageSizeManager(mContext,
                     new WebStorageSizeManager.StatFsDiskInfo(getAppCachePath()),
                     new WebStorageSizeManager.WebKitAppCacheInfo(getAppCachePath()));
-            // Workaround b/5253777
-            CookieManager.getInstance().acceptCookie();
             // Workaround b/5254577
             mPrefs.registerOnSharedPreferenceChangeListener(BrowserSettings.this);
             if (Build.VERSION.CODENAME.equals("REL")) {
@@ -235,7 +251,7 @@
     /**
      * Syncs all the settings that have a Preference UI
      */
-    private void syncSetting(WebSettings settings) {
+    private void syncSetting(WebSettingsClassic settings) {
         settings.setGeolocationEnabled(enableGeolocation());
         settings.setJavaScriptEnabled(enableJavascript());
         settings.setLightTouchEnabled(enableLightTouch());
@@ -279,13 +295,15 @@
             settings.setProperty(WebViewProperties.gfxEnableCpuUploadPath,
                     enableCpuUploadPath() ? "true" : "false");
         }
+
+        settings.setLinkPrefetchEnabled(mLinkPrefetchAllowed);
     }
 
     /**
      * Syncs all the settings that have no UI
      * These cannot change, so we only need to set them once per WebSettings
      */
-    private void syncStaticSettings(WebSettings settings) {
+    private void syncStaticSettings(WebSettingsClassic settings) {
         settings.setDefaultFontSize(16);
         settings.setDefaultFixedFontSize(13);
         settings.setPageCacheCapacity(getPageCacheCapacity());
@@ -334,7 +352,7 @@
             Iterator<WeakReference<WebSettings>> iter = mManagedSettings.iterator();
             while (iter.hasNext()) {
                 WeakReference<WebSettings> ref = iter.next();
-                WebSettings settings = ref.get();
+                WebSettingsClassic settings = (WebSettingsClassic)ref.get();
                 if (settings == null) {
                     iter.remove();
                     continue;
@@ -350,8 +368,7 @@
         syncManagedSettings();
         if (PREF_SEARCH_ENGINE.equals(key)) {
             updateSearchEngine(false);
-        }
-        if (PREF_FULLSCREEN.equals(key)) {
+        } else if (PREF_FULLSCREEN.equals(key)) {
             if (mController.getUi() != null) {
                 mController.getUi().setFullscreen(useFullscreen());
             }
@@ -359,6 +376,8 @@
             if (mController.getUi() != null) {
                 mController.getUi().setUseQuickControls(sharedPreferences.getBoolean(key, false));
             }
+        } else if (PREF_LINK_PREFETCH.equals(key)) {
+            updateConnectionType();
         }
     }
 
@@ -565,6 +584,37 @@
         return mPrefs;
     }
 
+    // update connectivity-dependent options
+    public void updateConnectionType() {
+        ConnectivityManager cm = (ConnectivityManager)
+            mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+        String linkPrefetchPreference = getLinkPrefetchEnabled();
+        boolean linkPrefetchAllowed = linkPrefetchPreference.
+            equals(getLinkPrefetchAlwaysPreferenceString(mContext));
+        NetworkInfo ni = cm.getActiveNetworkInfo();
+        if (ni != null) {
+            switch (ni.getType()) {
+                case ConnectivityManager.TYPE_WIFI:
+                case ConnectivityManager.TYPE_ETHERNET:
+                case ConnectivityManager.TYPE_BLUETOOTH:
+                    linkPrefetchAllowed |= linkPrefetchPreference.
+                        equals(getLinkPrefetchOnWifiOnlyPreferenceString(mContext));
+                    break;
+                case ConnectivityManager.TYPE_MOBILE:
+                case ConnectivityManager.TYPE_MOBILE_DUN:
+                case ConnectivityManager.TYPE_MOBILE_MMS:
+                case ConnectivityManager.TYPE_MOBILE_SUPL:
+                case ConnectivityManager.TYPE_WIMAX:
+                default:
+                    break;
+            }
+        }
+        if (mLinkPrefetchAllowed != linkPrefetchAllowed) {
+            mLinkPrefetchAllowed = linkPrefetchAllowed;
+            syncManagedSettings();
+        }
+    }
+
     // -----------------------------
     // getter/setters for accessibility_preferences.xml
     // -----------------------------
@@ -847,4 +897,71 @@
         return mPrefs.getString(PREF_DATA_PRELOAD, getDefaultPreloadSetting());
     }
 
+    public static String getLinkPrefetchOnWifiOnlyPreferenceString(Context context) {
+        return context.getResources().getString(R.string.pref_link_prefetch_value_wifi_only);
+    }
+
+    public static String getLinkPrefetchAlwaysPreferenceString(Context context) {
+        return context.getResources().getString(R.string.pref_link_prefetch_value_always);
+    }
+
+    private static final String DEFAULT_LINK_PREFETCH_SECURE_SETTING_KEY =
+            "browser_default_link_prefetch_setting";
+
+    public String getDefaultLinkPrefetchSetting() {
+        String preload = Settings.Secure.getString(mContext.getContentResolver(),
+            DEFAULT_LINK_PREFETCH_SECURE_SETTING_KEY);
+        if (preload == null) {
+            preload = mContext.getResources().getString(R.string.pref_link_prefetch_default_value);
+        }
+        return preload;
+    }
+
+    public String getLinkPrefetchEnabled() {
+        return mPrefs.getString(PREF_LINK_PREFETCH, getDefaultLinkPrefetchSetting());
+    }
+
+    // -----------------------------
+    // getter/setters for browser recovery
+    // -----------------------------
+    /**
+     * The last time browser was started.
+     * @return The last browser start time as System.currentTimeMillis. This
+     * can be 0 if this is the first time or the last tab was closed.
+     */
+    public long getLastRecovered() {
+        return mPrefs.getLong(KEY_LAST_RECOVERED, 0);
+    }
+
+    /**
+     * Sets the last browser start time.
+     * @param time The last time as System.currentTimeMillis that the browser
+     * was started. This should be set to 0 if the last tab is closed.
+     */
+    public void setLastRecovered(long time) {
+        mPrefs.edit()
+            .putLong(KEY_LAST_RECOVERED, time)
+            .apply();
+    }
+
+    /**
+     * Used to determine whether or not the previous browser run crashed. Once
+     * the previous state has been determined, the value will be set to false
+     * until a pause is received.
+     * @return true if the last browser run was paused or false if it crashed.
+     */
+    public boolean wasLastRunPaused() {
+        return mPrefs.getBoolean(KEY_LAST_RUN_PAUSED, false);
+    }
+
+    /**
+     * Sets whether or not the last run was a pause or crash.
+     * @param isPaused Set to true When a pause is received or false after
+     * resuming.
+     */
+    public void setLastRunPaused(boolean isPaused) {
+        mPrefs.edit()
+            .putBoolean(KEY_LAST_RUN_PAUSED, isPaused)
+            .apply();
+    }
 }
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index b763cf1..49d1a2e 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -21,13 +21,14 @@
 import android.util.AttributeSet;
 import android.view.View;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 
 import java.util.Map;
 
 /**
  * Manage WebView scroll events
  */
-public class BrowserWebView extends WebView {
+public class BrowserWebView extends WebView implements WebViewClassic.TitleBarDelegate {
 
     public interface OnScrollChangedListener {
         void onScrollChanged(int l, int t, int oldl, int oldt);
@@ -73,18 +74,15 @@
         super(context);
     }
 
+    // From TitleBarDelegate
     @Override
-    protected int getTitleHeight() {
+    public int getTitleHeight() {
         return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0;
     }
 
-    void hideEmbeddedTitleBar() {
-        scrollBy(0, getVisibleTitleHeight());
-    }
-
+    // From TitleBarDelegate
     @Override
-    public void setEmbeddedTitleBar(final View title) {
-        super.setEmbeddedTitleBar(title);
+    public void onSetEmbeddedTitleBar(final View title) {
         mTitleBar = (TitleBar) title;
     }
 
@@ -126,4 +124,10 @@
         return false;
     }
 
+    @Override
+    public void destroy() {
+        BrowserSettings.getInstance().stopManagingSettings(getSettings());
+        super.destroy();
+    }
+
 }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 8238d77..9861184 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -76,6 +76,7 @@
 import android.webkit.WebIconDatabase;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 import android.widget.Toast;
 
 import com.android.browser.IntentHandler.UrlData;
@@ -218,15 +219,13 @@
 
     private boolean mBlockEvents;
 
-    public Controller(Activity browser, boolean preloadCrashState) {
+    public Controller(Activity browser) {
         mActivity = browser;
         mSettings = BrowserSettings.getInstance();
         mTabControl = new TabControl(this);
         mSettings.setController(this);
         mCrashRecoveryHandler = CrashRecoveryHandler.initialize(this);
-        if (preloadCrashState) {
-            mCrashRecoveryHandler.preloadCrashState();
-        }
+        mCrashRecoveryHandler.preloadCrashState();
         mFactory = new BrowserWebViewFactory(browser);
 
         mUrlHandler = new UrlHandler(this);
@@ -256,16 +255,12 @@
         openIconDatabase();
     }
 
-    void start(final Bundle icicle, final Intent intent) {
-        boolean noCrashRecovery = intent.getBooleanExtra(NO_CRASH_RECOVERY, false);
-        if (icicle != null || noCrashRecovery) {
-            doStart(icicle, intent, false);
-        } else {
-            mCrashRecoveryHandler.startRecovery(intent);
-        }
+    void start(final Intent intent) {
+        // mCrashRecoverHandler has any previously saved state.
+        mCrashRecoveryHandler.startRecovery(intent);
     }
 
-    void doStart(final Bundle icicle, final Intent intent, final boolean fromCrash) {
+    void doStart(final Bundle icicle, final Intent intent) {
         // Unless the last browser usage was within 24 hours, destroy any
         // remaining incognito tabs.
 
@@ -293,36 +288,42 @@
         GoogleAccountLogin.startLoginIfNeeded(mActivity,
                 new Runnable() {
                     @Override public void run() {
-                        onPreloginFinished(icicle, intent, currentTabId, restoreIncognitoTabs,
-                                fromCrash);
+                        onPreloginFinished(icicle, intent, currentTabId,
+                                restoreIncognitoTabs);
                     }
                 });
     }
 
     private void onPreloginFinished(Bundle icicle, Intent intent, long currentTabId,
-            boolean restoreIncognitoTabs, boolean fromCrash) {
+            boolean restoreIncognitoTabs) {
         if (currentTabId == -1) {
             BackgroundHandler.execute(new PruneThumbnails(mActivity, null));
-            final Bundle extra = intent.getExtras();
-            // Create an initial tab.
-            // 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.
-            UrlData urlData = IntentHandler.getUrlDataFromIntent(intent);
-            Tab t = null;
-            if (urlData.isEmpty()) {
-                t = openTabToHomePage();
+            if (intent == null) {
+                // This won't happen under common scenarios. The icicle is
+                // not null, but there aren't any tabs to restore.
+                openTabToHomePage();
             } else {
-                t = openTab(urlData);
-            }
-            if (t != null) {
-                t.setAppId(intent.getStringExtra(Browser.EXTRA_APPLICATION_ID));
-            }
-            WebView webView = t.getWebView();
-            if (extra != null) {
-                int scale = extra.getInt(Browser.INITIAL_ZOOM_LEVEL, 0);
-                if (scale > 0 && scale <= 1000) {
-                    webView.setInitialScale(scale);
+                final Bundle extra = intent.getExtras();
+                // Create an initial tab.
+                // 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.
+                UrlData urlData = IntentHandler.getUrlDataFromIntent(intent);
+                Tab t = null;
+                if (urlData.isEmpty()) {
+                    t = openTabToHomePage();
+                } else {
+                    t = openTab(urlData);
+                }
+                if (t != null) {
+                    t.setAppId(intent.getStringExtra(Browser.EXTRA_APPLICATION_ID));
+                }
+                WebView webView = t.getWebView();
+                if (extra != null) {
+                    int scale = extra.getInt(Browser.INITIAL_ZOOM_LEVEL, 0);
+                    if (scale > 0 && scale <= 1000) {
+                        webView.setInitialScale(scale);
+                    }
                 }
             }
             mUi.updateTabs(mTabControl.getTabs());
@@ -342,18 +343,19 @@
             // TabControl.restoreState() will create a new tab even if
             // restoring the state fails.
             setActiveTab(mTabControl.getCurrentTab());
-            // Handle the intent if needed. If icicle != null, we are restoring
-            // and the intent will be stale - ignore it.
-            if (icicle == null || fromCrash) {
+            // Intent is non-null when framework thinks the browser should be
+            // launching with a new intent (icicle is null).
+            if (intent != null) {
                 mIntentHandler.onNewIntent(intent);
             }
         }
         // Read JavaScript flags if it exists.
         String jsFlags = getSettings().getJsEngineFlags();
         if (jsFlags.trim().length() != 0) {
-            getCurrentWebView().setJsFlags(jsFlags);
+            WebViewClassic.fromWebView(getCurrentWebView()).setJsFlags(jsFlags);
         }
-        if (BrowserActivity.ACTION_SHOW_BOOKMARKS.equals(intent.getAction())) {
+        if (intent != null
+                && BrowserActivity.ACTION_SHOW_BOOKMARKS.equals(intent.getAction())) {
             bookmarksOrHistoryPicker(ComboViews.Bookmarks);
         }
     }
@@ -602,6 +604,8 @@
 
     protected void onConfgurationChanged(Configuration config) {
         mConfigChanged = true;
+        // update the menu in case of a locale change
+        mActivity.invalidateOptionsMenu();
         if (mPageDialogsHandler != null) {
             mPageDialogsHandler.onConfigurationChanged(config);
         }
@@ -651,18 +655,27 @@
     }
 
     void onSaveInstanceState(Bundle outState) {
-        // the default implementation requires each view to have an id. As the
-        // browser handles the state itself and it doesn't use id for the views,
-        // don't call the default implementation. Otherwise it will trigger the
-        // warning like this, "couldn't save which view has focus because the
-        // focused view XXX has no id".
-
         // Save all the tabs
-        mTabControl.saveState(outState);
-        if (!outState.isEmpty()) {
+        Bundle saveState = createSaveState();
+
+        // crash recovery manages all save & restore state
+        mCrashRecoveryHandler.writeState(saveState);
+        mSettings.setLastRunPaused(true);
+    }
+
+    /**
+     * Save the current state to outState. Does not write the state to
+     * disk.
+     * @return Bundle containing the current state of all tabs.
+     */
+    /* package */ Bundle createSaveState() {
+        Bundle saveState = new Bundle();
+        mTabControl.saveState(saveState);
+        if (!saveState.isEmpty()) {
             // Save time so that we know how old incognito tabs (if any) are.
-            outState.putSerializable("lastActiveDate", Calendar.getInstance());
+            saveState.putSerializable("lastActiveDate", Calendar.getInstance());
         }
+        return saveState;
     }
 
     void onResume() {
@@ -670,6 +683,7 @@
             Log.e(LOGTAG, "BrowserActivity is already resumed.");
             return;
         }
+        mSettings.setLastRunPaused(false);
         mActivityPaused = false;
         Tab current = mTabControl.getCurrentTab();
         if (current != null) {
@@ -829,21 +843,6 @@
     @Override
     public void onPageFinished(Tab tab) {
         mUi.onTabDataChanged(tab);
-        if (!tab.isPrivateBrowsingEnabled()
-                && !TextUtils.isEmpty(tab.getUrl())
-                && !tab.isSnapshot()) {
-            // Only update the bookmark screenshot if the user did not
-            // cancel the load early and there is not already
-            // a pending update for the tab.
-            if (tab.inForeground() && !didUserStopLoading()
-                    || !tab.inForeground()) {
-                if (!mHandler.hasMessages(UPDATE_BOOKMARK_THUMBNAIL, tab)) {
-                    mHandler.sendMessageDelayed(mHandler.obtainMessage(
-                            UPDATE_BOOKMARK_THUMBNAIL, 0, 0, tab),
-                            500);
-                }
-            }
-        }
         // pause the WebView timer and release the wake lock if it is finished
         // while BrowserActivity is in pause state.
         if (mActivityPaused && pauseWebViewTimers(tab)) {
@@ -875,6 +874,21 @@
             if (tab.inPageLoad()) {
                 updateInLoadMenuItems(mCachedMenu, tab);
             }
+            if (!tab.isPrivateBrowsingEnabled()
+                    && !TextUtils.isEmpty(tab.getUrl())
+                    && !tab.isSnapshot()) {
+                // Only update the bookmark screenshot if the user did not
+                // cancel the load early and there is not already
+                // a pending update for the tab.
+                if (tab.inForeground() && !didUserStopLoading()
+                        || !tab.inForeground()) {
+                    if (!mHandler.hasMessages(UPDATE_BOOKMARK_THUMBNAIL, tab)) {
+                        mHandler.sendMessageDelayed(mHandler.obtainMessage(
+                                UPDATE_BOOKMARK_THUMBNAIL, 0, 0, tab),
+                                500);
+                    }
+                }
+            }
         } else {
             if (!tab.inPageLoad()) {
                 // onPageFinished may have already been called but a subframe is
@@ -1282,6 +1296,7 @@
 
         // Show the correct menu group
         final String extra = result.getExtra();
+        if (extra == null) return;
         menu.setGroupVisible(R.id.PHONE_MENU,
                 type == WebView.HitTestResult.PHONE_TYPE);
         menu.setGroupVisible(R.id.EMAIL_MENU,
@@ -1388,8 +1403,20 @@
                 }
                 // otherwise fall through to handle image part
             case WebView.HitTestResult.IMAGE_TYPE:
+                MenuItem shareItem = menu.findItem(R.id.share_link_context_menu_id);
+                shareItem.setVisible(type == WebView.HitTestResult.IMAGE_TYPE);
                 if (type == WebView.HitTestResult.IMAGE_TYPE) {
                     menu.setHeaderTitle(extra);
+                    shareItem.setOnMenuItemClickListener(
+                            new MenuItem.OnMenuItemClickListener() {
+                                @Override
+                                public boolean onMenuItemClick(MenuItem item) {
+                                    sharePage(mActivity, null, extra, null,
+                                    null);
+                                    return true;
+                                }
+                            }
+                        );
                 }
                 menu.findItem(R.id.view_image_context_menu_id)
                         .setOnMenuItemClickListener(new OnMenuItemClickListener() {
@@ -1509,9 +1536,6 @@
         nav.setEnabled(isNavDump);
 
         boolean showDebugSettings = mSettings.isDebugEnabled();
-        final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id);
-        counter.setVisible(showDebugSettings);
-        counter.setEnabled(showDebugSettings);
         final MenuItem uaSwitcher = menu.findItem(R.id.ua_desktop_menu_id);
         uaSwitcher.setChecked(isDesktopUa);
         menu.setGroupVisible(R.id.LIVE_MENU, isLive);
@@ -1666,10 +1690,6 @@
                 getCurrentTopWebView().debugDump();
                 break;
 
-            case R.id.dump_counters_menu_id:
-                getCurrentTopWebView().dumpV8Counters();
-                break;
-
             case R.id.zoom_in_menu_id:
                 getCurrentTopWebView().zoomIn();
                 break;
@@ -2006,7 +2026,6 @@
         }
         final String url = tab.getUrl();
         final String originalUrl = view.getOriginalUrl();
-
         if (TextUtils.isEmpty(url)) {
             return;
         }
@@ -2107,7 +2126,7 @@
                  manager.addCompletedDownload(target.getName(),
                         mActivity.getTitle().toString(), false,
                         uri.getMimeType(), target.getAbsolutePath(),
-                        (long)uri.getData().length, false);
+                        (long)uri.getData().length, true);
             } catch (IOException e) {
                 Log.e(LOGTAG, "Could not save data URL");
             } finally {
@@ -2143,7 +2162,7 @@
     }
 
     private static class SelectText implements OnMenuItemClickListener {
-        private WebView mWebView;
+        private WebViewClassic mWebView;
 
         public boolean onMenuItemClick(MenuItem item) {
             if (mWebView != null) {
@@ -2153,7 +2172,7 @@
         }
 
         public SelectText(WebView webView) {
-            mWebView = webView;
+            mWebView = WebViewClassic.fromWebView(webView);
         }
 
     }
@@ -2426,7 +2445,8 @@
         // In case the user enters nothing.
         if (url != null && url.length() != 0 && tab != null && view != null) {
             url = UrlUtils.smartUrlFilter(url);
-            if (!view.getWebViewClient().shouldOverrideUrlLoading(view, url)) {
+            if (!WebViewClassic.fromWebView(view).getWebViewClient().
+                    shouldOverrideUrlLoading(view, url)) {
                 loadUrl(tab, url);
             }
         }
@@ -2565,8 +2585,11 @@
      * returns the current tab if it can't advance
      */
     private Tab getNextTab() {
-        return mTabControl.getTab(Math.min(mTabControl.getTabCount() - 1,
-                mTabControl.getCurrentPosition() + 1));
+        int pos = mTabControl.getCurrentPosition() + 1;
+        if (pos >= mTabControl.getTabCount()) {
+            pos = 0;
+        }
+        return mTabControl.getTab(pos);
     }
 
     /**
@@ -2574,8 +2597,17 @@
      * returns the current tab if it can't advance
      */
     private Tab getPrevTab() {
-        return  mTabControl.getTab(Math.max(0,
-                mTabControl.getCurrentPosition() - 1));
+        int pos  = mTabControl.getCurrentPosition() - 1;
+        if ( pos < 0) {
+            pos = mTabControl.getTabCount() - 1;
+        }
+        return  mTabControl.getTab(pos);
+    }
+
+    boolean isMenuOrCtrlKey(int keyCode) {
+        return (KeyEvent.KEYCODE_MENU == keyCode)
+                || (KeyEvent.KEYCODE_CTRL_LEFT == keyCode)
+                || (KeyEvent.KEYCODE_CTRL_RIGHT == keyCode);
     }
 
     /**
@@ -2589,10 +2621,7 @@
         boolean noModifiers = event.hasNoModifiers();
         // Even if MENU is already held down, we need to call to super to open
         // the IME on long press.
-        if (!noModifiers
-                && ((KeyEvent.KEYCODE_MENU == keyCode)
-                        || (KeyEvent.KEYCODE_CTRL_LEFT == keyCode)
-                        || (KeyEvent.KEYCODE_CTRL_RIGHT == keyCode))) {
+        if (!noModifiers && isMenuOrCtrlKey(keyCode)) {
             mMenuIsDown = true;
             return false;
         }
@@ -2649,14 +2678,14 @@
                 break;
             case KeyEvent.KEYCODE_A:
                 if (ctrl) {
-                    webView.selectAll();
+                    WebViewClassic.fromWebView(webView).selectAll();
                     return true;
                 }
                 break;
 //          case KeyEvent.KEYCODE_B:    // menu
             case KeyEvent.KEYCODE_C:
                 if (ctrl) {
-                    webView.copySelection();
+                    WebViewClassic.fromWebView(webView).copySelection();
                     return true;
                 }
                 break;
@@ -2712,9 +2741,10 @@
     }
 
     boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (KeyEvent.KEYCODE_MENU == keyCode) {
+        if (isMenuOrCtrlKey(keyCode)) {
             mMenuIsDown = false;
-            if (event.isTracking() && !event.isCanceled()) {
+            if (KeyEvent.KEYCODE_MENU == keyCode
+                    && event.isTracking() && !event.isCanceled()) {
                 return onMenuKey();
             }
         }
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index 3202016..822e82a 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -37,8 +37,6 @@
     private static final boolean LOGV_ENABLED = Browser.LOGV_ENABLED;
     private static final String LOGTAG = "BrowserCrashRecovery";
     private static final String STATE_FILE = "browser_state.parcel";
-    private static final String RECOVERY_PREFERENCES = "browser_recovery_prefs";
-    private static final String KEY_LAST_RECOVERED = "last_recovered";
     private static final int BUFFER_SIZE = 4096;
     private static final long BACKUP_DELAY = 500; // 500ms between writes
     /* This is the duration for which we will prompt to restore
@@ -85,31 +83,8 @@
             public void handleMessage(Message msg) {
                 switch (msg.what) {
                 case MSG_WRITE_STATE:
-                    if (LOGV_ENABLED) {
-                        Log.v(LOGTAG, "Saving crash recovery state");
-                    }
-                    Parcel p = Parcel.obtain();
-                    try {
-                        Bundle state = (Bundle) msg.obj;
-                        state.writeToParcel(p, 0);
-                        File stateJournal = new File(mContext.getCacheDir(),
-                                STATE_FILE + ".journal");
-                        FileOutputStream fout = new FileOutputStream(stateJournal);
-                        fout.write(p.marshall());
-                        fout.close();
-                        File stateFile = new File(mContext.getCacheDir(),
-                                STATE_FILE);
-                        if (!stateJournal.renameTo(stateFile)) {
-                            // Failed to rename, try deleting the existing
-                            // file and try again
-                            stateFile.delete();
-                            stateJournal.renameTo(stateFile);
-                        }
-                    } catch (Throwable e) {
-                        Log.i(LOGTAG, "Failed to save persistent state", e);
-                    } finally {
-                        p.recycle();
-                    }
+                    Bundle saveState = (Bundle) msg.obj;
+                    writeState(saveState);
                     break;
                 case MSG_CLEAR_STATE:
                     if (LOGV_ENABLED) {
@@ -142,8 +117,7 @@
         @Override
         public void run() {
             try {
-                final Bundle state = new Bundle();
-                mController.onSaveInstanceState(state);
+                final Bundle state = mController.createSaveState();
                 Message.obtain(mBackgroundHandler, MSG_WRITE_STATE, state)
                         .sendToTarget();
                 // Remove any queued up saves
@@ -162,28 +136,24 @@
     }
 
     private boolean shouldRestore() {
-        SharedPreferences prefs = mContext.getSharedPreferences(
-                RECOVERY_PREFERENCES, Context.MODE_PRIVATE);
-        long lastRecovered = prefs.getLong(KEY_LAST_RECOVERED, 0);
+        BrowserSettings browserSettings = BrowserSettings.getInstance();
+        long lastRecovered = browserSettings.getLastRecovered();
         long timeSinceLastRecover = System.currentTimeMillis() - lastRecovered;
-        if (timeSinceLastRecover > PROMPT_INTERVAL) {
-            return true;
-        }
-        return false;
+        return (timeSinceLastRecover > PROMPT_INTERVAL)
+                || browserSettings.wasLastRunPaused();
     }
 
     private void updateLastRecovered(long time) {
-        SharedPreferences prefs = mContext.getSharedPreferences(
-                RECOVERY_PREFERENCES, Context.MODE_PRIVATE);
-        prefs.edit()
-            .putLong(KEY_LAST_RECOVERED, time)
-            .apply();
+        BrowserSettings browserSettings = BrowserSettings.getInstance();
+        browserSettings.setLastRecovered(time);
     }
 
-    private Bundle loadCrashState() {
+    synchronized private Bundle loadCrashState() {
         if (!shouldRestore()) {
             return null;
         }
+        BrowserSettings browserSettings = BrowserSettings.getInstance();
+        browserSettings.setLastRunPaused(false);
         Bundle state = null;
         Parcel parcel = Parcel.obtain();
         FileInputStream fin = null;
@@ -231,7 +201,7 @@
         }
         updateLastRecovered(mRecoveryState != null
                 ? System.currentTimeMillis() : 0);
-        mController.doStart(mRecoveryState, intent, true);
+        mController.doStart(mRecoveryState, intent);
         mRecoveryState = null;
     }
 
@@ -245,4 +215,35 @@
         mBackgroundHandler.sendEmptyMessage(MSG_PRELOAD_STATE);
     }
 
-}
+    /**
+     * Writes the crash recovery state to a file synchronously.
+     * Errors are swallowed, but logged.
+     * @param state The state to write out
+     */
+    synchronized void writeState(Bundle state) {
+        if (LOGV_ENABLED) {
+            Log.v(LOGTAG, "Saving crash recovery state");
+        }
+        Parcel p = Parcel.obtain();
+        try {
+            state.writeToParcel(p, 0);
+            File stateJournal = new File(mContext.getCacheDir(),
+                    STATE_FILE + ".journal");
+            FileOutputStream fout = new FileOutputStream(stateJournal);
+            fout.write(p.marshall());
+            fout.close();
+            File stateFile = new File(mContext.getCacheDir(),
+                    STATE_FILE);
+            if (!stateJournal.renameTo(stateFile)) {
+                // Failed to rename, try deleting the existing
+                // file and try again
+                stateFile.delete();
+                stateJournal.renameTo(stateFile);
+            }
+        } catch (Throwable e) {
+            Log.i(LOGTAG, "Failed to save persistent state", e);
+        } finally {
+            p.recycle();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index e5ddb47..ecd4545 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -197,15 +197,15 @@
                 if (!urlData.isEmpty()
                         && urlData.mUrl.startsWith("about:debug")) {
                     if ("about:debug.dom".equals(urlData.mUrl)) {
-                        current.getWebView().dumpDomTree(false);
+                        current.getWebViewClassic().dumpDomTree(false);
                     } else if ("about:debug.dom.file".equals(urlData.mUrl)) {
-                        current.getWebView().dumpDomTree(true);
+                        current.getWebViewClassic().dumpDomTree(true);
                     } else if ("about:debug.render".equals(urlData.mUrl)) {
-                        current.getWebView().dumpRenderTree(false);
+                        current.getWebViewClassic().dumpRenderTree(false);
                     } else if ("about:debug.render.file".equals(urlData.mUrl)) {
-                        current.getWebView().dumpRenderTree(true);
+                        current.getWebViewClassic().dumpRenderTree(true);
                     } else if ("about:debug.display".equals(urlData.mUrl)) {
-                        current.getWebView().dumpDisplayTree();
+                        current.getWebViewClassic().dumpDisplayTree();
                     } else if ("about:debug.nav".equals(urlData.mUrl)) {
                         current.getWebView().debugDump();
                     } else {
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index 04f372a..3403fd7 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -165,9 +165,9 @@
 
     @Override
     public void onClick(View v) {
-        if (mBackButton == v) {
+        if ((mBackButton == v) && (mUiController.getCurrentTab() != null)) {
             mUiController.getCurrentTab().goBack();
-        } else if (mForwardButton == v) {
+        } else if ((mForwardButton == v)  && (mUiController.getCurrentTab() != null)) {
             mUiController.getCurrentTab().goForward();
         } else if (mStar == v) {
             Intent intent = mUiController.createBookmarkCurrentPageIntent(true);
@@ -261,7 +261,9 @@
         if (mTitleBar.isInLoad()) {
             mUiController.stopLoading();
         } else {
-            mUiController.getCurrentTopWebView().reload();
+            if (mUiController.getCurrentTopWebView() != null) {
+                mUiController.getCurrentTopWebView().reload();
+            }
         }
     }
 
diff --git a/src/com/android/browser/NetworkStateHandler.java b/src/com/android/browser/NetworkStateHandler.java
index 2fbd035..4480664 100644
--- a/src/com/android/browser/NetworkStateHandler.java
+++ b/src/com/android/browser/NetworkStateHandler.java
@@ -24,6 +24,9 @@
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
+
+import com.android.browser.BrowserSettings;
 
 /**
  * Handle network state changes
@@ -67,6 +70,7 @@
                     String subtypeName = info.getSubtypeName();
                     sendNetworkType(typeName.toLowerCase(),
                             (subtypeName != null ? subtypeName.toLowerCase() : ""));
+                    BrowserSettings.getInstance().updateConnectionType();
 
                     boolean noConnection = intent.getBooleanExtra(
                             ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
@@ -86,6 +90,7 @@
     void onResume() {
         mActivity.registerReceiver(mNetworkStateIntentReceiver,
                 mNetworkStateChangedFilter);
+        BrowserSettings.getInstance().updateConnectionType();
     }
 
     /**
@@ -110,8 +115,7 @@
     private void sendNetworkType(String type, String subtype) {
         WebView w = mController.getCurrentWebView();
         if (w != null) {
-            w.setNetworkType(type, subtype);
+            WebViewClassic.fromWebView(w).setNetworkType(type, subtype);
         }
     }
-
 }
diff --git a/src/com/android/browser/NfcHandler.java b/src/com/android/browser/NfcHandler.java
index 1b34df2..0dd8576 100644
--- a/src/com/android/browser/NfcHandler.java
+++ b/src/com/android/browser/NfcHandler.java
@@ -23,6 +23,7 @@
 import android.nfc.NfcEvent;
 import android.os.Handler;
 import android.os.Message;
+import android.util.Log;
 
 import java.util.concurrent.CountDownLatch;
 
@@ -32,6 +33,7 @@
   * Incognito tabs will not be shared over NFC.
   */
 public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback {
+    static final String TAG = "BrowserNfcHandler";
     static final int GET_PRIVATE_BROWSING_STATE_MSG = 100;
 
     final Controller mController;
@@ -94,9 +96,12 @@
 
         String currentUrl = mCurrentTab.getUrl();
         if (currentUrl != null) {
-            NdefRecord record = NdefRecord.createUri(currentUrl);
-            NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
-            return msg;
+            try {
+                return new NdefMessage(NdefRecord.createUri(currentUrl));
+            } catch (IllegalArgumentException e) {
+                Log.e(TAG, "IllegalArgumentException creating URI NdefRecord", e);
+                return null;
+            }
         } else {
             return null;
         }
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index 013eaf1..19cbfcd 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -27,6 +27,7 @@
 import android.webkit.HttpAuthHandler;
 import android.webkit.SslErrorHandler;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -296,8 +297,8 @@
                                 mSSLCertificateOnErrorHandler = null;
                                 mSSLCertificateOnErrorError = null;
 
-                                view.getWebViewClient().onReceivedSslError(
-                                                view, handler, error);
+                                WebViewClassic.fromWebView(view).getWebViewClient().
+                                        onReceivedSslError(view, handler, error);
                             }
                         })
                  .setNeutralButton(R.string.page_info_view,
@@ -324,8 +325,8 @@
                                 mSSLCertificateOnErrorHandler = null;
                                 mSSLCertificateOnErrorError = null;
 
-                                view.getWebViewClient().onReceivedSslError(
-                                                view, handler, error);
+                                WebViewClassic.fromWebView(view).getWebViewClient().
+                                        onReceivedSslError(view, handler, error);
                             }
                         })
                 .show();
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 4da0668..5afb9c4 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -38,6 +38,7 @@
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 
@@ -169,7 +170,7 @@
         } else {
             // check if title bar is already attached by animation
             if (mTitleBar.getParent() == null) {
-                view.setEmbeddedTitleBar(mTitleBar);
+                WebViewClassic.fromWebView(view).setEmbeddedTitleBar(mTitleBar);
             }
         }
         if (tab.isInVoiceSearchMode()) {
@@ -287,7 +288,7 @@
             mPieControl.attachToContainer(mContentView);
             WebView web = getWebView();
             if (web != null) {
-                web.setEmbeddedTitleBar(null);
+                WebViewClassic.fromWebView(web).setEmbeddedTitleBar(null);
             }
         } else {
             if (mPieControl != null) {
@@ -299,7 +300,7 @@
                 if ((mTitleBar != null) && (mTitleBar.getParent() != null)) {
                     ((ViewGroup) mTitleBar.getParent()).removeView(mTitleBar);
                 }
-                web.setEmbeddedTitleBar(mTitleBar);
+                WebViewClassic.fromWebView(web).setEmbeddedTitleBar(mTitleBar);
             }
             setTitleGravity(Gravity.NO_GRAVITY);
         }
@@ -428,13 +429,15 @@
             mAnimScreen = new AnimScreen(mActivity);
         }
         mAnimScreen.set(tab.getScreenshot());
-        mCustomViewContainer.addView(mAnimScreen.mMain, COVER_SCREEN_PARAMS);
+        if (mAnimScreen.mMain.getParent() == null) {
+            mCustomViewContainer.addView(mAnimScreen.mMain, COVER_SCREEN_PARAMS);
+        }
         mAnimScreen.mMain.layout(0, 0, mContentView.getWidth(),
                 mContentView.getHeight());
         mNavScreen.mScroller.finishScroller();
         ImageView target = tabview.mImage;
         int toLeft = 0;
-        int toTop = getTitleBar().getHeight();
+        int toTop = (tab.getWebView() != null) ? tab.getWebView().getVisibleTitleHeight() : 0;
         int toRight = mContentView.getWidth();
         int width = target.getDrawable().getIntrinsicWidth();
         int height = target.getDrawable().getIntrinsicHeight();
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index ecab008..ff42aaf 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -102,6 +102,20 @@
     // Keys for bandwidth_preferences.xml
     // ----------------------
     static final String PREF_DATA_PRELOAD = "preload_when";
+    static final String PREF_LINK_PREFETCH = "link_prefetch_when";
     static final String PREF_LOAD_IMAGES = "load_images";
 
+    // ----------------------
+    // Keys for browser recovery
+    // ----------------------
+    /**
+     * The last time recovery was started as System.currentTimeMillis.
+     * 0 if not set.
+     */
+    static final String KEY_LAST_RECOVERED = "last_recovered";
+
+    /**
+     * Key for whether or not the last run was paused.
+     */
+    static final String KEY_LAST_RUN_PAUSED = "last_paused";
 }
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
index 4ffe6b4..0b2956f 100644
--- a/src/com/android/browser/PreloadedTabControl.java
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -62,12 +62,12 @@
     }
 
     public void setQuery(String query) {
-        maybeSetQuery(query, mTab.getWebView().getSearchBox());
+        maybeSetQuery(query, mTab.getWebViewClassic().getSearchBox());
     }
 
     public boolean searchBoxSubmit(final String query,
             final String fallbackUrl, final Map<String, String> fallbackHeaders) {
-        final SearchBox sb = mTab.getWebView().getSearchBox();
+        final SearchBox sb = mTab.getWebViewClassic().getSearchBox();
         if (sb == null) {
             // no searchbox, cannot submit. Fallback to regular tab creation
             if (LOGD_ENABLED) Log.d(LOGTAG, "No searchbox, cannot submit query");
@@ -106,7 +106,7 @@
     }
 
     public void searchBoxCancel() {
-        SearchBox sb = mTab.getWebView().getSearchBox();
+        SearchBox sb = mTab.getWebViewClassic().getSearchBox();
         if (sb != null) {
             mLastQuery = null;
             sb.oncancel(new SearchBox.SearchBoxListener(){
diff --git a/src/com/android/browser/SnapshotTab.java b/src/com/android/browser/SnapshotTab.java
index d9c71f0..f58f88b 100644
--- a/src/com/android/browser/SnapshotTab.java
+++ b/src/com/android/browser/SnapshotTab.java
@@ -25,6 +25,7 @@
 import android.os.Bundle;
 import android.util.Log;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 
 import com.android.browser.provider.SnapshotProvider.Snapshots;
 
@@ -121,7 +122,7 @@
     public void loadUrl(String url, Map<String, String> headers) {
         if (!mIsLive) {
             mIsLive = true;
-            getWebView().clearViewState();
+            getWebViewClassic().clearViewState();
         }
         super.loadUrl(url, headers);
     }
@@ -185,7 +186,7 @@
                         mTab.mCurrentState.mFavicon = BitmapFactory
                                 .decodeByteArray(favicon, 0, favicon.length);
                     }
-                    WebView web = mTab.getWebView();
+                    WebViewClassic web = mTab.getWebViewClassic();
                     if (web != null) {
                         byte[] data = result.getBlob(4);
                         ByteArrayInputStream bis = new ByteArrayInputStream(data);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 0abc86b..acccb31 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -64,6 +64,7 @@
 import android.webkit.WebResourceResponse;
 import android.webkit.WebStorage;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 import android.webkit.WebView.PictureListener;
 import android.webkit.WebViewClient;
 import android.widget.CheckBox;
@@ -610,11 +611,6 @@
 
         @Override
         public void onPageFinished(WebView view, String url) {
-            if (!mInPageLoad) {
-                // In page navigation links (www.something.com#footer) will
-                // trigger an onPageFinished which we don't care about.
-                return;
-            }
             if (!isPrivateBrowsingEnabled()) {
                 LogTag.logPageFinishedLoading(
                         url, SystemClock.uptimeMillis() - mLoadStartTime);
@@ -1506,11 +1502,15 @@
         return mId;
     }
 
+    void setWebView(WebView w) {
+        setWebView(w, true);
+    }
+
     /**
      * Sets the WebView for this tab, correctly removing the old WebView from
      * the container view.
      */
-    void setWebView(WebView w) {
+    void setWebView(WebView w, boolean restore) {
         if (mMainView == w) {
             return;
         }
@@ -1542,12 +1542,13 @@
             // does a redirect after a period of time. The user could have
             // switched to another tab while waiting for the download to start.
             mMainView.setDownloadListener(mDownloadListener);
-            mMainView.setWebBackForwardListClient(mWebBackForwardListClient);
+            getWebViewClassic().setWebBackForwardListClient(mWebBackForwardListClient);
             TabControl tc = mWebViewController.getTabControl();
             if (tc != null && tc.getOnThumbnailUpdatedListener() != null) {
                 mMainView.setPictureListener(this);
             }
-            if (mSavedState != null) {
+            if (restore && (mSavedState != null)) {
+                restoreUserAgent();
                 WebBackForwardList restoredState
                         = mMainView.restoreState(mSavedState);
                 if (restoredState == null || restoredState.getSize() == 0) {
@@ -1566,7 +1567,7 @@
         if (mMainView != null) {
             dismissSubWindow();
             // Make sure the embedded title bar isn't still attached
-            mMainView.setEmbeddedTitleBar(null);
+            getWebViewClassic().setEmbeddedTitleBar(null);
             // save the WebView to call destroy() after detach it from the tab
             WebView webView = mMainView;
             setWebView(null);
@@ -1779,6 +1780,15 @@
         return mMainView;
     }
 
+    /**
+     * Return the underlying WebViewClassic implementation. As with getWebView,
+     * this maybe null for background tabs.
+     * @return The main WebView of this tab.
+     */
+    WebViewClassic getWebViewClassic() {
+        return WebViewClassic.fromWebView(mMainView);
+    }
+
     void setViewContainer(View container) {
         mContainer = container;
     }
@@ -2001,10 +2011,7 @@
         mId = b.getLong(ID);
         mAppId = b.getString(APPID);
         mCloseOnBack = b.getBoolean(CLOSEFLAG);
-        if (b.getBoolean(USERAGENT)
-                != mSettings.hasDesktopUseragent(getWebView())) {
-            mSettings.toggleDesktopUseragent(getWebView());
-        }
+        restoreUserAgent();
         String url = b.getString(CURRURL);
         String title = b.getString(CURRTITLE);
         boolean incognito = b.getBoolean(INCOGNITO);
@@ -2017,6 +2024,16 @@
         }
     }
 
+    private void restoreUserAgent() {
+        if (mMainView == null || mSavedState == null) {
+            return;
+        }
+        if (mSavedState.getBoolean(USERAGENT)
+                != mSettings.hasDesktopUseragent(mMainView)) {
+            mSettings.toggleDesktopUseragent(mMainView);
+        }
+    }
+
     public void updateBookmarkedStatus() {
         mDataController.queryBookmarkStatus(getUrl(), mIsBookmarkCallback);
     }
@@ -2047,7 +2064,7 @@
         SnapshotByteArrayOutputStream bos = new SnapshotByteArrayOutputStream();
         try {
             GZIPOutputStream stream = new GZIPOutputStream(bos);
-            if (!mMainView.saveViewState(stream)) {
+            if (!getWebViewClassic().saveViewState(stream)) {
                 return null;
             }
             stream.flush();
@@ -2061,7 +2078,7 @@
         values.put(Snapshots.TITLE, mCurrentState.mTitle);
         values.put(Snapshots.URL, mCurrentState.mUrl);
         values.put(Snapshots.VIEWSTATE, data);
-        values.put(Snapshots.BACKGROUND, mMainView.getPageBackgroundColor());
+        values.put(Snapshots.BACKGROUND, getWebViewClassic().getPageBackgroundColor());
         values.put(Snapshots.DATE_CREATED, System.currentTimeMillis());
         values.put(Snapshots.FAVICON, compressBitmap(getFavicon()));
         Bitmap screenshot = Controller.createScreenshot(mMainView,
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index d549ac3..bd17c74 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -31,10 +31,7 @@
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.Shader;
-import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
-import android.graphics.drawable.PaintDrawable;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -253,7 +250,6 @@
         ImageView mLock;
         ImageView mClose;
         boolean mSelected;
-        boolean mInLoad;
         Path mPath;
         Path mFocusPath;
         int[] mWindowPos;
@@ -281,7 +277,6 @@
             mIncognito = mTabContent.findViewById(R.id.incognito);
             mSnapshot = mTabContent.findViewById(R.id.snapshot);
             mSelected = false;
-            mInLoad = false;
             // update the status
             updateFromTab();
         }
@@ -299,7 +294,6 @@
                 displayTitle = mTab.getUrl();
             }
             setDisplayTitle(displayTitle);
-            setProgress(mTab.getLoadProgress());
             if (mTab.getFavicon() != null) {
                 setFavicon(mUi.getFaviconDrawable(mTab.getFavicon()));
             }
@@ -352,16 +346,6 @@
             }
         }
 
-        void setProgress(int newProgress) {
-            if (newProgress >= PROGRESS_MAX) {
-                mInLoad = false;
-            } else {
-                if (!mInLoad && getWindowToken() != null) {
-                    mInLoad = true;
-                }
-            }
-        }
-
         private void closeTab() {
             if (mTab == mTabControl.getCurrentTab()) {
                 mUiController.closeCurrentTab();
@@ -503,10 +487,6 @@
 
     public void onSetActiveTab(Tab tab) {
         mTabs.setSelectedTab(mTabControl.getTabPosition(tab));
-        TabView tv = mTabMap.get(tab);
-        if (tv != null) {
-            tv.setProgress(tv.mTab.getLoadProgress());
-        }
     }
 
     public void onFavicon(Tab tab, Bitmap favicon) {
@@ -521,13 +501,6 @@
         animateTabIn(tab, tv);
     }
 
-    public void onProgress(Tab tab, int progress) {
-        TabView tv = mTabMap.get(tab);
-        if (tv != null) {
-            tv.setProgress(progress);
-        }
-    }
-
     public void onRemoveTab(Tab tab) {
         TabView tv = mTabMap.get(tab);
         if (tv != null) {
@@ -550,9 +523,9 @@
     }
 
     private boolean isLoading() {
-        TabView tv = mTabMap.get(mTabControl.getCurrentTab());
-        if (tv != null) {
-            return tv.mInLoad;
+        Tab tab = mTabControl.getCurrentTab();
+        if (tab != null) {
+            return tab.inPageLoad();
         } else {
             return false;
         }
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 0668b74..993cd11 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -613,7 +613,7 @@
         }
         // Create a new WebView. If this tab is the current tab, we need to put
         // back all the clients so force it to be the current tab.
-        t.setWebView(createNewWebView());
+        t.setWebView(createNewWebView(), false);
         if (getCurrentTab() == t) {
             setCurrentTab(t, true);
         }
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index c828df4..46149aa 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -36,6 +36,7 @@
 import android.view.ViewGroup;
 import android.webkit.WebChromeClient.CustomViewCallback;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 
 import java.util.List;
 
@@ -93,7 +94,7 @@
             mPieControl.attachToContainer(mContentView);
             WebView web = getWebView();
             if (web != null) {
-                web.setEmbeddedTitleBar(null);
+                WebViewClassic.fromWebView(web).setEmbeddedTitleBar(null);
 
             }
         } else {
@@ -107,7 +108,7 @@
                     ViewGroup p = (ViewGroup) mTitleBar.getParent();
                     p.removeView(mTitleBar);
                 }
-                web.setEmbeddedTitleBar(mTitleBar);
+                WebViewClassic.fromWebView(web).setEmbeddedTitleBar(mTitleBar);
             }
             setTitleGravity(Gravity.NO_GRAVITY);
         }
@@ -133,6 +134,7 @@
     public void onResume() {
         super.onResume();
         mNavBar.clearCompletions();
+        checkTabCount();
     }
 
     @Override
@@ -143,7 +145,7 @@
     void stopWebViewScrolling() {
         BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView();
         if (web != null) {
-            web.stopScroll();
+            WebViewClassic.fromWebView(web).stopScroll();
         }
     }
 
@@ -162,9 +164,15 @@
     @Override
     public void onProgressChanged(Tab tab) {
         int progress = tab.getLoadProgress();
-        mTabBar.onProgress(tab, progress);
         if (tab.inForeground()) {
             mTitleBar.setProgress(progress);
+            if (mUseQuickControls) {
+                if (progress == 100) {
+                    mTitleBar.setShowProgressOnly(false);
+                } else if (!mTitleBar.isEditingUrl()) {
+                    mTitleBar.setShowProgressOnly(true);
+                }
+            }
         }
     }
 
@@ -195,7 +203,7 @@
         } else {
             // check if title bar is already attached by animation
             if (mTitleBar.getParent() == null) {
-                view.setEmbeddedTitleBar(mTitleBar);
+                WebViewClassic.fromWebView(view).setEmbeddedTitleBar(mTitleBar);
             }
         }
         mTabBar.onSetActiveTab(tab);
diff --git a/src/com/android/browser/homepages/HomeProvider.java b/src/com/android/browser/homepages/HomeProvider.java
index 98fcfbe..49ae694 100644
--- a/src/com/android/browser/homepages/HomeProvider.java
+++ b/src/com/android/browser/homepages/HomeProvider.java
@@ -16,8 +16,6 @@
  */

 package com.android.browser.homepages;

 

-import com.android.browser.BrowserSettings;

-

 import android.content.ContentProvider;

 import android.content.ContentValues;

 import android.content.Context;

@@ -28,8 +26,13 @@
 import android.util.Log;

 import android.webkit.WebResourceResponse;

 

+import com.android.browser.BrowserSettings;

+

+import java.io.File;

 import java.io.IOException;

 import java.io.InputStream;

+import java.io.PipedInputStream;

+import java.io.PipedOutputStream;

 

 public class HomeProvider extends ContentProvider {

 

@@ -95,8 +98,27 @@
                     return new WebResourceResponse("text/html", "utf-8", ins);

                 }

             }

+            boolean listFiles = BrowserSettings.getInstance().isDebugEnabled();

+            if (listFiles && interceptFile(url)) {

+                PipedInputStream ins = new PipedInputStream();

+                PipedOutputStream outs = new PipedOutputStream(ins);

+                new RequestHandler(context, Uri.parse(url), outs).start();

+                return new WebResourceResponse("text/html", "utf-8", ins);

+            }

         } catch (Exception e) {}

         return null;

     }

 

+    private static boolean interceptFile(String url) {

+        if (!url.startsWith("file:///")) {

+            return false;

+        }

+        String fpath = url.substring(7);

+        File f = new File(fpath);

+        if (!f.isDirectory()) {

+            return false;

+        }

+        return true;

+    }

+

 }

diff --git a/src/com/android/browser/homepages/RequestHandler.java b/src/com/android/browser/homepages/RequestHandler.java
index defda61..b3a03b9 100644
--- a/src/com/android/browser/homepages/RequestHandler.java
+++ b/src/com/android/browser/homepages/RequestHandler.java
@@ -20,17 +20,23 @@
 import android.content.UriMatcher;

 import android.content.res.Resources;

 import android.database.Cursor;

+import android.database.MergeCursor;

 import android.net.Uri;

-import android.provider.Browser;

+import android.provider.BrowserContract.Bookmarks;

+import android.provider.BrowserContract.History;

 import android.text.TextUtils;

 import android.util.Base64;

 import android.util.Log;

 

 import com.android.browser.R;

+import com.android.browser.homepages.Template.ListEntityIterator;

 

+import java.io.File;

 import java.io.IOException;

 import java.io.InputStream;

 import java.io.OutputStream;

+import java.text.DateFormat;

+import java.text.DecimalFormat;

 import java.util.regex.Matcher;

 import java.util.regex.Pattern;

 

@@ -69,6 +75,10 @@
     }

 

     void doHandleRequest() throws IOException {

+        if ("file".equals(mUri.getScheme())) {

+            writeFolderIndex();

+            return;

+        }

         int match = sUriMatcher.match(mUri);

         switch (match) {

         case INDEX:

@@ -84,11 +94,33 @@
         return TextUtils.htmlEncode(s).getBytes();

     }

 

+    // We can reuse this for both History and Bookmarks queries because the

+    // columns defined actually belong to the CommonColumn and ImageColumn

+    // interfaces that both History and Bookmarks implement

+    private static final String[] PROJECTION = new String[] {

+        History.URL,

+        History.TITLE,

+        History.THUMBNAIL

+    };

+    private static final String SELECTION = History.URL

+            + " NOT LIKE 'content:%' AND " + History.THUMBNAIL + " IS NOT NULL";

     void writeTemplatedIndex() throws IOException {

         Template t = Template.getCachedTemplate(mContext, R.raw.most_visited);

-        Cursor cursor = mContext.getContentResolver().query(Browser.BOOKMARKS_URI,

-                new String[] { "DISTINCT url", "title", "thumbnail" },

-                "(visits > 0 OR bookmark = 1) AND url NOT LIKE 'content:%' AND thumbnail IS NOT NULL", null, "visits DESC LIMIT 12");

+        Cursor historyResults = mContext.getContentResolver().query(

+                History.CONTENT_URI, PROJECTION, SELECTION,

+                null, History.VISITS + " DESC LIMIT 12");

+        Cursor cursor = historyResults;

+        if (cursor.getCount() < 12) {

+            Cursor bookmarkResults = mContext.getContentResolver().query(

+                    Bookmarks.CONTENT_URI, PROJECTION, SELECTION,

+                    null, Bookmarks.DATE_CREATED + " DESC LIMIT 12");

+            cursor = new MergeCursor(new Cursor[] { historyResults, bookmarkResults }) {

+                @Override

+                public int getCount() {

+                    return Math.min(12, super.getCount());

+                }

+            };

+        }

 

         t.assignLoop("most_visited", new Template.CursorListEntityWrapper(cursor) {

             @Override

@@ -108,6 +140,71 @@
         t.write(mOutput);

     }

 

+    void writeFolderIndex() throws IOException {

+        File f = new File(mUri.getPath());

+        final File[] files = f.listFiles();

+        Template t = Template.getCachedTemplate(mContext, R.raw.folder_view);

+        t.assign("path", mUri.getPath());

+        t.assign("parent_url", f.getParent() != null ? f.getParent() : f.getPath());

+        t.assignLoop("files", new ListEntityIterator() {

+            int index = -1;

+

+            @Override

+            public void writeValue(OutputStream stream, String key) throws IOException {

+                File f = files[index];

+                if ("name".equals(key)) {

+                    stream.write(f.getName().getBytes());

+                }

+                if ("url".equals(key)) {

+                    stream.write(("file://" + f.getAbsolutePath()).getBytes());

+                }

+                if ("type".equals(key)) {

+                    stream.write((f.isDirectory() ? "dir" : "file").getBytes());

+                }

+                if ("size".equals(key)) {

+                    if (f.isFile()) {

+                        stream.write(readableFileSize(f.length()).getBytes());

+                    }

+                }

+                if ("last_modified".equals(key)) {

+                    String date = DateFormat.getDateTimeInstance(

+                            DateFormat.SHORT, DateFormat.SHORT)

+                            .format(f.lastModified());

+                    stream.write(date.getBytes());

+                }

+                if ("alt".equals(key)) {

+                    if (index % 2 == 0) {

+                        stream.write("alt".getBytes());

+                    }

+                }

+            }

+

+            @Override

+            public ListEntityIterator getListIterator(String key) {

+                return null;

+            }

+

+            @Override

+            public void reset() {

+                index = -1;

+            }

+

+            @Override

+            public boolean moveToNext() {

+                return (++index) < files.length;

+            }

+        });

+        t.write(mOutput);

+    }

+

+    static String readableFileSize(long size) {

+        if(size <= 0) return "0";

+        final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };

+        int digitGroups = (int) (Math.log10(size) / Math.log10(1024));

+        return new DecimalFormat("#,##0.#").format(

+                size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];

+    }

+

     String getUriResourcePath() {

         final Pattern pattern = Pattern.compile("/?res/([\\w/]+)");

         Matcher m = pattern.matcher(mUri.getPath());

diff --git a/src/com/android/browser/preferences/BandwidthPreferencesFragment.java b/src/com/android/browser/preferences/BandwidthPreferencesFragment.java
index 2c147cc..0cb064a 100644
--- a/src/com/android/browser/preferences/BandwidthPreferencesFragment.java
+++ b/src/com/android/browser/preferences/BandwidthPreferencesFragment.java
@@ -16,9 +16,11 @@
 
 package com.android.browser.preferences;
 
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.ListPreference;
 import android.preference.PreferenceFragment;
+import android.preference.PreferenceScreen;
 
 import com.android.browser.BrowserSettings;
 import com.android.browser.PreferenceKeys;
@@ -38,15 +40,24 @@
     @Override
     public void onResume() {
         super.onResume();
-        if (!getPreferenceScreen().getSharedPreferences()
-                .contains(PreferenceKeys.PREF_DATA_PRELOAD)) {
+        PreferenceScreen prefScreen = getPreferenceScreen();
+        SharedPreferences sharedPrefs = prefScreen.getSharedPreferences();
+        if (!sharedPrefs.contains(PreferenceKeys.PREF_DATA_PRELOAD)) {
             // set default value for preload setting
-            ListPreference preload = (ListPreference) getPreferenceScreen().findPreference(
+            ListPreference preload = (ListPreference) prefScreen.findPreference(
                     PreferenceKeys.PREF_DATA_PRELOAD);
             if (preload != null) {
                 preload.setValue(BrowserSettings.getInstance().getDefaultPreloadSetting());
             }
         }
+        if (!sharedPrefs.contains(PreferenceKeys.PREF_LINK_PREFETCH)) {
+            // set default value for link prefetch setting
+            ListPreference prefetch = (ListPreference) prefScreen.findPreference(
+                    PreferenceKeys.PREF_LINK_PREFETCH);
+            if (prefetch != null) {
+                prefetch.setValue(BrowserSettings.getInstance().getDefaultLinkPrefetchSetting());
+            }
+        }
     }
 
 }
diff --git a/src/com/android/browser/preferences/FontSizePreview.java b/src/com/android/browser/preferences/FontSizePreview.java
index 91ecb00..8825f3d 100644
--- a/src/com/android/browser/preferences/FontSizePreview.java
+++ b/src/com/android/browser/preferences/FontSizePreview.java
@@ -54,7 +54,7 @@
     }
 
     @Override
-    protected void updatePreview() {
+    protected void updatePreview(boolean forceReload) {
         if (mWebView == null) return;
 
         WebSettings ws = mWebView.getSettings();
diff --git a/src/com/android/browser/preferences/InvertedContrastPreview.java b/src/com/android/browser/preferences/InvertedContrastPreview.java
index c290daf..ed6eadf 100644
--- a/src/com/android/browser/preferences/InvertedContrastPreview.java
+++ b/src/com/android/browser/preferences/InvertedContrastPreview.java
@@ -19,7 +19,8 @@
 import android.content.Context;
 import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.webkit.WebSettings;
+import android.webkit.WebSettingsClassic;
+import android.webkit.WebViewClassic;
 
 import com.android.browser.BrowserSettings;
 import com.android.browser.WebViewProperties;
@@ -73,16 +74,18 @@
     }
 
     @Override
-    protected void updatePreview() {
+    protected void updatePreview(boolean forceReload) {
         if (mWebView == null) return;
 
-        WebSettings ws = mWebView.getSettings();
+        WebSettingsClassic ws = WebViewClassic.fromWebView(mWebView).getSettings();
         BrowserSettings bs = BrowserSettings.getInstance();
         ws.setProperty(WebViewProperties.gfxInvertedScreen,
                 bs.useInvertedRendering() ? "true" : "false");
         ws.setProperty(WebViewProperties.gfxInvertedScreenContrast,
                 Float.toString(bs.getInvertedContrast()));
-        mWebView.loadData(mHtml, "text/html", null);
+        if (forceReload) {
+            mWebView.loadData(mHtml, "text/html", null);
+        }
     }
 
 }
diff --git a/src/com/android/browser/preferences/WebViewPreview.java b/src/com/android/browser/preferences/WebViewPreview.java
index a3c19a4..1f938f0 100644
--- a/src/com/android/browser/preferences/WebViewPreview.java
+++ b/src/com/android/browser/preferences/WebViewPreview.java
@@ -53,7 +53,7 @@
         setLayoutResource(R.layout.webview_preview);
     }
 
-    protected abstract void updatePreview();
+    protected abstract void updatePreview(boolean forceReload);
 
     protected void setupWebView(WebView view) {}
 
@@ -77,7 +77,7 @@
     protected void onBindView(View view) {
         super.onBindView(view);
         mWebView = (WebView) view.findViewById(R.id.webview);
-        updatePreview();
+        updatePreview(true);
     }
 
     @Override
@@ -95,7 +95,7 @@
     @Override
     public void onSharedPreferenceChanged(
             SharedPreferences sharedPreferences, String key) {
-        updatePreview();
+        updatePreview(false);
     }
 
 }
diff --git a/src/com/android/browser/preferences/WebsiteSettingsFragment.java b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index 92cc62f..da06428 100644
--- a/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -75,10 +75,10 @@
         // They must be consecutive. To add a new feature, add a new FEATURE_XXX
         // variable with value equal to the current value of FEATURE_COUNT, then
         // increment FEATURE_COUNT.
-        private final static int FEATURE_WEB_STORAGE = 0;
-        private final static int FEATURE_GEOLOCATION = 1;
+        final static int FEATURE_WEB_STORAGE = 0;
+        final static int FEATURE_GEOLOCATION = 1;
         // The number of features available.
-        private final static int FEATURE_COUNT = 2;
+        final static int FEATURE_COUNT = 2;
 
         public Site(String origin) {
             mOrigin = origin;
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 06ace20..6121abc 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -386,6 +386,7 @@
         static final int DATABASE_VERSION = 32;
         public DatabaseHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
+            setWriteAheadLoggingEnabled(true);
         }
 
         @Override
@@ -624,7 +625,6 @@
         }
 
         public void onOpen(SQLiteDatabase db) {
-            db.enableWriteAheadLogging();
             mSyncHelper.onDatabaseOpened(db);
         }
 
@@ -697,6 +697,8 @@
                     }
                 }
             } catch (ArrayIndexOutOfBoundsException e) {
+            } finally {
+                preloads.recycle();
             }
         }
 
diff --git a/src/com/android/browser/view/BasePieView.java b/src/com/android/browser/view/BasePieView.java
index ec02e3a..b9178be 100644
--- a/src/com/android/browser/view/BasePieView.java
+++ b/src/com/android/browser/view/BasePieView.java
@@ -109,7 +109,8 @@
      * needs to set top, left, width, height
      */
     @Override
-    public void layout(int anchorX, int anchorY, boolean left, float angle) {
+    public void layout(int anchorX, int anchorY, boolean left, float angle,
+            int parentHeight) {
         if (mListener != null) {
             mListener.onLayout(anchorX, anchorY, left);
         }
diff --git a/src/com/android/browser/view/PieListView.java b/src/com/android/browser/view/PieListView.java
index 04b512b..1043fc7 100644
--- a/src/com/android/browser/view/PieListView.java
+++ b/src/com/android/browser/view/PieListView.java
@@ -39,13 +39,17 @@
      * this will be called before the first draw call
      */
     @Override
-    public void layout(int anchorX, int anchorY, boolean left, float angle) {
-        super.layout(anchorX, anchorY, left, angle);
+    public void layout(int anchorX, int anchorY, boolean left, float angle,
+            int pHeight) {
+        super.layout(anchorX, anchorY, left, angle, pHeight);
         buildViews();
         mWidth = mChildWidth;
         mHeight = mChildHeight * mAdapter.getCount();
         mLeft = anchorX + (left ? 0 : - mChildWidth);
-        mTop = anchorY - mHeight / 2;
+        mTop = Math.max(anchorY - mHeight / 2, 0);
+        if (mTop + mHeight > pHeight) {
+            mTop = pHeight - mHeight;
+        }
         if (mViews != null) {
             layoutChildrenLinear();
         }
diff --git a/src/com/android/browser/view/PieMenu.java b/src/com/android/browser/view/PieMenu.java
index 536ac92..7f8dd6b 100644
--- a/src/com/android/browser/view/PieMenu.java
+++ b/src/com/android/browser/view/PieMenu.java
@@ -60,7 +60,8 @@
 
         public void setLayoutListener(OnLayoutListener l);
 
-        public void layout(int anchorX, int anchorY, boolean onleft, float angle);
+        public void layout(int anchorX, int anchorY, boolean onleft, float angle,
+                int parentHeight);
 
         public void draw(Canvas c);
 
@@ -383,7 +384,7 @@
     }
 
     private void layoutPieView(PieView pv, int x, int y, float angle) {
-        pv.layout(x, y, onTheLeft(), angle);
+        pv.layout(x, y, onTheLeft(), angle, getHeight());
     }
 
     /**
diff --git a/src/com/android/browser/view/PieStackView.java b/src/com/android/browser/view/PieStackView.java
index ca641f9..16d42cb 100644
--- a/src/com/android/browser/view/PieStackView.java
+++ b/src/com/android/browser/view/PieStackView.java
@@ -59,8 +59,9 @@
      * this will be called before the first draw call
      */
     @Override
-    public void layout(int anchorX, int anchorY, boolean left, float angle) {
-        super.layout(anchorX, anchorY, left, angle);
+    public void layout(int anchorX, int anchorY, boolean left, float angle,
+            int pHeight) {
+        super.layout(anchorX, anchorY, left, angle, pHeight);
         buildViews();
         mWidth = mChildWidth;
         mHeight = mChildHeight + (mViews.size() - 1) * mMinHeight;
@@ -84,7 +85,7 @@
 
     @Override
     public void draw(Canvas canvas) {
-        if (mViews != null) {
+        if ((mViews != null) && (mCurrent > -1)) {
             final int n = mViews.size();
             for (int i = 0; i < mCurrent; i++) {
                 drawView(mViews.get(i), canvas);
diff --git a/tests/assets/bindings_test.html b/tests/assets/bindings_test.html
deleted file mode 100755
index 7218f58..0000000
--- a/tests/assets/bindings_test.html
+++ /dev/null
@@ -1,239 +0,0 @@
-<html>
-<head>
-<script type="text/javascript">
-
-function testPrimitiveTypes() {
-  return JNIBindingsTest.testPrimitiveTypes(100, 'c', 123.34567890, 456.789, 1234567, 1234567890, 6000, true);
-}
-
-function testObjectTypes() {
-  return JNIBindingsTest.testObjectTypes("Foo", "", null, {"foo":"bar"}, {});
-}
-
-function testArray() {
-  return JNIBindingsTest.testArray([1,2,3], ['d', 'o', 'g'], [1.2, 2.3, 3.4], [4.5,5.6,6.7], [1,2,3], [4,5,6], [7,8,9], [true, false]);
-}
-
-function testObjectArray() {
-  return JNIBindingsTest.testObjectArray(['Hello', 'World', '!'], [], [{"foo":"bar"}]);
-}
-
-function testObjectMembers() {
-  var foo = {"bool":true,
-             "byte":101,
-             "char":'d',
-             "double":123.456,
-             "float":456.789,
-             "int":102,
-             "long":103,
-             "short":104,
-             "string":"Hello World",
-             "array": [1,2,3],
-             "objArray":["foo", "bar", "baz"],
-             "object": {"foo":1}
-  };
-  return JNIBindingsTest.testObjectMembers(foo.bool, foo.byte, foo.char, foo.double, foo.float, foo.int, foo.long, foo.short, foo.string, foo.array, foo.objArray, foo.object);
-}
-
-function testJSPrimitivesToStringsInJava() {
-    return JNIBindingsTest.testJSPrimitivesToStringsInJava(123, null, 456.789, true, 'd', undefined);
-}
-
-function testJavaReturnTypes() {
-  var expectedBoolReturn = true;
-  var expectedByteReturn = 1;
-  var expectedCharReturn = 98; // 'b'; Currently bindings in JSC and V8 return chars as their ASCII equivalent.
-  var expectedDoubleReturn = 123.456;
-  var expectedFloatReturn = 456.789;
-  var expectedIntReturn = 123;
-  var expectedLongReturn = 1234;
-  var expectedShortReturn = 12345;
-  var expectedStringReturn = "Hello World!";
-
-  var returned = JNIBindingsTest.returnBool();
-  if (returned != expectedBoolReturn) {
-    appendLog("returnBool() failed: expected "+ expectedBoolReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnByte();
-  if (returned != expectedByteReturn) {
-    appendLog("returnByte() failed: expected "+ expectedByteReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnChar();
-  if (returned != expectedCharReturn) {
-    appendLog("returnChar() failed: expected "+ expectedCharReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnDouble();
-  if (returned != expectedDoubleReturn) {
-    appendLog("returnDouble() failed: expected "+ expectedDoubleReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnFloat();
-  if (Math.abs(returned - expectedFloatReturn) > 0.001) {
-    appendLog("returnFloat() failed: expected "+ expectedFloatReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnInt();
-  if (returned != expectedIntReturn) {
-    appendLog("returnInt() failed: expected "+ expectedIntReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnLong();
-  if (returned != expectedLongReturn) {
-    appendLog("returnLong() failed: expected "+ expectedLongReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnShort();
-  if (returned != expectedShortReturn) {
-    appendLog("returnShort() failed: expected "+ expectedShortReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnString();
-  if (returned != expectedStringReturn) {
-    appendLog("returnString() failed: expected "+ expectedStringReturn +", got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnNullString();
-  if (returned !== undefined) {
-    appendLog("returnNullString() failed: expected undefined, got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnObject();
-  if (returned == null) {
-    appendLog("returnObject() failed: expected non-null, got " + returned);
-    return false;
-  } else if (returned.x != undefined) {
-    // We do not support getting object properties.
-    appendLog("returnObject() failed: expected 'x' property undefined, got " + returned.x)
-    return false;
-  } else if (returned.s != undefined) {
-    // We do not support getting object properties.
-    appendLog("returnObject() failed: expected 's' property undefined, got " + returned.s);
-    return false;
-  } else if (!returned.aMethod()) {
-    appendLog("returnObject() failed: expected 'aMethod' method to return true, got " + returned.aMethod());
-    return false;
-  } else if (returned.anotherMethod() != "Hello World") {
-    appendLog("returnObject() failed: expected 'anotherMethod' to return 'Hello World' got "+ returned.anotherMethod());
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnArray();
-  if (returned != null) {
-    appendLog("returnArray() failed: expected null, got " + returned);
-    return false;
-  }
-
-  returned = JNIBindingsTest.returnVoid();
-  if (returned != null) {
-    appendLog("returnVoid() failed: expected null, got " + returned);
-    return false;
-  }
-
-  return true;
-}
-
-function getIfaceProperties() {
-  if (JNIBindingsTest.mInt != undefined) {
-    // We do not support getting object properties.
-    appendLog("getIfaceProperties() failed: expected mInt = undefined, got " + JNIBindingsTest.mInt);
-    return false;
-  }
-
-  if (JNIBindingsTest.mString != undefined) {
-    // We do not support getting object properties.
-    appendLog("getIfaceProperties() failed: expected mString = undefined, got " + JNIBindingsTest.mString);
-    return false;
-  }
-
-  return true;
-}
-
-function testParameterTypeMismatch() {
-  return JNIBindingsTest.testParameterTypeMismatch("dog");
-}
-
-function appendLog(msg) {
-  var log = document.getElementById("status");
-  log.innerHTML += "<br/>" + msg;
-}
-
-function runTests() {
-
-  // Assume that if the test isn't done after 10s that we failed.
-  window.setTimeout(function() { JNIBindingsTest.notifyComplete(); }, 10000);
-
-  if (testPrimitiveTypes()) {
-    appendLog("testPrimitiveTypes passed!");
-  } else {
-    appendLog("testPrimtiveTypes failed!");
-  }
-
-  if (testObjectTypes()) {
-    appendLog("testObjectTypes passed!");
-  } else {
-    appendLog("testObjectTypes failed!");
-  }
-
-  if (testArray()) {
-    appendLog("testArray passed!");
-  } else {
-    appendLog("testArray failed!");
-  }
-
-  if (testObjectArray()) {
-    appendLog("testObjectArray passed!");
-  } else {
-    appendLog("testObjectArray failed!");
-  }
-
-  if (testObjectMembers()) {
-    appendLog("testObjectMembers passed!");
-  } else {
-    appendLog("<br/>testObjectMembers failed!");
-  }
-
-  if (testJSPrimitivesToStringsInJava()) {
-    appendLog("testJSPrimitivesToStringsInJava passed!");
-  } else {
-    appendLog("testJSPrimitivesToStringsInJava failed!");
-  }
-
-  if (testJavaReturnTypes()) {
-    appendLog("testJavaReturnTypes passed!");
-  } else {
-    appendLog("testJavaReturnTypes failed!");
-  }
-
-  if (getIfaceProperties()) {
-    appendLog("getIfaceProperties passed!");
-  } else {
-    appendLog("getIfaceProperties failed!");
-  }
-
-  if (testParameterTypeMismatch()) {
-    appendLog("testParameterTypeMismatch passed!");
-  } else {
-    appendLog("testParameterTypeMismatch failed!");
-  }
-
-  JNIBindingsTest.notifyComplete();
-}
-</script>
-
-<body onload="runTests();">
-<p id="status">Running JNI Bindings test...</p>
-</body>
-</html>
diff --git a/tests/src/com/android/browser/JNIBindingsTest.java b/tests/src/com/android/browser/JNIBindingsTest.java
deleted file mode 100644
index ae694c9..0000000
--- a/tests/src/com/android/browser/JNIBindingsTest.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2010 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.test.AndroidTestCase;
-import android.util.Log;
-
-import java.util.Arrays;
-
-import junit.framework.AssertionFailedError;
-
-public class JNIBindingsTest extends AndroidTestCase {
-
-    private final static String LOGTAG = "JNIBindingsTest";
-    private JNIBindingsTestApp mTestApp;
-
-    public int mInt = 123;
-    public String mString = "Hello World";
-
-    public JNIBindingsTest(JNIBindingsTestApp testApp) {
-        mTestApp = testApp;
-    }
-
-    public void notifyComplete() {
-        Log.v(LOGTAG, "Completing the test.");
-        mTestApp.notifyComplete();
-    }
-
-    public void printAssertionFailed(AssertionFailedError e) {
-        Log.e(LOGTAG, "");
-        Log.e(LOGTAG, "*** ASSERTION FAILED: " + e.getMessage());
-        Log.e(LOGTAG, "*** Stack trace:");
-        StackTraceElement[] trace = e.getStackTrace();
-        for(StackTraceElement elem : trace) {
-            Log.e(LOGTAG, "***\t" + elem.toString());
-        }
-        Log.e(LOGTAG, "");
-    }
-
-    public boolean testPrimitiveTypes(byte byteParam, char charParam, double doubleParam,
-            float floatParam, int intParam, long longParam, short shortParam,
-            boolean booleanParam) {
-        byte expectedByteParam = 100;
-        char expectedCharParam = 'c';
-        double expectedDoubleParam = 123.34567890;
-        float expectedFloatParam = 456.789f;
-        int expectedIntParam = 1234567;
-        long expectedLongParam = 1234567890L;
-        short expectedShortParam = 6000;
-        boolean expectedBooleanParam = true;
-
-        try {
-            assertEquals(expectedByteParam, byteParam);
-
-            // EMULATE_JSC_BINDINGS: JSC does not pass chars correctly
-            // assertEquals(expectedCharParam, charParam);
-
-            assertEquals(expectedDoubleParam, doubleParam);
-            assertEquals(expectedFloatParam, floatParam);
-            assertEquals(expectedIntParam, intParam);
-            assertEquals(expectedLongParam, longParam);
-            assertEquals(expectedShortParam, shortParam);
-            assertEquals(expectedBooleanParam, booleanParam);
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-           return false;
-        }
-        return true;
-    }
-
-    public boolean testObjectTypes(String stringParam, String emptyString, String nullString,
-            Object objectParam, Object emptyObject) {
-        String expectedString = "Foo";
-        String expectedEmptyString = "";
-
-        try {
-            assertNotNull(stringParam);
-            assertNotNull(emptyString);
-            assertEquals(expectedString, stringParam);
-            assertEquals(expectedEmptyString, emptyString);
-            assertNull(nullString);
-            assertNull(objectParam);
-            assertNull(emptyObject);
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-            return false;
-        }
-        return true;
-    }
-
-    public boolean testArray(byte[] byteArray, char[] charArray, double[] doubleArray,
-            float[] floatArray, int[] intArray, long[] longArray, short[] shortArray,
-            boolean[] booleanArray) {
-        byte[] expectedByteArray = { 1,2,3};
-        char[] expectedCharArray = {'d', 'o', 'g'};
-        double[] expectedDoubleArray = {1.2,2.3,3.4};
-        float[] expectedFloatArray = {4.5F,5.6F,6.7F};
-        int[] expectedIntArray = {1,2,3};
-        long[] expectedLongArray = {4L,5L,6L};
-        short[] expectedShortArray = {7,8,9};
-        boolean[] expectedBooleanArray = {true, false};
-
-        try {
-            assertNotNull(byteArray);
-            assertNotNull(charArray);
-            assertNotNull(doubleArray);
-            assertNotNull(floatArray);
-            assertNotNull(intArray);
-            assertNotNull(longArray);
-            assertNotNull(shortArray);
-            assertNotNull(booleanArray);
-            assertEquals(Arrays.toString(expectedByteArray), Arrays.toString(byteArray));
-            assertEquals(Arrays.toString(expectedCharArray), Arrays.toString(charArray));
-            assertEquals(Arrays.toString(expectedDoubleArray), Arrays.toString(doubleArray));
-            assertEquals(Arrays.toString(expectedFloatArray), Arrays.toString(floatArray));
-            assertEquals(Arrays.toString(expectedIntArray), Arrays.toString(intArray));
-            assertEquals(Arrays.toString(expectedLongArray), Arrays.toString(longArray));
-            assertEquals(Arrays.toString(expectedShortArray), Arrays.toString(shortArray));
-            assertEquals(Arrays.toString(expectedBooleanArray), Arrays.toString(booleanArray));
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-            return false;
-        }
-        return true;
-    }
-
-    public boolean testObjectArray(String[] stringArray, Object[] emptyArray,
-            Object[] objectArray) {
-        String[] expectedStringArray = {"Hello", "World", "!"};
-        String expectedStringArrayClassName = "[Ljava.lang.String;";
-        Object[] expectedObjectArray = {};
-
-        try {
-            assertNotNull(stringArray);
-
-            // EMULATE_JSC_BINDINGS JSC pass null for object arrays that are not strings.
-            // Should be an empty array?
-            assertNull(emptyArray);
-            assertNull(objectArray);
-
-            assertEquals(Arrays.toString(expectedStringArray), Arrays.toString(stringArray));
-            assertEquals(expectedStringArrayClassName, stringArray.getClass().getName());
-
-            // EMULATE_JSC_BINDINGS
-            // assertEquals(Arrays.toString(expectedObjectArray), Arrays.toString(emptyArray));
-            // assertEquals(expectedObjectArrayClassName, emptyArray.getClass().getName());
-            // assertEquals(Arrays.toString(expectedObjectArray), Arrays.toString(objectArray));
-            // assertEquals(expectedStringObjectClassName, objectArray.getClass().getName());
-
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-            return false;
-        }
-        return true;
-    }
-
-    public boolean testObjectMembers(boolean boolParam, byte byteParam, char charParam,
-            double doubleParam, float floatParam, int intParam, long longParam, short shortParam,
-            String stringParam, int[] intArrayParam, String[] stringArrayParam,
-            Object objectParam) {
-        boolean expectedBoolParam = true;
-        byte expectedByteParam = 101;
-        char expectedCharParam = 'd';
-        double expectedDoubleParam = 123.456;
-        float expectedFloatParam = 456.789F;
-        int expectedIntParam = 102;
-        long expectedLongParam = 103L;
-        short expectedShortParam = 104;
-        String expectedStringParam = "Hello World";
-        int[] expectedIntArray = {1,2,3};
-        String[] expectedStringArrayParam = {"foo", "bar", "baz"};
-        String expectedStringArrayClassName = "[Ljava.lang.String;";
-
-        try {
-            assertEquals(expectedBoolParam, boolParam);
-            assertEquals(expectedByteParam, byteParam);
-
-            // EMULATE_JSC_BINDINGS: JSC does not pass chars correctly. (chars are strings in JS)
-            // assertEquals(expectedCharParam, charParam);
-
-            assertEquals(expectedDoubleParam, doubleParam);
-            assertEquals(expectedFloatParam, floatParam);
-            assertEquals(expectedIntParam, intParam);
-            assertEquals(expectedLongParam, longParam);
-            assertEquals(expectedShortParam, shortParam);
-            assertEquals(expectedStringParam, stringParam);
-            assertEquals(Arrays.toString(expectedIntArray), Arrays.toString(intArrayParam));
-            assertEquals(Arrays.toString(expectedStringArrayParam),
-                    Arrays.toString(stringArrayParam));
-            assertEquals(expectedStringArrayClassName, stringArrayParam.getClass().getName());
-            assertNull(objectParam);
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-            return false;
-        }
-        return true;
-    }
-
-    public boolean testJSPrimitivesToStringsInJava(String intParam, String nullParam,
-            String doubleParam, String booleanParam, String charParam,
-            String undefinedParam) {
-        String expectedIntParam = "123";
-        String expectedDoubleParam = "456.789";
-        String expectedBooleanParam = "true";
-        String expectedCharParam = "d";
-
-        // EMULATE_JSC_BINDINGS JSC passes "undefined" for undefined types. Should be null?
-        String expectedUndefinedParam = "undefined";
-
-        try {
-            assertNotNull(intParam);
-            assertNull(nullParam);
-            assertNotNull(doubleParam);
-            assertNotNull(booleanParam);
-            assertNotNull(charParam);
-
-            // EMULATE_JSC_BINDINGS JSC passes "undefined" for undefined types.
-            assertNotNull(undefinedParam);
-
-            assertEquals(expectedIntParam, intParam);
-            assertEquals(expectedDoubleParam, doubleParam);
-            assertEquals(expectedBooleanParam, booleanParam);
-            assertEquals(expectedCharParam, charParam);
-
-            // EMULATE_JSC_BINDINGS  JSC passes "undefined" for undefined types.
-            assertEquals(expectedUndefinedParam, undefinedParam);
-
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-            return false;
-        }
-        return true;
-    }
-
-    public boolean testParameterTypeMismatch(String[] stringArrayParam) {
-        // The JS test will pass a string, not an array to this test.
-        try {
-            assertNull(stringArrayParam);
-        } catch (AssertionFailedError e) {
-            printAssertionFailed(e);
-            return false;
-        }
-
-        return true;
-    }
-
-    public boolean returnBool() { return true; }
-    public byte returnByte() { return 1; }
-    public char returnChar() { return 'b'; }
-    public double returnDouble() { return 123.456; }
-    public float returnFloat() { return 456.789F; }
-    public int returnInt() { return 123; }
-    public long returnLong() { return 1234L; }
-    public short returnShort() { return 12345; }
-    public String returnString() { return "Hello World!"; }
-    public String returnNullString() { return null; }
-
-    public class TestObject {
-        public int x = 123;
-        public String s = "Hello World!";
-
-        public boolean aMethod() { return true; }
-        public String anotherMethod() { return "Hello World"; }
-    }
-
-    public TestObject returnObject() { return new TestObject(); }
-
-    public int[] returnArray() {
-        int[] array = {1,2,3,4,5};
-        return array;
-    }
-
-    public void returnVoid() { }
-}
diff --git a/tests/src/com/android/browser/JNIBindingsTestApp.java b/tests/src/com/android/browser/JNIBindingsTestApp.java
deleted file mode 100644
index 5d1fd0d..0000000
--- a/tests/src/com/android/browser/JNIBindingsTestApp.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2010 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.Instrumentation;
-import android.net.http.SslError;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
-import android.webkit.ClientCertRequestHandler;
-import android.webkit.JsPromptResult;
-import android.webkit.JsResult;
-import android.webkit.SslErrorHandler;
-import android.webkit.WebView;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Adds a JavaScript interface to the webview and calls functions on it to verify variables
- * are passed from JS to Java correctly.
- * To run this test, execute:
- * adb shell am instrument -w -e class com.android.browser.JNIBindingsTestApp#testJNIBindings \
- *     com.android.browser.tests/android.test.InstrumentationTestRunner
- */
-public class JNIBindingsTestApp extends ActivityInstrumentationTestCase2<BrowserActivity> {
-
-    private final static String TAG = "JNIBindingsTest";
-
-    private static final String SDCARD_BINDINGS_TEST_HTML = "/sdcard/bindings_test.html";
-
-    private static final int MSG_WEBKIT_DATA_READY = 101;
-
-    private BrowserActivity mActivity = null;
-    private Controller mController = null;
-    private Instrumentation mInst = null;
-
-    private boolean mTestDone = false;
-    private String mWebKitResult;
-
-    private String mExpectedWebKitResult = "Running JNI Bindings test...\n" +
-            "testPrimitiveTypes passed!\n" +
-            "testObjectTypes passed!\n" +
-            "testArray passed!\n" +
-            "testObjectArray passed!\n" +
-            "testObjectMembers passed!\n" +
-            "testJSPrimitivesToStringsInJava passed!\n" +
-            "testJavaReturnTypes passed!\n" +
-            "getIfaceProperties passed!\n" +
-            "testParameterTypeMismatch passed!\n";
-
-
-    private class GetWebKitDataThread extends Thread {
-        private JNIBindingsTestApp mTestApp;
-        private WebView mWebView;
-        private Handler mHandler;
-
-        GetWebKitDataThread(JNIBindingsTestApp testApp, WebView webView) {
-            mTestApp = testApp;
-            mWebView = webView;
-        }
-
-        @Override
-        public void run() {
-            Looper.prepare();
-            mHandler = new Handler() {
-                @Override
-                public void handleMessage(Message msg) {
-                    switch (msg.what) {
-                        case MSG_WEBKIT_DATA_READY: {
-                            mTestApp.setWebKitResult((String)msg.obj);
-                            Looper.myLooper().quit();
-                        }
-                        default: super.handleMessage(msg); break;
-                    }
-                }
-            };
-            mWebView.documentAsText(mHandler.obtainMessage(MSG_WEBKIT_DATA_READY, 1, 0));
-            Looper.loop();
-        }
-    }
-
-    public synchronized void setWebKitResult(String result) {
-       mWebKitResult = result;
-       notify();
-    }
-
-    public JNIBindingsTestApp() {
-        super(BrowserActivity.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        mActivity = getActivity();
-        mController = mActivity.getController();
-        mInst = getInstrumentation();
-        mInst.waitForIdleSync();
-
-        extractAsset();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        removeAsset();
-        super.tearDown();
-    }
-
-    protected void extractAsset() throws IOException {
-        InputStream in = getInstrumentation().getContext().getAssets().open("bindings_test.html");
-        OutputStream out = new FileOutputStream(SDCARD_BINDINGS_TEST_HTML);
-
-        byte[] buf = new byte[2048];
-        int len;
-
-        while ((len = in.read(buf)) >= 0 ) {
-            out.write(buf, 0, len);
-        }
-        out.close();
-        in.close();
-    }
-
-    protected void removeAsset(){
-        File fileToDelete = new File(SDCARD_BINDINGS_TEST_HTML);
-        fileToDelete.delete();
-    }
-
-    /**
-     * Gets the browser ready for testing by starting the application
-     * and wrapping the WebView's helper clients.
-     */
-    void setUpBrowser() {
-        Tab tab = mController.getTabControl().getCurrentTab();
-        WebView webView = tab.getWebView();
-        webView.addJavascriptInterface(new JNIBindingsTest(this), "JNIBindingsTest");
-
-        webView.setWebChromeClient(new TestWebChromeClient(webView.getWebChromeClient()) {
-
-            /**
-             * Dismisses and logs Javascript alerts.
-             */
-            @Override
-            public boolean onJsAlert(WebView view, String url, String message,
-                    JsResult result) {
-                String logMsg = String.format("JS Alert '%s' received from %s", message, url);
-                Log.w(TAG, logMsg);
-                result.confirm();
-
-                return true;
-            }
-
-            /**
-             * Confirms and logs Javascript alerts.
-             */
-            @Override
-            public boolean onJsConfirm(WebView view, String url, String message,
-                    JsResult result) {
-                String logMsg = String.format("JS Confirmation '%s' received from %s",
-                        message, url);
-                Log.w(TAG, logMsg);
-                result.confirm();
-
-                return true;
-            }
-
-            /**
-             * Confirms and logs Javascript alerts, providing the default value.
-             */
-            @Override
-            public boolean onJsPrompt(WebView view, String url, String message,
-                    String defaultValue, JsPromptResult result) {
-                String logMsg = String.format("JS Prompt '%s' received from %s; " +
-                        "Giving default value '%s'", message, url, defaultValue);
-                Log.w(TAG, logMsg);
-                result.confirm(defaultValue);
-
-                return true;
-            }
-        });
-
-        webView.setWebViewClient(new TestWebViewClient(webView.getWebViewClient()) {
-
-            /**
-             * Bypasses and logs errors.
-             */
-            @Override
-            public void onReceivedError(WebView view, int errorCode,
-                    String description, String failingUrl) {
-                String message = String.format("Error '%s' (%d) loading url: %s",
-                        description, errorCode, failingUrl);
-                Log.w(TAG, message);
-            }
-
-            /**
-             * Ignores and logs SSL errors.
-             */
-            @Override
-            public void onReceivedSslError(WebView view, SslErrorHandler handler,
-                    SslError error) {
-                Log.w(TAG, "SSL error: " + error);
-                handler.proceed();
-            }
-
-            /**
-             * Ignores and logs SSL client certificate requests.
-             */
-            @Override
-            public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler,
-                    String host_and_port) {
-                Log.w(TAG, "SSL client certificate request: " + host_and_port);
-                handler.cancel();
-            }
-
-        });
-    }
-
-    public synchronized void notifyComplete() {
-        mTestDone = true;
-        notify();
-    }
-
-    public void testJNIBindings() {
-        setUpBrowser();
-
-        Tab tab = mController.getTabControl().getCurrentTab();
-        WebView webView = tab.getWebView();
-        webView.loadUrl("file://" + SDCARD_BINDINGS_TEST_HTML);
-        synchronized(this) {
-            while(!mTestDone) {
-                try {
-                    wait();
-                } catch (InterruptedException e) {}
-            }
-        }
-
-        // Now the tests are complete grab the DOM content and compare to the reference.
-        GetWebKitDataThread getWKData = new GetWebKitDataThread(this, webView);
-        mWebKitResult = null;
-        getWKData.start();
-
-        synchronized(this) {
-            while(mWebKitResult == null) {
-                try {
-                    wait();
-                } catch (InterruptedException e) {}
-            }
-        }
-
-        Log.v(TAG, "WebKit result:");
-        Log.v(TAG, mWebKitResult);
-        assertEquals("Bindings test failed! See logcat for more details!", mExpectedWebKitResult,
-                mWebKitResult);
-    }
-}
diff --git a/tests/src/com/android/browser/PopularUrlsTest.java b/tests/src/com/android/browser/PopularUrlsTest.java
index cbe8324..566d74b 100644
--- a/tests/src/com/android/browser/PopularUrlsTest.java
+++ b/tests/src/com/android/browser/PopularUrlsTest.java
@@ -32,6 +32,7 @@
 import android.webkit.JsResult;
 import android.webkit.SslErrorHandler;
 import android.webkit.WebView;
+import android.webkit.WebViewClassic;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -134,7 +135,8 @@
         Tab tab = mController.getTabControl().getCurrentTab();
         WebView webView = tab.getWebView();
 
-        webView.setWebChromeClient(new TestWebChromeClient(webView.getWebChromeClient()) {
+        webView.setWebChromeClient(new TestWebChromeClient(
+                WebViewClassic.fromWebView(webView).getWebChromeClient()) {
 
             @Override
             public void onProgressChanged(WebView view, int newProgress) {
@@ -203,7 +205,8 @@
             }
         });
 
-        webView.setWebViewClient(new TestWebViewClient(webView.getWebViewClient()) {
+        webView.setWebViewClient(new TestWebViewClient(
+                WebViewClassic.fromWebView(webView).getWebViewClient()) {
 
             /**
              * Bypasses and logs errors.
diff --git a/tools/get_search_engines.py b/tools/get_search_engines.py
index 86393f1..17916c8 100755
--- a/tools/get_search_engines.py
+++ b/tools/get_search_engines.py
@@ -39,9 +39,9 @@
 
 google_data = ["google", "Google", "google.com",
   "http://www.google.com/favicon.ico",
-  "http://www.google.com/search?hl={language}&amp;ie={inputEncoding}&amp;source=android-browser&amp;q={searchTerms}",
+  "http://www.google.com/search?ie={inputEncoding}&amp;source=android-browser&amp;q={searchTerms}",
   "UTF-8",
-  "http://www.google.com/complete/search?hl={language}&amp;client=android&amp;q={searchTerms}"]
+  "http://www.google.com/complete/search?client=android&amp;q={searchTerms}"]
 
 class SearchEngineManager(object):
   """Manages list of search engines and creates locale specific lists.