Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (233076 => 233077)
--- trunk/Source/_javascript_Core/ChangeLog 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Source/_javascript_Core/ChangeLog 2018-06-22 13:23:53 UTC (rev 233077)
@@ -1,3 +1,15 @@
+2018-06-22 Carlos Garcia Campos <[email protected]>
+
+ [GTK] WebDriver: use a dictionary for session capabilities in StartAutomationSession message
+ https://bugs.webkit.org/show_bug.cgi?id=186915
+
+ Reviewed by Žan Doberšek.
+
+ Update StartAutomationSession message handling to receive a dictionary of session capabilities.
+
+ * inspector/remote/glib/RemoteInspectorServer.cpp:
+ (Inspector::processSessionCapabilities): Helper method to process the session capabilities.
+
2018-06-21 Mark Lam <[email protected]>
WebKit (_javascript_Core) compilation error with Clang ≥ 6.
Modified: trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorServer.cpp (233076 => 233077)
--- trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorServer.cpp 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorServer.cpp 2018-06-22 13:23:53 UTC (rev 233077)
@@ -79,8 +79,7 @@
" </method>"
" <method name='StartAutomationSession'>"
" <arg type='s' name='sessionID' direction='in'/>"
- " <arg type='b' name='acceptInsecureCertificates' direction='in'/>"
- " <arg type='a(ss)' name='certificates' direction='in'/>"
+ " <arg type='a{sv}' name='capabilities' direction='in'/>"
" <arg type='s' name='browserName' direction='out'/>"
" <arg type='s' name='browserVersion' direction='out'/>"
" </method>"
@@ -88,6 +87,26 @@
"</node>";
}
+static RemoteInspector::Client::SessionCapabilities processSessionCapabilities(GVariant* sessionCapabilities)
+{
+ RemoteInspector::Client::SessionCapabilities capabilities;
+
+ gboolean acceptInsecureCerts;
+ if (g_variant_lookup(sessionCapabilities, "acceptInsecureCerts", "b", &acceptInsecureCerts))
+ capabilities.acceptInsecureCertificates = acceptInsecureCerts;
+
+ if (GRefPtr<GVariant> certificates = g_variant_lookup_value(sessionCapabilities, "certificates", G_VARIANT_TYPE("a(ss)"))) {
+ GVariantIter iter;
+ auto childCount = g_variant_iter_init(&iter, certificates.get());
+ capabilities.certificates.reserveCapacity(childCount);
+ const char* host;
+ const char* certificateFile;
+ while (g_variant_iter_loop(&iter, "(&s&s)", &host, &certificateFile))
+ capabilities.certificates.uncheckedAppend({ String::fromUTF8(host), String::fromUTF8(certificateFile) });
+ }
+
+ return capabilities;
+}
const GDBusInterfaceVTable RemoteInspectorServer::s_interfaceVTable = {
// method_call
[] (GDBusConnection* connection, const gchar* /*sender*/, const gchar* /*objectPath*/, const gchar* /*interfaceName*/, const gchar* methodName, GVariant* parameters, GDBusMethodInvocation* invocation, gpointer userData) {
@@ -124,16 +143,9 @@
g_dbus_method_invocation_return_value(invocation, nullptr);
} else if (!g_strcmp0(methodName, "StartAutomationSession")) {
const char* sessionID;
- gboolean acceptInsecureCertificates;
- GUniqueOutPtr<GVariantIter> certificates;
- g_variant_get(parameters, "(&sba(ss))", &sessionID, &acceptInsecureCertificates, &certificates.outPtr());
- RemoteInspector::Client::SessionCapabilities capabilities;
- capabilities.acceptInsecureCertificates = acceptInsecureCertificates;
- capabilities.certificates.reserveCapacity(g_variant_iter_n_children(certificates.get()));
- const char* host;
- const char* certificateFile;
- while (g_variant_iter_loop(certificates.get(), "(&s&s)", &host, &certificateFile))
- capabilities.certificates.uncheckedAppend({ String::fromUTF8(host), String::fromUTF8(certificateFile) });
+ GRefPtr<GVariant> sessionCapabilities;
+ g_variant_get(parameters, "(&s@a{sv})", &sessionID, &sessionCapabilities.outPtr());
+ auto capabilities = processSessionCapabilities(sessionCapabilities.get());
inspectorServer->startAutomationSession(connection, sessionID, capabilities);
auto clientCapabilities = RemoteInspector::singleton().clientCapabilities();
g_dbus_method_invocation_return_value(invocation, g_variant_new("(ss)",
Modified: trunk/Source/WebDriver/ChangeLog (233076 => 233077)
--- trunk/Source/WebDriver/ChangeLog 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Source/WebDriver/ChangeLog 2018-06-22 13:23:53 UTC (rev 233077)
@@ -1,3 +1,18 @@
+2018-06-22 Carlos Garcia Campos <[email protected]>
+
+ [GTK] WebDriver: use a dictionary for session capabilities in StartAutomationSession message
+ https://bugs.webkit.org/show_bug.cgi?id=186915
+
+ Reviewed by Žan Doberšek.
+
+ Instead of growing the message signature every time we add a new capability, use a dictionary a{sv} and simply add
+ new entries when new capabilities are added. This way we won't need to change the message signature anymore.
+
+ * SessionHost.h:
+ * glib/SessionHostGlib.cpp:
+ (WebDriver::SessionHost::buildSessionCapabilities const): Helper to build the session capabilities dictionary.
+ (WebDriver::SessionHost::startAutomationSession):
+
2018-06-21 Zan Dobersek <[email protected]>
[GTK] WebDriver: allow applying host-specific TLS certificates for automated sessions
Modified: trunk/Source/WebDriver/SessionHost.h (233076 => 233077)
--- trunk/Source/WebDriver/SessionHost.h 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Source/WebDriver/SessionHost.h 2018-06-22 13:23:53 UTC (rev 233077)
@@ -80,6 +80,7 @@
void launchBrowser(Function<void (std::optional<String> error)>&&);
void connectToBrowser(std::unique_ptr<ConnectToBrowserAsyncData>&&);
bool matchCapabilities(GVariant*);
+ GVariant* buildSessionCapabilities() const;
void setupConnection(GRefPtr<GDBusConnection>&&);
void setTargetList(uint64_t connectionID, Vector<Target>&&);
void sendMessageToFrontend(uint64_t connectionID, uint64_t targetID, const char* message);
Modified: trunk/Source/WebDriver/glib/SessionHostGlib.cpp (233076 => 233077)
--- trunk/Source/WebDriver/glib/SessionHostGlib.cpp 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Source/WebDriver/glib/SessionHostGlib.cpp 2018-06-22 13:23:53 UTC (rev 233077)
@@ -261,25 +261,40 @@
return didMatch;
}
-void SessionHost::startAutomationSession(Function<void (bool, std::optional<String>)>&& completionHandler)
+GVariant* SessionHost::buildSessionCapabilities() const
{
- ASSERT(m_dbusConnection);
- ASSERT(!m_startSessionCompletionHandler);
- m_startSessionCompletionHandler = WTFMove(completionHandler);
- m_sessionID = createCanonicalUUIDString();
+ if (!m_capabilities.acceptInsecureCerts && !m_capabilities.certificates)
+ return nullptr;
+
GVariantBuilder builder;
- g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ss)"));
+ g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
+ if (m_capabilities.acceptInsecureCerts)
+ g_variant_builder_add(&builder, "{sv}", "acceptInsecureCerts", g_variant_new_boolean(m_capabilities.acceptInsecureCerts.value()));
+
if (m_capabilities.certificates) {
+ GVariantBuilder arrayBuilder;
+ g_variant_builder_init(&arrayBuilder, G_VARIANT_TYPE("a(ss)"));
for (auto& certificate : *m_capabilities.certificates) {
- g_variant_builder_add_value(&builder, g_variant_new("(ss)",
+ g_variant_builder_add_value(&arrayBuilder, g_variant_new("(ss)",
certificate.first.utf8().data(), certificate.second.utf8().data()));
}
+ g_variant_builder_add(&builder, "{sv}", "certificates", g_variant_builder_end(&arrayBuilder));
}
+
+ return g_variant_builder_end(&builder);
+}
+
+void SessionHost::startAutomationSession(Function<void (bool, std::optional<String>)>&& completionHandler)
+{
+ ASSERT(m_dbusConnection);
+ ASSERT(!m_startSessionCompletionHandler);
+ m_startSessionCompletionHandler = WTFMove(completionHandler);
+ m_sessionID = createCanonicalUUIDString();
g_dbus_connection_call(m_dbusConnection.get(), nullptr,
INSPECTOR_DBUS_OBJECT_PATH,
INSPECTOR_DBUS_INTERFACE,
"StartAutomationSession",
- g_variant_new("(sba(ss))", m_sessionID.utf8().data(), m_capabilities.acceptInsecureCerts.value_or(false), &builder),
+ g_variant_new("(s@a{sv})", m_sessionID.utf8().data(), buildSessionCapabilities()),
nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START,
-1, m_cancellable.get(), [](GObject* source, GAsyncResult* result, gpointer userData) {
GUniqueOutPtr<GError> error;
Modified: trunk/Tools/ChangeLog (233076 => 233077)
--- trunk/Tools/ChangeLog 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Tools/ChangeLog 2018-06-22 13:23:53 UTC (rev 233077)
@@ -1,5 +1,16 @@
2018-06-22 Carlos Garcia Campos <[email protected]>
+ [GTK] WebDriver: use a dictionary for session capabilities in StartAutomationSession message
+ https://bugs.webkit.org/show_bug.cgi?id=186915
+
+ Reviewed by Žan Doberšek.
+
+ Update /webkit/WebKitAutomationSession/request-session to use the new StartAutomationSession message signature.
+
+ * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
+
+2018-06-22 Carlos Garcia Campos <[email protected]>
+
Unreviewed. Fix GLib test /webkit/WebKitSecurityManager/file-xhr after r231000
We are now receiving two console messages instead of one. Simply update the test to check both messages.
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp (233076 => 233077)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp 2018-06-22 13:22:13 UTC (rev 233076)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp 2018-06-22 13:23:53 UTC (rev 233077)
@@ -208,7 +208,7 @@
{
auto signalID = g_signal_connect(m_webContext.get(), "automation-started", G_CALLBACK(automationStartedCallback), this);
g_dbus_connection_call(m_connection.get(), nullptr, "/org/webkit/Inspector", "org.webkit.Inspector",
- "StartAutomationSession", g_variant_new("(s)", sessionID), nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, nullptr,
+ "StartAutomationSession", g_variant_new("(sa{sv})", sessionID, nullptr), nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, nullptr,
[](GObject* source, GAsyncResult* result, gpointer userData) {
auto* test = static_cast<AutomationTest*>(userData);
if (!test->m_session)