Changeset 232833 in webkit


Ignore:
Timestamp:
Jun 14, 2018 12:23:40 AM (6 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK][WPE] WebDriver: handle acceptInsecureCertificates capability
https://bugs.webkit.org/show_bug.cgi?id=186560

Reviewed by Brian Burg.

Source/JavaScriptCore:

Add SessionCapabilities struct to Client class and unify requestAutomationSession() methods into a single one
that always receives the session capabilities.

  • inspector/remote/RemoteInspector.h:
  • inspector/remote/RemoteInspectorConstants.h:
  • inspector/remote/cocoa/RemoteInspectorCocoa.mm:

(Inspector::RemoteInspector::receivedAutomationSessionRequestMessage): Move the parsing of mac capabilities from
WebKit here and fill the SessionCapabilities instead.

  • inspector/remote/glib/RemoteInspectorGlib.cpp:

(Inspector::RemoteInspector::requestAutomationSession): Pass SessionCapabilities to the client.

  • inspector/remote/glib/RemoteInspectorServer.cpp:

(Inspector::RemoteInspectorServer::startAutomationSession): Process SessionCapabilities.

  • inspector/remote/glib/RemoteInspectorServer.h:

Source/WebDriver:

Send session capabilities as part of the StartAutomationSession message. For now only acceptInsecureCerts
capability is sent.

  • glib/SessionHostGlib.cpp:

(WebDriver::SessionHost::startAutomationSession):

  • gtk/WebDriverServiceGtk.cpp:

(WebDriver::WebDriverService::platformCapabilities): Remove default value of acceptInsecureCerts, since that's
now handled by the browser.

  • wpe/WebDriverServiceWPE.cpp:

(WebDriver::WebDriverService::platformCapabilities): Ditto.

Source/WebKit:

  • UIProcess/API/glib/WebKitAutomationSession.cpp:

(webkitAutomationSessionCreate): Check the acceptInsecureCertificates capability and set the TLS error policy in
the WebContext accordingly if needed.

  • UIProcess/API/glib/WebKitAutomationSessionPrivate.h:
  • UIProcess/API/glib/WebKitWebContext.cpp:
  • UIProcess/Cocoa/AutomationClient.h:
  • UIProcess/Cocoa/AutomationClient.mm:

(WebKit::AutomationClient::requestAutomationSession): Use SessionCapabilities to fill the session configuration.
(WebKit::AutomationClient::requestAutomationSessionWithCapabilities): Deleted.

Location:
trunk/Source
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r232832 r232833  
     12018-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
    1222018-06-13  Adrian Perez de Castro  <aperez@igalia.com>
    223
  • trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h

    r222309 r232833  
    7373        };
    7474
     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
    7583        virtual ~Client() { }
    7684        virtual bool remoteAutomationAllowed() const = 0;
    7785        virtual String browserName() const { return { }; }
    7886        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;
    8388    };
    8489
     
    119124
    120125#if USE(GLIB)
    121     void requestAutomationSession(const char* sessionID);
     126    void requestAutomationSession(const char* sessionID, const Client::SessionCapabilities&);
    122127    void setup(unsigned targetIdentifier);
    123128    void sendMessageToTarget(unsigned targetIdentifier, const char* message);
  • trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorConstants.h

    r232636 r232833  
    9191#define WIRAutomationSessionRequestMessage         @"WIRAutomationSessionRequestMessage"
    9292
    93 // These definitions are shared between WebDriver.framework and WebKit.
    9493// The value for WIRSessionCapabilitiesKey is a dictionary that holds these capability key-value pairs.
    9594
  • trunk/Source/JavaScriptCore/inspector/remote/cocoa/RemoteInspectorCocoa.mm

    r232636 r232833  
    691691    BAIL_IF_UNEXPECTED_TYPE_ALLOWING_NIL(forwardedCapabilities, [NSDictionary class]);
    692692
     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
    693704    if (!m_client)
    694705        return;
     
    697708        return;
    698709
    699     m_client->requestAutomationSessionWithCapabilities(suggestedSessionIdentifier, forwardedCapabilities);
     710    m_client->requestAutomationSession(suggestedSessionIdentifier, sessionCapabilities);
    700711}
    701712
  • trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp

    r224368 r232833  
    350350}
    351351
    352 void RemoteInspector::requestAutomationSession(const char* sessionID)
     352void RemoteInspector::requestAutomationSession(const char* sessionID, const Client::SessionCapabilities& capabilities)
    353353{
    354354    if (!m_client)
     
    361361        return;
    362362
    363     m_client->requestAutomationSession(String::fromUTF8(sessionID));
     363    m_client->requestAutomationSession(String::fromUTF8(sessionID), capabilities);
    364364    updateClientCapabilities();
    365365}
  • trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp

    r222327 r232833  
    2929#if ENABLE(REMOTE_INSPECTOR)
    3030
    31 #include "RemoteInspector.h"
    3231#include "RemoteInspectorUtils.h"
    3332#include <gio/gio.h>
     
    8180    "    <method name='StartAutomationSession'>"
    8281    "      <arg type='s' name='sessionID' direction='in'/>"
     82    "      <arg type='b' name='acceptInsecureCertificates' direction='in'/>"
    8383    "      <arg type='s' name='browserName' direction='out'/>"
    8484    "      <arg type='s' name='browserVersion' direction='out'/>"
     
    124124        } else if (!g_strcmp0(methodName, "StartAutomationSession")) {
    125125            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();
    129132            g_dbus_method_invocation_return_value(invocation, g_variant_new("(ss)",
    130                 capabilities ? capabilities->browserName.utf8().data() : "",
    131                 capabilities ? capabilities->browserVersion.utf8().data() : ""));
     133                clientCapabilities ? clientCapabilities->browserName.utf8().data() : "",
     134                clientCapabilities ? clientCapabilities->browserVersion.utf8().data() : ""));
    132135        } else
    133136            g_dbus_method_invocation_return_value(invocation, nullptr);
     
    392395}
    393396
    394 void RemoteInspectorServer::startAutomationSession(GDBusConnection* automationConnection, const char* sessionID)
     397void RemoteInspectorServer::startAutomationSession(GDBusConnection* automationConnection, const char* sessionID, const RemoteInspector::Client::SessionCapabilities& capabilities)
    395398{
    396399    if (!m_automationConnection)
     
    398401    ASSERT(m_automationConnection.get() == automationConnection);
    399402
    400     RemoteInspector::singleton().requestAutomationSession(sessionID);
     403    RemoteInspector::singleton().requestAutomationSession(sessionID, capabilities);
    401404}
    402405
  • trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.h

    r215862 r232833  
    2828#if ENABLE(REMOTE_INSPECTOR)
    2929
     30#include "RemoteInspector.h"
    3031#include <wtf/HashMap.h>
    3132#include <wtf/HashSet.h>
     
    6667    void sendMessageToFrontend(GDBusConnection*, uint64_t target, const char*);
    6768    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&);
    6970
    7071    static void clientConnectionClosedCallback(GDBusConnection*, gboolean remotePeerVanished, GError*, RemoteInspectorServer*);
  • trunk/Source/WebDriver/ChangeLog

    r232670 r232833  
     12018-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
    1192018-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>
    220
  • trunk/Source/WebDriver/glib/SessionHostGlib.cpp

    r232111 r232833  
    272272        INSPECTOR_DBUS_INTERFACE,
    273273        "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)),
    275275        nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START,
    276276        -1, m_cancellable.get(), [](GObject* source, GAsyncResult* result, gpointer userData) {
     
    283283            if (!resultVariant) {
    284284                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)));
    286286                return;
    287287            }
  • trunk/Source/WebDriver/gtk/WebDriverServiceGtk.cpp

    r227603 r232833  
    3737    Capabilities capabilities;
    3838    capabilities.platformName = String("linux");
    39     capabilities.acceptInsecureCerts = false;
    4039    capabilities.setWindowRect = true;
    4140    return capabilities;
  • trunk/Source/WebDriver/wpe/WebDriverServiceWPE.cpp

    r232670 r232833  
    3737    Capabilities capabilities;
    3838    capabilities.platformName = String("linux");
    39     capabilities.acceptInsecureCerts = false;
    4039    capabilities.setWindowRect = false;
    4140    return capabilities;
  • trunk/Source/WebKit/ChangeLog

    r232832 r232833  
     12018-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
    1182018-06-13  Adrian Perez de Castro  <aperez@igalia.com>
    219
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp

    r232150 r232833  
    289289}
    290290
    291 WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext* webContext, const char* sessionID)
     291WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext* webContext, const char* sessionID, const Inspector::RemoteInspector::Client::SessionCapabilities& capabilities)
    292292{
    293293    auto* session = WEBKIT_AUTOMATION_SESSION(g_object_new(WEBKIT_TYPE_AUTOMATION_SESSION, "id", sessionID, nullptr));
    294294    session->priv->webContext = webContext;
     295    if (capabilities.acceptInsecureCertificates)
     296        webkit_web_context_set_tls_errors_policy(webContext, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
    295297    return session;
    296298}
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h

    r220387 r232833  
    2323#include "WebKitAutomationSession.h"
    2424#include "WebKitWebContext.h"
     25#include <JavaScriptCore/RemoteInspector.h>
    2526
    26 WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext*, const char* sessionID);
     27WebKitAutomationSession* webkitAutomationSessionCreate(WebKitWebContext*, const char* sessionID, const Inspector::RemoteInspector::Client::SessionCapabilities&);
    2728WebKit::WebAutomationSession& webkitAutomationSessionGetSession(WebKitAutomationSession*);
    2829String webkitAutomationSessionGetBrowserName(WebKitAutomationSession*);
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp

    r232111 r232833  
    233233    }
    234234
    235     void requestAutomationSession(const String& sessionIdentifier) override
     235    void requestAutomationSession(const String& sessionIdentifier, const Inspector::RemoteInspector::Client::SessionCapabilities& capabilities) override
    236236    {
    237237        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));
    239239        g_signal_emit(m_webContext, signals[AUTOMATION_STARTED], 0, m_webContext->priv->automationSession.get());
    240240        m_webContext->priv->processPool->setAutomationSession(&webkitAutomationSessionGetSession(m_webContext->priv->automationSession.get()));
  • trunk/Source/WebKit/UIProcess/Cocoa/AutomationClient.h

    r232636 r232833  
    5050    void didRequestAutomationSession(WebKit::WebProcessPool*, const String& sessionIdentifier) final;
    5151
    52     void requestAutomationSessionWithCapabilities(NSString *sessionIdentifier, NSDictionary *forwardedCapabilities) final;
    53 
    5452    // RemoteInspector::Client
    5553    bool remoteAutomationAllowed() const final;
    56     void requestAutomationSession(const String& sessionIdentifier) final;
     54    void requestAutomationSession(const String& sessionIdentifier, const Inspector::RemoteInspector::Client::SessionCapabilities&) final;
    5755    String browserName() const final;
    5856    String browserVersion() const final;
  • trunk/Source/WebKit/UIProcess/Cocoa/AutomationClient.mm

    r232636 r232833  
    3535#import "_WKAutomationSessionConfiguration.h"
    3636#import <JavaScriptCore/RemoteInspector.h>
    37 #import <JavaScriptCore/RemoteInspectorConstants.h>
    3837#import <wtf/spi/cf/CFBundleSPI.h>
    3938#import <wtf/text/WTFString.h>
     
    6463void AutomationClient::didRequestAutomationSession(WebKit::WebProcessPool*, const String& sessionIdentifier)
    6564{
    66     requestAutomationSession(sessionIdentifier);
     65    requestAutomationSession(sessionIdentifier, { });
    6766}
    6867
     
    7776}
    7877
    79 void AutomationClient::requestAutomationSession(const String& sessionIdentifier)
     78void AutomationClient::requestAutomationSession(const String& sessionIdentifier, const RemoteInspector::Client::SessionCapabilities& sessionCapabilities)
    8079{
    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    });
    8394}
    8495
     
    105116}
    106117
    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 and
    122     // 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 
    129118} // namespace WebKit
    130119
Note: See TracChangeset for help on using the changeset viewer.