Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (220328 => 220329)
--- trunk/Source/_javascript_Core/ChangeLog 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-08-07 06:06:34 UTC (rev 220329)
@@ -1,3 +1,22 @@
+2017-08-05 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [GTK][WPE] Add API to provide browser information required by automation
+ https://bugs.webkit.org/show_bug.cgi?id=175130
+
+ Reviewed by Brian Burg.
+
+ Add browserName and browserVersion to RemoteInspector::Client::Capabilities and virtual methods to the Client to
+ get them.
+
+ * inspector/remote/RemoteInspector.cpp:
+ (Inspector::RemoteInspector::updateClientCapabilities): Update also browserName and browserVersion.
+ * inspector/remote/RemoteInspector.h:
+ * inspector/remote/glib/RemoteInspectorGlib.cpp:
+ (Inspector::RemoteInspector::requestAutomationSession): Call updateClientCapabilities() after the session is
+ requested to ensure they are updated before StartAutomationSession reply is sent.
+ * inspector/remote/glib/RemoteInspectorServer.cpp: Add browserName and browserVersion as return values of
+ StartAutomationSession mesasage.
+
2017-08-06 Yusuke Suzuki <utatane....@gmail.com>
Promise resolve and reject function should have length = 1
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.cpp (220328 => 220329)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -133,7 +133,9 @@
m_clientCapabilities = std::nullopt;
else {
RemoteInspector::Client::Capabilities updatedCapabilities = {
- m_client->remoteAutomationAllowed() // remoteAutomationAllowed
+ m_client->remoteAutomationAllowed(),
+ m_client->browserName(),
+ m_client->browserVersion()
};
m_clientCapabilities = updatedCapabilities;
Modified: trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.h (220328 => 220329)
--- trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/_javascript_Core/inspector/remote/RemoteInspector.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -30,6 +30,7 @@
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/Lock.h>
+#include <wtf/text/WTFString.h>
#if PLATFORM(COCOA)
#include "RemoteInspectorXPCConnection.h"
@@ -66,10 +67,14 @@
public:
struct Capabilities {
bool remoteAutomationAllowed : 1;
+ String browserName;
+ String browserVersion;
};
virtual ~Client() { }
virtual bool remoteAutomationAllowed() const = 0;
+ virtual String browserName() const { return { }; }
+ virtual String browserVersion() const { return { }; }
virtual void requestAutomationSession(const String& sessionIdentifier) = 0;
};
@@ -85,6 +90,7 @@
RemoteInspector::Client* client() const { return m_client; }
void setClient(RemoteInspector::Client*);
void clientCapabilitiesDidChange();
+ std::optional<RemoteInspector::Client::Capabilities> clientCapabilities() const { return m_clientCapabilities; }
void setupFailed(unsigned targetIdentifier);
void setupCompleted(unsigned targetIdentifier);
Modified: trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorGlib.cpp (220328 => 220329)
--- trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorGlib.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorGlib.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -355,6 +355,7 @@
return;
m_client->requestAutomationSession(String::fromUTF8(sessionID));
+ updateClientCapabilities();
}
} // namespace Inspector
Modified: trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorServer.cpp (220328 => 220329)
--- trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorServer.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/_javascript_Core/inspector/remote/glib/RemoteInspectorServer.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -79,6 +79,8 @@
" </method>"
" <method name='StartAutomationSession'>"
" <arg type='s' name='sessionID' direction='in'/>"
+ " <arg type='s' name='browserName' direction='out'/>"
+ " <arg type='s' name='browserVersion' direction='out'/>"
" </method>"
" </interface>"
"</node>";
@@ -121,7 +123,10 @@
const char* sessionID;
g_variant_get(parameters, "(&s)", &sessionID);
inspectorServer->startAutomationSession(connection, sessionID);
- g_dbus_method_invocation_return_value(invocation, nullptr);
+ auto capabilities = RemoteInspector::singleton().clientCapabilities();
+ g_dbus_method_invocation_return_value(invocation, g_variant_new("(ss)",
+ capabilities ? capabilities->browserName.utf8().data() : "",
+ capabilities ? capabilities->browserVersion.utf8().data() : ""));
} else
g_dbus_method_invocation_return_value(invocation, nullptr);
},
Modified: trunk/Source/WebDriver/ChangeLog (220328 => 220329)
--- trunk/Source/WebDriver/ChangeLog 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebDriver/ChangeLog 2017-08-07 06:06:34 UTC (rev 220329)
@@ -1,5 +1,24 @@
2017-08-05 Carlos Garcia Campos <cgar...@igalia.com>
+ [GTK][WPE] Add API to provide browser information required by automation
+ https://bugs.webkit.org/show_bug.cgi?id=175130
+
+ Reviewed by Brian Burg.
+
+ * Session.cpp:
+ (WebDriver::Session::createTopLevelBrowsingContext): Check if startAutomationSession and complete the command
+ with error in that case.
+ * SessionHost.h:
+ * glib/SessionHostGlib.cpp:
+ (WebDriver::SessionHost::matchCapabilities): Match the capabilities that are known only after the browser has
+ been launched.
+ (WebDriver::SessionHost::startAutomationSession): Handle the StartAutomationSession response, extracting the
+ capabilities and calling matchCapabilities() to match them.
+ (WebDriver::SessionHost::setTargetList): Return early if the session was rejected before due to invalid
+ capabilities.
+
+2017-08-05 Carlos Garcia Campos <cgar...@igalia.com>
+
WebDriver: Implement page load strategy
https://bugs.webkit.org/show_bug.cgi?id=175183
Modified: trunk/Source/WebDriver/Session.cpp (220328 => 220329)
--- trunk/Source/WebDriver/Session.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebDriver/Session.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -122,7 +122,11 @@
void Session::createTopLevelBrowsingContext(Function<void (CommandResult&&)>&& completionHandler)
{
ASSERT(!m_toplevelBrowsingContext.value());
- m_host->startAutomationSession(m_id, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
+ m_host->startAutomationSession(m_id, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)](std::optional<String> errorMessage) mutable {
+ if (errorMessage) {
+ completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError, errorMessage.value()));
+ return;
+ }
m_host->sendCommandToBackend(ASCIILiteral("createBrowsingContext"), nullptr, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)](SessionHost::CommandResponse&& response) mutable {
if (response.isError || !response.responseObject) {
completionHandler(CommandResult::fail(WTFMove(response.responseObject)));
Modified: trunk/Source/WebDriver/SessionHost.h (220328 => 220329)
--- trunk/Source/WebDriver/SessionHost.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebDriver/SessionHost.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -56,7 +56,7 @@
enum class Succeeded { No, Yes };
void connectToBrowser(Function<void (Succeeded)>&&);
- void startAutomationSession(const String& sessionID, Function<void ()>&&);
+ void startAutomationSession(const String& sessionID, Function<void (std::optional<String>)>&&);
struct CommandResponse {
RefPtr<Inspector::InspectorObject> responseObject;
@@ -80,6 +80,7 @@
static const GDBusInterfaceVTable s_interfaceVTable;
void launchBrowser(Function<void (Succeeded)>&&);
void connectToBrowser(std::unique_ptr<ConnectToBrowserAsyncData>&&);
+ std::optional<String> matchCapabilities(GVariant*);
void setupConnection(GRefPtr<GDBusConnection>&&, Function<void (Succeeded)>&&);
void setTargetList(uint64_t connectionID, Vector<Target>&&);
void sendMessageToFrontend(uint64_t connectionID, uint64_t targetID, const char* message);
@@ -94,7 +95,7 @@
long m_closeMessageID { 0 };
#if USE(GLIB)
- Function<void ()> m_startSessionCompletionHandler;
+ Function<void (std::optional<String>)> m_startSessionCompletionHandler;
GRefPtr<GSubprocess> m_browser;
GRefPtr<GDBusConnection> m_dbusConnection;
GRefPtr<GCancellable> m_cancellable;
Modified: trunk/Source/WebDriver/glib/SessionHostGlib.cpp (220328 => 220329)
--- trunk/Source/WebDriver/glib/SessionHostGlib.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebDriver/glib/SessionHostGlib.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -26,6 +26,7 @@
#include "config.h"
#include "SessionHost.h"
+#include "WebDriverService.h"
#include <gio/gio.h>
#include <wtf/RunLoop.h>
#include <wtf/glib/GUniquePtr.h>
@@ -220,11 +221,31 @@
completionHandler(Succeeded::Yes);
}
-void SessionHost::startAutomationSession(const String& sessionID, Function<void ()>&& completionHandler)
+std::optional<String> SessionHost::matchCapabilities(GVariant* capabilities)
{
+ const char* browserName;
+ const char* browserVersion;
+ g_variant_get(capabilities, "(&s&s)", &browserName, &browserVersion);
+
+ if (m_capabilities.browserName) {
+ if (m_capabilities.browserName.value() != browserName)
+ return makeString("expected browserName ", m_capabilities.browserName.value(), " but got ", browserName);
+ } else
+ m_capabilities.browserName = String(browserName);
+
+ if (m_capabilities.browserVersion) {
+ if (!WebDriverService::platformCompareBrowserVersions(m_capabilities.browserVersion.value(), browserVersion))
+ return makeString("requested browserVersion is ", m_capabilities.browserVersion.value(), " but actual version is ", browserVersion);
+ } else
+ m_capabilities.browserVersion = String(browserVersion);
+
+ return std::nullopt;
+}
+
+void SessionHost::startAutomationSession(const String& sessionID, Function<void (std::optional<String>)>&& completionHandler)
+{
ASSERT(m_dbusConnection);
ASSERT(!m_startSessionCompletionHandler);
- // FIXME: Make StartAutomationSession return browser information and we use it to match capabilities.
m_startSessionCompletionHandler = WTFMove(completionHandler);
g_dbus_connection_call(m_dbusConnection.get(), nullptr,
INSPECTOR_DBUS_OBJECT_PATH,
@@ -232,7 +253,27 @@
"StartAutomationSession",
g_variant_new("(s)", sessionID.utf8().data()),
nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START,
- -1, m_cancellable.get(), dbusConnectionCallAsyncReadyCallback, nullptr);
+ -1, m_cancellable.get(), [](GObject* source, GAsyncResult* result, gpointer userData) {
+ GUniqueOutPtr<GError> error;
+ GRefPtr<GVariant> resultVariant = adoptGRef(g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), result, &error.outPtr()));
+ if (!resultVariant && g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ return;
+
+ auto sessionHost = static_cast<SessionHost*>(userData);
+ if (!resultVariant) {
+ auto completionHandler = std::exchange(sessionHost->m_startSessionCompletionHandler, nullptr);
+ completionHandler(String("Failed to start automation session"));
+ return;
+ }
+
+ auto errorString = sessionHost->matchCapabilities(resultVariant.get());
+ if (errorString) {
+ auto completionHandler = std::exchange(sessionHost->m_startSessionCompletionHandler, nullptr);
+ completionHandler(errorString);
+ return;
+ }
+ }, this
+ );
}
void SessionHost::setTargetList(uint64_t connectionID, Vector<Target>&& targetList)
@@ -255,6 +296,11 @@
return;
}
+ if (!m_startSessionCompletionHandler) {
+ // Session creation was already rejected.
+ return;
+ }
+
m_connectionID = connectionID;
g_dbus_connection_call(m_dbusConnection.get(), nullptr,
INSPECTOR_DBUS_OBJECT_PATH,
@@ -265,7 +311,7 @@
-1, m_cancellable.get(), dbusConnectionCallAsyncReadyCallback, nullptr);
auto startSessionCompletionHandler = std::exchange(m_startSessionCompletionHandler, nullptr);
- startSessionCompletionHandler();
+ startSessionCompletionHandler(std::nullopt);
}
void SessionHost::sendMessageToFrontend(uint64_t connectionID, uint64_t targetID, const char* message)
Modified: trunk/Source/WebKit/ChangeLog (220328 => 220329)
--- trunk/Source/WebKit/ChangeLog 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/ChangeLog 2017-08-07 06:06:34 UTC (rev 220329)
@@ -1,3 +1,45 @@
+2017-08-05 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [GTK][WPE] Add API to provide browser information required by automation
+ https://bugs.webkit.org/show_bug.cgi?id=175130
+
+ Reviewed by Michael Catanzaro.
+
+ When a new automation session is started, the web driver receives some required capabilities from the client,
+ like browser name and version. The session should be rejected if those required capabilities don't match with
+ the actual browser that is launched. We don't know that information in WebKit, so we need to add API so that
+ users can provide it when a new session request is made. This patch adds boxed object WebKitApplicationInfo that
+ can be used to set the application name and version. This object can be set to a WebKitAutomationSession when
+ WebKitWebContext::automation-started signal is emitted.
+
+ * PlatformGTK.cmake:
+ * PlatformWPE.cmake:
+ * UIProcess/API/glib/WebKitApplicationInfo.cpp: Added.
+ (webkit_application_info_new):
+ (webkit_application_info_ref):
+ (webkit_application_info_unref):
+ (webkit_application_info_set_name):
+ (webkit_application_info_get_name):
+ (webkit_application_info_set_version):
+ (webkit_application_info_get_version):
+ * UIProcess/API/glib/WebKitAutomationSession.cpp:
+ (webkitAutomationSessionDispose):
+ (webkit_automation_session_class_init):
+ (webkitAutomationSessionGetBrowserName):
+ (webkitAutomationSessionGetBrowserVersion):
+ (webkit_automation_session_set_application_info):
+ (webkit_automation_session_get_application_info):
+ * UIProcess/API/glib/WebKitAutomationSessionPrivate.h:
+ * UIProcess/API/glib/WebKitWebContext.cpp:
+ * UIProcess/API/gtk/WebKitApplicationInfo.h: Added.
+ * UIProcess/API/gtk/WebKitAutomationSession.h:
+ * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
+ * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
+ * UIProcess/API/gtk/webkit2.h:
+ * UIProcess/API/wpe/WebKitApplicationInfo.h: Added.
+ * UIProcess/API/wpe/WebKitAutomationSession.h:
+ * UIProcess/API/wpe/webkit.h:
+
2017-08-06 Carlos Alberto Lopez Perez <clo...@igalia.com>
[GTK][WPE] CFLAGS from pkg-config for (E)GL are not passed to WebKit
Modified: trunk/Source/WebKit/PlatformGTK.cmake (220328 => 220329)
--- trunk/Source/WebKit/PlatformGTK.cmake 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/PlatformGTK.cmake 2017-08-07 06:06:34 UTC (rev 220329)
@@ -117,6 +117,7 @@
UIProcess/API/C/gtk/WKView.cpp
UIProcess/API/glib/IconDatabase.cpp
+ UIProcess/API/glib/WebKitApplicationInfo.cpp
UIProcess/API/glib/WebKitAuthenticationRequest.cpp
UIProcess/API/glib/WebKitAutomationSession.cpp
UIProcess/API/glib/WebKitBackForwardList.cpp
@@ -417,6 +418,7 @@
set(WebKit2GTK_INSTALLED_HEADERS
${DERIVED_SOURCES_WEBKIT2GTK_API_DIR}/WebKitEnumTypes.h
${DERIVED_SOURCES_WEBKIT2GTK_API_DIR}/WebKitVersion.h
+ ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitApplicationInfo.h
${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitAuthenticationRequest.h
${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitAutocleanups.h
${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitAutomationSession.h
Modified: trunk/Source/WebKit/PlatformWPE.cmake (220328 => 220329)
--- trunk/Source/WebKit/PlatformWPE.cmake 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/PlatformWPE.cmake 2017-08-07 06:06:34 UTC (rev 220329)
@@ -132,6 +132,7 @@
UIProcess/API/C/wpe/WKView.cpp
UIProcess/API/glib/IconDatabase.cpp
+ UIProcess/API/glib/WebKitApplicationInfo.cpp
UIProcess/API/glib/WebKitAuthenticationRequest.cpp
UIProcess/API/glib/WebKitAutomationSession.cpp
UIProcess/API/glib/WebKitBackForwardList.cpp
@@ -275,6 +276,7 @@
set(WPE_API_INSTALLED_HEADERS
${DERIVED_SOURCES_WPE_API_DIR}/WebKitEnumTypes.h
+ ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitApplicationInfo.h
${WEBKIT2_DIR}/UIProcess/API/wpe/WebKitAuthenticationRequest.h
${WEBKIT2_DIR}/UIProcess/API/wpe/WebKitAutomationSession.h
${WEBKIT2_DIR}/UIProcess/API/wpe/WebKitBackForwardList.h
Added: trunk/Source/WebKit/UIProcess/API/glib/WebKitApplicationInfo.cpp (0 => 220329)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitApplicationInfo.cpp (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitApplicationInfo.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * 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 "WebKitApplicationInfo.h"
+
+#include <wtf/text/CString.h>
+
+struct _WebKitApplicationInfo {
+ CString name;
+ uint64_t majorVersion;
+ uint64_t minorVersion;
+ uint64_t microVersion;
+
+ int referenceCount { 1 };
+};
+
+G_DEFINE_BOXED_TYPE(WebKitApplicationInfo, webkit_application_info, webkit_application_info_ref, webkit_application_info_unref)
+
+/**
+ * webkit_application_info_new:
+ *
+ * Creates a new #WebKitApplicationInfo
+ *
+ * Returns: (transfer full): the newly created #WebKitApplicationInfo.
+ *
+ * since: 2.18
+ */
+WebKitApplicationInfo* webkit_application_info_new()
+{
+ WebKitApplicationInfo* info = static_cast<WebKitApplicationInfo*>(fastMalloc(sizeof(WebKitApplicationInfo)));
+ new (info) WebKitApplicationInfo();
+ return info;
+}
+
+/**
+ * webkit_application_info_ref:
+ * @info: a #WebKitApplicationInfo
+ *
+ * Atomically increments the reference count of @info by one. This
+ * function is MT-safe and may be called from any thread.
+ *
+ * Returns: The passed in #WebKitApplicationInfo
+ *
+ * Since: 2.18
+ */
+WebKitApplicationInfo* webkit_application_info_ref(WebKitApplicationInfo* info)
+{
+ g_atomic_int_inc(&info->referenceCount);
+ return info;
+}
+
+/**
+ * webkit_application_info_unref:
+ * @info: a #WebKitApplicationInfo
+ *
+ * Atomically decrements the reference count of @info by one. If the
+ * reference count drops to 0, all memory allocated by the #WebKitApplicationInfo is
+ * released. This function is MT-safe and may be called from any
+ * thread.
+ *
+ * Since: 2.18
+ */
+void webkit_application_info_unref(WebKitApplicationInfo* info)
+{
+ if (g_atomic_int_dec_and_test(&info->referenceCount)) {
+ info->~WebKitApplicationInfo();
+ fastFree(info);
+ }
+}
+
+/**
+ * webkit_application_info_set_name:
+ * @info: a #WebKitApplicationInfo
+ * @name: the application name
+ *
+ * Set the name of the application. If not provided, or %NULL is passed,
+ * g_get_prgname() will be used.
+ *
+ * Since: 2.18
+ */
+void webkit_application_info_set_name(WebKitApplicationInfo* info, const char* name)
+{
+ g_return_if_fail(info);
+
+ info->name = name;
+}
+
+/**
+ * webkit_application_info_get_name:
+ * @info: a #WebKitApplicationInfo
+ *
+ * Get the name of the application. If webkit_application_info_set_name() hasn't been
+ * called with a valid name, this returns g_get_prgname().
+ *
+ * Returns: the application name
+ *
+ * Since: 2.18
+ */
+const char* webkit_application_info_get_name(WebKitApplicationInfo* info)
+{
+ g_return_val_if_fail(info, nullptr);
+
+ if (!info->name.isNull())
+ return info->name.data();
+
+ return g_get_prgname();
+}
+
+/**
+ * webkit_application_info_set_version:
+ * @info: a #WebKitApplicationInfo
+ * @major: the major version number
+ * @minor: the minor version number
+ * @micro: the micro version number
+ *
+ * Set the application version. If the application doesn't use the format
+ * major.minor.micro you can pass 0 as the micro to use major.minor, or pass
+ * 0 as both micro and minor to use only major number. Any other format must
+ * be converted to major.minor.micro so that it can be used in version comparisons.
+ *
+ * Since: 2.18
+ */
+void webkit_application_info_set_version(WebKitApplicationInfo* info, guint64 major, guint64 minor, guint64 micro)
+{
+ g_return_if_fail(info);
+
+ info->majorVersion = major;
+ info->minorVersion = minor;
+ info->microVersion = micro;
+}
+
+/**
+ * webkit_application_info_get_version:
+ * @info: a #WebKitApplicationInfo
+ * @major: (out): return location for the major version number
+ * @minor: (out) (allow-none): return location for the minor version number
+ * @micro: (out) (allow-none): return location for the micro version number
+ *
+ * Get the application version previously set with webkit_application_info_set_version().
+ *
+ * Since: 2.18
+ */
+void webkit_application_info_get_version(WebKitApplicationInfo* info, guint64* major, guint64* minor, guint64* micro)
+{
+ g_return_if_fail(info && major);
+
+ *major = info->majorVersion;
+ if (minor)
+ *minor = info->minorVersion;
+ if (micro)
+ *micro = info->microVersion;
+}
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -21,6 +21,7 @@
#include "WebKitAutomationSession.h"
#include "APIAutomationSessionClient.h"
+#include "WebKitApplicationInfo.h"
#include "WebKitAutomationSessionPrivate.h"
#include "WebKitWebViewPrivate.h"
#include <glib/gi18n-lib.h>
@@ -58,6 +59,7 @@
struct _WebKitAutomationSessionPrivate {
RefPtr<WebAutomationSession> session;
+ WebKitApplicationInfo* applicationInfo;
CString id;
};
@@ -128,6 +130,18 @@
session->priv->session->setClient(std::make_unique<AutomationSessionClient>(session));
}
+static void webkitAutomationSessionDispose(GObject* object)
+{
+ WebKitAutomationSession* session = WEBKIT_AUTOMATION_SESSION(object);
+
+ if (session->priv->applicationInfo) {
+ webkit_application_info_unref(session->priv->applicationInfo);
+ session->priv->applicationInfo = nullptr;
+ }
+
+ G_OBJECT_CLASS(webkit_automation_session_parent_class)->dispose(object);
+}
+
static void webkit_automation_session_class_init(WebKitAutomationSessionClass* sessionClass)
{
GObjectClass* gObjectClass = G_OBJECT_CLASS(sessionClass);
@@ -134,6 +148,7 @@
gObjectClass->get_property = webkitAutomationSessionGetProperty;
gObjectClass->set_property = webkitAutomationSessionSetProperty;
gObjectClass->constructed = webkitAutomationSessionConstructed;
+ gObjectClass->dispose = webkitAutomationSessionDispose;
/**
* WebKitAutomationSession:id:
@@ -187,6 +202,31 @@
return *session->priv->session;
}
+String webkitAutomationSessionGetBrowserName(WebKitAutomationSession* session)
+{
+ if (session->priv->applicationInfo)
+ return String::fromUTF8(webkit_application_info_get_name(session->priv->applicationInfo));
+
+ return g_get_prgname();
+}
+
+String webkitAutomationSessionGetBrowserVersion(WebKitAutomationSession* session)
+{
+ if (!session->priv->applicationInfo)
+ return { };
+
+ guint64 major, minor, micro;
+ webkit_application_info_get_version(session->priv->applicationInfo, &major, &minor, µ);
+
+ if (!micro && !minor)
+ return String::number(major);
+
+ if (!micro)
+ return makeString(String::number(major), ".", String::number(minor));
+
+ return makeString(String::number(major), ".", String::number(minor), ".", String::number(micro));
+}
+
/**
* webkit_automation_session_get_id:
* @session: a #WebKitAutomationSession
@@ -202,3 +242,47 @@
g_return_val_if_fail(WEBKIT_IS_AUTOMATION_SESSION(session), nullptr);
return session->priv->id.data();
}
+
+/**
+ * webkit_automation_session_set_application_info:
+ * @session: a #WebKitAutomationSession
+ * @info: a #WebKitApplicationInfo
+ *
+ * Set the application information to @session. This information will be used by the driver service
+ * to match the requested capabilities with the actual application information. If this information
+ * is not provided to the session when a new automation session is requested, the creation might fail
+ * if the client requested a specific browser name or version. This will not have any effect when called
+ * after the automation session has been fully created, so this must be called in the callback of
+ * #WebKitWebContext::automation-started signal.
+ *
+ * Since: 2.18
+ */
+void webkit_automation_session_set_application_info(WebKitAutomationSession* session, WebKitApplicationInfo* info)
+{
+ g_return_if_fail(WEBKIT_IS_AUTOMATION_SESSION(session));
+ g_return_if_fail(info);
+
+ if (session->priv->applicationInfo == info)
+ return;
+
+ if (session->priv->applicationInfo)
+ webkit_application_info_unref(session->priv->applicationInfo);
+ session->priv->applicationInfo = webkit_application_info_ref(info);
+}
+
+/**
+ * webkit_automation_session_get_application_info:
+ * @session: a #WebKitAutomationSession
+ *
+ * Get the #WebKitAutomationSession previously set with webkit_automation_session_set_application_info().
+ *
+ * Returns: (transfer none): the #WebKitAutomationSession of @session, or %NULL if no one has been set.
+ *
+ * Since: 2.18
+ */
+WebKitApplicationInfo* webkit_automation_session_get_application_info(WebKitAutomationSession* session)
+{
+ g_return_val_if_fail(WEBKIT_IS_AUTOMATION_SESSION(session), nullptr);
+
+ return session->priv->applicationInfo;
+}
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -24,3 +24,5 @@
WebKitAutomationSession* webkitAutomationSessionCreate(const char* sessionID);
WebKit::WebAutomationSession& webkitAutomationSessionGetSession(WebKitAutomationSession*);
+String webkitAutomationSessionGetBrowserName(WebKitAutomationSession*);
+String webkitAutomationSessionGetBrowserVersion(WebKitAutomationSession*);
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -214,12 +214,28 @@
private:
bool remoteAutomationAllowed() const override { return true; }
+ String browserName() const override
+ {
+ if (!m_webContext->priv->automationSession)
+ return { };
+
+ return webkitAutomationSessionGetBrowserName(m_webContext->priv->automationSession.get());
+ }
+
+ String browserVersion() const override
+ {
+ if (!m_webContext->priv->automationSession)
+ return { };
+
+ return webkitAutomationSessionGetBrowserVersion(m_webContext->priv->automationSession.get());
+ }
+
void requestAutomationSession(const String& sessionIdentifier) override
{
ASSERT(!m_webContext->priv->automationSession);
m_webContext->priv->automationSession = adoptGRef(webkitAutomationSessionCreate(sessionIdentifier.utf8().data()));
+ g_signal_emit(m_webContext, signals[AUTOMATION_STARTED], 0, m_webContext->priv->automationSession.get());
m_webContext->priv->processPool->setAutomationSession(&webkitAutomationSessionGetSession(m_webContext->priv->automationSession.get()));
- g_signal_emit(m_webContext, signals[AUTOMATION_STARTED], 0, m_webContext->priv->automationSession.get());
}
WebKitWebContext* m_webContext;
Added: trunk/Source/WebKit/UIProcess/API/gtk/WebKitApplicationInfo.h (0 => 220329)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitApplicationInfo.h (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitApplicationInfo.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * 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 WebKitApplicationInfo_h
+#define WebKitApplicationInfo_h
+
+#include <glib-object.h>
+#include <webkit2/WebKitDefines.h>
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_APPLICATION_INFO (webkit_application_info_get_type())
+
+typedef struct _WebKitApplicationInfo WebKitApplicationInfo;
+
+
+WEBKIT_API GType
+webkit_application_info_get_type (void);
+
+WEBKIT_API WebKitApplicationInfo *
+webkit_application_info_new (void);
+
+WEBKIT_API WebKitApplicationInfo *
+webkit_application_info_ref (WebKitApplicationInfo *info);
+
+WEBKIT_API void
+webkit_application_info_unref (WebKitApplicationInfo *info);
+
+WEBKIT_API void
+webkit_application_info_set_name (WebKitApplicationInfo *info,
+ const gchar *name);
+WEBKIT_API const gchar *
+webkit_application_info_get_name (WebKitApplicationInfo *info);
+
+WEBKIT_API void
+webkit_application_info_set_version (WebKitApplicationInfo *info,
+ guint64 major,
+ guint64 minor,
+ guint64 micro);
+
+WEBKIT_API void
+webkit_application_info_get_version (WebKitApplicationInfo *info,
+ guint64 *major,
+ guint64 *minor,
+ guint64 *micro);
+
+G_END_DECLS
+
+#endif
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -25,6 +25,7 @@
#define WebKitAutomationSession_h
#include <glib-object.h>
+#include <webkit2/WebKitApplicationInfo.h>
#include <webkit2/WebKitDefines.h>
G_BEGIN_DECLS
@@ -56,11 +57,18 @@
};
WEBKIT_API GType
-webkit_automation_session_get_type (void);
+webkit_automation_session_get_type (void);
WEBKIT_API const char *
-webkit_automation_session_get_id (WebKitAutomationSession *session);
+webkit_automation_session_get_id (WebKitAutomationSession *session);
+WEBKIT_API void
+webkit_automation_session_set_application_info (WebKitAutomationSession *session,
+ WebKitApplicationInfo *info);
+
+WEBKIT_API WebKitApplicationInfo *
+webkit_automation_session_get_application_info (WebKitAutomationSession *session);
+
G_END_DECLS
#endif /* WebKitAutomationSession_h */
Modified: trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt 2017-08-07 06:06:34 UTC (rev 220329)
@@ -1358,6 +1358,8 @@
<FILE>WebKitAutomationSession</FILE>
WebKitAutomationSession
webkit_automation_session_get_id
+webkit_automation_session_set_application_info
+webkit_automation_session_get_application_info
<SUBSECTION Private>
WebKitAutomationSessionPrivate
@@ -1374,6 +1376,24 @@
</SECTION>
<SECTION>
+<FILE>WebKitApplicationInfo</FILE>
+WebKitApplicationInfo
+webkit_application_info_new
+webkit_application_info_ref
+webkit_application_info_unref
+webkit_application_info_set_name
+webkit_application_info_get_name
+webkit_application_info_set_version
+webkit_application_info_get_version
+
+<SUBSECTION Private>
+webkit_application_info_get_type
+
+<SUBSECTION Standard>
+WEBKIT_TYPE_APPLICATION_INFO
+</SECTION>
+
+<SECTION>
<FILE>WebKitWebExtension</FILE>
WebKitWebExtension
WebKitWebExtensionInitializeFunction
Modified: trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml 2017-08-07 06:06:34 UTC (rev 220329)
@@ -59,6 +59,7 @@
<xi:include href=""
<xi:include href=""
<xi:include href=""
+ <xi:include href=""
</chapter>
<chapter>
Modified: trunk/Source/WebKit/UIProcess/API/gtk/webkit2.h (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/gtk/webkit2.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/gtk/webkit2.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -27,6 +27,7 @@
#define __WEBKIT2_H_INSIDE__
+#include <webkit2/WebKitApplicationInfo.h>
#include <webkit2/WebKitAuthenticationRequest.h>
#include <webkit2/WebKitAutomationSession.h>
#include <webkit2/WebKitBackForwardList.h>
Added: trunk/Source/WebKit/UIProcess/API/wpe/WebKitApplicationInfo.h (0 => 220329)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitApplicationInfo.h (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitApplicationInfo.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * 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(__WEBKIT_H_INSIDE__) && !defined(WEBKIT2_COMPILATION)
+#error "Only <wpe/webkit.h> can be included directly."
+#endif
+
+#ifndef WebKitApplicationInfo_h
+#define WebKitApplicationInfo_h
+
+#include <glib-object.h>
+#include <wpe/WebKitDefines.h>
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_APPLICATION_INFO (webkit_application_info_get_type())
+
+typedef struct _WebKitApplicationInfo WebKitApplicationInfo;
+
+
+WEBKIT_API GType
+webkit_application_info_get_type (void);
+
+WEBKIT_API WebKitApplicationInfo *
+webkit_application_info_new (void);
+
+WEBKIT_API WebKitApplicationInfo *
+webkit_application_info_ref (WebKitApplicationInfo *info);
+
+WEBKIT_API void
+webkit_application_info_unref (WebKitApplicationInfo *info);
+
+WEBKIT_API void
+webkit_application_info_set_name (WebKitApplicationInfo *info,
+ const gchar *name);
+WEBKIT_API const gchar *
+webkit_application_info_get_name (WebKitApplicationInfo *info);
+
+WEBKIT_API void
+webkit_application_info_set_version (WebKitApplicationInfo *info,
+ guint64 major,
+ guint64 minor,
+ guint64 micro);
+
+WEBKIT_API void
+webkit_application_info_get_version (WebKitApplicationInfo *info,
+ guint64 *major,
+ guint64 *minor,
+ guint64 *micro);
+
+G_END_DECLS
+
+#endif
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -25,6 +25,7 @@
#define WebKitAutomationSession_h
#include <glib-object.h>
+#include <wpe/WebKitApplicationInfo.h>
#include <wpe/WebKitDefines.h>
G_BEGIN_DECLS
@@ -56,11 +57,18 @@
};
WEBKIT_API GType
-webkit_automation_session_get_type (void);
+webkit_automation_session_get_type (void);
WEBKIT_API const char *
-webkit_automation_session_get_id (WebKitAutomationSession *session);
+webkit_automation_session_get_id (WebKitAutomationSession *session);
+WEBKIT_API void
+webkit_automation_session_set_application_info (WebKitAutomationSession *session,
+ WebKitApplicationInfo *info);
+
+WEBKIT_API WebKitApplicationInfo *
+webkit_automation_session_get_application_info (WebKitAutomationSession *session);
+
G_END_DECLS
#endif /* WebKitAutomationSession_h */
Modified: trunk/Source/WebKit/UIProcess/API/wpe/webkit.h (220328 => 220329)
--- trunk/Source/WebKit/UIProcess/API/wpe/webkit.h 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Source/WebKit/UIProcess/API/wpe/webkit.h 2017-08-07 06:06:34 UTC (rev 220329)
@@ -27,6 +27,7 @@
#define __WEBKIT_H_INSIDE__
+#include <wpe/WebKitApplicationInfo.h>
#include <wpe/WebKitAuthenticationRequest.h>
#include <wpe/WebKitAutomationSession.h>
#include <wpe/WebKitBackForwardList.h>
Modified: trunk/Tools/ChangeLog (220328 => 220329)
--- trunk/Tools/ChangeLog 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Tools/ChangeLog 2017-08-07 06:06:34 UTC (rev 220329)
@@ -1,3 +1,16 @@
+2017-08-05 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [GTK][WPE] Add API to provide browser information required by automation
+ https://bugs.webkit.org/show_bug.cgi?id=175130
+
+ Reviewed by Michael Catanzaro.
+
+ * MiniBrowser/gtk/main.c:
+ (automationStartedCallback): Set browser information when a new automation session is started.
+ * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
+ (testAutomationSessionApplicationInfo):
+ (beforeAll):
+
2017-08-06 Ryan Haddad <ryanhad...@apple.com>
Unreviewed, rolling out r220295.
Modified: trunk/Tools/MiniBrowser/gtk/main.c (220328 => 220329)
--- trunk/Tools/MiniBrowser/gtk/main.c 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Tools/MiniBrowser/gtk/main.c 2017-08-07 06:06:34 UTC (rev 220329)
@@ -458,6 +458,11 @@
static void automationStartedCallback(WebKitWebContext *webContext, WebKitAutomationSession *session)
{
+ WebKitApplicationInfo *info = webkit_application_info_new();
+ webkit_application_info_set_version(info, WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION, WEBKIT_MICRO_VERSION);
+ webkit_automation_session_set_application_info(session, info);
+ webkit_application_info_unref(info);
+
g_signal_connect(session, "create-web-view", G_CALLBACK(createWebViewForAutomationCallback), NULL);
}
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp (220328 => 220329)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp 2017-08-07 03:24:50 UTC (rev 220328)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp 2017-08-07 06:06:34 UTC (rev 220329)
@@ -24,6 +24,13 @@
#include <wtf/UUID.h>
#include <wtf/text/StringBuilder.h>
+// FIXME: WPE doesn't expose WebKitVersion yet, the numbers defined here don't really matter.
+#if PLATFORM(WPE)
+#define WEBKIT_MAJOR_VERSION 1
+#define WEBKIT_MINOR_VERSION 2
+#define WEBKIT_MICRO_VERSION 3
+#endif
+
class AutomationTest: public Test {
public:
MAKE_GLIB_TEST_FIXTURE(AutomationTest);
@@ -168,6 +175,13 @@
{
m_session = session;
assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_session));
+ g_assert(!webkit_automation_session_get_application_info(session));
+ WebKitApplicationInfo* info = webkit_application_info_new();
+ webkit_application_info_set_name(info, "AutomationTestBrowser");
+ webkit_application_info_set_version(info, WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION, WEBKIT_MICRO_VERSION);
+ webkit_automation_session_set_application_info(session, info);
+ webkit_application_info_unref(info);
+ g_assert(webkit_automation_session_get_application_info(session) == info);
}
static void automationStartedCallback(WebKitWebContext* webContext, WebKitAutomationSession* session, AutomationTest* test)
@@ -181,7 +195,22 @@
{
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, nullptr, nullptr);
+ "StartAutomationSession", g_variant_new("(s)", sessionID), 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)
+ return;
+
+ GRefPtr<GVariant> capabilities = adoptGRef(g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), result, nullptr));
+ g_assert(capabilities.get());
+ const char* browserName;
+ const char* browserVersion;
+ g_variant_get(capabilities.get(), "(&s&s)", &browserName, &browserVersion);
+ g_assert_cmpstr(browserName, ==, "AutomationTestBrowser");
+ GUniquePtr<char> versionString(g_strdup_printf("%u.%u.%u", WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION, WEBKIT_MICRO_VERSION));
+ g_assert_cmpstr(browserVersion, ==, versionString.get());
+ }, this
+ );
auto timeoutID = g_timeout_add(1000, [](gpointer userData) -> gboolean {
g_main_loop_quit(static_cast<GMainLoop*>(userData));
return G_SOURCE_REMOVE;
@@ -278,11 +307,34 @@
webkit_web_context_set_automation_allowed(test->m_webContext.get(), FALSE);
}
+static void testAutomationSessionApplicationInfo(Test* test, gconstpointer)
+{
+ WebKitApplicationInfo* info = webkit_application_info_new();
+ g_assert_cmpstr(webkit_application_info_get_name(info), ==, g_get_prgname());
+ webkit_application_info_set_name(info, "WebKitGTKBrowser");
+ g_assert_cmpstr(webkit_application_info_get_name(info), ==, "WebKitGTKBrowser");
+ webkit_application_info_set_name(info, nullptr);
+ g_assert_cmpstr(webkit_application_info_get_name(info), ==, g_get_prgname());
+
+ guint64 major, minor, micro;
+ webkit_application_info_get_version(info, &major, nullptr, nullptr);
+ g_assert_cmpuint(major, ==, 0);
+ webkit_application_info_set_version(info, 1, 2, 3);
+ webkit_application_info_get_version(info, &major, &minor, µ);
+ g_assert_cmpuint(major, ==, 1);
+ g_assert_cmpuint(minor, ==, 2);
+ g_assert_cmpuint(micro, ==, 3);
+
+ webkit_application_info_unref(info);
+}
+
+
void beforeAll()
{
g_setenv("WEBKIT_INSPECTOR_SERVER", "127.0.0.1:2229", TRUE);
AutomationTest::add("WebKitAutomationSession", "request-session", testAutomationSessionRequestSession);
+ Test::add("WebKitAutomationSession", "application-info", testAutomationSessionApplicationInfo);
}
void afterAll()