Changeset 220329 in webkit
- Timestamp:
- Aug 6, 2017 11:06:34 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r220324 r220329 1 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] Add API to provide browser information required by automation 4 https://bugs.webkit.org/show_bug.cgi?id=175130 5 6 Reviewed by Brian Burg. 7 8 Add browserName and browserVersion to RemoteInspector::Client::Capabilities and virtual methods to the Client to 9 get them. 10 11 * inspector/remote/RemoteInspector.cpp: 12 (Inspector::RemoteInspector::updateClientCapabilities): Update also browserName and browserVersion. 13 * inspector/remote/RemoteInspector.h: 14 * inspector/remote/glib/RemoteInspectorGlib.cpp: 15 (Inspector::RemoteInspector::requestAutomationSession): Call updateClientCapabilities() after the session is 16 requested to ensure they are updated before StartAutomationSession reply is sent. 17 * inspector/remote/glib/RemoteInspectorServer.cpp: Add browserName and browserVersion as return values of 18 StartAutomationSession mesasage. 19 1 20 2017-08-06 Yusuke Suzuki <utatane.tea@gmail.com> 2 21 -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.cpp
r216243 r220329 134 134 else { 135 135 RemoteInspector::Client::Capabilities updatedCapabilities = { 136 m_client->remoteAutomationAllowed() // remoteAutomationAllowed 136 m_client->remoteAutomationAllowed(), 137 m_client->browserName(), 138 m_client->browserVersion() 137 139 }; 138 140 -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h
r216243 r220329 31 31 #include <wtf/HashMap.h> 32 32 #include <wtf/Lock.h> 33 #include <wtf/text/WTFString.h> 33 34 34 35 #if PLATFORM(COCOA) … … 67 68 struct Capabilities { 68 69 bool remoteAutomationAllowed : 1; 70 String browserName; 71 String browserVersion; 69 72 }; 70 73 71 74 virtual ~Client() { } 72 75 virtual bool remoteAutomationAllowed() const = 0; 76 virtual String browserName() const { return { }; } 77 virtual String browserVersion() const { return { }; } 73 78 virtual void requestAutomationSession(const String& sessionIdentifier) = 0; 74 79 }; … … 86 91 void setClient(RemoteInspector::Client*); 87 92 void clientCapabilitiesDidChange(); 93 std::optional<RemoteInspector::Client::Capabilities> clientCapabilities() const { return m_clientCapabilities; } 88 94 89 95 void setupFailed(unsigned targetIdentifier); -
trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorGlib.cpp
r217831 r220329 356 356 357 357 m_client->requestAutomationSession(String::fromUTF8(sessionID)); 358 updateClientCapabilities(); 358 359 } 359 360 -
trunk/Source/JavaScriptCore/inspector/remote/glib/RemoteInspectorServer.cpp
r217831 r220329 80 80 " <method name='StartAutomationSession'>" 81 81 " <arg type='s' name='sessionID' direction='in'/>" 82 " <arg type='s' name='browserName' direction='out'/>" 83 " <arg type='s' name='browserVersion' direction='out'/>" 82 84 " </method>" 83 85 " </interface>" … … 122 124 g_variant_get(parameters, "(&s)", &sessionID); 123 125 inspectorServer->startAutomationSession(connection, sessionID); 124 g_dbus_method_invocation_return_value(invocation, nullptr); 126 auto capabilities = RemoteInspector::singleton().clientCapabilities(); 127 g_dbus_method_invocation_return_value(invocation, g_variant_new("(ss)", 128 capabilities ? capabilities->browserName.utf8().data() : "", 129 capabilities ? capabilities->browserVersion.utf8().data() : "")); 125 130 } else 126 131 g_dbus_method_invocation_return_value(invocation, nullptr); -
trunk/Source/WebDriver/ChangeLog
r220317 r220329 1 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] Add API to provide browser information required by automation 4 https://bugs.webkit.org/show_bug.cgi?id=175130 5 6 Reviewed by Brian Burg. 7 8 * Session.cpp: 9 (WebDriver::Session::createTopLevelBrowsingContext): Check if startAutomationSession and complete the command 10 with error in that case. 11 * SessionHost.h: 12 * glib/SessionHostGlib.cpp: 13 (WebDriver::SessionHost::matchCapabilities): Match the capabilities that are known only after the browser has 14 been launched. 15 (WebDriver::SessionHost::startAutomationSession): Handle the StartAutomationSession response, extracting the 16 capabilities and calling matchCapabilities() to match them. 17 (WebDriver::SessionHost::setTargetList): Return early if the session was rejected before due to invalid 18 capabilities. 19 1 20 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 21 -
trunk/Source/WebDriver/Session.cpp
r220317 r220329 123 123 { 124 124 ASSERT(!m_toplevelBrowsingContext.value()); 125 m_host->startAutomationSession(m_id, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable { 125 m_host->startAutomationSession(m_id, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)](std::optional<String> errorMessage) mutable { 126 if (errorMessage) { 127 completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError, errorMessage.value())); 128 return; 129 } 126 130 m_host->sendCommandToBackend(ASCIILiteral("createBrowsingContext"), nullptr, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)](SessionHost::CommandResponse&& response) mutable { 127 131 if (response.isError || !response.responseObject) { -
trunk/Source/WebDriver/SessionHost.h
r219605 r220329 57 57 enum class Succeeded { No, Yes }; 58 58 void connectToBrowser(Function<void (Succeeded)>&&); 59 void startAutomationSession(const String& sessionID, Function<void ( )>&&);59 void startAutomationSession(const String& sessionID, Function<void (std::optional<String>)>&&); 60 60 61 61 struct CommandResponse { … … 81 81 void launchBrowser(Function<void (Succeeded)>&&); 82 82 void connectToBrowser(std::unique_ptr<ConnectToBrowserAsyncData>&&); 83 std::optional<String> matchCapabilities(GVariant*); 83 84 void setupConnection(GRefPtr<GDBusConnection>&&, Function<void (Succeeded)>&&); 84 85 void setTargetList(uint64_t connectionID, Vector<Target>&&); … … 95 96 96 97 #if USE(GLIB) 97 Function<void ( )> m_startSessionCompletionHandler;98 Function<void (std::optional<String>)> m_startSessionCompletionHandler; 98 99 GRefPtr<GSubprocess> m_browser; 99 100 GRefPtr<GDBusConnection> m_dbusConnection; -
trunk/Source/WebDriver/glib/SessionHostGlib.cpp
r220315 r220329 27 27 #include "SessionHost.h" 28 28 29 #include "WebDriverService.h" 29 30 #include <gio/gio.h> 30 31 #include <wtf/RunLoop.h> … … 221 222 } 222 223 223 void SessionHost::startAutomationSession(const String& sessionID, Function<void ()>&& completionHandler) 224 std::optional<String> SessionHost::matchCapabilities(GVariant* capabilities) 225 { 226 const char* browserName; 227 const char* browserVersion; 228 g_variant_get(capabilities, "(&s&s)", &browserName, &browserVersion); 229 230 if (m_capabilities.browserName) { 231 if (m_capabilities.browserName.value() != browserName) 232 return makeString("expected browserName ", m_capabilities.browserName.value(), " but got ", browserName); 233 } else 234 m_capabilities.browserName = String(browserName); 235 236 if (m_capabilities.browserVersion) { 237 if (!WebDriverService::platformCompareBrowserVersions(m_capabilities.browserVersion.value(), browserVersion)) 238 return makeString("requested browserVersion is ", m_capabilities.browserVersion.value(), " but actual version is ", browserVersion); 239 } else 240 m_capabilities.browserVersion = String(browserVersion); 241 242 return std::nullopt; 243 } 244 245 void SessionHost::startAutomationSession(const String& sessionID, Function<void (std::optional<String>)>&& completionHandler) 224 246 { 225 247 ASSERT(m_dbusConnection); 226 248 ASSERT(!m_startSessionCompletionHandler); 227 // FIXME: Make StartAutomationSession return browser information and we use it to match capabilities.228 249 m_startSessionCompletionHandler = WTFMove(completionHandler); 229 250 g_dbus_connection_call(m_dbusConnection.get(), nullptr, … … 233 254 g_variant_new("(s)", sessionID.utf8().data()), 234 255 nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START, 235 -1, m_cancellable.get(), dbusConnectionCallAsyncReadyCallback, nullptr); 256 -1, m_cancellable.get(), [](GObject* source, GAsyncResult* result, gpointer userData) { 257 GUniqueOutPtr<GError> error; 258 GRefPtr<GVariant> resultVariant = adoptGRef(g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), result, &error.outPtr())); 259 if (!resultVariant && g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) 260 return; 261 262 auto sessionHost = static_cast<SessionHost*>(userData); 263 if (!resultVariant) { 264 auto completionHandler = std::exchange(sessionHost->m_startSessionCompletionHandler, nullptr); 265 completionHandler(String("Failed to start automation session")); 266 return; 267 } 268 269 auto errorString = sessionHost->matchCapabilities(resultVariant.get()); 270 if (errorString) { 271 auto completionHandler = std::exchange(sessionHost->m_startSessionCompletionHandler, nullptr); 272 completionHandler(errorString); 273 return; 274 } 275 }, this 276 ); 236 277 } 237 278 … … 253 294 if (m_connectionID) { 254 295 ASSERT(m_connectionID == connectionID); 296 return; 297 } 298 299 if (!m_startSessionCompletionHandler) { 300 // Session creation was already rejected. 255 301 return; 256 302 } … … 266 312 267 313 auto startSessionCompletionHandler = std::exchange(m_startSessionCompletionHandler, nullptr); 268 startSessionCompletionHandler( );314 startSessionCompletionHandler(std::nullopt); 269 315 } 270 316 -
trunk/Source/WebKit/ChangeLog
r220326 r220329 1 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] Add API to provide browser information required by automation 4 https://bugs.webkit.org/show_bug.cgi?id=175130 5 6 Reviewed by Michael Catanzaro. 7 8 When a new automation session is started, the web driver receives some required capabilities from the client, 9 like browser name and version. The session should be rejected if those required capabilities don't match with 10 the actual browser that is launched. We don't know that information in WebKit, so we need to add API so that 11 users can provide it when a new session request is made. This patch adds boxed object WebKitApplicationInfo that 12 can be used to set the application name and version. This object can be set to a WebKitAutomationSession when 13 WebKitWebContext::automation-started signal is emitted. 14 15 * PlatformGTK.cmake: 16 * PlatformWPE.cmake: 17 * UIProcess/API/glib/WebKitApplicationInfo.cpp: Added. 18 (webkit_application_info_new): 19 (webkit_application_info_ref): 20 (webkit_application_info_unref): 21 (webkit_application_info_set_name): 22 (webkit_application_info_get_name): 23 (webkit_application_info_set_version): 24 (webkit_application_info_get_version): 25 * UIProcess/API/glib/WebKitAutomationSession.cpp: 26 (webkitAutomationSessionDispose): 27 (webkit_automation_session_class_init): 28 (webkitAutomationSessionGetBrowserName): 29 (webkitAutomationSessionGetBrowserVersion): 30 (webkit_automation_session_set_application_info): 31 (webkit_automation_session_get_application_info): 32 * UIProcess/API/glib/WebKitAutomationSessionPrivate.h: 33 * UIProcess/API/glib/WebKitWebContext.cpp: 34 * UIProcess/API/gtk/WebKitApplicationInfo.h: Added. 35 * UIProcess/API/gtk/WebKitAutomationSession.h: 36 * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: 37 * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: 38 * UIProcess/API/gtk/webkit2.h: 39 * UIProcess/API/wpe/WebKitApplicationInfo.h: Added. 40 * UIProcess/API/wpe/WebKitAutomationSession.h: 41 * UIProcess/API/wpe/webkit.h: 42 1 43 2017-08-06 Carlos Alberto Lopez Perez <clopez@igalia.com> 2 44 -
trunk/Source/WebKit/PlatformGTK.cmake
r220094 r220329 118 118 119 119 UIProcess/API/glib/IconDatabase.cpp 120 UIProcess/API/glib/WebKitApplicationInfo.cpp 120 121 UIProcess/API/glib/WebKitAuthenticationRequest.cpp 121 122 UIProcess/API/glib/WebKitAutomationSession.cpp … … 418 419 ${DERIVED_SOURCES_WEBKIT2GTK_API_DIR}/WebKitEnumTypes.h 419 420 ${DERIVED_SOURCES_WEBKIT2GTK_API_DIR}/WebKitVersion.h 421 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitApplicationInfo.h 420 422 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitAuthenticationRequest.h 421 423 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitAutocleanups.h -
trunk/Source/WebKit/PlatformWPE.cmake
r220094 r220329 133 133 134 134 UIProcess/API/glib/IconDatabase.cpp 135 UIProcess/API/glib/WebKitApplicationInfo.cpp 135 136 UIProcess/API/glib/WebKitAuthenticationRequest.cpp 136 137 UIProcess/API/glib/WebKitAutomationSession.cpp … … 276 277 set(WPE_API_INSTALLED_HEADERS 277 278 ${DERIVED_SOURCES_WPE_API_DIR}/WebKitEnumTypes.h 279 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitApplicationInfo.h 278 280 ${WEBKIT2_DIR}/UIProcess/API/wpe/WebKitAuthenticationRequest.h 279 281 ${WEBKIT2_DIR}/UIProcess/API/wpe/WebKitAutomationSession.h -
trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSession.cpp
r218487 r220329 22 22 23 23 #include "APIAutomationSessionClient.h" 24 #include "WebKitApplicationInfo.h" 24 25 #include "WebKitAutomationSessionPrivate.h" 25 26 #include "WebKitWebViewPrivate.h" … … 59 60 struct _WebKitAutomationSessionPrivate { 60 61 RefPtr<WebAutomationSession> session; 62 WebKitApplicationInfo* applicationInfo; 61 63 CString id; 62 64 }; … … 129 131 } 130 132 133 static void webkitAutomationSessionDispose(GObject* object) 134 { 135 WebKitAutomationSession* session = WEBKIT_AUTOMATION_SESSION(object); 136 137 if (session->priv->applicationInfo) { 138 webkit_application_info_unref(session->priv->applicationInfo); 139 session->priv->applicationInfo = nullptr; 140 } 141 142 G_OBJECT_CLASS(webkit_automation_session_parent_class)->dispose(object); 143 } 144 131 145 static void webkit_automation_session_class_init(WebKitAutomationSessionClass* sessionClass) 132 146 { … … 135 149 gObjectClass->set_property = webkitAutomationSessionSetProperty; 136 150 gObjectClass->constructed = webkitAutomationSessionConstructed; 151 gObjectClass->dispose = webkitAutomationSessionDispose; 137 152 138 153 /** … … 188 203 } 189 204 205 String webkitAutomationSessionGetBrowserName(WebKitAutomationSession* session) 206 { 207 if (session->priv->applicationInfo) 208 return String::fromUTF8(webkit_application_info_get_name(session->priv->applicationInfo)); 209 210 return g_get_prgname(); 211 } 212 213 String webkitAutomationSessionGetBrowserVersion(WebKitAutomationSession* session) 214 { 215 if (!session->priv->applicationInfo) 216 return { }; 217 218 guint64 major, minor, micro; 219 webkit_application_info_get_version(session->priv->applicationInfo, &major, &minor, µ); 220 221 if (!micro && !minor) 222 return String::number(major); 223 224 if (!micro) 225 return makeString(String::number(major), ".", String::number(minor)); 226 227 return makeString(String::number(major), ".", String::number(minor), ".", String::number(micro)); 228 } 229 190 230 /** 191 231 * webkit_automation_session_get_id: … … 203 243 return session->priv->id.data(); 204 244 } 245 246 /** 247 * webkit_automation_session_set_application_info: 248 * @session: a #WebKitAutomationSession 249 * @info: a #WebKitApplicationInfo 250 * 251 * Set the application information to @session. This information will be used by the driver service 252 * to match the requested capabilities with the actual application information. If this information 253 * is not provided to the session when a new automation session is requested, the creation might fail 254 * if the client requested a specific browser name or version. This will not have any effect when called 255 * after the automation session has been fully created, so this must be called in the callback of 256 * #WebKitWebContext::automation-started signal. 257 * 258 * Since: 2.18 259 */ 260 void webkit_automation_session_set_application_info(WebKitAutomationSession* session, WebKitApplicationInfo* info) 261 { 262 g_return_if_fail(WEBKIT_IS_AUTOMATION_SESSION(session)); 263 g_return_if_fail(info); 264 265 if (session->priv->applicationInfo == info) 266 return; 267 268 if (session->priv->applicationInfo) 269 webkit_application_info_unref(session->priv->applicationInfo); 270 session->priv->applicationInfo = webkit_application_info_ref(info); 271 } 272 273 /** 274 * webkit_automation_session_get_application_info: 275 * @session: a #WebKitAutomationSession 276 * 277 * Get the #WebKitAutomationSession previously set with webkit_automation_session_set_application_info(). 278 * 279 * Returns: (transfer none): the #WebKitAutomationSession of @session, or %NULL if no one has been set. 280 * 281 * Since: 2.18 282 */ 283 WebKitApplicationInfo* webkit_automation_session_get_application_info(WebKitAutomationSession* session) 284 { 285 g_return_val_if_fail(WEBKIT_IS_AUTOMATION_SESSION(session), nullptr); 286 287 return session->priv->applicationInfo; 288 } -
trunk/Source/WebKit/UIProcess/API/glib/WebKitAutomationSessionPrivate.h
r218487 r220329 25 25 WebKitAutomationSession* webkitAutomationSessionCreate(const char* sessionID); 26 26 WebKit::WebAutomationSession& webkitAutomationSessionGetSession(WebKitAutomationSession*); 27 String webkitAutomationSessionGetBrowserName(WebKitAutomationSession*); 28 String webkitAutomationSessionGetBrowserVersion(WebKitAutomationSession*); -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp
r219796 r220329 215 215 bool remoteAutomationAllowed() const override { return true; } 216 216 217 String browserName() const override 218 { 219 if (!m_webContext->priv->automationSession) 220 return { }; 221 222 return webkitAutomationSessionGetBrowserName(m_webContext->priv->automationSession.get()); 223 } 224 225 String browserVersion() const override 226 { 227 if (!m_webContext->priv->automationSession) 228 return { }; 229 230 return webkitAutomationSessionGetBrowserVersion(m_webContext->priv->automationSession.get()); 231 } 232 217 233 void requestAutomationSession(const String& sessionIdentifier) override 218 234 { 219 235 ASSERT(!m_webContext->priv->automationSession); 220 236 m_webContext->priv->automationSession = adoptGRef(webkitAutomationSessionCreate(sessionIdentifier.utf8().data())); 237 g_signal_emit(m_webContext, signals[AUTOMATION_STARTED], 0, m_webContext->priv->automationSession.get()); 221 238 m_webContext->priv->processPool->setAutomationSession(&webkitAutomationSessionGetSession(m_webContext->priv->automationSession.get())); 222 g_signal_emit(m_webContext, signals[AUTOMATION_STARTED], 0, m_webContext->priv->automationSession.get());223 239 } 224 240 -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitAutomationSession.h
r216006 r220329 26 26 27 27 #include <glib-object.h> 28 #include <webkit2/WebKitApplicationInfo.h> 28 29 #include <webkit2/WebKitDefines.h> 29 30 … … 57 58 58 59 WEBKIT_API GType 59 webkit_automation_session_get_type (void);60 webkit_automation_session_get_type (void); 60 61 61 62 WEBKIT_API const char * 62 webkit_automation_session_get_id (WebKitAutomationSession *session); 63 webkit_automation_session_get_id (WebKitAutomationSession *session); 64 65 WEBKIT_API void 66 webkit_automation_session_set_application_info (WebKitAutomationSession *session, 67 WebKitApplicationInfo *info); 68 69 WEBKIT_API WebKitApplicationInfo * 70 webkit_automation_session_get_application_info (WebKitAutomationSession *session); 63 71 64 72 G_END_DECLS -
trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt
r218325 r220329 1359 1359 WebKitAutomationSession 1360 1360 webkit_automation_session_get_id 1361 webkit_automation_session_set_application_info 1362 webkit_automation_session_get_application_info 1361 1363 1362 1364 <SUBSECTION Private> … … 1372 1374 WEBKIT_IS_AUTOMATION_SESSION_CLASS 1373 1375 WEBKIT_AUTOMATION_SESSION_GET_CLASS 1376 </SECTION> 1377 1378 <SECTION> 1379 <FILE>WebKitApplicationInfo</FILE> 1380 WebKitApplicationInfo 1381 webkit_application_info_new 1382 webkit_application_info_ref 1383 webkit_application_info_unref 1384 webkit_application_info_set_name 1385 webkit_application_info_get_name 1386 webkit_application_info_set_version 1387 webkit_application_info_get_version 1388 1389 <SUBSECTION Private> 1390 webkit_application_info_get_type 1391 1392 <SUBSECTION Standard> 1393 WEBKIT_TYPE_APPLICATION_INFO 1374 1394 </SECTION> 1375 1395 -
trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml
r218325 r220329 60 60 <xi:include href="xml/WebKitNetworkProxySettings.xml"/> 61 61 <xi:include href="xml/WebKitAutomationSession.xml"/> 62 <xi:include href="xml/WebKitApplicationInfo.xml"/> 62 63 </chapter> 63 64 -
trunk/Source/WebKit/UIProcess/API/gtk/webkit2.h
r218325 r220329 28 28 #define __WEBKIT2_H_INSIDE__ 29 29 30 #include <webkit2/WebKitApplicationInfo.h> 30 31 #include <webkit2/WebKitAuthenticationRequest.h> 31 32 #include <webkit2/WebKitAutomationSession.h> -
trunk/Source/WebKit/UIProcess/API/wpe/WebKitAutomationSession.h
r218553 r220329 26 26 27 27 #include <glib-object.h> 28 #include <wpe/WebKitApplicationInfo.h> 28 29 #include <wpe/WebKitDefines.h> 29 30 … … 57 58 58 59 WEBKIT_API GType 59 webkit_automation_session_get_type (void);60 webkit_automation_session_get_type (void); 60 61 61 62 WEBKIT_API const char * 62 webkit_automation_session_get_id (WebKitAutomationSession *session); 63 webkit_automation_session_get_id (WebKitAutomationSession *session); 64 65 WEBKIT_API void 66 webkit_automation_session_set_application_info (WebKitAutomationSession *session, 67 WebKitApplicationInfo *info); 68 69 WEBKIT_API WebKitApplicationInfo * 70 webkit_automation_session_get_application_info (WebKitAutomationSession *session); 63 71 64 72 G_END_DECLS -
trunk/Source/WebKit/UIProcess/API/wpe/webkit.h
r218553 r220329 28 28 #define __WEBKIT_H_INSIDE__ 29 29 30 #include <wpe/WebKitApplicationInfo.h> 30 31 #include <wpe/WebKitAuthenticationRequest.h> 31 32 #include <wpe/WebKitAutomationSession.h> -
trunk/Tools/ChangeLog
r220328 r220329 1 2017-08-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] Add API to provide browser information required by automation 4 https://bugs.webkit.org/show_bug.cgi?id=175130 5 6 Reviewed by Michael Catanzaro. 7 8 * MiniBrowser/gtk/main.c: 9 (automationStartedCallback): Set browser information when a new automation session is started. 10 * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: 11 (testAutomationSessionApplicationInfo): 12 (beforeAll): 13 1 14 2017-08-06 Ryan Haddad <ryanhaddad@apple.com> 2 15 -
trunk/Tools/MiniBrowser/gtk/main.c
r216006 r220329 459 459 static void automationStartedCallback(WebKitWebContext *webContext, WebKitAutomationSession *session) 460 460 { 461 WebKitApplicationInfo *info = webkit_application_info_new(); 462 webkit_application_info_set_version(info, WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION, WEBKIT_MICRO_VERSION); 463 webkit_automation_session_set_application_info(session, info); 464 webkit_application_info_unref(info); 465 461 466 g_signal_connect(session, "create-web-view", G_CALLBACK(createWebViewForAutomationCallback), NULL); 462 467 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp
r218686 r220329 24 24 #include <wtf/UUID.h> 25 25 #include <wtf/text/StringBuilder.h> 26 27 // FIXME: WPE doesn't expose WebKitVersion yet, the numbers defined here don't really matter. 28 #if PLATFORM(WPE) 29 #define WEBKIT_MAJOR_VERSION 1 30 #define WEBKIT_MINOR_VERSION 2 31 #define WEBKIT_MICRO_VERSION 3 32 #endif 26 33 27 34 class AutomationTest: public Test { … … 169 176 m_session = session; 170 177 assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_session)); 178 g_assert(!webkit_automation_session_get_application_info(session)); 179 WebKitApplicationInfo* info = webkit_application_info_new(); 180 webkit_application_info_set_name(info, "AutomationTestBrowser"); 181 webkit_application_info_set_version(info, WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION, WEBKIT_MICRO_VERSION); 182 webkit_automation_session_set_application_info(session, info); 183 webkit_application_info_unref(info); 184 g_assert(webkit_automation_session_get_application_info(session) == info); 171 185 } 172 186 … … 182 196 auto signalID = g_signal_connect(m_webContext.get(), "automation-started", G_CALLBACK(automationStartedCallback), this); 183 197 g_dbus_connection_call(m_connection.get(), nullptr, "/org/webkit/Inspector", "org.webkit.Inspector", 184 "StartAutomationSession", g_variant_new("(s)", sessionID), nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, nullptr, nullptr, nullptr); 198 "StartAutomationSession", g_variant_new("(s)", sessionID), nullptr, G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, nullptr, 199 [](GObject* source, GAsyncResult* result, gpointer userData) { 200 auto* test = static_cast<AutomationTest*>(userData); 201 if (!test->m_session) 202 return; 203 204 GRefPtr<GVariant> capabilities = adoptGRef(g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), result, nullptr)); 205 g_assert(capabilities.get()); 206 const char* browserName; 207 const char* browserVersion; 208 g_variant_get(capabilities.get(), "(&s&s)", &browserName, &browserVersion); 209 g_assert_cmpstr(browserName, ==, "AutomationTestBrowser"); 210 GUniquePtr<char> versionString(g_strdup_printf("%u.%u.%u", WEBKIT_MAJOR_VERSION, WEBKIT_MINOR_VERSION, WEBKIT_MICRO_VERSION)); 211 g_assert_cmpstr(browserVersion, ==, versionString.get()); 212 }, this 213 ); 185 214 auto timeoutID = g_timeout_add(1000, [](gpointer userData) -> gboolean { 186 215 g_main_loop_quit(static_cast<GMainLoop*>(userData)); … … 279 308 } 280 309 310 static void testAutomationSessionApplicationInfo(Test* test, gconstpointer) 311 { 312 WebKitApplicationInfo* info = webkit_application_info_new(); 313 g_assert_cmpstr(webkit_application_info_get_name(info), ==, g_get_prgname()); 314 webkit_application_info_set_name(info, "WebKitGTKBrowser"); 315 g_assert_cmpstr(webkit_application_info_get_name(info), ==, "WebKitGTKBrowser"); 316 webkit_application_info_set_name(info, nullptr); 317 g_assert_cmpstr(webkit_application_info_get_name(info), ==, g_get_prgname()); 318 319 guint64 major, minor, micro; 320 webkit_application_info_get_version(info, &major, nullptr, nullptr); 321 g_assert_cmpuint(major, ==, 0); 322 webkit_application_info_set_version(info, 1, 2, 3); 323 webkit_application_info_get_version(info, &major, &minor, µ); 324 g_assert_cmpuint(major, ==, 1); 325 g_assert_cmpuint(minor, ==, 2); 326 g_assert_cmpuint(micro, ==, 3); 327 328 webkit_application_info_unref(info); 329 } 330 331 281 332 void beforeAll() 282 333 { … … 284 335 285 336 AutomationTest::add("WebKitAutomationSession", "request-session", testAutomationSessionRequestSession); 337 Test::add("WebKitAutomationSession", "application-info", testAutomationSessionApplicationInfo); 286 338 } 287 339
Note: See TracChangeset
for help on using the changeset viewer.