Initial implementation of WebInspector for WebKit2 GTK port.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Sep 2011 02:30:15 +0000 (02:30 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Sep 2011 02:30:15 +0000 (02:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=68235

Patch by Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com> on 2011-09-29
Reviewed by Martin Robinson.

* UIProcess/WebInspectorProxy.cpp:
(WebKit::WebInspectorProxy::WebInspectorProxy): Initialize the native window handles of GTK.
* UIProcess/WebInspectorProxy.h: Add native window handle for inspector window.
* UIProcess/gtk/WebInspectorGtk.cpp:
(WebKit::inspectorFilesBasePath): Base folder for inspector resources.
(WebKit::inspectorWindowDestroyed): Invoked when inspector window is closed by user.
(WebKit::WebInspectorProxy::windowDestroyed): Resets the native handles to 0 when user closes the window.
(WebKit::WebInspectorProxy::platformCreateInspectorPage): Create the WebView for inspector.
(WebKit::WebInspectorProxy::platformOpen): Create the window for inspector.
(WebKit::WebInspectorProxy::platformDidClose): Close both WebView & window of inspector.
(WebKit::WebInspectorProxy::platformInspectedURLChanged): Update the title of inspector window.
(WebKit::WebInspectorProxy::inspectorPageURL): Return the absolute URL of inspector.html.
(WebKit::WebInspectorProxy::inspectorBaseURL): Return the location where inspector resources are present.
WebProcess is given read access to this folder only for loading file URLs by sandboxed extension.

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

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/WebInspectorProxy.cpp
Source/WebKit2/UIProcess/WebInspectorProxy.h
Source/WebKit2/UIProcess/gtk/WebInspectorGtk.cpp

index 89ba4c4..162168f 100644 (file)
@@ -1,3 +1,25 @@
+2011-09-29  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>
+
+        Initial implementation of WebInspector for WebKit2 GTK port.
+        https://bugs.webkit.org/show_bug.cgi?id=68235
+
+        Reviewed by Martin Robinson.
+
+        * UIProcess/WebInspectorProxy.cpp:
+        (WebKit::WebInspectorProxy::WebInspectorProxy): Initialize the native window handles of GTK.
+        * UIProcess/WebInspectorProxy.h: Add native window handle for inspector window.
+        * UIProcess/gtk/WebInspectorGtk.cpp:
+        (WebKit::inspectorFilesBasePath): Base folder for inspector resources.
+        (WebKit::inspectorWindowDestroyed): Invoked when inspector window is closed by user.
+        (WebKit::WebInspectorProxy::windowDestroyed): Resets the native handles to 0 when user closes the window.
+        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Create the WebView for inspector.
+        (WebKit::WebInspectorProxy::platformOpen): Create the window for inspector.
+        (WebKit::WebInspectorProxy::platformDidClose): Close both WebView & window of inspector.
+        (WebKit::WebInspectorProxy::platformInspectedURLChanged): Update the title of inspector window.
+        (WebKit::WebInspectorProxy::inspectorPageURL): Return the absolute URL of inspector.html.
+        (WebKit::WebInspectorProxy::inspectorBaseURL): Return the location where inspector resources are present.
+        WebProcess is given read access to this folder only for loading file URLs by sandboxed extension.
+
 2011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
 
         [Qt] Fix build against Qt5 after refactor of widgets out of QtGUi
index 56887ef..0a36530 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2011 Motorola Mobility, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #if ENABLE(INSPECTOR)
 
 #include "WebInspectorMessages.h"
-#include "WebPageProxy.h"
 #include "WebPageCreationParameters.h"
+#include "WebPageGroup.h"
+#include "WebPageProxy.h"
 #include "WebPreferences.h"
 #include "WebProcessProxy.h"
-#include "WebPageGroup.h"
 
 #if PLATFORM(WIN)
 #include "WebView.h"
 #endif
 
-#include <WebCore/NotImplemented.h>
-
 using namespace WebCore;
 
 namespace WebKit {
@@ -72,6 +71,9 @@ WebInspectorProxy::WebInspectorProxy(WebPageProxy* page)
     , m_isProfilingPage(false)
 #if PLATFORM(WIN)
     , m_inspectorWindow(0)
+#elif PLATFORM(GTK)
+    , m_inspectorView(0)
+    , m_inspectorWindow(0)
 #endif
 {
 }
index d62a53e..a70ac70 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2011 Motorola Mobility, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -82,6 +83,8 @@ public:
     
 #if PLATFORM(MAC)
     void inspectedViewFrameDidChange();
+#elif PLATFORM(GTK)
+    void windowDestroyed();
 #endif
 
     void showConsole();
@@ -175,6 +178,9 @@ private:
 #elif PLATFORM(WIN)
     HWND m_inspectorWindow;
     RefPtr<WebView> m_inspectorView;
+#elif PLATFORM(GTK)
+    GtkWidget* m_inspectorView;
+    GtkWidget* m_inspectorWindow;
 #endif
 };
 
index c4502c1..1be2a00 100644 (file)
 
 #if ENABLE(INSPECTOR)
 
+#include "WebKitWebViewBasePrivate.h"
+#include "WebProcessProxy.h"
+
+#include <WebCore/FileSystem.h>
 #include <WebCore/NotImplemented.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+#include <wtf/gobject/GOwnPtr.h>
+#include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebKit {
 
+static const char* inspectorFilesBasePath()
+{
+    const gchar* environmentPath = g_getenv("WEBKIT_INSPECTOR_PATH");
+    if (environmentPath && g_file_test(environmentPath, G_FILE_TEST_IS_DIR))
+        return environmentPath;
+
+    static const char* inspectorFilesPath = DATA_DIR""G_DIR_SEPARATOR_S
+                                            "webkitgtk-"WEBKITGTK_API_VERSION_STRING""G_DIR_SEPARATOR_S
+                                            "webinspector"G_DIR_SEPARATOR_S;
+    return inspectorFilesPath;
+}
+
+static gboolean inspectorWindowDestroyed(GtkWidget* window, GdkEvent*, gpointer userData)
+{
+    WebInspectorProxy* inspectorProxy = static_cast<WebInspectorProxy*>(userData);
+
+    // Inform WebProcess about webinspector closure. Not doing so,
+    // results in failure of subsequent invocation of webinspector.
+    inspectorProxy->close();
+    inspectorProxy->windowDestroyed();
+
+    return FALSE;
+}
+
+void WebInspectorProxy::windowDestroyed()
+{
+    ASSERT(m_inspectorView);
+    ASSERT(m_inspectorWindow);
+    m_inspectorView = 0;
+    m_inspectorWindow = 0;
+}
+
 WebPageProxy* WebInspectorProxy::platformCreateInspectorPage()
 {
-    notImplemented();
-    return 0;
+    ASSERT(m_page);
+    ASSERT(!m_inspectorView);
+    m_inspectorView = GTK_WIDGET(webkitWebViewBaseCreate(page()->process()->context(), inspectorPageGroup()));
+    return webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(m_inspectorView));
 }
 
 void WebInspectorProxy::platformOpen()
 {
-    notImplemented();
+    ASSERT(!m_inspectorWindow);
+    m_inspectorWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+    gtk_window_set_title(GTK_WINDOW(m_inspectorWindow), _("Web Inspector"));
+    gtk_window_set_default_size(GTK_WINDOW(m_inspectorWindow), initialWindowWidth, initialWindowHeight);
+    g_signal_connect(m_inspectorWindow, "delete-event", G_CALLBACK(inspectorWindowDestroyed), this);
+
+    gtk_container_add(GTK_CONTAINER(m_inspectorWindow), m_inspectorView);
+    gtk_widget_show(m_inspectorView);
+    gtk_widget_show(m_inspectorWindow);
 }
 
 void WebInspectorProxy::platformDidClose()
 {
-    notImplemented();
+    if (m_inspectorWindow) {
+        gtk_widget_destroy(m_inspectorWindow);
+        m_inspectorWindow = 0;
+        m_inspectorView = 0;
+    }
 }
 
 void WebInspectorProxy::platformBringToFront()
@@ -55,21 +110,23 @@ void WebInspectorProxy::platformBringToFront()
     notImplemented();
 }
 
-void WebInspectorProxy::platformInspectedURLChanged(const String&)
+void WebInspectorProxy::platformInspectedURLChanged(const String& url)
 {
-    notImplemented();
+    GOwnPtr<gchar> title(g_strdup_printf("%s - %s", _("Web Inspector"), url.utf8().data()));
+    gtk_window_set_title(GTK_WINDOW(m_inspectorWindow), title.get());
 }
 
 String WebInspectorProxy::inspectorPageURL() const
 {
-    notImplemented();
-    return String();
+    GOwnPtr<gchar> filePath(g_build_filename(inspectorFilesBasePath(), "inspector.html", NULL));
+    GOwnPtr<gchar> fileURI(g_filename_to_uri(filePath.get(), 0, 0));
+    return WebCore::filenameToString(fileURI.get());
 }
 
 String WebInspectorProxy::inspectorBaseURL() const
 {
-    notImplemented();
-    return String();
+    GOwnPtr<gchar> fileURI(g_filename_to_uri(inspectorFilesBasePath(), 0, 0));
+    return WebCore::filenameToString(fileURI.get());
 }
 
 unsigned WebInspectorProxy::platformInspectedWindowHeight()