Changeset 232833 in webkit
- Timestamp:
- Jun 14, 2018 12:23:40 AM (6 years ago)
- Location:
- trunk/Source
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r232832 r232833 1 2018-06-14 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability 4 https://bugs.webkit.org/show_bug.cgi?id=186560 5 6 Reviewed by Brian Burg. 7 8 Add SessionCapabilities struct to Client class and unify requestAutomationSession() methods into a single one 9 that always receives the session capabilities. 10 11 * inspector/remote/RemoteInspector.h: 12 * inspector/remote/RemoteInspectorConstants.h: 13 * inspector/remote/cocoa/RemoteInspectorCocoa.mm: 14 (Inspector::RemoteInspector::receivedAutomationSessionRequestMessage): Move the parsing of mac capabilities from 15 WebKit here and fill the SessionCapabilities instead. 16 * inspector/remote/glib/RemoteInspectorGlib.cpp: 17 (Inspector::RemoteInspector::requestAutomationSession): Pass SessionCapabilities to the client. 18 * inspector/remote/glib/RemoteInspectorServer.cpp: 19 (Inspector::RemoteInspectorServer::startAutomationSession): Process SessionCapabilities. 20 * inspector/remote/glib/RemoteInspectorServer.h: 21 1 22 2018-06-13 Adrian Perez de Castro <aperez@igalia.com> 2 23 -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h
r222309 r232833 73 73 }; 74 74 75 struct SessionCapabilities { 76 bool acceptInsecureCertificates { false }; 77 #if PLATFORM(COCOA) 78 std::optional<bool> allowInsecureMediaCapture; 79 std::optional<bool> suppressICECandidateFiltering; 80 #endif 81 }; 82 75 83 virtual ~Client() { } 76 84 virtual bool remoteAutomationAllowed() const = 0; 77 85 virtual String browserName() const { return { }; } 78 86 virtual String browserVersion() const { return { }; } 79 virtual void requestAutomationSession(const String& sessionIdentifier) = 0; 80 #if PLATFORM(COCOA) 81 virtual void requestAutomationSessionWithCapabilities(NSString *sessionIdentifier, NSDictionary *forwardedCapabilities) = 0; 82 #endif 87 virtual void requestAutomationSession(const String& sessionIdentifier, const SessionCapabilities&) = 0; 83 88 }; 84 89 … … 119 124 120 125 #if USE(GLIB) 121 void requestAutomationSession(const char* sessionID );126 void requestAutomationSession(const char* sessionID, const Client::SessionCapabilities&); 122 127 void setup(unsigned targetIdentifier); 123 128 void sendMessageToTarget(unsigned targetIdentifier, const char* message); -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorConstants.h
r232636 r232833 91 91 #define WIRAutomationSessionRequestMessage @"WIRAutomationSessionRequestMessage" 92 92 93 // These definitions are shared between WebDriver.framework and WebKit.94 93 // The value for WIRSessionCapabilitiesKey is a dictionary that holds these capability key-value pairs. 95 94 -
trunk/Source/JavaScriptCore/inspector/remote/cocoa/RemoteInspectorCocoa.mm
r232636 r232833 691 691 BAIL_IF_UNEXPECTED_TYPE_ALLOWING_NIL(forwardedCapabilities, [NSDictionary class]); 692 692 693 Client::SessionCapabilities sessionCapabilities; 694 if (NSNumber *value = forwardedCapabilities[WIRAllowInsecureMediaCaptureCapabilityKey]) { 695 if ([value isKindOfClass:[NSNumber class]]) 696 sessionCapabilities.allowInsecureMediaCapture = value.boolValue; 697 } 698 699 if (NSNumber *value = forwardedCapabilities[WIRSuppressICECandidateFilteringCapabilityKey]) { 700 if ([value isKindOfClass:[NSNumber class]]) 701 sessionCapabilities.suppressICECandidateFiltering = value.boolValue; 702 } 703 693 704 if (!m_client) 694 705 return; … … 697 708 return; 698 709 699 m_client->requestAutomationSession WithCapabilities(suggestedSessionIdentifier, forwardedCapabilities);710 m_client->requestAutomationSession(suggestedSessionIdentifier, sessionCapabilities); 700 711 } 701 712 -
trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp
r224368 r232833 350 350 } 351 351 352 void RemoteInspector::requestAutomationSession(const char* sessionID )352 void RemoteInspector::requestAutomationSession(const char* sessionID, const Client::SessionCapabilities& capabilities) 353 353 { 354 354 if (!m_client) … … 361 361 return; 362 362 363 m_client->requestAutomationSession(String::fromUTF8(sessionID) );363 m_client->requestAutomationSession(String::fromUTF8(sessionID), capabilities); 364 364 updateClientCapabilities(); 365 365 } -
trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp
r222327 r232833 29 29 #if ENABLE(REMOTE_INSPECTOR) 30 30 31 #include "RemoteInspector.h"32 31 #include "RemoteInspectorUtils.h" 33 32 #include <gio/gio.h> … … 81 80 " <method name='StartAutomationSession'>" 82 81 " <arg type='s' name='sessionID' direction='in'/>" 82 " <arg type='b' name='acceptInsecureCertificates' direction='in'/>" 83 83 " <arg type='s' name='browserName' direction='out'/>" 84 84 " <arg type='s' name='browserVersion' direction='out'/>" … … 124 124 } else if (!g_strcmp0(methodName, "StartAutomationSession")) { 125 125 const char* sessionID; 126 g_variant_get(parameters, "(&s)", &sessionID); 127 inspectorServer->startAutomationSession(connection, sessionID); 128 auto capabilities = RemoteInspector::singleton().clientCapabilities(); 126 gboolean acceptInsecureCertificates; 127 g_variant_get(parameters, "(&sb)", &sessionID, &acceptInsecureCertificates); 128 RemoteInspector::Client::SessionCapabilities capabilities; 129 capabilities.acceptInsecureCertificates = acceptInsecureCertificates; 130 inspectorServer->startAutomationSession(connection, sessionID, capabilities); 131 auto clientCapabilities = RemoteInspector::singleton().clientCapabilities(); 129 132 g_dbus_method_invocation_return_value(invocation, g_variant_new("(ss)", 130 c apabilities ? capabilities->browserName.utf8().data() : "",131 c apabilities ? capabilities->browserVersion.utf8().data() : ""));133 clientCapabilities ? clientCapabilities->browserName.utf8().data() : "", 134 clientCapabilities ? clientCapabilities->browserVersion.utf8().data() : "")); 132 135 } else 133 136 g_dbus_method_invocation_return_value(invocation, nullptr); … … 392 395 } 393 396 394 void RemoteInspectorServer::startAutomationSession(GDBusConnection* automationConnection, const char* sessionID )397 void RemoteInspectorServer::startAutomationSession(GDBusConnection* automationConnection, const char* sessionID, const RemoteInspector::Client::SessionCapabilities& capabilities) 395 398 { 396 399 if (!m_automationConnection) … … 398 401 ASSERT(m_automationConnection.get() == automationConnection); 399 402 400 RemoteInspector::singleton().requestAutomationSession(sessionID );403 RemoteInspector::singleton().requestAutomationSession(sessionID, capabilities); 401 404 } 402 405 -
trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.h
r215862 r232833 28 28 #if ENABLE(REMOTE_INSPECTOR) 29 29 30 #include "RemoteInspector.h" 30 31 #include <wtf/HashMap.h> 31 32 #include <wtf/HashSet.h> … … 66 67 void sendMessageToFrontend(GDBusConnection*, uint64_t target, const char*); 67 68 void sendMessageToBackend(GDBusConnection*, uint64_t connectionID, uint64_t targetID, const char*); 68 void startAutomationSession(GDBusConnection*, const char* sessionID );69 void startAutomationSession(GDBusConnection*, const char* sessionID, const RemoteInspector::Client::SessionCapabilities&); 69 70 70 71 static void clientConnectionClosedCallback(GDBusConnection*, gboolean remotePeerVanished, GError*, RemoteInspectorServer*); -
trunk/Source/WebDriver/ChangeLog
r232670 r232833 1 2018-06-14 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability 4 https://bugs.webkit.org/show_bug.cgi?id=186560 5 6 Reviewed by Brian Burg. 7 8 Send session capabilities as part of the StartAutomationSession message. For now only acceptInsecureCerts 9 capability is sent. 10 11 * glib/SessionHostGlib.cpp: 12 (WebDriver::SessionHost::startAutomationSession): 13 * gtk/WebDriverServiceGtk.cpp: 14 (WebDriver::WebDriverService::platformCapabilities): Remove default value of acceptInsecureCerts, since that's 15 now handled by the browser. 16 * wpe/WebDriverServiceWPE.cpp: 17 (WebDriver::WebDriverService::platformCapabilities): Ditto. 18 1 19 2018-06-10 Carlos Garcia Campos <cgarcia@igalia.com> 2 20 -
trunk/Source/WebDriver/glib/SessionHostGlib.cpp
r232111 r232833 272 272 INSPECTOR_DBUS_INTERFACE, 273 273 "StartAutomationSession", 274 g_variant_new("(s )", m_sessionID.utf8().data()),274 g_variant_new("(sb)", m_sessionID.utf8().data(), m_capabilities.acceptInsecureCerts.value_or(false)), 275 275 nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START, 276 276 -1, m_cancellable.get(), [](GObject* source, GAsyncResult* result, gpointer userData) { … … 283 283 if (!resultVariant) { 284 284 auto completionHandler = std::exchange(sessionHost->m_startSessionCompletionHandler, nullptr); 285 completionHandler(false, String("Failed to start automation session"));285 completionHandler(false, makeString("Failed to start automation session: ", String::fromUTF8(error->message))); 286 286 return; 287 287 } -
trunk/Source/WebDriver/gtk/WebDriverServiceGtk.cpp
r227603 r232833 37 37 Capabilities capabilities; 38 38 capabilities.platformName = String("linux"); 39 capabilities.acceptInsecureCerts = false;40 39 capabilities.setWindowRect = true; 41 40 return capabilities; -
trunk/Source/WebDriver/wpe/WebDriverServiceWPE.cpp
r232670 r232833 37 37 Capabilities capabilities; 38 38 capabilities.platformName = String("linux"); 39 capabilities.acceptInsecureCerts = false;40 39 capabilities.setWindowRect = false; 41 40 return capabilities; -
trunk/Source/WebKit/ChangeLog
r232832 r232833 1 2018-06-14 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability 4 https://bugs.webkit.org/show_bug.cgi?id=186560 5 6 Reviewed by Brian Burg. 7 8 * UIProcess/API/glib/WebKitAutomationSession.cpp: 9 (webkitAutomationSessionCreate): Check the acceptInsecureCertificates capability and set the TLS error policy in 10 the WebContext accordingly if needed. 11 * UIProcess/API/glib/WebKitAutomationSessionPrivate.h: 12 * UIProcess/API/glib/WebKitWebContext.cpp: 13 * UIProcess/Cocoa/AutomationClient.h: 14 * UIProcess/Cocoa/AutomationClient.mm: 15 (WebKit::AutomationClient::requestAutomationSession): Use SessionCapabilities to fill the session configuration. 16 (WebKit::AutomationClient::requestAutomationSessionWithCapabilities): Deleted. 17 1 18 2018-06-13 Adrian Perez de Castro <aperez@igalia.com> 2 19 -
trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp
r232150 r232833 289 289 } 290 290 291 WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext* webContext, const char* sessionID )291 WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext* webContext, const char* sessionID, const Inspector::RemoteInspector::Client::SessionCapabilities& capabilities) 292 292 { 293 293 auto* session = WEBKIT_AUTOMATION_SESSION(g_object_new(WEBKIT_TYPE_AUTOMATION_SESSION, "id", sessionID, nullptr)); 294 294 session->priv->webContext = webContext; 295 if (capabilities.acceptInsecureCertificates) 296 webkit_web_context_set_tls_errors_policy(webContext, WEBKIT_TLS_ERRORS_POLICY_IGNORE); 295 297 return session; 296 298 } -
trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h
r220387 r232833 23 23 #include "WebKitAutomationSession.h" 24 24 #include "WebKitWebContext.h" 25 #include <JavaScriptCore/RemoteInspector.h> 25 26 26 WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext*, const char* sessionID );27 WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext*, const char* sessionID, const Inspector::RemoteInspector::Client::SessionCapabilities&); 27 28 WebKit::WebAutomationSession& webkitAutomationSessionGetSession(WebKitAutomationSession*); 28 29 String webkitAutomationSessionGetBrowserName(WebKitAutomationSession*); -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp
r232111 r232833 233 233 } 234 234 235 void requestAutomationSession(const String& sessionIdentifier ) override235 void requestAutomationSession(const String& sessionIdentifier, const Inspector::RemoteInspector::Client::SessionCapabilities& capabilities) override 236 236 { 237 237 ASSERT(!m_webContext->priv->automationSession); 238 m_webContext->priv->automationSession = adoptGRef(webkitAutomationSessionCreate(m_webContext, sessionIdentifier.utf8().data() ));238 m_webContext->priv->automationSession = adoptGRef(webkitAutomationSessionCreate(m_webContext, sessionIdentifier.utf8().data(), capabilities)); 239 239 g_signal_emit(m_webContext, signals[AUTOMATION_STARTED], 0, m_webContext->priv->automationSession.get()); 240 240 m_webContext->priv->processPool->setAutomationSession(&webkitAutomationSessionGetSession(m_webContext->priv->automationSession.get())); -
trunk/Source/WebKit/UIProcess/Cocoa/AutomationClient.h
r232636 r232833 50 50 void didRequestAutomationSession(WebKit::WebProcessPool*, const String& sessionIdentifier) final; 51 51 52 void requestAutomationSessionWithCapabilities(NSString *sessionIdentifier, NSDictionary *forwardedCapabilities) final;53 54 52 // RemoteInspector::Client 55 53 bool remoteAutomationAllowed() const final; 56 void requestAutomationSession(const String& sessionIdentifier ) final;54 void requestAutomationSession(const String& sessionIdentifier, const Inspector::RemoteInspector::Client::SessionCapabilities&) final; 57 55 String browserName() const final; 58 56 String browserVersion() const final; -
trunk/Source/WebKit/UIProcess/Cocoa/AutomationClient.mm
r232636 r232833 35 35 #import "_WKAutomationSessionConfiguration.h" 36 36 #import <JavaScriptCore/RemoteInspector.h> 37 #import <JavaScriptCore/RemoteInspectorConstants.h>38 37 #import <wtf/spi/cf/CFBundleSPI.h> 39 38 #import <wtf/text/WTFString.h> … … 64 63 void AutomationClient::didRequestAutomationSession(WebKit::WebProcessPool*, const String& sessionIdentifier) 65 64 { 66 requestAutomationSession(sessionIdentifier );65 requestAutomationSession(sessionIdentifier, { }); 67 66 } 68 67 … … 77 76 } 78 77 79 void AutomationClient::requestAutomationSession(const String& sessionIdentifier )78 void AutomationClient::requestAutomationSession(const String& sessionIdentifier, const RemoteInspector::Client::SessionCapabilities& sessionCapabilities) 80 79 { 81 NSString *retainedIdentifier = sessionIdentifier; 82 requestAutomationSessionWithCapabilities(retainedIdentifier, nil); 80 _WKAutomationSessionConfiguration *configuration = [[[_WKAutomationSessionConfiguration alloc] init] autorelease]; 81 if (sessionCapabilities.allowInsecureMediaCapture) 82 configuration.allowsInsecureMediaCapture = sessionCapabilities.allowInsecureMediaCapture.value(); 83 if (sessionCapabilities.suppressICECandidateFiltering) 84 configuration.suppressesICECandidateFiltering = sessionCapabilities.suppressICECandidateFiltering.value(); 85 86 // Force clients to create and register a session asynchronously. Otherwise, 87 // RemoteInspector will try to acquire its lock to register the new session and 88 // deadlock because it's already taken while handling XPC messages. 89 NSString *requestedSessionIdentifier = sessionIdentifier; 90 dispatch_async(dispatch_get_main_queue(), ^{ 91 if (m_delegateMethods.requestAutomationSession) 92 [m_delegate.get() _processPool:m_processPool didRequestAutomationSessionWithIdentifier:requestedSessionIdentifier configuration:configuration]; 93 }); 83 94 } 84 95 … … 105 116 } 106 117 107 void AutomationClient::requestAutomationSessionWithCapabilities(NSString *sessionIdentifier, NSDictionary *forwardedCapabilities)108 {109 _WKAutomationSessionConfiguration *configuration = [[[_WKAutomationSessionConfiguration alloc] init] autorelease];110 if (NSNumber *value = forwardedCapabilities[WIRAllowInsecureMediaCaptureCapabilityKey]) {111 if ([value isKindOfClass:[NSNumber class]])112 configuration.allowsInsecureMediaCapture = value.boolValue;113 }114 115 if (NSNumber *value = forwardedCapabilities[WIRSuppressICECandidateFilteringCapabilityKey]) {116 if ([value isKindOfClass:[NSNumber class]])117 configuration.suppressesICECandidateFiltering = value.boolValue;118 }119 120 // Force clients to create and register a session asynchronously. Otherwise,121 // RemoteInspector will try to acquire its lock to register the new session and122 // deadlock because it's already taken while handling XPC messages.123 dispatch_async(dispatch_get_main_queue(), ^{124 if (m_delegateMethods.requestAutomationSession)125 [m_delegate.get() _processPool:m_processPool didRequestAutomationSessionWithIdentifier:sessionIdentifier configuration:configuration];126 });127 }128 129 118 } // namespace WebKit 130 119
Note: See TracChangeset
for help on using the changeset viewer.