Suport initializing DRP from cmd line switches.

If there is a command line switch to enable the data reduction proxy, we
will try to initialize the DRP by reading the DRP key from command line.
If the key from command line is empty, use the key embedded in WebView
apk.

BUG: 17211028

Change-Id: I496b0d8a9dcd1763d4bbf2065e2d9e996ba6e873
(cherry picked from commit e41c9c1d9c3bf72381f8e0acd62bd17346bf1d7e)
diff --git a/chromium/java/com/android/webview/chromium/DataReductionProxyManager.java b/chromium/java/com/android/webview/chromium/DataReductionProxyManager.java
index 7fe449c..32006bf 100644
--- a/chromium/java/com/android/webview/chromium/DataReductionProxyManager.java
+++ b/chromium/java/com/android/webview/chromium/DataReductionProxyManager.java
@@ -33,6 +33,7 @@
 import android.webkit.WebView;
 
 import org.chromium.android_webview.AwContentsStatics;
+import org.chromium.base.CommandLine;
 
 import java.lang.reflect.Field;
 
@@ -51,6 +52,11 @@
     private static final String DRP_CLASS = "com.android.webview.chromium.Drp";
     private static final String TAG = "DataReductionProxySettingListener";
 
+    // This is the same as Chromium data_reduction_proxy::switches::kEnableDataReductionProxy.
+    private static final String ENABLE_DATA_REDUCTION_PROXY = "enable-spdy-proxy-auth";
+    // This is the same as Chromium data_reduction_proxy::switches::kDataReductionProxyKey.
+    private static final String DATA_REDUCTION_PROXY_KEY = "spdy-proxy-auth-value";
+
     /*
      * Listen for DataReductionProxySetting changes and take action.
      * TODO: This is the old mechanism. Will be obsolete after L release.
@@ -77,20 +83,45 @@
     public DataReductionProxyManager() { }
 
     public void start(final Context context) {
-        final String key = readKey();
-        if (key == null || key.isEmpty()) {
+        // This is the DRP key embedded in WebView apk.
+        final String embeddedKey = readKey();
+
+        // Developers could test DRP by passing ENABLE_DATA_REDUCTION_PROXY and (optionally)
+        // DATA_REDUCTION_PROXY_KEY to the commandline switches.  In this case, we will try to
+        // initialize DRP from commandline. And ignore user's preference.  If
+        // DATA_REDUCTION_PROXY_KEY is specified in commandline, use it.  Otherwise, use the key
+        // embedded in WebView apk.
+        CommandLine cl = CommandLine.getInstance();
+        if (cl.hasSwitch(ENABLE_DATA_REDUCTION_PROXY)) {
+            String key = cl.getSwitchValue(DATA_REDUCTION_PROXY_KEY, embeddedKey);
+            if (key == null || key.isEmpty()) {
+                return;
+            }
+
+            // Now we will enable DRP because we've got a commandline switch to enable it.
+            // We won't listen to Google Settings preference change because commandline switches
+            // trump that.
+            AwContentsStatics.setDataReductionProxyKey(key);
+            AwContentsStatics.setDataReductionProxyEnabled(true);
             return;
         }
-        applyDataReductionProxySettingsAsync(context, key);
+
+        // Now, there is no commandline switches to enable DRP, and reading the
+        // DRP key from WebView apk failed. Just return and leave DRP disabled.
+        if (embeddedKey == null || embeddedKey.isEmpty()) {
+            return;
+        }
+
+        applyDataReductionProxySettingsAsync(context, embeddedKey);
         IntentFilter filter = new IntentFilter();
         filter.addAction(WebView.DATA_REDUCTION_PROXY_SETTING_CHANGED);
-        mProxySettingListener = new ProxySettingListener(key);
+        mProxySettingListener = new ProxySettingListener(embeddedKey);
         context.registerReceiver(mProxySettingListener, filter);
         ContentResolver resolver = context.getContentResolver();
         mProxySettingObserver = new ContentObserver(new Handler()) {
             @Override
             public void onChange(boolean selfChange, Uri uri) {
-                applyDataReductionProxySettingsAsync(context, key);
+                applyDataReductionProxySettingsAsync(context, embeddedKey);
             }
         };
         resolver.registerContentObserver(