- Revision
- 96616
- Author
- carlo...@webkit.org
- Date
- 2011-10-04 11:14:19 -0700 (Tue, 04 Oct 2011)
Log Message
[GTK] Implement default error pages in WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=69255
Reviewed by Martin Robinson.
* UIProcess/API/gtk/WebKitError.cpp:
(webkit_policy_error_quark): Add quark for policy errors.
(webkit_plugin_error_quark): Add quark for plugin errors.
* UIProcess/API/gtk/WebKitError.h: Add policy and plugin errors.
* UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
(webkitWebLoaderClientLoadFailed): Load a custom error page when
load failed and signal has not been handled.
(webkit_web_loader_client_class_init): Add default implementation
for provisional_load_failed and load_failed virtual methods.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (96615 => 96616)
--- trunk/Source/WebKit2/ChangeLog 2011-10-04 18:12:58 UTC (rev 96615)
+++ trunk/Source/WebKit2/ChangeLog 2011-10-04 18:14:19 UTC (rev 96616)
@@ -1,5 +1,22 @@
2011-10-04 Carlos Garcia Campos <cgar...@igalia.com>
+ [GTK] Implement default error pages in WebKit2 GTK+ API
+ https://bugs.webkit.org/show_bug.cgi?id=69255
+
+ Reviewed by Martin Robinson.
+
+ * UIProcess/API/gtk/WebKitError.cpp:
+ (webkit_policy_error_quark): Add quark for policy errors.
+ (webkit_plugin_error_quark): Add quark for plugin errors.
+ * UIProcess/API/gtk/WebKitError.h: Add policy and plugin errors.
+ * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
+ (webkitWebLoaderClientLoadFailed): Load a custom error page when
+ load failed and signal has not been handled.
+ (webkit_web_loader_client_class_init): Add default implementation
+ for provisional_load_failed and load_failed virtual methods.
+
+2011-10-04 Carlos Garcia Campos <cgar...@igalia.com>
+
[GTK] Add webkit_web_view_load_alternate_html() to WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=69254
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp (96615 => 96616)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp 2011-10-04 18:12:58 UTC (rev 96615)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp 2011-10-04 18:14:19 UTC (rev 96616)
@@ -24,7 +24,7 @@
#include "WebKitPrivate.h"
#include <WebCore/ErrorsGtk.h>
-GQuark webkit_network_error_quark(void)
+GQuark webkit_network_error_quark()
{
return g_quark_from_static_string(WebCore::errorDomainNetwork);
}
@@ -34,3 +34,26 @@
COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NETWORK_ERROR_UNKNOWN_PROTOCOL, NetworkErrorUnknownProtocol);
COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NETWORK_ERROR_CANCELLED, NetworkErrorCancelled);
COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST, NetworkErrorFileDoesNotExist);
+
+GQuark webkit_policy_error_quark()
+{
+ return g_quark_from_static_string(WebCore::errorDomainPolicy);
+}
+
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_POLICY_ERROR_FAILED, PolicyErrorFailed);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE, PolicyErrorCannotShowMimeType);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_POLICY_ERROR_CANNOT_SHOW_URL, PolicyErrorCannotShowURL);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE, PolicyErrorFrameLoadInterruptedByPolicyChange);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT, PolicyErrorCannotUseRestrictedPort);
+
+GQuark webkit_plugin_error_quark()
+{
+ return g_quark_from_static_string(WebCore::errorDomainPlugin);
+}
+
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PLUGIN_ERROR_FAILED, PluginErrorFailed);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PLUGIN_ERROR_CANNOT_FIND_PLUGIN, PluginErrorCannotFindPlugin);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PLUGIN_ERROR_CANNOT_LOAD_PLUGIN, PluginErrorCannotLoadPlugin);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PLUGIN_ERROR_JAVA_UNAVAILABLE, PluginErrorJavaUnavailable);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PLUGIN_ERROR_CONNECTION_CANCELLED, PluginErrorConnectionCancelled);
+COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD, PluginErrorWillHandleLoad);
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h (96615 => 96616)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h 2011-10-04 18:12:58 UTC (rev 96615)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h 2011-10-04 18:14:19 UTC (rev 96616)
@@ -31,6 +31,8 @@
G_BEGIN_DECLS
#define WEBKIT_NETWORK_ERROR webkit_network_error_quark ()
+#define WEBKIT_POLICY_ERROR webkit_policy_error_quark ()
+#define WEBKIT_PLUGIN_ERROR webkit_plugin_error_quark ()
/**
* WebKitNetworkError:
@@ -51,9 +53,32 @@
WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST = 303
} WebKitNetworkError;
+typedef enum {
+ WEBKIT_POLICY_ERROR_FAILED = 199,
+ WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE = 100,
+ WEBKIT_POLICY_ERROR_CANNOT_SHOW_URL = 101,
+ WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE = 102,
+ WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT = 103
+} WebKitPolicyError;
+
+typedef enum {
+ WEBKIT_PLUGIN_ERROR_FAILED = 299,
+ WEBKIT_PLUGIN_ERROR_CANNOT_FIND_PLUGIN = 200,
+ WEBKIT_PLUGIN_ERROR_CANNOT_LOAD_PLUGIN = 201,
+ WEBKIT_PLUGIN_ERROR_JAVA_UNAVAILABLE = 202,
+ WEBKIT_PLUGIN_ERROR_CONNECTION_CANCELLED = 203,
+ WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD = 204,
+} WebKitPluginError;
+
WK_EXPORT GQuark
webkit_network_error_quark (void);
+WK_EXPORT GQuark
+webkit_policy_error_quark (void);
+
+WK_EXPORT GQuark
+webkit_plugin_error_quark (void);
+
G_END_DECLS
#endif
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp (96615 => 96616)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp 2011-10-04 18:12:58 UTC (rev 96615)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp 2011-10-04 18:14:19 UTC (rev 96616)
@@ -20,6 +20,7 @@
#include "config.h"
#include "WebKitWebLoaderClient.h"
+#include "WebKitError.h"
#include "WebKitMarshal.h"
#include "WebKitPrivate.h"
#include "WebKitWebView.h"
@@ -158,6 +159,19 @@
WKPageSetPageLoaderClient(toAPI(page), &loaderClient);
}
+static gboolean webkitWebLoaderClientLoadFailed(WebKitWebLoaderClient* client, const gchar* failingURI, GError* error)
+{
+ if (g_error_matches(error, WEBKIT_NETWORK_ERROR, WEBKIT_NETWORK_ERROR_CANCELLED)
+ || g_error_matches(error, WEBKIT_POLICY_ERROR, WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE)
+ || g_error_matches(error, WEBKIT_PLUGIN_ERROR, WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD))
+ return FALSE;
+
+ GOwnPtr<char> htmlString(g_strdup_printf("<html><body>%s</body></html>", error->message));
+ webkit_web_view_load_alternate_html(client->priv->view.get(), htmlString.get(), 0, failingURI);
+
+ return TRUE;
+}
+
static void webkitWebLoaderClientSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)
{
WebKitWebLoaderClient* client = WEBKIT_WEB_LOADER_CLIENT(object);
@@ -206,6 +220,9 @@
objectClass->constructed = webkitWebLoaderClientConstructed;
objectClass->finalize = webkitWebLoaderClientFinalize;
+ clientClass->provisional_load_failed = webkitWebLoaderClientLoadFailed;
+ clientClass->load_failed = webkitWebLoaderClientLoadFailed;
+
/**
* WebKitWebView:web-view:
*