Implement the new WebView.setWebContentsDebuggingEnabled API

BUG: 8691809
Change-Id: I62441515da9bf70712305ba245db53bb22f52fbf
(cherry picked from commit d9e4aedf3d14b3494d54dbb482ece3603d0f693d)
diff --git a/chromium/java/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/chromium/java/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
index 14c86d9..afb77ed 100644
--- a/chromium/java/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
+++ b/chromium/java/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -36,6 +36,7 @@
 import org.chromium.android_webview.AwBrowserProcess;
 import org.chromium.android_webview.AwContents;
 import org.chromium.android_webview.AwCookieManager;
+import org.chromium.android_webview.AwDevToolsServer;
 import org.chromium.android_webview.AwFormDatabase;
 import org.chromium.android_webview.AwGeolocationPermissions;
 import org.chromium.android_webview.AwQuotaManagerBridge;
@@ -66,6 +67,7 @@
     private WebIconDatabaseAdapter mWebIconDatabase;
     private WebStorageAdapter mWebStorage;
     private WebViewDatabaseAdapter mWebViewDatabase;
+    private AwDevToolsServer mDevToolsServer;
 
     // Read/write protected by mLock.
     private boolean mStarted;
@@ -165,6 +167,11 @@
 
         AwBrowserProcess.start(ActivityThread.currentApplication());
         initPlatSupportLibrary();
+
+        if (Build.IS_DEBUGGABLE) {
+            setWebContentsDebuggingEnabled(true);
+        }
+
         mStarted = true;
     }
 
@@ -193,6 +200,15 @@
                     }
 
                     @Override
+                    public void setWebContentsDebuggingEnabled(boolean enable) {
+                        // Web Contents debugging is always enabled on debug builds.
+                        if (!Build.IS_DEBUGGABLE) {
+                            WebViewChromiumFactoryProvider.this.
+                                    setWebContentsDebuggingEnabled(enable);
+                        }
+                    }
+
+                    @Override
                     public void freeMemoryForTests() {
                         if (ActivityManager.isRunningInTestHarness()) {
                             MemoryPressureListener.simulateMemoryPressureSignal(
@@ -292,4 +308,16 @@
         }
         return mWebViewDatabase;
     }
+
+    private void setWebContentsDebuggingEnabled(boolean enable) {
+        if (Looper.myLooper() != Looper.getMainLooper()) {
+            throw new RuntimeException(
+                    "Toggling of Web Contents Debugging must be done on the main thread");
+        }
+        if (mDevToolsServer == null) {
+            if (!enable) return;
+            mDevToolsServer = new AwDevToolsServer();
+        }
+        mDevToolsServer.setRemoteDebuggingEnabled(enable);
+    }
 }