Web Inspector: Make WebKitGTK+ port work with Eclipse chromedevtools plugin
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Sep 2013 17:42:36 +0000 (17:42 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Sep 2013 17:42:36 +0000 (17:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=121121

Patch by Andre Moreira Magalhaes <andre.magalhaes@collabora.co.uk> on 2013-09-27
Reviewed by Gustavo Noronha Silva.

The chromedevtools plugin (http://code.google.com/p/chromedevtools/) requires a specific
json format to connect to the webkit inspector.

The current format is missing some required fields that make the connection with the plugin
fail.

The format expected by the plugin is as follows:
  {
   "title": "Foo",
   "url": "http://foo",
   "devtoolsFrontendUrl": "/Main.html?ws=localhost:9222/devtools/page/1",
   "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/1"
  }

The current format is missing the entries for "devtoolsFrontendUrl" and
"webSocketDebuggerUrl".

The plugin also sends an HTTP GET request to http://host:port/json instead of
http://host:port/pagelist.json when retrieving the pages list.

This patch fixes the issues by adding support for the missing fields and accepting requests
for "/json" alongside "/pagelist.json".

* UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
(WebKit::WebInspectorServer::platformResourceForPath):
Also accept requests for "/json" alongside "pagelist.json".
(WebKit::WebInspectorServer::buildPageList):
Add fields required by chromedevtools plugin.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156555 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp

index 66f985dd8549815461ae39559dc540feb6d4135c..e1a8404c6de7dbb332e2b854165361affed6d7a3 100644 (file)
@@ -1,3 +1,39 @@
+2013-09-27  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>
+
+        Web Inspector: Make WebKitGTK+ port work with Eclipse chromedevtools plugin
+        https://bugs.webkit.org/show_bug.cgi?id=121121
+
+        Reviewed by Gustavo Noronha Silva.
+
+        The chromedevtools plugin (http://code.google.com/p/chromedevtools/) requires a specific
+        json format to connect to the webkit inspector.
+
+        The current format is missing some required fields that make the connection with the plugin
+        fail.
+
+        The format expected by the plugin is as follows:
+          {
+           "title": "Foo",
+           "url": "http://foo",
+           "devtoolsFrontendUrl": "/Main.html?ws=localhost:9222/devtools/page/1",
+           "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/1"
+          }
+
+        The current format is missing the entries for "devtoolsFrontendUrl" and
+        "webSocketDebuggerUrl".
+
+        The plugin also sends an HTTP GET request to http://host:port/json instead of
+        http://host:port/pagelist.json when retrieving the pages list.
+
+        This patch fixes the issues by adding support for the missing fields and accepting requests
+        for "/json" alongside "/pagelist.json".
+
+        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
+        (WebKit::WebInspectorServer::platformResourceForPath):
+        Also accept requests for "/json" alongside "pagelist.json".
+        (WebKit::WebInspectorServer::buildPageList):
+        Add fields required by chromedevtools plugin.
+
 2013-09-26  Darin Adler  <darin@apple.com>
 
         rename KURL to URL
index ba901df0b8a4b4e2d5dfa5be4cb753d59b6f105c..710581ea0d95bc725520ce56344bf686314dcc30 100644 (file)
@@ -43,7 +43,7 @@ namespace WebKit {
 bool WebInspectorServer::platformResourceForPath(const String& path, Vector<char>& data, String& contentType)
 {
     // The page list contains an unformated list of pages that can be inspected with a link to open a session.
-    if (path == "/pagelist.json") {
+    if (path == "/pagelist.json" || path == "/json") {
         buildPageList(data, contentType);
         return true;
     }
@@ -84,6 +84,14 @@ bool WebInspectorServer::platformResourceForPath(const String& path, Vector<char
 
 void WebInspectorServer::buildPageList(Vector<char>& data, String& contentType)
 {
+    // chromedevtools (http://code.google.com/p/chromedevtools) 0.3.8 expected JSON format:
+    // {
+    //  "title": "Foo",
+    //  "url": "http://foo",
+    //  "devtoolsFrontendUrl": "/Main.html?ws=localhost:9222/devtools/page/1",
+    //  "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/1"
+    // },
+
     StringBuilder builder;
     builder.appendLiteral("[ ");
     ClientMap::iterator end = m_clientMap.end();
@@ -100,6 +108,20 @@ void WebInspectorServer::buildPageList(Vector<char>& data, String& contentType)
         builder.appendLiteral("\", \"inspectorUrl\": \"");
         builder.appendLiteral("/Main.html?page=");
         builder.appendNumber(it->key);
+        builder.appendLiteral("\", \"devtoolsFrontendUrl\": \"");
+        builder.appendLiteral("/Main.html?ws=");
+        builder.append(bindAddress());
+        builder.appendLiteral(":");
+        builder.appendNumber(port());
+        builder.appendLiteral("/devtools/page/");
+        builder.appendNumber(it->key);
+        builder.appendLiteral("\", \"webSocketDebuggerUrl\": \"");
+        builder.appendLiteral("ws://");
+        builder.append(bindAddress());
+        builder.appendLiteral(":");
+        builder.appendNumber(port());
+        builder.appendLiteral("/devtools/page/");
+        builder.appendNumber(it->key);
         builder.appendLiteral("\" }");
     }
     builder.appendLiteral(" ]");