WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Try to fix WPE build
wd-capabilities-api.diff (text/plain), 46.18 KB, created by
Carlos Garcia Campos
on 2017-08-05 04:20:25 PDT
(
hide
)
Description:
Try to fix WPE build
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2017-08-05 04:20:25 PDT
Size:
46.18 KB
patch
obsolete
>diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index c6b0edd6474..72553890aee 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,22 @@ >+2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [GTK][WPE] Add API to provide browser information required by automation >+ https://bugs.webkit.org/show_bug.cgi?id=175130 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-04 Youenn Fablet <youenn@apple.com> > > [Cache API] Add Cache and CacheStorage IDL definitions >diff --git a/Source/JavaScriptCore/inspector/remote/RemoteInspector.cpp b/Source/JavaScriptCore/inspector/remote/RemoteInspector.cpp >index 8fe0cfd73ee..e0e84a8f196 100644 >--- a/Source/JavaScriptCore/inspector/remote/RemoteInspector.cpp >+++ b/Source/JavaScriptCore/inspector/remote/RemoteInspector.cpp >@@ -133,7 +133,9 @@ void RemoteInspector::updateClientCapabilities() > 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; >diff --git a/Source/JavaScriptCore/inspector/remote/RemoteInspector.h b/Source/JavaScriptCore/inspector/remote/RemoteInspector.h >index 55678451a36..83cf258612a 100644 >--- a/Source/JavaScriptCore/inspector/remote/RemoteInspector.h >+++ b/Source/JavaScriptCore/inspector/remote/RemoteInspector.h >@@ -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: > 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 @@ public: > 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); >diff --git a/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp b/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp >index 66847113d35..8cf1cc382e8 100644 >--- a/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp >+++ b/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp >@@ -355,6 +355,7 @@ void RemoteInspector::requestAutomationSession(const char* sessionID) > return; > > m_client->requestAutomationSession(String::fromUTF8(sessionID)); >+ updateClientCapabilities(); > } > > } // namespace Inspector >diff --git a/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp b/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp >index 413f1126c5a..a1c5b2b7d2d 100644 >--- a/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp >+++ b/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp >@@ -79,6 +79,8 @@ static const char introspectionXML[] = > " </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 GDBusInterfaceVTable RemoteInspectorServer::s_interfaceVTable = { > 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); > }, >diff --git a/Source/WebDriver/ChangeLog b/Source/WebDriver/ChangeLog >index 5f49170604a..8547040206d 100644 >--- a/Source/WebDriver/ChangeLog >+++ b/Source/WebDriver/ChangeLog >@@ -1,5 +1,24 @@ > 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> > >+ [GTK][WPE] Add API to provide browser information required by automation >+ https://bugs.webkit.org/show_bug.cgi?id=175130 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * 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 <cgarcia@igalia.com> >+ > WebDriver: Implement page load strategy > https://bugs.webkit.org/show_bug.cgi?id=175183 > >diff --git a/Source/WebDriver/Session.cpp b/Source/WebDriver/Session.cpp >index 52b42270549..66b2eddf0a9 100644 >--- a/Source/WebDriver/Session.cpp >+++ b/Source/WebDriver/Session.cpp >@@ -122,7 +122,11 @@ std::optional<String> Session::pageLoadStrategyString() const > 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))); >diff --git a/Source/WebDriver/SessionHost.h b/Source/WebDriver/SessionHost.h >index 6a79c7e88f9..1b97fef8ce3 100644 >--- a/Source/WebDriver/SessionHost.h >+++ b/Source/WebDriver/SessionHost.h >@@ -56,7 +56,7 @@ public: > > 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 @@ private: > 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 @@ private: > 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; >diff --git a/Source/WebDriver/glib/SessionHostGlib.cpp b/Source/WebDriver/glib/SessionHostGlib.cpp >index 0e3a2b3b826..c70d3902cdb 100644 >--- a/Source/WebDriver/glib/SessionHostGlib.cpp >+++ b/Source/WebDriver/glib/SessionHostGlib.cpp >@@ -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 @@ void SessionHost::setupConnection(GRefPtr<GDBusConnection>&& connection, Functio > 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 @@ void SessionHost::startAutomationSession(const String& sessionID, Function<void > "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 @@ void SessionHost::setTargetList(uint64_t connectionID, Vector<Target>&& targetLi > 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 @@ void SessionHost::setTargetList(uint64_t connectionID, Vector<Target>&& targetLi > -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) >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 549038ea0f2..1dad2a4994e 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,5 +1,47 @@ > 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> > >+ [GTK][WPE] Add API to provide browser information required by automation >+ https://bugs.webkit.org/show_bug.cgi?id=175130 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-05 Carlos Garcia Campos <cgarcia@igalia.com> >+ > WebDriver: Implement page load strategy > https://bugs.webkit.org/show_bug.cgi?id=175183 > >diff --git a/Source/WebKit/PlatformGTK.cmake b/Source/WebKit/PlatformGTK.cmake >index fc96e3112a7..2fc1f2b43d2 100644 >--- a/Source/WebKit/PlatformGTK.cmake >+++ b/Source/WebKit/PlatformGTK.cmake >@@ -117,6 +117,7 @@ list(APPEND WebKit2_SOURCES > 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 @@ endif () > 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 >diff --git a/Source/WebKit/PlatformWPE.cmake b/Source/WebKit/PlatformWPE.cmake >index 884685ae7d4..f30e6c2abb5 100644 >--- a/Source/WebKit/PlatformWPE.cmake >+++ b/Source/WebKit/PlatformWPE.cmake >@@ -132,6 +132,7 @@ list(APPEND WebKit2_SOURCES > 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 @@ list(APPEND WebKit2_DERIVED_SOURCES > > 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 >diff --git a/Source/WebKit/UIProcess/API/glib/WebKitApplicationInfo.cpp b/Source/WebKit/UIProcess/API/glib/WebKitApplicationInfo.cpp >new file mode 100644 >index 00000000000..97e6cfce443 >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/glib/WebKitApplicationInfo.cpp >@@ -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; >+} >diff --git a/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp b/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp >index 95ccf20dff2..96cc2922050 100644 >--- a/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp >+++ b/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp >@@ -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 @@ enum { > > struct _WebKitAutomationSessionPrivate { > RefPtr<WebAutomationSession> session; >+ WebKitApplicationInfo* applicationInfo; > CString id; > }; > >@@ -128,12 +130,25 @@ static void webkitAutomationSessionConstructed(GObject* object) > 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); > gObjectClass->get_property = webkitAutomationSessionGetProperty; > gObjectClass->set_property = webkitAutomationSessionSetProperty; > gObjectClass->constructed = webkitAutomationSessionConstructed; >+ gObjectClass->dispose = webkitAutomationSessionDispose; > > /** > * WebKitAutomationSession:id: >@@ -187,6 +202,31 @@ WebAutomationSession& webkitAutomationSessionGetSession(WebKitAutomationSession* > 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 @@ const char* webkit_automation_session_get_id(WebKitAutomationSession* session) > 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; >+} >diff --git a/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h b/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h >index 5525783ef64..40cd9321b83 100644 >--- a/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h >+++ b/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h >@@ -24,3 +24,5 @@ > > WebKitAutomationSession* webkitAutomationSessionCreate(const char* sessionID); > WebKit::WebAutomationSession& webkitAutomationSessionGetSession(WebKitAutomationSession*); >+String webkitAutomationSessionGetBrowserName(WebKitAutomationSession*); >+String webkitAutomationSessionGetBrowserVersion(WebKitAutomationSession*); >diff --git a/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp b/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp >index f7818e7b9f3..4ab901ee92e 100644 >--- a/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp >+++ b/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp >@@ -214,12 +214,28 @@ public: > 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())); >- 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()); >+ m_webContext->priv->processPool->setAutomationSession(&webkitAutomationSessionGetSession(m_webContext->priv->automationSession.get())); > } > > WebKitWebContext* m_webContext; >diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitApplicationInfo.h b/Source/WebKit/UIProcess/API/gtk/WebKitApplicationInfo.h >new file mode 100644 >index 00000000000..34db9b9cc79 >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/gtk/WebKitApplicationInfo.h >@@ -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 >diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h b/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h >index a08f1f65e96..839dfe34f9d 100644 >--- a/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h >+++ b/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h >@@ -25,6 +25,7 @@ > #define WebKitAutomationSession_h > > #include <glib-object.h> >+#include <webkit2/WebKitApplicationInfo.h> > #include <webkit2/WebKitDefines.h> > > G_BEGIN_DECLS >@@ -56,10 +57,17 @@ struct _WebKitAutomationSessionClass { > }; > > 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 > >diff --git a/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt b/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt >index c2b0a2d00d9..a13c32d2b8e 100644 >--- a/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt >+++ b/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt >@@ -1358,6 +1358,8 @@ WEBKIT_TYPE_NETWORK_NETWORK_PROXY_SETTINGS > <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 @@ WEBKIT_AUTOMATION_SESSION_GET_CLASS > </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 >diff --git a/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml b/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >index e319dca4297..7c1d545083b 100644 >--- a/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >+++ b/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >@@ -59,6 +59,7 @@ > <xi:include href="xml/WebKitWebsiteData.xml"/> > <xi:include href="xml/WebKitNetworkProxySettings.xml"/> > <xi:include href="xml/WebKitAutomationSession.xml"/> >+ <xi:include href="xml/WebKitApplicationInfo.xml"/> > </chapter> > > <chapter> >diff --git a/Source/WebKit/UIProcess/API/gtk/webkit2.h b/Source/WebKit/UIProcess/API/gtk/webkit2.h >index ae50b3505f6..fb0476f1b17 100644 >--- a/Source/WebKit/UIProcess/API/gtk/webkit2.h >+++ b/Source/WebKit/UIProcess/API/gtk/webkit2.h >@@ -27,6 +27,7 @@ > > #define __WEBKIT2_H_INSIDE__ > >+#include <webkit2/WebKitApplicationInfo.h> > #include <webkit2/WebKitAuthenticationRequest.h> > #include <webkit2/WebKitAutomationSession.h> > #include <webkit2/WebKitBackForwardList.h> >diff --git a/Source/WebKit/UIProcess/API/wpe/WebKitApplicationInfo.h b/Source/WebKit/UIProcess/API/wpe/WebKitApplicationInfo.h >new file mode 100644 >index 00000000000..18736215a32 >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/wpe/WebKitApplicationInfo.h >@@ -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 >diff --git a/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h b/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h >index 9e62cdf0a4e..c0d4f256727 100644 >--- a/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h >+++ b/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h >@@ -25,6 +25,7 @@ > #define WebKitAutomationSession_h > > #include <glib-object.h> >+#include <wpe/WebKitApplicationInfo.h> > #include <wpe/WebKitDefines.h> > > G_BEGIN_DECLS >@@ -56,10 +57,17 @@ struct _WebKitAutomationSessionClass { > }; > > 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 > >diff --git a/Source/WebKit/UIProcess/API/wpe/webkit.h b/Source/WebKit/UIProcess/API/wpe/webkit.h >index 9420ca4da55..55ae38299c2 100644 >--- a/Source/WebKit/UIProcess/API/wpe/webkit.h >+++ b/Source/WebKit/UIProcess/API/wpe/webkit.h >@@ -27,6 +27,7 @@ > > #define __WEBKIT_H_INSIDE__ > >+#include <wpe/WebKitApplicationInfo.h> > #include <wpe/WebKitAuthenticationRequest.h> > #include <wpe/WebKitAutomationSession.h> > #include <wpe/WebKitBackForwardList.h> >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index d1f30d23704..b21b0d9bda4 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,16 @@ >+2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [GTK][WPE] Add API to provide browser information required by automation >+ https://bugs.webkit.org/show_bug.cgi?id=175130 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * MiniBrowser/gtk/main.c: >+ (automationStartedCallback): Set browser information when a new automation session is started. >+ * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: >+ (testAutomationSessionApplicationInfo): >+ (beforeAll): >+ > 2017-08-04 Youenn Fablet <youenn@apple.com> > > [Cache API] Add Cache and CacheStorage IDL definitions >diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c >index 570554056a2..5e76ed8ab18 100644 >--- a/Tools/MiniBrowser/gtk/main.c >+++ b/Tools/MiniBrowser/gtk/main.c >@@ -458,6 +458,11 @@ static GtkWidget *createWebViewForAutomationCallback(WebKitAutomationSession* se > > 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); > } > >diff --git a/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp b/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp >index 31cd686f95d..e01b671a9c2 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp >@@ -168,6 +168,13 @@ public: > { > 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 +188,22 @@ public: > { > 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 +300,34 @@ static void testAutomationSessionRequestSession(AutomationTest* test, gconstpoin > 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()
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 175130
:
317116
|
317335
|
317336
|
317359