Modified: trunk/Source/WebDriver/ChangeLog (233136 => 233137)
--- trunk/Source/WebDriver/ChangeLog 2018-06-25 04:40:21 UTC (rev 233136)
+++ trunk/Source/WebDriver/ChangeLog 2018-06-25 06:31:15 UTC (rev 233137)
@@ -1,3 +1,16 @@
+2018-06-24 Carlos Garcia Campos <[email protected]>
+
+ Unreviewed. Fix WebDriver tests after r233077.
+
+ WebDriver process is crashing because GVariant doesn't allow to pass a nullptr array when using @ modifier.
+
+ * SessionHost.h:
+ * glib/SessionHostGlib.cpp:
+ (WebDriver::SessionHost::buildSessionCapabilities const): Receive a GVariantBuilder and return true if there are
+ session capabilities.
+ (WebDriver::SessionHost::startAutomationSession): Remove the @ modifier and use a GVariantBuilder instead, or
+ nullptr if there aren't session capabilities.
+
2018-06-21 Brian Burg <[email protected]>
Web Automation: key actions should support multiple pressed virtual keys
Modified: trunk/Source/WebDriver/SessionHost.h (233136 => 233137)
--- trunk/Source/WebDriver/SessionHost.h 2018-06-25 04:40:21 UTC (rev 233136)
+++ trunk/Source/WebDriver/SessionHost.h 2018-06-25 06:31:15 UTC (rev 233137)
@@ -80,7 +80,7 @@
void launchBrowser(Function<void (std::optional<String> error)>&&);
void connectToBrowser(std::unique_ptr<ConnectToBrowserAsyncData>&&);
bool matchCapabilities(GVariant*);
- GVariant* buildSessionCapabilities() const;
+ bool buildSessionCapabilities(GVariantBuilder*) 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 (233136 => 233137)
--- trunk/Source/WebDriver/glib/SessionHostGlib.cpp 2018-06-25 04:40:21 UTC (rev 233136)
+++ trunk/Source/WebDriver/glib/SessionHostGlib.cpp 2018-06-25 06:31:15 UTC (rev 233137)
@@ -261,15 +261,14 @@
return didMatch;
}
-GVariant* SessionHost::buildSessionCapabilities() const
+bool SessionHost::buildSessionCapabilities(GVariantBuilder* builder) const
{
if (!m_capabilities.acceptInsecureCerts && !m_capabilities.certificates)
- return nullptr;
+ return false;
- GVariantBuilder builder;
- g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
+ 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()));
+ g_variant_builder_add(builder, "{sv}", "acceptInsecureCerts", g_variant_new_boolean(m_capabilities.acceptInsecureCerts.value()));
if (m_capabilities.certificates) {
GVariantBuilder arrayBuilder;
@@ -278,10 +277,10 @@
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));
+ g_variant_builder_add(builder, "{sv}", "certificates", g_variant_builder_end(&arrayBuilder));
}
- return g_variant_builder_end(&builder);
+ return true;
}
void SessionHost::startAutomationSession(Function<void (bool, std::optional<String>)>&& completionHandler)
@@ -290,11 +289,12 @@
ASSERT(!m_startSessionCompletionHandler);
m_startSessionCompletionHandler = WTFMove(completionHandler);
m_sessionID = createCanonicalUUIDString();
+ GVariantBuilder builder;
g_dbus_connection_call(m_dbusConnection.get(), nullptr,
INSPECTOR_DBUS_OBJECT_PATH,
INSPECTOR_DBUS_INTERFACE,
"StartAutomationSession",
- g_variant_new("(s@a{sv})", m_sessionID.utf8().data(), buildSessionCapabilities()),
+ g_variant_new("(sa{sv})", m_sessionID.utf8().data(), buildSessionCapabilities(&builder) ? &builder : nullptr),
nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START,
-1, m_cancellable.get(), [](GObject* source, GAsyncResult* result, gpointer userData) {
GUniqueOutPtr<GError> error;