Merge "Revert "[Android WebView] Make web contents debugging controllable"" into klp-dev
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp
index d201ac7..2cf8f3c 100644
--- a/android_webview/android_webview.gyp
+++ b/android_webview/android_webview.gyp
@@ -118,6 +118,8 @@
         'browser/aw_contents_io_thread_client.h',
         'browser/aw_cookie_access_policy.cc',
         'browser/aw_cookie_access_policy.h',
+        'browser/aw_devtools_delegate.cc',
+        'browser/aw_devtools_delegate.h',
         'browser/aw_download_manager_delegate.cc',
         'browser/aw_download_manager_delegate.h',
         'browser/aw_form_database_service.cc',
diff --git a/android_webview/browser/aw_browser_main_parts.cc b/android_webview/browser/aw_browser_main_parts.cc
index f19def9..b54e65b 100644
--- a/android_webview/browser/aw_browser_main_parts.cc
+++ b/android_webview/browser/aw_browser_main_parts.cc
@@ -5,6 +5,7 @@
 #include "android_webview/browser/aw_browser_main_parts.h"
 
 #include "android_webview/browser/aw_browser_context.h"
+#include "android_webview/browser/aw_devtools_delegate.h"
 #include "android_webview/browser/aw_result_codes.h"
 #include "base/android/build_info.h"
 #include "base/files/file_path.h"
@@ -60,6 +61,7 @@
 
 void AwBrowserMainParts::PreMainMessageLoopRun() {
   browser_context_->PreMainMessageLoopRun();
+  devtools_delegate_ = new AwDevToolsDelegate(browser_context_);
 }
 
 bool AwBrowserMainParts::MainMessageLoopRun(int* result_code) {
@@ -68,4 +70,9 @@
   return true;
 }
 
+void AwBrowserMainParts::PostMainMessageLoopRun() {
+  if (devtools_delegate_)
+    devtools_delegate_->Stop();
+}
+
 }  // namespace android_webview
diff --git a/android_webview/browser/aw_browser_main_parts.h b/android_webview/browser/aw_browser_main_parts.h
index 8beec92..903e19b 100644
--- a/android_webview/browser/aw_browser_main_parts.h
+++ b/android_webview/browser/aw_browser_main_parts.h
@@ -16,6 +16,7 @@
 namespace android_webview {
 
 class AwBrowserContext;
+class AwDevToolsDelegate;
 
 class AwBrowserMainParts : public content::BrowserMainParts {
  public:
@@ -27,12 +28,14 @@
   virtual int PreCreateThreads() OVERRIDE;
   virtual void PreMainMessageLoopRun() OVERRIDE;
   virtual bool MainMessageLoopRun(int* result_code) OVERRIDE;
+  virtual void PostMainMessageLoopRun() OVERRIDE;
 
  private:
   // Android specific UI MessageLoop.
   scoped_ptr<base::MessageLoop> main_message_loop_;
 
   AwBrowserContext* browser_context_;  // weak
+  AwDevToolsDelegate* devtools_delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(AwBrowserMainParts);
 };
diff --git a/android_webview/browser/aw_devtools_delegate.cc b/android_webview/browser/aw_devtools_delegate.cc
new file mode 100644
index 0000000..25f2b7a
--- /dev/null
+++ b/android_webview/browser/aw_devtools_delegate.cc
@@ -0,0 +1,248 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/aw_devtools_delegate.h"
+
+#include "android_webview/browser/in_process_view_renderer.h"
+#include "base/bind.h"
+#include "base/json/json_writer.h"
+#include "base/strings/stringprintf.h"
+#include "base/values.h"
+#include "content/public/browser/android/devtools_auth.h"
+#include "content/public/browser/devtools_http_handler.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/url_constants.h"
+#include "net/socket/unix_domain_socket_posix.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "webkit/common/user_agent/user_agent_util.h"
+
+namespace {
+const char kFrontEndURL[] =
+    "http://chrome-devtools-frontend.appspot.com/serve_rev/%s/devtools.html";
+const char kSocketNameFormat[] = "webview_devtools_remote_%d";
+}
+
+namespace android_webview {
+
+AwDevToolsDelegate::AwDevToolsDelegate(content::BrowserContext* browser_context)
+    : browser_context_(browser_context) {
+  devtools_http_handler_ = content::DevToolsHttpHandler::Start(
+      new net::UnixDomainSocketWithAbstractNamespaceFactory(
+          base::StringPrintf(kSocketNameFormat, getpid()),
+          "",
+          base::Bind(&content::CanUserConnectToDevTools)),
+      base::StringPrintf(kFrontEndURL,
+                         webkit_glue::GetWebKitRevision().c_str()),
+      this);
+}
+
+AwDevToolsDelegate::~AwDevToolsDelegate() {
+}
+
+void AwDevToolsDelegate::Stop() {
+  devtools_http_handler_->Stop();
+  // WARNING: |this| has now been deleted by the method above.
+}
+
+std::string AwDevToolsDelegate::GetDiscoveryPageHTML() {
+  // This is a temporary way of providing the list of inspectable WebViews.
+  // Since WebView doesn't have its own resources now, it doesn't seem
+  // reasonable to create a dedicated .pak file just for this temporary page.
+  const char html[] =
+      "<html>"
+      "<head>"
+      "<title>WebView remote debugging</title>"
+      "<style>"
+      "</style>"
+      "<script>"
+      "function onLoad() {"
+      "  var tabs_list_request = new XMLHttpRequest();"
+      "  tabs_list_request.open("
+      "      'GET', '/json/list?t=' + new Date().getTime(), true);"
+      "  tabs_list_request.onreadystatechange = onReady;"
+      "  tabs_list_request.send();"
+      "}"
+      "function processItem(item) {"
+      "  var result = JSON.parse(item.description);"
+      "  result.debuggable = !!item.devtoolsFrontendUrl;"
+      "  result.debugUrl = item.devtoolsFrontendUrl;"
+      "  result.title = item.title;"
+      "  return result;"
+      "}"
+      "function onReady() {"
+      "  if(this.readyState == 4 && this.status == 200) {"
+      "    if(this.response != null)"
+      "      var responseJSON = JSON.parse(this.response);"
+      "      var items = [];"
+      "      for (var i = 0; i < responseJSON.length; ++i)"
+      "        items.push(processItem(responseJSON[i]));"
+      "      clear();"
+      "      for (var i = 0; i < items.length; ++i)"
+      "        displayView(items[i]);"
+      "      filter();"
+      "  }"
+      "}"
+      "function addColumn(row, text) {"
+      "  var column = document.createElement('td');"
+      "  column.innerText = text;"
+      "  row.appendChild(column);"
+      "}"
+      "function cutTextIfNeeded(text, maxLen) {"
+      "  return text.length <= maxLen ?"
+      "      text : text.substr(0, maxLen) + '\u2026';"
+      "}"
+      "function displayView(item) {"
+      "  var row = document.createElement('tr');"
+      "  var column = document.createElement('td');"
+      "  var frontend_ref;"
+      "  if (item.debuggable) {"
+      "    frontend_ref = document.createElement('a');"
+      "    frontend_ref.href = item.debugUrl;"
+      "    frontend_ref.title = item.title;"
+      "    frontend_ref.target = '_blank';"
+      "    column.appendChild(frontend_ref);"
+      "  } else {"
+      "    frontend_ref = column;"
+      "  }"
+      "  var text = document.createElement('span');"
+      "  if (item.title) {"
+      "    text.innerText = cutTextIfNeeded(item.title, 64);"
+      "  } else {"
+      "    text.innerText = '(untitled)';"
+      "  }"
+      "  frontend_ref.appendChild(text);"
+      "  var bits = 0;"
+      "  var attached = item.attached ? (bits |= 1, 'Y') : 'N';"
+      "  var visible = item.visible ? (bits |= 2, 'Y') : 'N';"
+      "  var empty = item.empty ? 'Y' : (bits |= 4, 'N');"
+      "  row.setAttribute('class', bits);"
+      "  row.appendChild(column);"
+      "  addColumn(row, attached);"
+      "  addColumn(row, visible);"
+      "  addColumn(row, empty);"
+      "  addColumn(row, item.screenX + ', ' + item.screenY);"
+      "  addColumn(row,"
+      "            !item.empty ? (item.width + '\u00d7' + item.height) : '');"
+      "  document.getElementById('items').appendChild(row);"
+      "}"
+      "function filter() {"
+      "  var show_attached = document.getElementById('show_attached').checked;"
+      "  var show_visible = document.getElementById('show_visible').checked;"
+      "  var show_nonempty = document.getElementById('show_nonempty').checked;"
+      "  var items = document.getElementById('items').childNodes;"
+      "  for (var i = 0; i < items.length; i++) {"
+      "    if (items[i].nodeName == 'TR') {"
+      "      var mask = parseInt(items[i].getAttribute('class'));"
+      "      var show = true;"
+      "      if (show_attached) show &= ((mask & 1) != 0);"
+      "      if (show_visible) show &= ((mask & 2) != 0);"
+      "      if (show_nonempty) show &= ((mask & 4) != 0);"
+      "      if (show) {"
+      "        items[i].style.display = 'table-row';"
+      "      } else {"
+      "        items[i].style.display = 'none';"
+      "      }"
+      "    }"
+      "  }"
+      "}"
+      "var refreshInterval = 0;"
+      "function toggleRefresh() {"
+      "  clearInterval(refreshInterval);"
+      "  var enabled = document.getElementById('refresh').checked;"
+      "  if (enabled) {"
+      "    var time = document.getElementById('refresh_time').value * 1000;"
+      "    refreshInterval = setInterval(onLoad, time);"
+      "  }"
+      "}"
+      "function clear() {"
+      "  var items = document.getElementById('items');"
+      "  for (var i = 0; i < items.childNodes.length; i++) {"
+      "    items.removeChild(items.childNodes[i]);"
+      "  }"
+      "}"
+      "</script>"
+      "</head>"
+      "<body onload='onLoad()'>"
+      "  <div id='caption'>Inspectable WebViews</div>"
+      "  <div><p>Only show:</p>"
+      "    <form>"
+      "      <input type='checkbox' id='show_attached' onclick='filter()'>"
+      "      Attached<br/>"
+      "      <input type='checkbox' id='show_visible' onclick='filter()'>"
+      "      Visible<br/>"
+      "      <input type='checkbox' id='show_nonempty' onclick='filter()'>"
+      "      Non-empty<br/>"
+      "      <input type='checkbox' id='refresh' onclick='toggleRefresh()'>"
+      "      Auto refresh every "
+      "      <input type='number' id='refresh_time' value='2' min='1' max='99'"
+      "        onchange='toggleRefresh();' /> seconds<br/>"
+      "    </form>"
+      "  </div>"
+      "  <table>"
+      "    <tr><th style='width:200px; text-align:left;'>Title</th>"
+      "      <th>Attached</th><th>Visible</th><th>Empty</th>"
+      "      <th style='width:100px; text-align:left;'>Position</th>"
+      "      <th style='width:100px; text-align:left;'>Size</th>"
+      "    </tr>"
+      "    <tbody id='items'></tbody>"
+      "  </table>"
+      "</body>"
+      "</html>";
+  return html;
+}
+
+bool AwDevToolsDelegate::BundlesFrontendResources() {
+  return false;
+}
+
+base::FilePath AwDevToolsDelegate::GetDebugFrontendDir() {
+  return base::FilePath();
+}
+
+std::string AwDevToolsDelegate::GetPageThumbnailData(const GURL& url) {
+  return "";
+}
+
+content::RenderViewHost* AwDevToolsDelegate::CreateNewTarget() {
+  return NULL;
+}
+
+content::DevToolsHttpHandlerDelegate::TargetType
+AwDevToolsDelegate::GetTargetType(content::RenderViewHost*) {
+  return kTargetTypeTab;
+}
+
+std::string AwDevToolsDelegate::GetViewDescription(
+    content::RenderViewHost* rvh) {
+  content::WebContents* web_contents =
+      content::WebContents::FromRenderViewHost(rvh);
+  if (!web_contents) return "";
+
+  BrowserViewRenderer* bvr
+      = InProcessViewRenderer::FromWebContents(web_contents);
+  if (!bvr) return "";
+  base::DictionaryValue description;
+  description.SetBoolean("attached", bvr->IsAttachedToWindow());
+  description.SetBoolean("visible", bvr->IsVisible());
+  gfx::Rect screen_rect = bvr->GetScreenRect();
+  description.SetInteger("screenX", screen_rect.x());
+  description.SetInteger("screenY", screen_rect.y());
+  description.SetBoolean("empty", screen_rect.size().IsEmpty());
+  if (!screen_rect.size().IsEmpty()) {
+    description.SetInteger("width", screen_rect.width());
+    description.SetInteger("height", screen_rect.height());
+  }
+  std::string json;
+  base::JSONWriter::Write(&description, &json);
+  return json;
+}
+
+scoped_refptr<net::StreamListenSocket>
+AwDevToolsDelegate::CreateSocketForTethering(
+    net::StreamListenSocket::Delegate* delegate,
+    std::string* name) {
+  return NULL;
+}
+
+}  // namespace android_webview
diff --git a/android_webview/browser/aw_devtools_delegate.h b/android_webview/browser/aw_devtools_delegate.h
new file mode 100644
index 0000000..446e4aa
--- /dev/null
+++ b/android_webview/browser/aw_devtools_delegate.h
@@ -0,0 +1,54 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_AW_DEV_TOOLS_DELEGATE_H_
+#define ANDROID_WEBVIEW_BROWSER_AW_DEV_TOOLS_DELEGATE_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "content/public/browser/devtools_http_handler_delegate.h"
+
+namespace content {
+class BrowserContext;
+class DevToolsHttpHandler;
+}
+
+namespace android_webview {
+
+class AwDevToolsDelegate : public content::DevToolsHttpHandlerDelegate {
+ public:
+  AwDevToolsDelegate(content::BrowserContext* browser_context);
+  virtual ~AwDevToolsDelegate();
+
+  // Stops http server.
+  void Stop();
+
+  // DevToolsHttpProtocolHandler::Delegate overrides.
+  virtual std::string GetDiscoveryPageHTML() OVERRIDE;
+  virtual bool BundlesFrontendResources() OVERRIDE;
+  virtual base::FilePath GetDebugFrontendDir() OVERRIDE;
+  virtual std::string GetPageThumbnailData(const GURL& url) OVERRIDE;
+  virtual content::RenderViewHost* CreateNewTarget() OVERRIDE;
+  virtual TargetType GetTargetType(content::RenderViewHost*) OVERRIDE;
+  virtual std::string GetViewDescription(content::RenderViewHost*) OVERRIDE;
+  virtual scoped_refptr<net::StreamListenSocket> CreateSocketForTethering(
+      net::StreamListenSocket::Delegate* delegate,
+      std::string* name) OVERRIDE;
+
+  content::DevToolsHttpHandler* devtools_http_handler() {
+    return devtools_http_handler_;
+  }
+
+ private:
+  content::BrowserContext* browser_context_;
+  content::DevToolsHttpHandler* devtools_http_handler_;
+
+  DISALLOW_COPY_AND_ASSIGN(AwDevToolsDelegate);
+};
+
+}  // namespace android_webview
+
+#endif  // ANDROID_WEBVIEW_BROWSER_AW_DEV_TOOLS_DELEGATE_H_
diff --git a/android_webview/java/src/org/chromium/android_webview/AwDevToolsServer.java b/android_webview/java/src/org/chromium/android_webview/AwDevToolsServer.java
deleted file mode 100644
index 852655a..0000000
--- a/android_webview/java/src/org/chromium/android_webview/AwDevToolsServer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.android_webview;
-
-import org.chromium.base.JNINamespace;
-
-/**
- * Controller for Remote Web Debugging (Developer Tools).
- */
-@JNINamespace("android_webview")
-public class AwDevToolsServer {
-
-    private int mNativeDevToolsServer = 0;
-
-    public AwDevToolsServer() {
-        mNativeDevToolsServer = nativeInitRemoteDebugging();
-    }
-
-    public void destroy() {
-        nativeDestroyRemoteDebugging(mNativeDevToolsServer);
-        mNativeDevToolsServer = 0;
-    }
-
-    public void setRemoteDebuggingEnabled(boolean enabled) {
-        nativeSetRemoteDebuggingEnabled(mNativeDevToolsServer, enabled);
-    }
-
-    private native int nativeInitRemoteDebugging();
-    private native void nativeDestroyRemoteDebugging(int devToolsServer);
-    private native void nativeSetRemoteDebuggingEnabled(int devToolsServer, boolean enabled);
-}
diff --git a/android_webview/native/android_webview_jni_registrar.cc b/android_webview/native/android_webview_jni_registrar.cc
index bf29f18..62f25e8 100644
--- a/android_webview/native/android_webview_jni_registrar.cc
+++ b/android_webview/native/android_webview_jni_registrar.cc
@@ -9,7 +9,6 @@
 #include "android_webview/native/aw_contents.h"
 #include "android_webview/native/aw_contents_client_bridge.h"
 #include "android_webview/native/aw_contents_io_thread_client_impl.h"
-#include "android_webview/native/aw_dev_tools_server.h"
 // START: Printing fork b/10190508
 #include "android_webview/native/aw_pdf_exporter.h"
 // END: Printing fork b/10190508
@@ -37,7 +36,6 @@
   { "AwContents", RegisterAwContents },
   { "AwContentsClientBridge", RegisterAwContentsClientBridge },
   { "AwContentsIoThreadClientImpl", RegisterAwContentsIoThreadClientImpl },
-  { "AwDevToolsServer", RegisterAwDevToolsServer },
   { "AwFormDatabase", RegisterAwFormDatabase },
   { "AwPicture", RegisterAwPicture },
   { "AwSettings", RegisterAwSettings },
diff --git a/android_webview/native/aw_dev_tools_server.cc b/android_webview/native/aw_dev_tools_server.cc
deleted file mode 100644
index b6c4fba..0000000
--- a/android_webview/native/aw_dev_tools_server.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "android_webview/native/aw_dev_tools_server.h"
-
-#include "android_webview/browser/in_process_view_renderer.h"
-#include "base/bind.h"
-#include "base/json/json_writer.h"
-#include "base/strings/stringprintf.h"
-#include "base/values.h"
-#include "content/public/browser/android/devtools_auth.h"
-#include "content/public/browser/devtools_http_handler.h"
-#include "content/public/browser/devtools_http_handler_delegate.h"
-#include "content/public/browser/web_contents.h"
-#include "jni/AwDevToolsServer_jni.h"
-#include "net/socket/unix_domain_socket_posix.h"
-#include "webkit/common/user_agent/user_agent_util.h"
-
-namespace {
-
-const char kFrontEndURL[] =
-    "http://chrome-devtools-frontend.appspot.com/serve_rev/%s/devtools.html";
-const char kSocketNameFormat[] = "webview_devtools_remote_%d";
-
-// Delegate implementation for the devtools http handler for WebView. A new
-// instance of this gets created each time web debugging is enabled.
-class AwDevToolsServerDelegate : public content::DevToolsHttpHandlerDelegate {
- public:
-  AwDevToolsServerDelegate() {}
-  virtual ~AwDevToolsServerDelegate() {}
-
-  // DevToolsHttpProtocolHandler::Delegate overrides.
-  virtual std::string GetDiscoveryPageHTML() OVERRIDE;
-
-  virtual bool BundlesFrontendResources() OVERRIDE {
-    return false;
-  }
-
-  virtual base::FilePath GetDebugFrontendDir() OVERRIDE {
-    return base::FilePath();
-  }
-
-  virtual std::string GetPageThumbnailData(const GURL&) OVERRIDE {
-    return "";
-  }
-
-  virtual content::RenderViewHost* CreateNewTarget() OVERRIDE {
-    return NULL;
-  }
-
-  virtual TargetType GetTargetType(content::RenderViewHost*) OVERRIDE {
-    return kTargetTypeTab;
-  }
-
-  virtual std::string GetViewDescription(content::RenderViewHost*) OVERRIDE;
-
-  virtual scoped_refptr<net::StreamListenSocket> CreateSocketForTethering(
-      net::StreamListenSocket::Delegate* delegate,
-      std::string* name) OVERRIDE {
-    return NULL;
-  }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AwDevToolsServerDelegate);
-};
-
-
-std::string AwDevToolsServerDelegate::GetDiscoveryPageHTML() {
-  const char html[] =
-      "<html>"
-      "<head><title>WebView remote debugging</title></head>"
-      "<body>Please use <a href=\'chrome://inspect\'>chrome://inspect</a>"
-      "</body>"
-      "</html>";
-  return html;
-}
-
-std::string AwDevToolsServerDelegate::GetViewDescription(
-    content::RenderViewHost* rvh) {
-  content::WebContents* web_contents =
-      content::WebContents::FromRenderViewHost(rvh);
-  if (!web_contents) return "";
-
-  android_webview::BrowserViewRenderer* bvr
-      = android_webview::InProcessViewRenderer::FromWebContents(web_contents);
-  if (!bvr) return "";
-  base::DictionaryValue description;
-  description.SetBoolean("attached", bvr->IsAttachedToWindow());
-  description.SetBoolean("visible", bvr->IsVisible());
-  gfx::Rect screen_rect = bvr->GetScreenRect();
-  description.SetInteger("screenX", screen_rect.x());
-  description.SetInteger("screenY", screen_rect.y());
-  description.SetBoolean("empty", screen_rect.size().IsEmpty());
-  if (!screen_rect.size().IsEmpty()) {
-    description.SetInteger("width", screen_rect.width());
-    description.SetInteger("height", screen_rect.height());
-  }
-  std::string json;
-  base::JSONWriter::Write(&description, &json);
-  return json;
-}
-
-}  // namespace
-
-namespace android_webview {
-
-AwDevToolsServer::AwDevToolsServer()
-    : protocol_handler_(NULL) {
-}
-
-AwDevToolsServer::~AwDevToolsServer() {
-  Stop();
-}
-
-void AwDevToolsServer::Start() {
-  if (protocol_handler_)
-    return;
-
-  protocol_handler_ = content::DevToolsHttpHandler::Start(
-      new net::UnixDomainSocketWithAbstractNamespaceFactory(
-          base::StringPrintf(kSocketNameFormat, getpid()),
-          "",
-          base::Bind(&content::CanUserConnectToDevTools)),
-      base::StringPrintf(kFrontEndURL,
-                         webkit_glue::GetWebKitRevision().c_str()),
-      new AwDevToolsServerDelegate());
-}
-
-void AwDevToolsServer::Stop() {
-  if (!protocol_handler_)
-    return;
-  // Note that the call to Stop() below takes care of |protocol_handler_|
-  // deletion.
-  protocol_handler_->Stop();
-  protocol_handler_ = NULL;
-}
-
-bool AwDevToolsServer::IsStarted() const {
-  return protocol_handler_;
-}
-
-bool RegisterAwDevToolsServer(JNIEnv* env) {
-  return RegisterNativesImpl(env);
-}
-
-static jint InitRemoteDebugging(JNIEnv* env,
-                                jobject obj) {
-  AwDevToolsServer* server = new AwDevToolsServer();
-  return reinterpret_cast<jint>(server);
-}
-
-static void DestroyRemoteDebugging(JNIEnv* env, jobject obj, jint server) {
-  delete reinterpret_cast<AwDevToolsServer*>(server);
-}
-
-static void SetRemoteDebuggingEnabled(JNIEnv* env,
-                                      jobject obj,
-                                      jint server,
-                                      jboolean enabled) {
-  AwDevToolsServer* devtools_server =
-      reinterpret_cast<AwDevToolsServer*>(server);
-  if (enabled) {
-    devtools_server->Start();
-  } else {
-    devtools_server->Stop();
-  }
-}
-
-}  // namespace android_webview
diff --git a/android_webview/native/aw_dev_tools_server.h b/android_webview/native/aw_dev_tools_server.h
deleted file mode 100644
index 1a46ad8..0000000
--- a/android_webview/native/aw_dev_tools_server.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ANDROID_WEBVIEW_NATIVE_AW_DEV_TOOLS_SERVER_H_
-#define ANDROID_WEBVIEW_NATIVE_AW_DEV_TOOLS_SERVER_H_
-
-#include <jni.h>
-#include <vector>
-
-#include "base/basictypes.h"
-
-namespace content {
-class DevToolsHttpHandler;
-}
-
-namespace android_webview {
-
-// This class controls WebView-specific Developer Tools remote debugging server.
-class AwDevToolsServer {
- public:
-  AwDevToolsServer();
-  ~AwDevToolsServer();
-
-  // Opens linux abstract socket to be ready for remote debugging.
-  void Start();
-
-  // Closes debugging socket, stops debugging.
-  void Stop();
-
-  bool IsStarted() const;
-
- private:
-  content::DevToolsHttpHandler* protocol_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(AwDevToolsServer);
-};
-
-bool RegisterAwDevToolsServer(JNIEnv* env);
-
-}  // namespace android_webview
-
-#endif  // ANDROID_WEBVIEW_NATIVE_AW_DEV_TOOLS_SERVER_H_
diff --git a/android_webview/native/webview_native.gyp b/android_webview/native/webview_native.gyp
index 04144ef..b89c3de 100644
--- a/android_webview/native/webview_native.gyp
+++ b/android_webview/native/webview_native.gyp
@@ -44,8 +44,6 @@
         'aw_contents_client_bridge.h',
         'aw_contents_io_thread_client_impl.cc',
         'aw_contents_io_thread_client_impl.h',
-        'aw_dev_tools_server.cc',
-        'aw_dev_tools_server.h',
         'aw_form_database.cc',
         'aw_form_database.h',
         'aw_geolocation_permission_context.cc',
@@ -111,7 +109,6 @@
           '../java/src/org/chromium/android_webview/AwContentsClientBridge.java',
           '../java/src/org/chromium/android_webview/AwContentsIoThreadClient.java',
           '../java/src/org/chromium/android_webview/AwCookieManager.java',
-          '../java/src/org/chromium/android_webview/AwDevToolsServer.java',
           '../java/src/org/chromium/android_webview/AwFormDatabase.java',
           '../java/src/org/chromium/android_webview/AwHttpAuthHandler.java',
           '../java/src/org/chromium/android_webview/AwPicture.java',