WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
WIP Patch v1
bug-120160-20130920170210.patch (text/plain), 29.02 KB, created by
Brian Holt
on 2013-09-20 09:01:15 PDT
(
hide
)
Description:
WIP Patch v1
Filename:
MIME Type:
Creator:
Brian Holt
Created:
2013-09-20 09:01:15 PDT
Size:
29.02 KB
patch
obsolete
>Subversion Revision: 155329 >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index 4b9c24140b38885f1f701a9c8df6f9a65fa53ece..a9f12eb0483595e9499022ba81c60a52731b3e5c 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,49 @@ >+2013-09-20 Brian Holt <brian.holt@samsung.com> >+ >+ [GTK] Add WebKit2 API for SSL errors >+ https://bugs.webkit.org/show_bug.cgi?id=120160 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new permission request for SSL errors. This includes a new >+ policy enumeration to allow users to indicate that they wish to be >+ asked if there is an SSL error, and a new message to the >+ WebProcess to add an exception for a specific certificate. >+ >+ * GNUmakefile.list.am: >+ * PlatformGTK.cmake: >+ * Shared/APIObject.h: >+ * UIProcess/API/gtk/WebKitLoaderClient.cpp: >+ (didFailProvisionalLoadWithErrorForFrame): >+ * UIProcess/API/gtk/WebKitSSLPermissionRequest.cpp: Added. >+ (webkitSSLPermissionRequestAllow): >+ (webkitSSLPermissionRequestDeny): >+ (webkit_permission_request_interface_init): >+ (webkitSSLPermissionRequestDispose): >+ (webkit_ssl_permission_request_class_init): >+ (webkitSSLPermissionRequestCreate): >+ * UIProcess/API/gtk/WebKitSSLPermissionRequest.h: Added. >+ * UIProcess/API/gtk/WebKitSSLPermissionRequestPrivate.h: Added. >+ * UIProcess/API/gtk/WebKitUIClient.cpp: >+ * UIProcess/API/gtk/WebKitWebContext.cpp: >+ (createDefaultWebContext): >+ * UIProcess/API/gtk/WebKitWebContext.h: >+ * UIProcess/API/gtk/WebKitWebView.cpp: >+ (webkitWebViewEmitLoadChanged): >+ (webkitWebViewLoadFailed): >+ (webkitWebViewLoadFailedWithTLSErrors): >+ * UIProcess/API/gtk/WebKitWebViewPrivate.h: >+ * UIProcess/API/gtk/tests/TestSSL.cpp: >+ (testSSLPermissionRequest): >+ (httpsServerCallback): >+ (beforeAll): >+ * UIProcess/WebContext.cpp: >+ (WebKit::WebContext::allowSpecificHTTPSCertificateForHost): >+ * WebProcess/WebProcess.h: >+ * WebProcess/WebProcess.messages.in: >+ * WebProcess/soup/WebProcessSoup.cpp: >+ (WebKit::WebProcess::allowSpecificHTTPSCertificateForHost): >+ > 2013-09-08 Christophe Dumez <ch.dumez@sisa.samsung.com> > > [wk2] REGRESSION (r154673): PDF scrolling moves very slowly >diff --git a/Source/WebKit2/GNUmakefile.list.am b/Source/WebKit2/GNUmakefile.list.am >index 575ec27e1ee91b34e19432bef121cbf9dad1dc91..024351156e62b2e373d6242e88a9488b19592b93 100644 >--- a/Source/WebKit2/GNUmakefile.list.am >+++ b/Source/WebKit2/GNUmakefile.list.am >@@ -756,6 +756,9 @@ webkit2_sources += \ > Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp \ > Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h \ > Source/WebKit2/UIProcess/API/gtk/WebKitSettingsPrivate.h \ >+ Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.cpp \ >+ Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.h \ >+ Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequestPrivate.h \ > Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp \ > Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h \ > Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp \ >diff --git a/Source/WebKit2/PlatformGTK.cmake b/Source/WebKit2/PlatformGTK.cmake >index 6a7aa6183e9e1f54adc001739aee974ced0fcdb4..358ea78339bd109dd1cf882c22f0016f2aaec4d0 100644 >--- a/Source/WebKit2/PlatformGTK.cmake >+++ b/Source/WebKit2/PlatformGTK.cmake >@@ -203,6 +203,9 @@ list(APPEND WebKit2_SOURCES > UIProcess/API/gtk/WebKitSettings.cpp > UIProcess/API/gtk/WebKitSettings.h > UIProcess/API/gtk/WebKitSettingsPrivate.h >+ UIProcess/API/gtk/WebKitSSLPermissionRequest.cpp >+ UIProcess/API/gtk/WebKitSSLPermissionRequest.h >+ UIProcess/API/gtk/WebKitSSLPermissionRequestPrivate.h > UIProcess/API/gtk/WebKitTextChecker.cpp > UIProcess/API/gtk/WebKitTextChecker.h > UIProcess/API/gtk/WebKitUIClient.cpp >@@ -280,6 +283,7 @@ set(WebKit2_INSTALLED_HEADERS > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitScriptDialog.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitSecurityManager.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitSettings.h >+ ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitSSLPermissionRequest.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitURIRequest.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitURIResponse.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitURISchemeRequest.h >diff --git a/Source/WebKit2/Shared/APIObject.h b/Source/WebKit2/Shared/APIObject.h >index 441e05e987f673c2c74a6cc7a70e4a7c4e4732f8..c2b98da1fa2ce394d5077aa535467fe250ddf197 100644 >--- a/Source/WebKit2/Shared/APIObject.h >+++ b/Source/WebKit2/Shared/APIObject.h >@@ -107,6 +107,7 @@ public: > TypePageGroup, > TypePluginSiteDataManager, > TypePreferences, >+ TypeSSLPermissionRequest, > TypeTextChecker, > TypeVibration, > TypeViewportAttributes, >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp >index c3c4a23b2ccfaacc6c9aba02330d6e7fe64b692a..88d71b7f30c24981cb280daf26b32f38ec620c81 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp >@@ -57,8 +57,8 @@ static void didFailProvisionalLoadWithErrorForFrame(WKPageRef page, WKFrameRef f > resourceError.errorCode(), > resourceError.localizedDescription().utf8().data())); > if (resourceError.tlsErrors()) { >- webkitWebViewLoadFailedWithTLSErrors(WEBKIT_WEB_VIEW(clientInfo), resourceError.failingURL().utf8().data(), webError.get(), >- static_cast<GTlsCertificateFlags>(resourceError.tlsErrors()), resourceError.certificate()); >+ PlatformCertificateInfo certificateInfo(resourceError); >+ webkitWebViewLoadFailedWithTLSErrors(WEBKIT_WEB_VIEW(clientInfo), resourceError.failingURL().utf8().data(), webError.get(), certificateInfo); > } else > webkitWebViewLoadFailed(WEBKIT_WEB_VIEW(clientInfo), WEBKIT_LOAD_STARTED, resourceError.failingURL().utf8().data(), webError.get()); > } >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.cpp >new file mode 100644 >index 0000000000000000000000000000000000000000..9ae167671c5fd6051282fc420dd7a75a457e1eab >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.cpp >@@ -0,0 +1,114 @@ >+/* >+ * Copyright (C) 2013 Samsung Electronics Inc. All rights reserved. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Library General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Library General Public License for more details. >+ * >+ * You should have received a copy of the GNU Library General Public License >+ * along with this library; see the file COPYING.LIB. If not, write to >+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301, USA. >+ */ >+ >+#include "config.h" >+#include "WebKitSSLPermissionRequest.h" >+ >+#include "WebKitPermissionRequest.h" >+#include "WebKitSSLPermissionRequestPrivate.h" >+#include "WebKitWebContextPrivate.h" >+#include "WebKitWebViewPrivate.h" >+ >+using namespace WebKit; >+ >+/** >+ * SECTION: WebKitSSLPermissionRequest >+ * @Short_description: A permission request for SSL errors >+ * @Title: WebKitSSLPermissionRequest >+ * @See_also: #WebKitPermissionRequest, #WebKitWebView >+ * >+ * WebKitSSLPermissionRequest represents a request for >+ * permission to decide whether WebKit should continue navigation >+ * to a website when there were SSL errors, for example because >+ * of an untrusted certificate. >+ */ >+ >+static void webkit_permission_request_interface_init(WebKitPermissionRequestIface*); >+ >+struct _WebKitSSLPermissionRequestPrivate { >+ WebKitWebView* webView; >+ WebCertificateInfo* certificateInfo; >+ String host; >+ const char* failingURI; >+ GError* error; >+ bool madeDecision; >+}; >+ >+WEBKIT_DEFINE_TYPE_WITH_CODE( >+ WebKitSSLPermissionRequest, webkit_ssl_permission_request, G_TYPE_OBJECT, >+ G_IMPLEMENT_INTERFACE(WEBKIT_TYPE_PERMISSION_REQUEST, webkit_permission_request_interface_init)) >+ >+static void webkitSSLPermissionRequestAllow(WebKitPermissionRequest* request) >+{ >+ ASSERT(WEBKIT_IS_SSL_PERMISSION_REQUEST(request)); >+ >+ WebKitSSLPermissionRequestPrivate* priv = WEBKIT_SSL_PERMISSION_REQUEST(request)->priv; >+ >+ // Only one decision at a time. >+ if (priv->madeDecision) >+ return; >+ >+ webkitWebContextGetContext(webkit_web_view_get_context(priv->webView))->allowSpecificHTTPSCertificateForHost(priv->certificateInfo, priv->host); >+ webkitWebViewEmitLoadChanged(priv->webView, WEBKIT_LOAD_FINISHED); >+ priv->madeDecision = true; >+} >+ >+static void webkitSSLPermissionRequestDeny(WebKitPermissionRequest* request) >+{ >+ ASSERT(WEBKIT_IS_SSL_PERMISSION_REQUEST(request)); >+ >+ WebKitSSLPermissionRequestPrivate* priv = WEBKIT_SSL_PERMISSION_REQUEST(request)->priv; >+ >+ // Only one decision at a time. >+ if (priv->madeDecision) >+ return; >+ >+ webkitWebViewLoadFailed(priv->webView, WEBKIT_LOAD_STARTED, priv->failingURI, priv->error); >+ priv->madeDecision = true; >+} >+ >+static void webkit_permission_request_interface_init(WebKitPermissionRequestIface* iface) >+{ >+ iface->allow = webkitSSLPermissionRequestAllow; >+ iface->deny = webkitSSLPermissionRequestDeny; >+} >+ >+static void webkitSSLPermissionRequestDispose(GObject* object) >+{ >+ // Default behaviour when no decision has been made is denying the request. >+ webkitSSLPermissionRequestDeny(WEBKIT_PERMISSION_REQUEST(object)); >+ G_OBJECT_CLASS(webkit_ssl_permission_request_parent_class)->dispose(object); >+} >+ >+static void webkit_ssl_permission_request_class_init(WebKitSSLPermissionRequestClass* klass) >+{ >+ GObjectClass* objectClass = G_OBJECT_CLASS(klass); >+ objectClass->dispose = webkitSSLPermissionRequestDispose; >+} >+ >+WebKitSSLPermissionRequest* webkitSSLPermissionRequestCreate(WebKitWebView* webView, WebCertificateInfo* certificateInfo, const String& host, const char* failingURI, GError *error) >+{ >+ WebKitSSLPermissionRequest* sslPermissionRequest = WEBKIT_SSL_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_SSL_PERMISSION_REQUEST, NULL)); >+ sslPermissionRequest->priv->webView = webView; >+ sslPermissionRequest->priv->certificateInfo = certificateInfo; >+ sslPermissionRequest->priv->host = host; >+ sslPermissionRequest->priv->failingURI = failingURI; >+ sslPermissionRequest->priv->error = error; >+ return sslPermissionRequest; >+} >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.h b/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.h >new file mode 100644 >index 0000000000000000000000000000000000000000..b63373408bfeedd2753cc6c516447949399f50d1 >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequest.h >@@ -0,0 +1,64 @@ >+/* >+ * Copyright (C) 2013 Samsung Electronics Inc. All rights reserved. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Library General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Library General Public License for more details. >+ * >+ * You should have received a copy of the GNU Library General Public License >+ * along with this library; see the file COPYING.LIB. If not, write to >+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301, USA. >+ */ >+ >+#if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION) >+#error "Only <webkit2/webkit2.h> can be included directly." >+#endif >+ >+#ifndef WebKitSSLPermissionRequest_h >+#define WebKitSSLPermissionRequest_h >+ >+#include <glib-object.h> >+#include <webkit2/WebKitDefines.h> >+ >+G_BEGIN_DECLS >+ >+#define WEBKIT_TYPE_SSL_PERMISSION_REQUEST (webkit_ssl_permission_request_get_type()) >+#define WEBKIT_SSL_PERMISSION_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_SSL_PERMISSION_REQUEST, WebKitSSLPermissionRequest)) >+#define WEBKIT_SSL_PERMISSION_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_SSL_PERMISSION_REQUEST, WebKitSSLPermissionRequestClass)) >+#define WEBKIT_IS_SSL_PERMISSION_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_SSL_PERMISSION_REQUEST)) >+#define WEBKIT_IS_SSL_PERMISSION_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_SSL_PERMISSION_REQUEST)) >+#define WEBKIT_SSL_PERMISSION_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_SSL_PERMISSION_REQUEST, WebKitSSLPermissionRequestClass)) >+ >+typedef struct _WebKitSSLPermissionRequest WebKitSSLPermissionRequest; >+typedef struct _WebKitSSLPermissionRequestClass WebKitSSLPermissionRequestClass; >+typedef struct _WebKitSSLPermissionRequestPrivate WebKitSSLPermissionRequestPrivate; >+ >+struct _WebKitSSLPermissionRequest { >+ GObject parent; >+ >+ /*< private >*/ >+ WebKitSSLPermissionRequestPrivate *priv; >+}; >+ >+struct _WebKitSSLPermissionRequestClass { >+ GObjectClass parent_class; >+ >+ void (*_webkit_reserved0) (void); >+ void (*_webkit_reserved1) (void); >+ void (*_webkit_reserved2) (void); >+ void (*_webkit_reserved3) (void); >+}; >+ >+WEBKIT_API GType >+webkit_ssl_permission_request_get_type (void); >+ >+G_END_DECLS >+ >+#endif >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequestPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequestPrivate.h >new file mode 100644 >index 0000000000000000000000000000000000000000..9674a8c4af9e0590d11c5aa36e776c386b9263b2 >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitSSLPermissionRequestPrivate.h >@@ -0,0 +1,30 @@ >+/* >+ * Copyright (C) 2013 Samsung Electronics Inc. All rights reserved. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Library General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Library General Public License for more details. >+ * >+ * You should have received a copy of the GNU Library General Public License >+ * along with this library; see the file COPYING.LIB. If not, write to >+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301, USA. >+ */ >+ >+#ifndef WebKitSSLPermissionRequestPrivate_h >+#define WebKitSSLPermissionRequestPrivate_h >+ >+#include "WebCertificateInfo.h" >+#include "WebKitPrivate.h" >+#include "WebKitSSLPermissionRequest.h" >+#include "WebKitWebView.h" >+ >+WebKitSSLPermissionRequest* webkitSSLPermissionRequestCreate(WebKitWebView*, WebKit::WebCertificateInfo*, const String&, const char*, GError*); >+ >+#endif // WebKitSSLPermissionRequestPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp >index 0899b8563894a4005a12831f65e3f9eb2b6728c8..7dbeab7a9f89e38621f26cb9ced9c9776b0efe2b 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp >@@ -23,6 +23,7 @@ > #include "WebKitFileChooserRequestPrivate.h" > #include "WebKitGeolocationPermissionRequestPrivate.h" > #include "WebKitPrivate.h" >+#include "WebKitSSLPermissionRequestPrivate.h" > #include "WebKitWebViewBasePrivate.h" > #include "WebKitWebViewPrivate.h" > #include "WebKitWindowPropertiesPrivate.h" >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >index d2c8bbdf9b544ceb45218f03e936e72540cf7d5e..a1fe896cb64a7267207bb0b6145e63aceffea68b 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >@@ -197,7 +197,7 @@ static gpointer createDefaultWebContext(gpointer) > priv->context = WebContext::create(WebCore::filenameToString(injectedBundleFilename().data())); > priv->requestManager = webContext->priv->context->supplement<WebSoupRequestManagerProxy>(); > priv->context->setCacheModel(CacheModelPrimaryWebBrowser); >- priv->tlsErrorsPolicy = WEBKIT_TLS_ERRORS_POLICY_IGNORE; >+ priv->tlsErrorsPolicy = WEBKIT_TLS_ERRORS_POLICY_ASK; > > attachInjectedBundleClientToContext(webContext.get()); > attachDownloadClientToContext(webContext.get()); >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >index dd38c1d375be9650b94b853fd31128aa2737a6af..13e2c2781b62f0f6797de44d792c3e2a208d7b05 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >@@ -65,12 +65,14 @@ typedef enum { > * WebKitTLSErrorsPolicy: > * @WEBKIT_TLS_ERRORS_POLICY_IGNORE: Ignore TLS errors. > * @WEBKIT_TLS_ERRORS_POLICY_FAIL: TLS errors make the load to finish with an error. >+ * @WEBKIT_TLS_ERRORS_POLICY_ASK: Ask for permission to load the page on a TLS error. > * > * Enum values used to denote the TLS errors policy. > */ > typedef enum { > WEBKIT_TLS_ERRORS_POLICY_IGNORE, >- WEBKIT_TLS_ERRORS_POLICY_FAIL >+ WEBKIT_TLS_ERRORS_POLICY_FAIL, >+ WEBKIT_TLS_ERRORS_POLICY_ASK > } WebKitTLSErrorsPolicy; > > /** >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >index dd5e8dee834d08d3730ca32e05bed403cf7e53a5..28c6aa607b27409f2eab94cf6cf3333dc921c4d5 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >@@ -22,8 +22,6 @@ > #include "WebKitWebView.h" > > #include "ImageOptions.h" >-#include "PlatformCertificateInfo.h" >-#include "WebCertificateInfo.h" > #include "WebContextMenuItem.h" > #include "WebContextMenuItemData.h" > #include "WebData.h" >@@ -47,6 +45,7 @@ > #include "WebKitPrintOperationPrivate.h" > #include "WebKitPrivate.h" > #include "WebKitResponsePolicyDecision.h" >+#include "WebKitSSLPermissionRequestPrivate.h" > #include "WebKitScriptDialogPrivate.h" > #include "WebKitUIClient.h" > #include "WebKitURIRequestPrivate.h" >@@ -1430,7 +1429,7 @@ static void webkitWebViewSetIsLoading(WebKitWebView* webView, bool isLoading) > g_object_thaw_notify(G_OBJECT(webView)); > } > >-static void webkitWebViewEmitLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent) >+void webkitWebViewEmitLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent) > { > if (loadEvent == WEBKIT_LOAD_STARTED) { > webkitWebViewSetIsLoading(webView, true); >@@ -1497,7 +1496,7 @@ void webkitWebViewLoadFailed(WebKitWebView* webView, WebKitLoadEvent loadEvent, > g_signal_emit(webView, signals[LOAD_CHANGED], 0, WEBKIT_LOAD_FINISHED); > } > >-void webkitWebViewLoadFailedWithTLSErrors(WebKitWebView* webView, const char* failingURI, GError *error, GTlsCertificateFlags tlsErrors, GTlsCertificate* certificate) >+void webkitWebViewLoadFailedWithTLSErrors(WebKitWebView* webView, const char* failingURI, GError *error, const PlatformCertificateInfo& platformCerticateInfo) > { > webkitWebViewSetIsLoading(webView, false); > >@@ -1505,6 +1504,11 @@ void webkitWebViewLoadFailedWithTLSErrors(WebKitWebView* webView, const char* fa > if (tlsErrorsPolicy == WEBKIT_TLS_ERRORS_POLICY_FAIL) { > webkitWebViewLoadFailed(webView, WEBKIT_LOAD_STARTED, failingURI, error); > return; >+ } else if (tlsErrorsPolicy == WEBKIT_TLS_ERRORS_POLICY_ASK) { >+ RefPtr<WebCertificateInfo> webCertificateInfo = WebCertificateInfo::create(platformCerticateInfo); >+ GRefPtr<WebKitSSLPermissionRequest> request = adoptGRef(webkitSSLPermissionRequestCreate(webView, webCertificateInfo.get(), "", failingURI, error)); >+ webkitWebViewMakePermissionRequest(webView, WEBKIT_PERMISSION_REQUEST(request.get())); >+ return; > } > > g_signal_emit(webView, signals[LOAD_CHANGED], 0, WEBKIT_LOAD_FINISHED); >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >index eb1f27db298cae38781b5db4248a3d6b87da4ba1..212373961c88e23d5ce3cdbf59291bcd814443e7 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >@@ -27,13 +27,15 @@ > #ifndef WebKitWebViewPrivate_h > #define WebKitWebViewPrivate_h > >+#include "PlatformCertificateInfo.h" > #include "WebImage.h" > #include "WebKitWebView.h" > #include <wtf/text/CString.h> > >+void webkitWebViewEmitLoadChanged(WebKitWebView*, WebKitLoadEvent); > void webkitWebViewLoadChanged(WebKitWebView*, WebKitLoadEvent); > void webkitWebViewLoadFailed(WebKitWebView*, WebKitLoadEvent, const char* failingURI, GError*); >-void webkitWebViewLoadFailedWithTLSErrors(WebKitWebView*, const char* failingURI, GError *, GTlsCertificateFlags, GTlsCertificate*); >+void webkitWebViewLoadFailedWithTLSErrors(WebKitWebView*, const char* failingURI, GError*, const WebKit::PlatformCertificateInfo&); > void webkitWebViewSetEstimatedLoadProgress(WebKitWebView*, double estimatedLoadProgress); > void webkitWebViewSetTitle(WebKitWebView*, const CString&); > void webkitWebViewUpdateURI(WebKitWebView*); >diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp >index db6ccc8522d151cb9c495d9d43f3e96f65252a6e..4b98fe56f56015b9485f92a99b60c4416ac99978 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp >@@ -28,6 +28,16 @@ static WebKitTestServer* kHttpServer; > > static const char* indexHTML = "<html><body>Testing WebKit2GTK+ SSL</body></htmll>"; > static const char* insecureContentHTML = "<html><script src=\"%s\"></script><body><p>Text + image <img src=\"%s\" align=\"right\"/></p></body></html>"; >+static const char SSLExpectedSuccessTitle[] = "WebKit2Gtk+ Authentication test"; >+static const char SSLExpectedFailureTitle[] = "Untrusted Connection"; >+static const char SSLSuccessHTMLString[] = >+ "<html>" >+ "<head><title>WebKit2Gtk+ SSL test</title></head>" >+ "<body></body></html>"; >+static const char SSLFailureHTMLString[] = >+ "<html>" >+ "<head><title>Untrusted Connection</title></head>" >+ "<body></body></html>"; > > class SSLTest: public LoadTrackingTest { > public: >@@ -132,6 +142,59 @@ static void testTLSErrorsPolicy(SSLTest* test, gconstpointer) > g_assert(!test->m_loadEvents.contains(LoadTrackingTest::LoadCommitted)); > } > >+class SSLPermissionTest: public LoadTrackingTest { >+public: >+ MAKE_GLIB_TEST_FIXTURE(SSLPermissionTest); >+ >+ SSLPermissionTest() >+ : m_allowPermissionRequests(false) >+ { >+ g_signal_connect(m_webView, "permission-request", G_CALLBACK(permissionRequested), this); >+ } >+ >+ static gboolean permissionRequested(WebKitWebView*, WebKitPermissionRequest* request, SSLPermissionTest* test) >+ { >+ g_assert(WEBKIT_IS_PERMISSION_REQUEST(request)); >+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request)); >+ >+ if (test->m_allowPermissionRequests) >+ webkit_permission_request_allow(request); >+ else >+ webkit_permission_request_deny(request); >+ >+ return TRUE; >+ } >+ >+ bool m_allowPermissionRequests; >+}; >+ >+static void testSSLPermissionRequest(SSLPermissionTest* test, gconstpointer) >+{ >+ WebKitWebContext* context = webkit_web_view_get_context(test->m_webView); >+ webkit_web_context_set_tls_errors_policy(context, WEBKIT_TLS_ERRORS_POLICY_ASK); >+ >+ // Test denying a permission request. >+ test->m_allowPermissionRequests = false; >+ test->loadURI(kHttpsServer->getURIForPath("/test-ssl/").data()); >+ test->waitUntilLoadFinished(); >+ g_assert(test->m_loadFailed); >+ g_assert(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed)); >+ g_assert(!test->m_loadEvents.contains(LoadTrackingTest::LoadCommitted)); >+ g_assert_cmpstr(webkit_web_view_get_title(test->m_webView), ==, SSLExpectedFailureTitle); >+ >+ >+ // Test allowing a permission request. >+ test->m_allowPermissionRequests = true; >+ test->loadURI(kHttpsServer->getURIForPath("/test-ssl/").data()); >+ test->waitUntilLoadFinished(); >+ g_assert(!test->m_loadFailed); >+ g_assert_cmpint(test->m_loadEvents[0], ==, LoadTrackingTest::ProvisionalLoadStarted); >+ g_assert_cmpint(test->m_loadEvents[1], ==, LoadTrackingTest::LoadCommitted); >+ g_assert_cmpint(test->m_loadEvents[2], ==, LoadTrackingTest::LoadFinished); >+ g_assert_cmpstr(webkit_web_view_get_title(test->m_webView), ==, SSLExpectedSuccessTitle); >+} >+ >+ > static void httpsServerCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) > { > if (message->method != SOUP_METHOD_GET) { >@@ -148,6 +211,9 @@ static void httpsServerCallback(SoupServer* server, SoupMessage* message, const > soup_message_body_append(message->response_body, SOUP_MEMORY_COPY, responseHTML.get(), strlen(responseHTML.get())); > soup_message_set_status(message, SOUP_STATUS_OK); > soup_message_body_complete(message->response_body); >+ } else if (g_str_equal(path, "/test-ssl/")) { >+ soup_message_set_status(message, SOUP_STATUS_OK); >+ soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, SSLSuccessHTMLString, strlen(SSLSuccessHTMLString)); > } else > soup_message_set_status(message, SOUP_STATUS_NOT_FOUND); > } >@@ -192,6 +258,7 @@ void beforeAll() > SSLTest::add("WebKitWebView", "ssl", testSSL); > InsecureContentTest::add("WebKitWebView", "insecure-content", testInsecureContent); > SSLTest::add("WebKitWebContext", "tls-errors-policy", testTLSErrorsPolicy); >+ SSLPermissionTest::add("WebKitWebView", "ssl-permission-request", testSSLPermissionRequest); > } > > void afterAll() >diff --git a/Source/WebKit2/UIProcess/WebContext.cpp b/Source/WebKit2/UIProcess/WebContext.cpp >index a2928413f9594ee2ca01bd62049208367f96e03a..6fd81c3b27ab794b9088f561d6e997e2acb0640e 100644 >--- a/Source/WebKit2/UIProcess/WebContext.cpp >+++ b/Source/WebKit2/UIProcess/WebContext.cpp >@@ -1096,11 +1096,8 @@ void WebContext::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* > return; > } > #else >- UNUSED_PARAM(certificate); >- UNUSED_PARAM(host); >+ sendToAllProcesses(Messages::WebProcess::AllowSpecificHTTPSCertificateForHost(certificate->platformCertificateInfo(), host)); > #endif >- // FIXME: It's unclear whether we want this SPI to be exposed and used for clients that don't use the NetworkProcess. >- ASSERT_NOT_REACHED(); > } > > void WebContext::setHTTPPipeliningEnabled(bool enabled) >diff --git a/Source/WebKit2/WebProcess/WebProcess.h b/Source/WebKit2/WebProcess/WebProcess.h >index a784e4df500c95fa704f40c832b5e29a62292c27..4aad98cb657327489abb538c30aaa28894d3f3f1 100644 >--- a/Source/WebKit2/WebProcess/WebProcess.h >+++ b/Source/WebKit2/WebProcess/WebProcess.h >@@ -29,6 +29,7 @@ > #include "CacheModel.h" > #include "ChildProcess.h" > #include "DownloadManager.h" >+#include "PlatformCertificateInfo.h" > #include "PluginProcessConnectionManager.h" > #include "ResourceCachesToClear.h" > #include "SandboxExtension.h" >@@ -170,6 +171,12 @@ public: > > void updateActivePages(); > >+#if !ENABLE(NETWORK_PROCESS) >+#if USE(SOUP) >+ void allowSpecificHTTPSCertificateForHost(const PlatformCertificateInfo&, const String& host); >+#endif >+#endif >+ > private: > WebProcess(); > >diff --git a/Source/WebKit2/WebProcess/WebProcess.messages.in b/Source/WebKit2/WebProcess/WebProcess.messages.in >index 9602a2e82cb26d8440594f51d14c67973cf82fb3..bdf2584101d7f400b329b77eda1d973a0c6d9896 100644 >--- a/Source/WebKit2/WebProcess/WebProcess.messages.in >+++ b/Source/WebKit2/WebProcess/WebProcess.messages.in >@@ -89,4 +89,8 @@ messages -> WebProcess LegacyReceiver { > #if PLATFORM(MAC) > SetProcessSuppressionEnabled(bool flag); > #endif >+ >+#if !ENABLE(NETWORK_PROCESS) >+ AllowSpecificHTTPSCertificateForHost(WebKit::PlatformCertificateInfo certificate, WTF::String host) >+#endif > } >diff --git a/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp b/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp >index c7bea92864f1c28a7600c653f019f865ace7e29d..4045cdedd89bc85a4f0c327a5bd9d4d8891b8464 100644 >--- a/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp >+++ b/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp >@@ -208,4 +208,10 @@ void WebProcess::setIgnoreTLSErrors(bool ignoreTLSErrors) > WebCore::ResourceHandle::setIgnoreSSLErrors(ignoreTLSErrors); > } > >+#if !ENABLE(NETWORK_PROCESS) >+void WebProcess::allowSpecificHTTPSCertificateForHost(const PlatformCertificateInfo& certificateInfo, const String& host) >+{ >+ WebCore::ResourceHandle::setClientCertificate(host, certificateInfo.certificate()); >+} >+#endif > } // namespace WebKit
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 120160
:
212175
|
213171
|
213272
|
213695
|
213777
|
213877
|
213881
|
214254
|
214258
|
214557
|
214720
|
214939