diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index d3c8852..a836fe4 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -79,6 +79,12 @@
         android:summary="@string/picture_color_mode_desc"
         android:persistent="false" />
 
+    <ListPreference
+        android:key="select_webview_provider"
+        android:title="@string/select_webview_provider_title"
+        android:dialogTitle="@string/select_webview_provider_dialog_title"
+        android:summary="%s" />
+
     <PreferenceCategory android:key="debug_debugging_category"
             android:title="@string/debug_debugging_category">
 
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 950af3c..598608c 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -72,6 +72,8 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityManager;
+import android.webkit.IWebViewUpdateService;
+import android.webkit.WebViewProviderInfo;
 import android.widget.Switch;
 import android.widget.TextView;
 
@@ -110,6 +112,7 @@
     private static final String ENABLE_TERMINAL = "enable_terminal";
     private static final String KEEP_SCREEN_ON = "keep_screen_on";
     private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log";
+    private static final String WEBVIEW_PROVIDER_KEY = "select_webview_provider";
     private static final String ENABLE_OEM_UNLOCK = "oem_unlock_enable";
     private static final String HDCP_CHECKING_KEY = "hdcp_checking";
     private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
@@ -253,6 +256,7 @@
     private ListPreference mAnimatorDurationScale;
     private ListPreference mOverlayDisplayDevices;
     private ListPreference mOpenGLTraces;
+    private ListPreference mWebViewProvider;
 
     private ListPreference mSimulateColorSpace;
 
@@ -389,6 +393,7 @@
         mMobileDataAlwaysOn = findAndInitSwitchPref(MOBILE_DATA_ALWAYS_ON);
         mLogdSize = addListPreference(SELECT_LOGD_SIZE_KEY);
         mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
+        mWebViewProvider = addListPreference(WEBVIEW_PROVIDER_KEY);
 
         mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
         mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY);
@@ -461,6 +466,7 @@
             removePreference(KEY_COLOR_MODE);
             mColorModePreference = null;
         }
+        updateWebViewProviderOptions();
     }
 
     private ListPreference addListPreference(String prefKey) {
@@ -669,6 +675,7 @@
         updateSimulateColorSpace();
         updateUSBAudioOptions();
         updateForceResizableOptions();
+        updateWebViewProviderOptions();
     }
 
     private void resetDangerousOptions() {
@@ -697,6 +704,35 @@
         pokeSystemProperties();
     }
 
+    private void updateWebViewProviderOptions() {
+        IWebViewUpdateService webViewUpdateService  =
+            IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+        try {
+            WebViewProviderInfo[] providers = webViewUpdateService.getValidWebViewPackages();
+            String[] options = new String[providers.length];
+            String[] values = new String[providers.length];
+            for(int n = 0; n < providers.length; n++) {
+                options[n] = providers[n].description;
+                values[n] = providers[n].packageName;
+            }
+            mWebViewProvider.setEntries(options);
+            mWebViewProvider.setEntryValues(values);
+
+            String value = webViewUpdateService.getCurrentWebViewPackageName();
+            if (value == null) {
+                value = "";
+            }
+
+            for (int i = 0; i < values.length; i++) {
+                if (value.contentEquals(values[i])) {
+                    mWebViewProvider.setValueIndex(i);
+                    return;
+                }
+            }
+        } catch(RemoteException e) {
+        }
+    }
+
     private void updateHdcpValues() {
         ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
         if (hdcpChecking != null) {
@@ -736,6 +772,18 @@
                 mBtHciSnoopLog.isChecked() ? 1 : 0);
     }
 
+    private void writeWebViewProviderOptions(Object newValue) {
+        IWebViewUpdateService webViewUpdateService  =
+            IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+
+        try {
+            webViewUpdateService.changeProviderAndSetting(
+                    newValue == null ? "" : newValue.toString());
+            updateWebViewProviderOptions();
+        } catch(RemoteException e) {
+        }
+    }
+
     private void writeDebuggerOptions() {
         try {
             ActivityManagerNative.getDefault().setDebugApp(
@@ -1754,6 +1802,9 @@
             updateHdcpValues();
             pokeSystemProperties();
             return true;
+        } else if (preference == mWebViewProvider) {
+            writeWebViewProviderOptions(newValue);
+            return true;
         } else if (preference == mLogdSize) {
             writeLogdSizeOption(newValue);
             return true;
