WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-120160-20131002175652.patch (text/plain), 32.81 KB, created by
Brian Holt
on 2013-10-02 09:56:52 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Brian Holt
Created:
2013-10-02 09:56:52 PDT
Size:
32.81 KB
patch
obsolete
>Subversion Revision: 156709 >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index ebe11223d2e1a4b693a3ebf7935d23d4a3978b95..b0e5f8e3226fe45ef65dbed5ee89518c156b8da2 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,52 @@ >+2013-10-02 Brian Holt <brian.holt@samsung.com> >+ >+ [GTK] Add WebKit2 API for TLS errors >+ https://bugs.webkit.org/show_bug.cgi?id=120160 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Added a new permission request for TLS errors. This includes a new >+ policy enumeration to allow users to indicate that they wish to be >+ asked if there is a TLS error, and a new message to the >+ WebProcess to add an exception for a specific certificate. >+ >+ * GNUmakefile.list.am: >+ * PlatformGTK.cmake: >+ * UIProcess/API/gtk/WebKitLoaderClient.cpp: >+ (didFailProvisionalLoadWithErrorForFrame): >+ * UIProcess/API/gtk/WebKitTLSPermissionRequest.cpp: Added. >+ (webkitTLSPermissionRequestAllow): >+ (webkitTLSPermissionRequestDeny): >+ (webkitPermissionRequestInterfaceInit): >+ (webkitTLSPermissionRequestCreate): >+ (webkitTLSPermissionRequestDispose): >+ (webkit_tls_permission_request_class_init): >+ (webkit_tls_permission_request_get_certificate): >+ (webkit_tls_permission_request_get_tls_errors): >+ (webkit_tls_permission_request_get_host): >+ * UIProcess/API/gtk/WebKitTLSPermissionRequest.h: Added. >+ * UIProcess/API/gtk/WebKitTLSPermissionRequestPrivate.h: Added. >+ * UIProcess/API/gtk/WebKitWebContext.cpp: >+ (webkitWebContextAllowSpecificHTTPSCertificateForHost): >+ * UIProcess/API/gtk/WebKitWebContext.h: >+ * UIProcess/API/gtk/WebKitWebContextPrivate.h: >+ * UIProcess/API/gtk/WebKitWebView.cpp: >+ (webkitWebViewLoadFailedWithTLSErrors): >+ * UIProcess/API/gtk/WebKitWebViewPrivate.h: >+ * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: >+ * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: >+ * UIProcess/API/gtk/tests/TestSSL.cpp: >+ (testTLSPermissionRequest): >+ (httpsServerCallback): >+ (beforeAll): >+ * UIProcess/API/gtk/webkit2.h: >+ * UIProcess/WebContext.cpp: >+ (WebKit::WebContext::allowSpecificHTTPSCertificateForHost): >+ * WebProcess/WebProcess.h: >+ * WebProcess/WebProcess.messages.in: >+ * WebProcess/soup/WebProcessSoup.cpp: >+ (WebKit::WebProcess::allowSpecificHTTPSCertificateForHost): >+ > 2013-10-01 Gabor Abraham <abrhm@inf.u-szeged.hu> > > [Qt][WK2] Fix build after r156688. >diff --git a/Source/WebKit2/GNUmakefile.list.am b/Source/WebKit2/GNUmakefile.list.am >index 9b7c269528cf01a330f62ca5115f7915450d2008..4ccce05a9e5a0400eb3051540c5e8ea6569c8530 100644 >--- a/Source/WebKit2/GNUmakefile.list.am >+++ b/Source/WebKit2/GNUmakefile.list.am >@@ -127,6 +127,7 @@ webkit2gtk_h_api += \ > $(WebKit2)/UIProcess/API/gtk/WebKitScriptDialog.h \ > $(WebKit2)/UIProcess/API/gtk/WebKitSecurityManager.h \ > $(WebKit2)/UIProcess/API/gtk/WebKitSettings.h \ >+ $(WebKit2)/UIProcess/API/gtk/WebKitTLSPermissionRequest.h \ > $(WebKit2)/UIProcess/API/gtk/WebKitURIRequest.h \ > $(WebKit2)/UIProcess/API/gtk/WebKitURIResponse.h \ > $(WebKit2)/UIProcess/API/gtk/WebKitURISchemeRequest.h \ >@@ -767,6 +768,9 @@ webkit2_sources += \ > Source/WebKit2/UIProcess/API/gtk/WebKitSettingsPrivate.h \ > Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.cpp \ > Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h \ >+ Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.cpp \ >+ Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.h \ >+ Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequestPrivate.h \ > Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp \ > Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.h \ > Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.cpp \ >diff --git a/Source/WebKit2/PlatformGTK.cmake b/Source/WebKit2/PlatformGTK.cmake >index c0bd0fa44f14997b135887147d4f491de7509135..3f1419977fbaab11b83409611ca3ac1ff3084b30 100644 >--- a/Source/WebKit2/PlatformGTK.cmake >+++ b/Source/WebKit2/PlatformGTK.cmake >@@ -176,6 +176,9 @@ list(APPEND WebKit2_SOURCES > UIProcess/API/gtk/WebKitSettings.cpp > UIProcess/API/gtk/WebKitSettings.h > UIProcess/API/gtk/WebKitSettingsPrivate.h >+ UIProcess/API/gtk/WebKitTLSPermissionRequest.cpp >+ UIProcess/API/gtk/WebKitTLSPermissionRequest.h >+ UIProcess/API/gtk/WebKitTLSPermissionRequestPrivate.h > UIProcess/API/gtk/WebKitTextChecker.cpp > UIProcess/API/gtk/WebKitTextChecker.h > UIProcess/API/gtk/WebKitUIClient.cpp >@@ -312,6 +315,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/WebKitTLSPermissionRequest.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/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/WebKitTLSPermissionRequest.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.cpp >new file mode 100644 >index 0000000000000000000000000000000000000000..e5ebda2289f62d3bd52c385fc01ef02a2380b8f4 >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.cpp >@@ -0,0 +1,137 @@ >+/* >+ * 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 "WebKitTLSPermissionRequest.h" >+ >+#include "WebKitPermissionRequest.h" >+#include "WebKitTLSPermissionRequestPrivate.h" >+#include "WebKitWebContextPrivate.h" >+#include "WebKitWebViewPrivate.h" >+#include <wtf/gobject/GRefPtr.h> >+#include <wtf/text/CString.h> >+ >+using namespace WebKit; >+ >+/** >+ * SECTION: WebKitTLSPermissionRequest >+ * @Short_description: A permission request for TLS errors >+ * @Title: WebKitTLSPermissionRequest >+ * @See_also: #WebKitPermissionRequest, #WebKitWebView >+ * >+ * WebKitTLSPermissionRequest represents a request for >+ * permission to decide whether WebKit should continue navigation >+ * to a website when there were TLS errors, for example because >+ * of an untrusted certificate. >+ * >+ * When the #WebKitTLSErrorsPolicy is set to #WEBKIT_TLS_ERRORS_POLICY_ASK, >+ * the permission-request signal is emitted with this WebKitTLSPermissionRequest. >+ * >+ * Since 2.4 >+ */ >+ >+static void webkitPermissionRequestInterfaceInit(WebKitPermissionRequestIface*); >+ >+struct _WebKitTLSPermissionRequestPrivate { >+ WebKitWebView* webView; >+ RefPtr<WebCertificateInfo> certificateInfo; >+ CString host; >+ bool madeDecision; >+}; >+ >+WEBKIT_DEFINE_TYPE_WITH_CODE( >+ WebKitTLSPermissionRequest, webkit_tls_permission_request, G_TYPE_OBJECT, >+ G_IMPLEMENT_INTERFACE(WEBKIT_TYPE_PERMISSION_REQUEST, webkitPermissionRequestInterfaceInit)) >+ >+static void webkitTLSPermissionRequestAllow(WebKitPermissionRequest* request) >+{ >+ ASSERT(WEBKIT_IS_TLS_PERMISSION_REQUEST(request)); >+ >+ WebKitTLSPermissionRequestPrivate* priv = WEBKIT_TLS_PERMISSION_REQUEST(request)->priv; >+ >+ // Only one decision at a time. >+ if (priv->madeDecision) >+ return; >+ >+ webkitWebContextAllowSpecificHTTPSCertificateForHost(webkit_web_view_get_context(priv->webView), priv->certificateInfo.get(), priv->host.data()); >+ priv->madeDecision = true; >+} >+ >+static void webkitTLSPermissionRequestDeny(WebKitPermissionRequest* request) >+{ >+ ASSERT(WEBKIT_IS_TLS_PERMISSION_REQUEST(request)); >+ >+ WebKitTLSPermissionRequestPrivate* priv = WEBKIT_TLS_PERMISSION_REQUEST(request)->priv; >+ >+ // Only one decision at a time. >+ if (priv->madeDecision) >+ return; >+ >+ // Deny the request by doing nothing. >+ priv->madeDecision = true; >+} >+ >+static void webkitPermissionRequestInterfaceInit(WebKitPermissionRequestIface* iface) >+{ >+ iface->allow = webkitTLSPermissionRequestAllow; >+ iface->deny = webkitTLSPermissionRequestDeny; >+} >+ >+WebKitTLSPermissionRequest* webkitTLSPermissionRequestCreate(WebKitWebView* webView, WebCertificateInfo* certificateInfo, const String& host) >+{ >+ WebKitTLSPermissionRequest* request = WEBKIT_TLS_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_TLS_PERMISSION_REQUEST, NULL)); >+ request->priv->webView = webView; >+ request->priv->certificateInfo = certificateInfo; >+ request->priv->host = host.utf8(); >+ return request; >+} >+ >+static void webkitTLSPermissionRequestDispose(GObject* object) >+{ >+ // Default behaviour when no decision has been made is denying the request. >+ webkitTLSPermissionRequestDeny(WEBKIT_PERMISSION_REQUEST(object)); >+ G_OBJECT_CLASS(webkit_tls_permission_request_parent_class)->dispose(object); >+} >+ >+static void webkit_tls_permission_request_class_init(WebKitTLSPermissionRequestClass* klass) >+{ >+ GObjectClass* objectClass = G_OBJECT_CLASS(klass); >+ objectClass->dispose = webkitTLSPermissionRequestDispose; >+} >+ >+GTlsCertificate* webkit_tls_permission_request_get_certificate(WebKitTLSPermissionRequest *request) >+{ >+ g_return_val_if_fail(WEBKIT_IS_TLS_PERMISSION_REQUEST(request), 0); >+ >+ return request->priv->certificateInfo->platformCertificateInfo().certificate(); >+} >+ >+GTlsCertificateFlags webkit_tls_permission_request_get_tls_errors(WebKitTLSPermissionRequest *request) >+{ >+ g_return_val_if_fail(WEBKIT_IS_TLS_PERMISSION_REQUEST(request), static_cast<GTlsCertificateFlags>(0)); >+ >+ return request->priv->certificateInfo->platformCertificateInfo().tlsErrors(); >+} >+ >+const gchar* webkit_tls_permission_request_get_host(WebKitTLSPermissionRequest *request) >+{ >+ g_return_val_if_fail(WEBKIT_IS_TLS_PERMISSION_REQUEST(request), 0); >+ >+ return request->priv->host.data(); >+} >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.h b/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.h >new file mode 100644 >index 0000000000000000000000000000000000000000..2c5351c90948707abc14725a6a6f6b31e761e5fc >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequest.h >@@ -0,0 +1,74 @@ >+/* >+ * 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 WebKitTLSPermissionRequest_h >+#define WebKitTLSPermissionRequest_h >+ >+#include <glib-object.h> >+#include <gio/gio.h> >+#include <webkit2/WebKitDefines.h> >+ >+G_BEGIN_DECLS >+ >+#define WEBKIT_TYPE_TLS_PERMISSION_REQUEST (webkit_tls_permission_request_get_type()) >+#define WEBKIT_TLS_PERMISSION_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_TLS_PERMISSION_REQUEST, WebKitTLSPermissionRequest)) >+#define WEBKIT_TLS_PERMISSION_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_TLS_PERMISSION_REQUEST, WebKitTLSPermissionRequestClass)) >+#define WEBKIT_IS_TLS_PERMISSION_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_TLS_PERMISSION_REQUEST)) >+#define WEBKIT_IS_TLS_PERMISSION_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_TLS_PERMISSION_REQUEST)) >+#define WEBKIT_TLS_PERMISSION_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_TLS_PERMISSION_REQUEST, WebKitTLSPermissionRequestClass)) >+ >+typedef struct _WebKitTLSPermissionRequest WebKitTLSPermissionRequest; >+typedef struct _WebKitTLSPermissionRequestClass WebKitTLSPermissionRequestClass; >+typedef struct _WebKitTLSPermissionRequestPrivate WebKitTLSPermissionRequestPrivate; >+ >+struct _WebKitTLSPermissionRequest { >+ GObject parent; >+ >+ /*< private >*/ >+ WebKitTLSPermissionRequestPrivate *priv; >+}; >+ >+struct _WebKitTLSPermissionRequestClass { >+ GObjectClass parent_class; >+ >+ void (*_webkit_reserved0) (void); >+ void (*_webkit_reserved1) (void); >+ void (*_webkit_reserved2) (void); >+ void (*_webkit_reserved3) (void); >+}; >+ >+WEBKIT_API GType >+webkit_tls_permission_request_get_type (void); >+ >+WEBKIT_API GTlsCertificate * >+webkit_tls_permission_request_get_certificate (WebKitTLSPermissionRequest *request); >+ >+WEBKIT_API GTlsCertificateFlags >+webkit_tls_permission_request_get_tls_errors (WebKitTLSPermissionRequest *request); >+ >+WEBKIT_API const gchar * >+webkit_tls_permission_request_get_host (WebKitTLSPermissionRequest *request); >+ >+G_END_DECLS >+ >+#endif >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequestPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequestPrivate.h >new file mode 100644 >index 0000000000000000000000000000000000000000..e9eb1909a8ab543d37f247dbbc107b5875bb74ad >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitTLSPermissionRequestPrivate.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 WebKitTLSPermissionRequestPrivate_h >+#define WebKitTLSPermissionRequestPrivate_h >+ >+#include "WebCertificateInfo.h" >+#include "WebKitPrivate.h" >+#include "WebKitTLSPermissionRequest.h" >+#include "WebKitWebView.h" >+ >+WebKitTLSPermissionRequest* webkitTLSPermissionRequestCreate(WebKitWebView*, WebKit::WebCertificateInfo*, const WTF::String&); >+ >+#endif // WebKitTLSPermissionRequestPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >index d2c8bbdf9b544ceb45218f03e936e72540cf7d5e..1e46e242f593bccc4543310e1f61f981ff78ef96 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >@@ -902,3 +902,8 @@ WebKitWebViewGroup* webkitWebContextGetDefaultWebViewGroup(WebKitWebContext* con > { > return context->priv->defaultWebViewGroup.get(); > } >+ >+void webkitWebContextAllowSpecificHTTPSCertificateForHost(WebKitWebContext* context, const WebCertificateInfo* certificate, const char* host) >+{ >+ context->priv->context->allowSpecificHTTPSCertificateForHost(certificate, String(host)); >+} >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >index dd38c1d375be9650b94b853fd31128aa2737a6af..a19458c05daa7cd6298509b9e39481ab306b3633 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. Since 2.4 > * > * 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/WebKitWebContextPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h >index 81c473c561d8c3cc2f355ab241e809b0d87fac02..16c2f6a833eb66a41339d994e798dcc5a30d7f08 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h >@@ -47,5 +47,6 @@ void webkitWebContextCreatePageForWebView(WebKitWebContext*, WebKitWebView*, Web > void webkitWebContextWebViewDestroyed(WebKitWebContext*, WebKitWebView*); > WebKitWebView* webkitWebContextGetWebViewForPage(WebKitWebContext*, WebKit::WebPageProxy*); > WebKitWebViewGroup* webkitWebContextGetDefaultWebViewGroup(WebKitWebContext*); >+void webkitWebContextAllowSpecificHTTPSCertificateForHost(WebKitWebContext*, const WebKit::WebCertificateInfo*, const char*); > > #endif // WebKitWebContextPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >index 44629ecffda62536d88af1cf5831619567ad9515..f3be7c2e88459c8ca561c35ac57692b5732ea95c 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" >@@ -48,6 +46,7 @@ > #include "WebKitPrivate.h" > #include "WebKitResponsePolicyDecision.h" > #include "WebKitScriptDialogPrivate.h" >+#include "WebKitTLSPermissionRequestPrivate.h" > #include "WebKitUIClient.h" > #include "WebKitURIRequestPrivate.h" > #include "WebKitURIResponsePrivate.h" >@@ -1509,7 +1508,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); > webkitWebViewCancelAuthenticationRequest(webView); >@@ -1518,6 +1517,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); >+ WebCore::URL uri(ParsedURLString, String(failingURI)); >+ GRefPtr<WebKitTLSPermissionRequest> request = adoptGRef(webkitTLSPermissionRequestCreate(webView, webCertificateInfo.get(), uri.host())); >+ webkitWebViewMakePermissionRequest(webView, WEBKIT_PERMISSION_REQUEST(request.get())); > } > > 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..30a22ff1724c663795ac5dc430ec456324c20782 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >@@ -27,13 +27,14 @@ > #ifndef WebKitWebViewPrivate_h > #define WebKitWebViewPrivate_h > >+#include "PlatformCertificateInfo.h" > #include "WebImage.h" > #include "WebKitWebView.h" > #include <wtf/text/CString.h> > > 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/docs/webkit2gtk-docs.sgml b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >index 76d010412682e87f4f7c9319acf34cd502ee1364..e9a4a44abfe1b0709381c8c1978121882d15fc91 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >@@ -36,6 +36,7 @@ > <xi:include href="xml/WebKitCookieManager.xml"/> > <xi:include href="xml/WebKitPlugin.xml"/> > <xi:include href="xml/WebKitWebInspector.xml"/> >+ <xi:include href="xml/WebKitTLSPermissionRequest.xml"/> > <xi:include href="xml/WebKitURISchemeRequest.xml"/> > <xi:include href="xml/WebKitVersion.xml"/> > <xi:include href="xml/WebKitContextMenu.xml"/> >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >index e8be61fe4e3a4f2126277ff322e3999783cdbe38..20f00589e25e732acbd0351452065bdaceb60d5a 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >@@ -843,6 +843,27 @@ WebKitWebInspectorPrivate > </SECTION> > > <SECTION> >+<FILE>WebKitTLSPermissionRequest</FILE> >+WebKitTLSPermissionRequest >+webkit_tls_permission_request_get_certificate >+webkit_tls_permission_request_get_tls_errors >+webkit_tls_permission_request_get_host >+ >+<SUBSECTION Standard> >+WebKitTLSPermissionRequestClass >+WEBKIT_TYPE_TLS_PERMISSION_REQUEST >+WEBKIT_TLS_PERMISSION_REQUEST >+WEBKIT_IS_TLS_PERMISSION_REQUEST >+WEBKIT_TLS_PERMISSION_REQUEST_CLASS >+WEBKIT_IS_TLS_PERMISSION_REQUEST_CLASS >+WEBKIT_TLS_PERMISSION_REQUEST_GET_CLASS >+ >+<SUBSECTION Private> >+WebKitTLSPermissionRequestPrivate >+webkit_tls_permission_request_get_type >+</SECTION> >+ >+<SECTION> > <FILE>WebKitURISchemeRequest</FILE> > WebKitURISchemeRequest > webkit_uri_scheme_request_get_scheme >diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp >index db6ccc8522d151cb9c495d9d43f3e96f65252a6e..ed0cbe43c46c48b0f4434a2aa297e6d1ede72132 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp >@@ -28,6 +28,11 @@ 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 TLSExpectedSuccessTitle[] = "WebKit2Gtk+ TLS permission test"; >+static const char TLSSuccessHTMLString[] = >+ "<html>" >+ "<head><title>WebKit2Gtk+ TLS permission test</title></head>" >+ "<body></body></html>"; > > class SSLTest: public LoadTrackingTest { > public: >@@ -132,6 +137,75 @@ static void testTLSErrorsPolicy(SSLTest* test, gconstpointer) > g_assert(!test->m_loadEvents.contains(LoadTrackingTest::LoadCommitted)); > } > >+class TLSPermissionTest: public SSLTest { >+public: >+ MAKE_GLIB_TEST_FIXTURE(TLSPermissionTest); >+ >+ TLSPermissionTest() >+ { >+ g_signal_connect(m_webView, "permission-request", G_CALLBACK(runPermissionRequestCallback), this); >+ } >+ >+ ~TLSPermissionTest() >+ { >+ g_signal_handlers_disconnect_matched(m_webView, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); >+ } >+ >+ static gboolean runPermissionRequestCallback(WebKitWebView*, WebKitPermissionRequest* request, TLSPermissionTest* test) >+ { >+ test->runPermissionRequest(request); >+ return TRUE; >+ } >+ >+ void runPermissionRequest(WebKitPermissionRequest* request) >+ { >+ assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request)); >+ m_permissionRequest = request; >+ g_main_loop_quit(m_mainLoop); >+ } >+ >+ WebKitPermissionRequest* waitForPermissionRequest() >+ { >+ g_main_loop_run(m_mainLoop); >+ return m_permissionRequest.get(); >+ } >+ >+private: >+ GRefPtr<WebKitPermissionRequest> m_permissionRequest; >+}; >+ >+static void testTLSPermissionRequest(TLSPermissionTest* 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->loadURI(kHttpsServer->getURIForPath("/test-tls/").data()); >+ WebKitPermissionRequest* request = test->waitForPermissionRequest(); >+ // Load only fails when the policy is WEBKIT_TLS_ERRORS_POLICY_FAIL. >+ g_assert(!test->m_loadFailed); >+ g_assert_cmpint(test->m_loadEvents[0], ==, LoadTrackingTest::ProvisionalLoadStarted); >+ g_assert_cmpint(test->m_loadEvents[1], ==, LoadTrackingTest::LoadFinished); >+ >+ webkit_permission_request_deny(request); >+ // After denying the request, a second load will generate a new permission request. >+ test->loadURI(kHttpsServer->getURIForPath("/test-tls/").data()); >+ request = test->waitForPermissionRequest(); >+ g_assert_cmpint(test->m_loadEvents[0], ==, LoadTrackingTest::ProvisionalLoadStarted); >+ g_assert_cmpint(test->m_loadEvents[1], ==, LoadTrackingTest::LoadFinished); >+ >+ // Test allowing a permission request. >+ webkit_permission_request_allow(request); >+ // The page should now load without errors. >+ test->loadURI(kHttpsServer->getURIForPath("/test-tls/").data()); >+ test->waitUntilLoadFinished(); >+ 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), ==, TLSExpectedSuccessTitle); >+} >+ >+ > static void httpsServerCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) > { > if (message->method != SOUP_METHOD_GET) { >@@ -148,6 +222,10 @@ 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-tls/")) { >+ soup_message_set_status(message, SOUP_STATUS_OK); >+ soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, TLSSuccessHTMLString, strlen(TLSSuccessHTMLString)); >+ soup_message_body_complete(message->response_body); > } else > soup_message_set_status(message, SOUP_STATUS_NOT_FOUND); > } >@@ -192,6 +270,7 @@ void beforeAll() > SSLTest::add("WebKitWebView", "ssl", testSSL); > InsecureContentTest::add("WebKitWebView", "insecure-content", testInsecureContent); > SSLTest::add("WebKitWebContext", "tls-errors-policy", testTLSErrorsPolicy); >+ TLSPermissionTest::add("WebKitWebView", "tls-permission-request", testTLSPermissionRequest); > } > > void afterAll() >diff --git a/Source/WebKit2/UIProcess/API/gtk/webkit2.h b/Source/WebKit2/UIProcess/API/gtk/webkit2.h >index 70e3b4330593ef6d0fd788ba2e9331f420f89786..ea3ab2a7679790eddb69b228a02f07138efd2cf1 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/webkit2.h >+++ b/Source/WebKit2/UIProcess/API/gtk/webkit2.h >@@ -52,6 +52,7 @@ > #include <webkit2/WebKitScriptDialog.h> > #include <webkit2/WebKitSecurityManager.h> > #include <webkit2/WebKitSettings.h> >+#include <webkit2/WebKitTLSPermissionRequest.h> > #include <webkit2/WebKitURIRequest.h> > #include <webkit2/WebKitURIResponse.h> > #include <webkit2/WebKitURISchemeRequest.h> >diff --git a/Source/WebKit2/UIProcess/WebContext.cpp b/Source/WebKit2/UIProcess/WebContext.cpp >index 77a9f08c4935c3e435938a1f562ca0b588f7cbd4..0de2718fd0504603028d26632ba9719669998858 100644 >--- a/Source/WebKit2/UIProcess/WebContext.cpp >+++ b/Source/WebKit2/UIProcess/WebContext.cpp >@@ -1076,10 +1076,15 @@ void WebContext::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* > return; > } > #else >+#if USE(SOUP) >+ m_processes[0]->send(Messages::WebProcess::AllowSpecificHTTPSCertificateForHost(certificate->platformCertificateInfo(), host), 0); >+ return; >+#else > UNUSED_PARAM(certificate); > UNUSED_PARAM(host); > #endif >- // FIXME: It's unclear whether we want this SPI to be exposed and used for clients that don't use the NetworkProcess. >+#endif >+ > ASSERT_NOT_REACHED(); > } > >diff --git a/Source/WebKit2/WebProcess/WebProcess.h b/Source/WebKit2/WebProcess/WebProcess.h >index 6d473c3e4d57a953a79a9838883d7684784d3a22..1d2d040dd7c9c2b8a0cd37e70581d2930fe4becb 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 98126846780fbe62f66a777ded7ee2bcafff1503..ee04995b15d76b0a1cdd461a8eab09ba16b5f0fe 100644 >--- a/Source/WebKit2/WebProcess/WebProcess.messages.in >+++ b/Source/WebKit2/WebProcess/WebProcess.messages.in >@@ -85,4 +85,10 @@ messages -> WebProcess LegacyReceiver { > #if PLATFORM(MAC) > SetProcessSuppressionEnabled(bool flag); > #endif >+ >+#if !ENABLE(NETWORK_PROCESS) >+#if USE(SOUP) >+ AllowSpecificHTTPSCertificateForHost(WebKit::PlatformCertificateInfo certificate, WTF::String host) >+#endif >+#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