WebDriver: test imported/selenium/py/test/selenium/webdriver/common/api_example_tests...
[WebKit-https.git] / Source / WebDriver / ChangeLog
1 2018-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
2
3         WebDriver: test imported/selenium/py/test/selenium/webdriver/common/api_example_tests.py::testChangeWindowSize fails
4         https://bugs.webkit.org/show_bug.cgi?id=181728
5
6         Reviewed by Sergio Villar Senin.
7
8         Due to a copy-paste error we are getting the window height using the width variable.
9
10         Fixes: imported/selenium/py/test/selenium/webdriver/common/api_example_tests.py::testChangeWindowSize
11                imported/selenium/py/test/selenium/webdriver/common/position_and_size_tests.py::testShouldScrollPageAndGetCoordinatesOfAnElementThatIsOutOfViewPort
12                imported/w3c/webdriver/tests/get_window_rect.py::test_payload
13                imported/w3c/webdriver/tests/set_window_rect.py::test_width_height_floats
14                imported/w3c/webdriver/tests/set_window_rect.py::test_height_width
15                imported/w3c/webdriver/tests/set_window_rect.py::test_height_width_larger_than_max
16                imported/w3c/webdriver/tests/contexts/resizing_and_positioning.py::test_window_resize
17
18         * Session.cpp:
19         (WebDriver::Session::getToplevelBrowsingContextRect):
20
21 2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>
22
23         WebDriver: implement get element CSS value command
24         https://bugs.webkit.org/show_bug.cgi?id=181736
25
26         Reviewed by Carlos Alberto Lopez Perez.
27
28         13.4 Get Element CSS Value
29         https://w3c.github.io/webdriver/webdriver-spec.html#get-element-css-value
30
31         Fixes: imported/selenium/py/test/selenium/webdriver/common/rendered_webelement_tests.py::testShouldPickUpStyleOfAnElement
32                imported/selenium/py/test/selenium/webdriver/common/rendered_webelement_tests.py::testShouldAllowInheritedStylesToBeUsed
33
34         * Session.cpp:
35         (WebDriver::Session::getElementProperty):
36         (WebDriver::Session::getElementCSSValue):
37         * Session.h:
38         * WebDriverService.cpp:
39         (WebDriver::WebDriverService::getElementCSSValue):
40         * WebDriverService.h:
41
42 2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>
43
44         [GTK] WebDriver: test imported/w3c/webdriver/tests/sessions/new_session/response.py is crashing in the bots
45         https://bugs.webkit.org/show_bug.cgi?id=181904
46
47         Reviewed by Carlos Alberto Lopez Perez.
48
49         Handle the case of failing to launch the browser. The test is actually failing because it's sending wrong
50         capabilities, the driver tries to fall back to the default driver, but since WebKit is not installed in the
51         bots, it fails to find the MiniBrowser. The test needs to be fixed, but we shouldn't crash when the browser
52         can't be spawned for whatever reason in any case. This patch handles that case and changes the boolean result of
53         connectToBrowser to be an optional error string instead. This way we can provide more detailed error message
54         when we reject the session creation because the browser failed to start.
55
56         * SessionHost.h:
57         * WebDriverService.cpp:
58         (WebDriver::WebDriverService::newSession):
59         * glib/SessionHostGlib.cpp:
60         (WebDriver::SessionHost::connectToBrowser):
61         (WebDriver::ConnectToBrowserAsyncData::ConnectToBrowserAsyncData):
62         (WebDriver::SessionHost::launchBrowser):
63         (WebDriver::SessionHost::setupConnection):
64
65 2018-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>
66
67         WebDriver: implement get timeouts command
68         https://bugs.webkit.org/show_bug.cgi?id=181524
69
70         Reviewed by Žan Doberšek.
71
72         8.4 Get Timeouts
73         https://w3c.github.io/webdriver/webdriver-spec.html#get-timeouts
74
75         Also simplify the way timeouts are handled in Session. Stop using Timeouts struct, because once the session is
76         created the timeouts are no longer optional, they have a default value. Use individual members instead that are
77         initialized to their default values on construction and only overriden by capabilities or set timeouts command.
78
79         Fixes: imported/w3c/webdriver/tests/sessions/get_timeouts.py::test_get_timeouts
80                imported/w3c/webdriver/tests/sessions/get_timeouts.py::test_get_default_timeouts
81                imported/w3c/webdriver/tests/sessions/get_timeouts.py::test_get_new_timeouts
82
83         * Session.cpp:
84         (WebDriver::Session::Session):
85         (WebDriver::Session::getTimeouts):
86         (WebDriver::Session::setTimeouts):
87         (WebDriver::Session::go):
88         (WebDriver::Session::back):
89         (WebDriver::Session::forward):
90         (WebDriver::Session::refresh):
91         (WebDriver::Session::findElements):
92         (WebDriver::Session::waitForNavigationToComplete):
93         (WebDriver::Session::executeScript):
94         * Session.h:
95         * WebDriverService.cpp:
96         (WebDriver::WebDriverService::getTimeouts):
97         * WebDriverService.h:
98
99 2018-01-10  Zan Dobersek  <zdobersek@igalia.com>
100
101         WebDriver: deserializeTimeouts() shouldn't reject double timeout values
102         https://bugs.webkit.org/show_bug.cgi?id=181473
103
104         Reviewed by Carlos Garcia Campos.
105
106         With these changes, the following tests are fixed:
107             imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py::testShouldTimeoutIfScriptDoesNotInvokeCallbackWithLongTimeout
108             imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py::testShouldDetectPageLoadsWhileWaitingOnAnAsyncScriptAndReturnAnError
109             imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py::testShouldBeAbleToExecuteAsynchronousScripts
110             imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldImplicitlyWaitForASingleElement
111             imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldStillFailToFindAnElementWhenImplicitWaitsAreEnabled
112             imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldReturnAfterFirstAttemptToFindOneAfterDisablingImplicitWaits
113             imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldImplicitlyWaitUntilAtLeastOneElementIsFoundWhenSearchingForMany
114             imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldStillFailToFindAnElemenstWhenImplicitWaitsAreEnabled
115             imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py::testShouldReturnAfterFirstAttemptToFindManyAfterDisablingImplicitWaits
116             imported/selenium/py/test/selenium/webdriver/common/page_load_timeout_tests.py::testShouldTimeoutOnPageLoadTakingTooLong
117             imported/selenium/py/test/selenium/webdriver/common/page_load_timeout_tests.py::testShouldTimeoutOnPageLoadTakingTooLong
118             imported/selenium/py/test/selenium/webdriver/common/webdriverwait_tests.py::testShouldWaitOnlyAsLongAsTimeoutSpecifiedWhenImplicitWaitsAreSet
119
120         The following two tests regress, and will be looked into separately:
121             imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_invalid
122             imported/w3c/webdriver/tests/sessions/new_session/merge.py::test_merge_invalid
123
124         * WebDriverService.cpp:
125         (WebDriver::integerValue): Helper function that retrieves an integer value
126         from a given JSON::Value object, if possible.
127         (WebDriver::deserializeTimeouts): Timeout JSON value has to be converted to
128         an integer, which is allowed if the value is of either Integer or Double type.
129         Helper integerValue() function retrieves the integer value, in addition to
130         ensuring that possible double value that we convert to an integer is already
131         in integer form to begin with.
132
133 2017-12-15  Carlos Garcia Campos  <cgarcia@igalia.com>
134
135         WebDriver: add support for accept/dismiss and notify unhandled prompt behavior
136         https://bugs.webkit.org/show_bug.cgi?id=179999
137
138         Reviewed by Carlos Alberto Lopez Perez.
139
140         They work as accept and dismiss, but unexpected alert open is still reported.
141
142         18. User Prompts
143         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-known-prompt-handling-approaches-table
144
145         * Capabilities.h: Add DismissAndNotify and AcceptAndNotify to UnhandledPromptBehavior enum.
146         * Session.cpp:
147         (WebDriver::Session::handleUnexpectedAlertOpen): Move default implementation to dismissAndNotifyAlert and
148         acceptAndNotifyAlert and use dismissAndNotifyAlert by default.
149         (WebDriver::Session::dismissAndNotifyAlert):
150         (WebDriver::Session::acceptAndNotifyAlert):
151         * Session.h:
152         * WebDriverService.cpp:
153         (WebDriver::deserializeUnhandledPromptBehavior): Handle accept/dismiss and notify.
154         (WebDriver::WebDriverService::newSession): Ditto.
155
156 2017-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>
157
158         WebDriver: get active element should return no such element error when there isn't an active element
159         https://bugs.webkit.org/show_bug.cgi?id=180421
160
161         Reviewed by Brian Burg.
162
163         We currently return unknown error.
164
165         Fixes: imported/w3c/webdriver/tests/element_retrieval/get_active_element.py::test_missing_document_element
166
167         * Session.cpp:
168         (WebDriver::Session::getActiveElement):
169
170 2017-12-04  Brian Burg  <bburg@apple.com>
171
172         Web Automation: add flag to preserve legacy page screenshot behavior
173         https://bugs.webkit.org/show_bug.cgi?id=180313
174         <rdar://problem/34379930>
175
176         Reviewed by Joseph Pecoraro.
177
178         Set the clipToViewport flag to true when sending Automation.takeScreenshot.
179         This preserves the current behavior for this driver implementation.
180
181         * Session.cpp:
182         (WebDriver::Session::takeScreenshot):
183
184 2017-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>
185
186         WebDriver: implement element property command
187         https://bugs.webkit.org/show_bug.cgi?id=180244
188
189         Reviewed by Brian Burg.
190
191         13.3 Get Element Property
192         https://w3c.github.io/webdriver/webdriver-spec.html#get-element-property
193
194         Fixes: imported/w3c/webdriver/tests/state/get_element_property.py::test_no_browsing_context
195                imported/w3c/webdriver/tests/state/get_element_property.py::test_handle_prompt_dismiss
196                imported/w3c/webdriver/tests/state/get_element_property.py::test_handle_prompt_accept
197                imported/w3c/webdriver/tests/state/get_element_property.py::test_handle_prompt_missing_value
198                imported/w3c/webdriver/tests/state/get_element_property.py::test_element_stale
199
200         * Session.cpp:
201         (WebDriver::Session::getElementAttribute):
202         (WebDriver::Session::getElementProperty):
203         * Session.h:
204         * WebDriverService.cpp:
205         (WebDriver::WebDriverService::getElementProperty):
206         * WebDriverService.h:
207
208 2017-12-02  Carlos Garcia Campos  <cgarcia@igalia.com>
209
210         WebDriver: handle user prompts shown while executing scripts
211         https://bugs.webkit.org/show_bug.cgi?id=179979
212
213         Reviewed by Brian Burg.
214
215         15.2 Executing Script
216         https://w3c.github.io/webdriver/webdriver-spec.html#executing-script
217
218         The rules to execute a function body are as follows. The algorithm will return success with the JSON
219         representation of the function’s return value, or an error if the evaluation of the function results in a
220         JavaScript exception being thrown or at any point during its execution an unhandled user prompt appears.
221
222         If at any point during the algorithm a user prompt appears, the user prompt handler must be invoked. If its
223         return value is an error, it must immediately return with that error and abort all subsequent substeps of this
224         algorithm.
225
226         This will be covered by new WPT tests that will be available after the next upgrade.
227
228         * CommandResult.cpp:
229         (WebDriver::CommandResult::CommandResult): Handle UnexpectedAlertOpen internal error.
230         * Session.cpp:
231         (WebDriver::Session::handleUserPrompts): Move code to handleUnexpectedAlertOpen() and call it instead.
232         (WebDriver::Session::handleUnexpectedAlertOpen): Code moved here to be used also by executeScript().
233         (WebDriver::Session::executeScript): In case of UnexpectedAlertOpen error, call handleUnexpectedAlertOpen().
234         * Session.h:
235
236 2017-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>
237
238         WebDriver: implement status command
239         https://bugs.webkit.org/show_bug.cgi?id=180133
240
241         Reviewed by Brian Burg.
242
243         8.3 Status
244         https://w3c.github.io/webdriver/webdriver-spec.html#status
245
246         Fixes: imported/w3c/webdriver/tests/sessions/status.py::test_get_status_no_session
247                imported/w3c/webdriver/tests/sessions/status.py::test_status_with_session_running_on_endpoint_node
248
249         * WebDriverService.cpp:
250         (WebDriver::WebDriverService::status):
251         * WebDriverService.h:
252
253 2017-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>
254
255         WebDriver: end point nodes are only allowed to have one session
256         https://bugs.webkit.org/show_bug.cgi?id=180131
257
258         Reviewed by Brian Burg.
259
260         We are currently keeping a map of sessions, but our service is always and end point node, so only one session
261         can exist at a time. Make findSessionOrCompleteWithError() return a boolean instead, failing in case the sessionID
262         parameter is not found or it doesn't match the current session. Replace the session map and active session
263         pointer with a single session member and return SessionNotCreated error when new session command is received and
264         there's an active session.
265
266         8. Sessions
267         A remote end has an associated maximum active sessions (an integer) that defines the number of active sessions
268         that are supported. This may be “unlimited” for intermediary nodes, but must be exactly one for a remote end
269         that is an endpoint node.
270         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-maximum-active-sessions
271
272         Fixes: imported/w3c/webdriver/tests/sessions/new_session/default_values.py::test_repeat_new_session
273
274         * WebDriverService.cpp:
275         (WebDriver::WebDriverService::findSessionOrCompleteWithError):
276         (WebDriver::WebDriverService::newSession):
277         (WebDriver::WebDriverService::deleteSession):
278         (WebDriver::WebDriverService::status):
279         (WebDriver::WebDriverService::setTimeouts):
280         (WebDriver::WebDriverService::go):
281         (WebDriver::WebDriverService::getCurrentURL):
282         (WebDriver::WebDriverService::back):
283         (WebDriver::WebDriverService::forward):
284         (WebDriver::WebDriverService::refresh):
285         (WebDriver::WebDriverService::getTitle):
286         (WebDriver::WebDriverService::getWindowHandle):
287         (WebDriver::WebDriverService::setWindowRect):
288         (WebDriver::WebDriverService::closeWindow):
289         (WebDriver::WebDriverService::switchToWindow):
290         (WebDriver::WebDriverService::getWindowHandles):
291         (WebDriver::WebDriverService::switchToFrame):
292         (WebDriver::WebDriverService::switchToParentFrame):
293         (WebDriver::findStrategyAndSelectorOrCompleteWithError):
294         (WebDriver::WebDriverService::findElement):
295         (WebDriver::WebDriverService::findElements):
296         (WebDriver::WebDriverService::findElementFromElement):
297         (WebDriver::WebDriverService::findElementsFromElement):
298         (WebDriver::WebDriverService::getActiveElement):
299         (WebDriver::WebDriverService::isElementSelected):
300         (WebDriver::WebDriverService::getElementAttribute):
301         (WebDriver::WebDriverService::getElementText):
302         (WebDriver::WebDriverService::getElementTagName):
303         (WebDriver::WebDriverService::getElementRect):
304         (WebDriver::WebDriverService::isElementEnabled):
305         (WebDriver::WebDriverService::isElementDisplayed):
306         (WebDriver::WebDriverService::elementClick):
307         (WebDriver::WebDriverService::elementClear):
308         (WebDriver::WebDriverService::elementSendKeys):
309         (WebDriver::findScriptAndArgumentsOrCompleteWithError):
310         (WebDriver::WebDriverService::executeScript):
311         (WebDriver::WebDriverService::executeAsyncScript):
312         (WebDriver::WebDriverService::getAllCookies):
313         (WebDriver::WebDriverService::getNamedCookie):
314         (WebDriver::deserializeCookie):
315         (WebDriver::WebDriverService::addCookie):
316         (WebDriver::WebDriverService::deleteCookie):
317         (WebDriver::WebDriverService::deleteAllCookies):
318         (WebDriver::WebDriverService::dismissAlert):
319         (WebDriver::WebDriverService::acceptAlert):
320         (WebDriver::WebDriverService::getAlertText):
321         (WebDriver::WebDriverService::sendAlertText):
322         (WebDriver::WebDriverService::takeScreenshot):
323         (WebDriver::WebDriverService::takeElementScreenshot):
324         * WebDriverService.h:
325
326 2017-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>
327
328         WebDriver: locator strategy should be validated before trying to find elements
329         https://bugs.webkit.org/show_bug.cgi?id=180187
330
331         Reviewed by Carlos Alberto Lopez Perez.
332
333         We currently rely on the js atom to raise an exception in case the locator strategy is not valid, but in case of
334         find element from element, if the element doesn't exist we fail with stale element error instead of invalid
335         argument as expected. So, let's validate the strategies when parsing them, which would also avoid going to the
336         browser in cae of invalid strategy.
337
338         Fixes: imported/w3c/webdriver/tests/retrieval/find_element_from_element.py::test_invalid_using_argument[a]
339
340         * WebDriverService.cpp:
341         (WebDriver::isValidStrategy):
342         (WebDriver::findStrategyAndSelectorOrCompleteWithError):
343
344 2017-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>
345
346         WebDriver: remove elementSubmit command
347         https://bugs.webkit.org/show_bug.cgi?id=180186
348
349         Reviewed by Carlos Alberto Lopez Perez.
350
351         It's not in the spec, we had it only because selenium used it, but now it uses execute_script with custom code
352         to implement submit, so we can just remove it.
353
354         * Session.cpp:
355         (WebDriver::Session::elementSubmit): Deleted.
356         * Session.h:
357         * WebDriverService.cpp:
358         (WebDriver::WebDriverService::elementSubmit): Deleted.
359         * WebDriverService.h:
360
361 2017-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>
362
363         Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
364         https://bugs.webkit.org/show_bug.cgi?id=173793
365
366         Reviewed by Joseph Pecoraro.
367
368         * CMakeLists.txt:
369         * CommandResult.cpp:
370         (WebDriver::CommandResult::CommandResult):
371         * CommandResult.h:
372         (WebDriver::CommandResult::success):
373         (WebDriver::CommandResult::fail):
374         (WebDriver::CommandResult::result const):
375         (WebDriver::CommandResult::setAdditionalErrorData):
376         (WebDriver::CommandResult::additionalErrorData const):
377         * Session.cpp:
378         (WebDriver::firstWindowHandleInResult):
379         (WebDriver::Session::handleUserPrompts):
380         (WebDriver::Session::reportUnexpectedAlertOpen):
381         (WebDriver::Session::go):
382         (WebDriver::Session::getCurrentURL):
383         (WebDriver::Session::back):
384         (WebDriver::Session::forward):
385         (WebDriver::Session::refresh):
386         (WebDriver::Session::getTitle):
387         (WebDriver::Session::getWindowHandle):
388         (WebDriver::Session::closeTopLevelBrowsingContext):
389         (WebDriver::Session::switchToWindow):
390         (WebDriver::Session::getWindowHandles):
391         (WebDriver::Session::switchToFrame):
392         (WebDriver::Session::switchToParentFrame):
393         (WebDriver::Session::getToplevelBrowsingContextRect):
394         (WebDriver::Session::moveToplevelBrowsingContextWindow):
395         (WebDriver::Session::resizeToplevelBrowsingContextWindow):
396         (WebDriver::Session::createElement):
397         (WebDriver::Session::extractElement):
398         (WebDriver::Session::extractElementID):
399         (WebDriver::Session::computeElementLayout):
400         (WebDriver::Session::findElements):
401         (WebDriver::Session::isElementSelected):
402         (WebDriver::Session::getElementText):
403         (WebDriver::Session::getElementTagName):
404         (WebDriver::Session::getElementRect):
405         (WebDriver::Session::isElementEnabled):
406         (WebDriver::Session::isElementDisplayed):
407         (WebDriver::Session::getElementAttribute):
408         (WebDriver::Session::waitForNavigationToComplete):
409         (WebDriver::Session::selectOptionElement):
410         (WebDriver::Session::elementClick):
411         (WebDriver::Session::elementClear):
412         (WebDriver::Session::elementSendKeys):
413         (WebDriver::Session::elementSubmit):
414         (WebDriver::Session::handleScriptResult):
415         (WebDriver::Session::executeScript):
416         (WebDriver::Session::performMouseInteraction):
417         (WebDriver::Session::performKeyboardInteractions):
418         (WebDriver::parseAutomationCookie):
419         (WebDriver::builtAutomationCookie):
420         (WebDriver::serializeCookie):
421         (WebDriver::Session::getAllCookies):
422         (WebDriver::Session::getNamedCookie):
423         (WebDriver::Session::addCookie):
424         (WebDriver::Session::deleteCookie):
425         (WebDriver::Session::deleteAllCookies):
426         (WebDriver::Session::dismissAlert):
427         (WebDriver::Session::acceptAlert):
428         (WebDriver::Session::getAlertText):
429         (WebDriver::Session::sendAlertText):
430         (WebDriver::Session::takeScreenshot):
431         * Session.h:
432         * SessionHost.cpp:
433         (WebDriver::SessionHost::sendCommandToBackend):
434         (WebDriver::SessionHost::dispatchMessage):
435         * SessionHost.h:
436         * WebDriverService.cpp:
437         (WebDriver::WebDriverService::handleRequest):
438         (WebDriver::WebDriverService::sendResponse const):
439         (WebDriver::deserializeTimeouts):
440         (WebDriver::WebDriverService::parseCapabilities const):
441         (WebDriver::WebDriverService::findSessionOrCompleteWithError):
442         (WebDriver::WebDriverService::validatedCapabilities const):
443         (WebDriver::WebDriverService::mergeCapabilities const):
444         (WebDriver::WebDriverService::matchCapabilities const):
445         (WebDriver::WebDriverService::processCapabilities const):
446         (WebDriver::WebDriverService::newSession):
447         (WebDriver::WebDriverService::deleteSession):
448         (WebDriver::WebDriverService::setTimeouts):
449         (WebDriver::WebDriverService::go):
450         (WebDriver::WebDriverService::getCurrentURL):
451         (WebDriver::WebDriverService::back):
452         (WebDriver::WebDriverService::forward):
453         (WebDriver::WebDriverService::refresh):
454         (WebDriver::WebDriverService::getTitle):
455         (WebDriver::WebDriverService::getWindowHandle):
456         (WebDriver::WebDriverService::getWindowRect):
457         (WebDriver::valueAsNumberInRange):
458         (WebDriver::WebDriverService::setWindowRect):
459         (WebDriver::WebDriverService::closeWindow):
460         (WebDriver::WebDriverService::switchToWindow):
461         (WebDriver::WebDriverService::getWindowHandles):
462         (WebDriver::WebDriverService::switchToFrame):
463         (WebDriver::WebDriverService::switchToParentFrame):
464         (WebDriver::findElementOrCompleteWithError):
465         (WebDriver::findStrategyAndSelectorOrCompleteWithError):
466         (WebDriver::WebDriverService::findElement):
467         (WebDriver::WebDriverService::findElements):
468         (WebDriver::WebDriverService::findElementFromElement):
469         (WebDriver::WebDriverService::findElementsFromElement):
470         (WebDriver::WebDriverService::isElementSelected):
471         (WebDriver::WebDriverService::getElementAttribute):
472         (WebDriver::WebDriverService::getElementText):
473         (WebDriver::WebDriverService::getElementTagName):
474         (WebDriver::WebDriverService::getElementRect):
475         (WebDriver::WebDriverService::isElementEnabled):
476         (WebDriver::WebDriverService::isElementDisplayed):
477         (WebDriver::WebDriverService::elementClick):
478         (WebDriver::WebDriverService::elementClear):
479         (WebDriver::WebDriverService::elementSendKeys):
480         (WebDriver::WebDriverService::elementSubmit):
481         (WebDriver::findScriptAndArgumentsOrCompleteWithError):
482         (WebDriver::WebDriverService::executeScript):
483         (WebDriver::WebDriverService::executeAsyncScript):
484         (WebDriver::WebDriverService::getAllCookies):
485         (WebDriver::WebDriverService::getNamedCookie):
486         (WebDriver::deserializeCookie):
487         (WebDriver::WebDriverService::addCookie):
488         (WebDriver::WebDriverService::deleteCookie):
489         (WebDriver::WebDriverService::deleteAllCookies):
490         (WebDriver::WebDriverService::dismissAlert):
491         (WebDriver::WebDriverService::acceptAlert):
492         (WebDriver::WebDriverService::getAlertText):
493         (WebDriver::WebDriverService::sendAlertText):
494         (WebDriver::WebDriverService::takeScreenshot):
495         (WebDriver::WebDriverService::takeElementScreenshot):
496         * WebDriverService.h:
497         * gtk/WebDriverServiceGtk.cpp:
498         (WebDriver::WebDriverService::platformValidateCapability const):
499         (WebDriver::WebDriverService::platformMatchCapability const):
500         (WebDriver::WebDriverService::platformParseCapabilities const):
501         * wpe/WebDriverServiceWPE.cpp:
502         (WebDriver::WebDriverService::platformValidateCapability const):
503         (WebDriver::WebDriverService::platformMatchCapability const):
504         (WebDriver::WebDriverService::platformParseCapabilities const):
505
506 2017-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>
507
508         [GTK] WebDriver: stop making mandatory to provide a browser path if webkitgtk:browserOptions is present in capabilities
509         https://bugs.webkit.org/show_bug.cgi?id=180012
510
511         Reviewed by Carlos Alberto Lopez Perez.
512
513         Everything should be optional. We might want to disable overlay scrollbars, but still using the default browser,
514         for example, as I'm doing when running the selenium tests. We might also want to provide additional browser
515         arguments, but using the default browser.
516
517         * gtk/WebDriverServiceGtk.cpp:
518         (WebDriver::WebDriverService::platformValidateCapability const): Do not consider invalid to not provide a
519         browser binary when webkitgtk:browserOptions is present.
520         (WebDriver::WebDriverService::platformParseCapabilities const): Override default capabilities with the ones
521         provided.
522
523 2017-11-27  Carlos Garcia Campos  <cgarcia@igalia.com>
524
525         WebDriver: Implement get active element command
526         https://bugs.webkit.org/show_bug.cgi?id=180001
527
528         Reviewed by Brian Burg.
529
530         12.6 Get Active Element
531         https://w3c.github.io/webdriver/webdriver-spec.html#get-active-element
532
533         Fixes imported/w3c/webdriver/tests/element_retrieval/get_active_element.py.
534
535         * Session.cpp:
536         (WebDriver::Session::getActiveElement):
537         * Session.h:
538         * WebDriverService.cpp:
539         (WebDriver::WebDriverService::getActiveElement):
540         * WebDriverService.h:
541
542 2017-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>
543
544         WebDriver: do not try to parse http body if method is not POST
545         https://bugs.webkit.org/show_bug.cgi?id=179918
546
547         Reviewed by Darin Adler.
548
549         As said in the spec:
550
551           5. If request’s method is POST:
552
553             1. Let parse result be the result of parsing as JSON with request’s body as the argument. If this process
554                throws an exception, return an error with error code invalid argument and jump back to step 1 in this
555                overall algorithm.
556
557             2. If parse result is not an Object, send an error with error code invalid argument and jump back to step 1
558                in this overall algorithm.
559
560             Otherwise, let parameters be parse result.
561
562           Otherwise, let parameters be null.
563
564         6.3 Processing Model
565         https://w3c.github.io/webdriver/webdriver-spec.html#processing-model
566
567         Now, w3c tests are sending null as body of delete session command (it used to be just empty), making it fail
568         with invalid argument error.
569
570         * WebDriverService.cpp:
571         (WebDriver::WebDriverService::findCommand):
572         (WebDriver::WebDriverService::handleRequest):
573         * WebDriverService.h:
574
575 2017-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>
576
577         WebDriver: crash in Session::computeElementLayout when called without a current browsing context
578         https://bugs.webkit.org/show_bug.cgi?id=179917
579
580         Reviewed by Darin Adler.
581
582         In the case of computeElementLayout message, the frameHandle parameter is not optional, but we still need to
583         provide a valid value (empty string means the default frame) when m_currentBrowsingContext is std::nullopt. The
584         same applies to selectOptionElement.
585
586         * Session.cpp:
587         (WebDriver::Session::computeElementLayout):
588         (WebDriver::Session::selectOptionElement):
589
590 2017-11-15  Carlos Garcia Campos  <cgarcia@igalia.com>
591
592         [WPE] Add initial support for WebDriver
593         https://bugs.webkit.org/show_bug.cgi?id=179727
594
595         Reviewed by Michael Catanzaro.
596
597         Add WPE implementation for platform-specific methods. Move the version handling to a common file
598         WebDriverServiceGLib.cpp.
599
600         * Capabilities.h:
601         * PlatformGTK.cmake:
602         * PlatformWPE.cmake:
603         * glib/WebDriverServiceGLib.cpp: Added.
604         (WebDriver::parseVersion):
605         (WebDriver::WebDriverService::platformCompareBrowserVersions):
606         * gtk/WebDriverServiceGtk.cpp:
607         * wpe/WebDriverServiceWPE.cpp: Copied from Source/WebDriver/gtk/WebDriverServiceGtk.cpp.
608         (WebDriver::WebDriverService::platformCapabilities):
609         (WebDriver::WebDriverService::platformValidateCapability const):
610         (WebDriver::WebDriverService::platformMatchCapability const):
611         (WebDriver::WebDriverService::platformParseCapabilities const):
612
613 2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>
614
615         Unreviewed, rolling out r224863.
616
617         Introduced LayoutTest crashes on iOS Simulator.
618
619         Reverted changeset:
620
621         "Move JSONValues to WTF and convert uses of InspectorValues.h
622         to JSONValues.h"
623         https://bugs.webkit.org/show_bug.cgi?id=173793
624         https://trac.webkit.org/changeset/224863
625
626 2017-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>
627
628         Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
629         https://bugs.webkit.org/show_bug.cgi?id=173793
630
631         Reviewed by Brian Burg.
632
633         * CMakeLists.txt:
634         * CommandResult.cpp:
635         (WebDriver::CommandResult::CommandResult):
636         * CommandResult.h:
637         (WebDriver::CommandResult::success):
638         (WebDriver::CommandResult::fail):
639         (WebDriver::CommandResult::result const):
640         (WebDriver::CommandResult::setAdditionalErrorData):
641         (WebDriver::CommandResult::additionalErrorData const):
642         * Session.cpp:
643         (WebDriver::firstWindowHandleInResult):
644         (WebDriver::Session::handleUserPrompts):
645         (WebDriver::Session::reportUnexpectedAlertOpen):
646         (WebDriver::Session::go):
647         (WebDriver::Session::getCurrentURL):
648         (WebDriver::Session::back):
649         (WebDriver::Session::forward):
650         (WebDriver::Session::refresh):
651         (WebDriver::Session::getTitle):
652         (WebDriver::Session::getWindowHandle):
653         (WebDriver::Session::closeTopLevelBrowsingContext):
654         (WebDriver::Session::switchToWindow):
655         (WebDriver::Session::getWindowHandles):
656         (WebDriver::Session::switchToFrame):
657         (WebDriver::Session::switchToParentFrame):
658         (WebDriver::Session::getToplevelBrowsingContextRect):
659         (WebDriver::Session::moveToplevelBrowsingContextWindow):
660         (WebDriver::Session::resizeToplevelBrowsingContextWindow):
661         (WebDriver::Session::createElement):
662         (WebDriver::Session::extractElement):
663         (WebDriver::Session::extractElementID):
664         (WebDriver::Session::computeElementLayout):
665         (WebDriver::Session::findElements):
666         (WebDriver::Session::isElementSelected):
667         (WebDriver::Session::getElementText):
668         (WebDriver::Session::getElementTagName):
669         (WebDriver::Session::getElementRect):
670         (WebDriver::Session::isElementEnabled):
671         (WebDriver::Session::isElementDisplayed):
672         (WebDriver::Session::getElementAttribute):
673         (WebDriver::Session::waitForNavigationToComplete):
674         (WebDriver::Session::selectOptionElement):
675         (WebDriver::Session::elementClick):
676         (WebDriver::Session::elementClear):
677         (WebDriver::Session::elementSendKeys):
678         (WebDriver::Session::elementSubmit):
679         (WebDriver::Session::handleScriptResult):
680         (WebDriver::Session::executeScript):
681         (WebDriver::Session::performMouseInteraction):
682         (WebDriver::Session::performKeyboardInteractions):
683         (WebDriver::parseAutomationCookie):
684         (WebDriver::builtAutomationCookie):
685         (WebDriver::serializeCookie):
686         (WebDriver::Session::getAllCookies):
687         (WebDriver::Session::getNamedCookie):
688         (WebDriver::Session::addCookie):
689         (WebDriver::Session::deleteCookie):
690         (WebDriver::Session::deleteAllCookies):
691         (WebDriver::Session::dismissAlert):
692         (WebDriver::Session::acceptAlert):
693         (WebDriver::Session::getAlertText):
694         (WebDriver::Session::sendAlertText):
695         (WebDriver::Session::takeScreenshot):
696         * Session.h:
697         * SessionHost.cpp:
698         (WebDriver::SessionHost::sendCommandToBackend):
699         (WebDriver::SessionHost::dispatchMessage):
700         * SessionHost.h:
701         * WebDriverService.cpp:
702         (WebDriver::WebDriverService::handleRequest):
703         (WebDriver::WebDriverService::sendResponse const):
704         (WebDriver::deserializeTimeouts):
705         (WebDriver::WebDriverService::parseCapabilities const):
706         (WebDriver::WebDriverService::findSessionOrCompleteWithError):
707         (WebDriver::WebDriverService::validatedCapabilities const):
708         (WebDriver::WebDriverService::mergeCapabilities const):
709         (WebDriver::WebDriverService::matchCapabilities const):
710         (WebDriver::WebDriverService::processCapabilities const):
711         (WebDriver::WebDriverService::newSession):
712         (WebDriver::WebDriverService::deleteSession):
713         (WebDriver::WebDriverService::setTimeouts):
714         (WebDriver::WebDriverService::go):
715         (WebDriver::WebDriverService::getCurrentURL):
716         (WebDriver::WebDriverService::back):
717         (WebDriver::WebDriverService::forward):
718         (WebDriver::WebDriverService::refresh):
719         (WebDriver::WebDriverService::getTitle):
720         (WebDriver::WebDriverService::getWindowHandle):
721         (WebDriver::WebDriverService::getWindowRect):
722         (WebDriver::valueAsNumberInRange):
723         (WebDriver::WebDriverService::setWindowRect):
724         (WebDriver::WebDriverService::closeWindow):
725         (WebDriver::WebDriverService::switchToWindow):
726         (WebDriver::WebDriverService::getWindowHandles):
727         (WebDriver::WebDriverService::switchToFrame):
728         (WebDriver::WebDriverService::switchToParentFrame):
729         (WebDriver::findElementOrCompleteWithError):
730         (WebDriver::findStrategyAndSelectorOrCompleteWithError):
731         (WebDriver::WebDriverService::findElement):
732         (WebDriver::WebDriverService::findElements):
733         (WebDriver::WebDriverService::findElementFromElement):
734         (WebDriver::WebDriverService::findElementsFromElement):
735         (WebDriver::WebDriverService::isElementSelected):
736         (WebDriver::WebDriverService::getElementAttribute):
737         (WebDriver::WebDriverService::getElementText):
738         (WebDriver::WebDriverService::getElementTagName):
739         (WebDriver::WebDriverService::getElementRect):
740         (WebDriver::WebDriverService::isElementEnabled):
741         (WebDriver::WebDriverService::isElementDisplayed):
742         (WebDriver::WebDriverService::elementClick):
743         (WebDriver::WebDriverService::elementClear):
744         (WebDriver::WebDriverService::elementSendKeys):
745         (WebDriver::WebDriverService::elementSubmit):
746         (WebDriver::findScriptAndArgumentsOrCompleteWithError):
747         (WebDriver::WebDriverService::executeScript):
748         (WebDriver::WebDriverService::executeAsyncScript):
749         (WebDriver::WebDriverService::getAllCookies):
750         (WebDriver::WebDriverService::getNamedCookie):
751         (WebDriver::deserializeCookie):
752         (WebDriver::WebDriverService::addCookie):
753         (WebDriver::WebDriverService::deleteCookie):
754         (WebDriver::WebDriverService::deleteAllCookies):
755         (WebDriver::WebDriverService::dismissAlert):
756         (WebDriver::WebDriverService::acceptAlert):
757         (WebDriver::WebDriverService::getAlertText):
758         (WebDriver::WebDriverService::sendAlertText):
759         (WebDriver::WebDriverService::takeScreenshot):
760         (WebDriver::WebDriverService::takeElementScreenshot):
761         * WebDriverService.h:
762         * gtk/WebDriverServiceGtk.cpp:
763         (WebDriver::WebDriverService::platformValidateCapability const):
764         (WebDriver::WebDriverService::platformMatchCapability const):
765         (WebDriver::WebDriverService::platformParseCapabilities const):
766
767 2017-11-07  Brian Burg  <bburg@apple.com>
768
769         Web Automation: inViewCenterPoint should not include topContentInset when computed in viewport coordinates
770         https://bugs.webkit.org/show_bug.cgi?id=179129
771         <rdar://problem/35297038>
772
773         Reviewed by Simon Fraser.
774
775         Adjust code to use the proper coordinate system when requesting element layout.
776
777         * Session.cpp:
778         (WebDriver::Session::computeElementLayout):
779
780 2017-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>
781
782         WebDriver: WebDriverService::matchCapabilities should follow the spec
783         https://bugs.webkit.org/show_bug.cgi?id=179371
784
785         Reviewed by Brian Burg.
786
787         The returned object should contain all the entries mentioned in the spec, not only the ones already present in
788         the passed in capabilities object.
789
790         7.2 Processing Capabilities
791         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-matching-capabilities
792
793         * WebDriverService.cpp:
794         (WebDriver::WebDriverService::matchCapabilities const):
795         (WebDriver::WebDriverService::processCapabilities const):
796         * WebDriverService.h:
797
798 2017-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>
799
800         WebDriver: capabilities with null value shouldn't be added to the validated capabilities object
801         https://bugs.webkit.org/show_bug.cgi?id=179369
802
803         Reviewed by Brian Burg.
804
805         "4. If deserialized is not null, set a property on result with name name and value deserialized."
806
807         7.2 Processing Capabilities
808         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-validate-capabilities
809
810         Fixes: imported/w3c/webdriver/tests/sessions/new_session/create_firstMatch.py::test_valid[platformName-None]
811
812         * WebDriverService.cpp:
813         (WebDriver::WebDriverService::validatedCapabilities const):
814
815 2017-10-27  Carlos Garcia Campos  <cgarcia@igalia.com>
816
817         WebDriver: unknown capabilities should produce an InvalidArgument error when validating capabilities
818         https://bugs.webkit.org/show_bug.cgi?id=178868
819
820         Reviewed by Brian Burg.
821
822         7.2 Processing Capabilities
823         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-validate-capabilities
824
825         Fixes: imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_extensions
826
827         * WebDriverService.cpp:
828         (WebDriver::WebDriverService::validatedCapabilities const):
829
830 2017-10-27  Carlos Garcia Campos  <cgarcia@igalia.com>
831
832         WebDriver: deserializeTimeouts should fail if the value is not integer
833         https://bugs.webkit.org/show_bug.cgi?id=178866
834
835         Reviewed by Brian Burg.
836
837         If value is not an integer, or it is less than 0 or greater than 2^64 – 1, return error with error code invalid
838         argument.
839         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-deserialize-as-a-timeout
840
841         Fixes: imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_values[timeouts-value59-body0]
842                imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_values[timeouts-value59-body1]
843
844         * WebDriverService.cpp:
845         (WebDriver::deserializeTimeouts):
846
847 2017-10-27  Carlos Garcia Campos  <cgarcia@igalia.com>
848
849         WebDriver: failing to process capabilities should produce InvalidArgument error not SessionNotCreated
850         https://bugs.webkit.org/show_bug.cgi?id=178864
851
852         Reviewed by Brian Burg.
853
854         Fixes most of the tests in imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py.
855
856         7.2 Processing Capabilities
857         https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities
858
859         * WebDriverService.cpp:
860         (WebDriver::WebDriverService::processCapabilities const):
861
862 2017-10-10  Sam Weinig  <sam@webkit.org>
863
864         Replace copyKeysToVector/copyValuesToVector with copyToVector(map.keys())/copyToVector(map.values())
865         https://bugs.webkit.org/show_bug.cgi?id=178102
866
867         Reviewed by Tim Horton.
868
869         * SessionHost.cpp:
870         (WebDriver::SessionHost::inspectorDisconnected):
871
872 2017-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>
873
874         WebDriver: HTTP status code is not correct for some of the errors
875         https://bugs.webkit.org/show_bug.cgi?id=177354
876
877         Reviewed by Brian Burg.
878
879         I think this changed in the spec at some point. The thing is that no such alert, frame and window and stale
880         element reference errors should return 404 instead of 400.
881
882         https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors
883
884         * CommandResult.cpp:
885         (WebDriver::CommandResult::httpStatusCode const):
886
887 2017-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>
888
889         WebDriver: Implement commands to get and set the window rect
890         https://bugs.webkit.org/show_bug.cgi?id=177134
891
892         Reviewed by Brian Burg.
893
894         We are currently implementing the selenium legacy ones, we should implement the w3c ones instead.
895
896         https://w3c.github.io/webdriver/webdriver-spec.html#resizing-and-positioning-windows
897
898         * Session.cpp:
899         (WebDriver::Session::getToplevelBrowsingContextRect): Helper to get the window rect. This is used by both get
900         and set window rect commands.
901         (WebDriver::Session::moveToplevelBrowsingContextwindow): Helper to ask automation to move the window.
902         (WebDriver::Session::resizeToplevelBrowsingContextwindow): Helper to ask automation to resize the window.
903         (WebDriver::Session::getWindowRect): Handle prompts and then call getToplevelBrowsingContextRect().
904         (WebDriver::Session::setWindowRect): Handle prompts and then move and resize the window according to the given
905         parameters and finish the operation calling getToplevelBrowsingContextRect().
906         * Session.h:
907         * WebDriverService.cpp:
908         (WebDriver::WebDriverService::getWindowRect): Ask the session to get the window rect.
909         (WebDriver::valueAsNumberInRange): Helper to check a value is a valid number in the given range.
910         (WebDriver::WebDriverService::setWindowRect): Get and check size and position from parameters and then ask the
911         session to set the window rect.
912         * WebDriverService.h:
913
914 2017-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>
915
916         WebDriver: wrong response in case of errors
917         https://bugs.webkit.org/show_bug.cgi?id=177127
918
919         Reviewed by Brian Burg.
920
921         I misunderstood the spec when I implemented this, so we either return a "value" key with the result in case of
922         success or the error object as the body in case of error. We should always add a "value" key to the body and set
923         it with either the result or the error object.
924
925         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-send-an-error
926
927         * WebDriverService.cpp:
928         (WebDriver::WebDriverService::sendResponse const):
929
930 2017-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>
931
932         WebDriver: wrong key name for capabilities in new session response
933         https://bugs.webkit.org/show_bug.cgi?id=177074
934
935         Reviewed by Brian Burg.
936
937         We are using "value", it should be "capabilities".
938         https://w3c.github.io/webdriver/webdriver-spec.html#new-session
939
940         * WebDriverService.cpp:
941         (WebDriver::WebDriverService::newSession):
942
943 2017-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>
944
945         WebDriver: HTTP responses should include Cache-Control header with no-cache value
946         https://bugs.webkit.org/show_bug.cgi?id=177073
947
948         Reviewed by Sergio Villar Senin.
949
950         6.3 Processing Model.
951         Set the response’s header with name and value with the following values:
952
953         Content-Type "application/json; charset=utf-8"
954         Cache-Control "no-cache"
955
956         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-send-a-response
957
958         We were setting the Content-Type, but not the Cache-Control. This is checked by all WPT WebDriver tests.
959
960         * soup/HTTPServerSoup.cpp:
961         (WebDriver::HTTPServer::listen): Add Cache-Control header.
962
963 2017-09-18  Michael Catanzaro  <mcatanzaro@igalia.com>
964
965         [CMake] Rename WebKit target to WebKitLegacy and rename WebKit2 target to WebKit
966         https://bugs.webkit.org/show_bug.cgi?id=174558
967
968         Reviewed by Alex Christensen.
969
970         * CMakeLists.txt:
971
972 2017-09-15  JF Bastien  <jfbastien@apple.com>
973
974         WTF: use Forward.h when appropriate instead of Vector.h
975         https://bugs.webkit.org/show_bug.cgi?id=176984
976
977         Reviewed by Saam Barati.
978
979         There's no need to include Vector.h when Forward.h will suffice. All we need is to move the template default parameters from Vector, and then the forward declaration can be used in so many new places: if a header only takes Vector by reference, rvalue reference, pointer, returns any of these, or has them as members then the header doesn't need to see the definition because the declaration will suffice.
980
981         * Session.h:
982
983 2017-09-09  Carlos Garcia Campos  <cgarcia@igalia.com>
984
985         WebDriver: ensure we close all windows handles when closing the session
986         https://bugs.webkit.org/show_bug.cgi?id=176508
987
988         Reviewed by Brian Burg.
989
990         The spec says that when closing the session all top level browsing contexts should be closed. We are currently
991         checking if we have an active top level browsing context and then we try to close it before trying with the
992         rest. It can happen that we are in an inconsistent state, for example if the current top level browsing context
993         has been closed by JavaScript or another action and the user didn't switch to another one before closing the
994         session. In such case, closing the session will fail with NoSuchwindow and any other window open will not be
995         closed. It's safer to always ask for all window handles and close them, which is what the spec says too.
996
997         * Session.cpp:
998         (WebDriver::firstWindowHandleInResult): Helper class to get the first window handle in the result array.
999         (WebDriver::Session::closeAllToplevelBrowsingContexts): Use firstWindowHandleInResult().
1000         (WebDriver::Session::close): Close the current top level browsing context and get all window handles to close
1001         them all if needed.
1002
1003 2017-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>
1004
1005         WebDriver: implement screen capture commands
1006         https://bugs.webkit.org/show_bug.cgi?id=174615
1007
1008         Reviewed by Brian Burg.
1009
1010         Implement takeScreenshot and takeElementScreenshot commands.
1011
1012         19. Screen Capture.
1013         https://w3c.github.io/webdriver/webdriver-spec.html#screen-capture
1014
1015         * CommandResult.cpp:
1016         (WebDriver::CommandResult::CommandResult): Handle ScreenshotError protocol error.
1017         (WebDriver::CommandResult::httpStatusCode const): Add UnableToCaptureScreen.
1018         (WebDriver::CommandResult::errorString const): Ditto.
1019         * CommandResult.h:
1020         * Session.cpp:
1021         (WebDriver::Session::takeScreenshot):
1022         * Session.h:
1023         * WebDriverService.cpp:
1024         (WebDriver::WebDriverService::takeScreenshot):
1025         (WebDriver::WebDriverService::takeElementScreenshot):
1026         * WebDriverService.h:
1027
1028 2017-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>
1029
1030         WebDriver: implement cookies commands
1031         https://bugs.webkit.org/show_bug.cgi?id=174613
1032
1033         Reviewed by Brian Burg.
1034
1035         Add cookies commands.
1036
1037         16. Cookies.
1038         https://w3c.github.io/webdriver/webdriver-spec.html#cookies
1039
1040         * CommandResult.cpp:
1041         (WebDriver::CommandResult::httpStatusCode const): Add NoSuchCookie error.
1042         (WebDriver::CommandResult::errorString const): Ditto.
1043         * CommandResult.h:
1044         * Session.cpp:
1045         (WebDriver::parseAutomationCookie): Parse JSON cookie object returned by automation and convert it to a Cookie struct.
1046         (WebDriver::builtAutomationCookie): Build a JSON cookie object as expected by automation from a Cookie struct.
1047         (WebDriver::serializeCookie): Serialize a Cookie struct into a JSON cookie object according to the WebDriver spec.
1048         (WebDriver::Session::getAllCookies):
1049         (WebDriver::Session::getNamedCookie):
1050         (WebDriver::Session::addCookie):
1051         (WebDriver::Session::deleteCookie):
1052         (WebDriver::Session::deleteAllCookies):
1053         * Session.h:
1054         * WebDriverService.cpp:
1055         (WebDriver::WebDriverService::getAllCookies):
1056         (WebDriver::WebDriverService::getNamedCookie):
1057         (WebDriver::deserializeCookie):
1058         (WebDriver::WebDriverService::addCookie):
1059         (WebDriver::WebDriverService::deleteCookie):
1060         (WebDriver::WebDriverService::deleteAllCookies):
1061         * WebDriverService.h:
1062
1063 2017-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>
1064
1065         WebDriver: fix return value of close window command
1066         https://bugs.webkit.org/show_bug.cgi?id=174861
1067
1068         Reviewed by Brian Burg.
1069
1070         We are currently returning null, but we should return the list of window handles, and try to close the session
1071         if there aren't more window handles.
1072
1073         10.2 Close Window
1074         https://w3c.github.io/webdriver/webdriver-spec.html#close-window
1075
1076         3. If there are no more open top-level browsing contexts, then try to close the session.
1077         4. Return the result of running the remote end steps for the Get Window Handles command.
1078
1079         * Session.cpp:
1080         (WebDriver::Session::closeAllToplevelBrowsingContexts): Helper function to close the given toplevel browsing
1081         context and the next one if there are more.
1082         (WebDriver::Session::close): Call closeAllToplevelBrowsingContexts() to delete all toplevel browsing contexts of
1083         the session.
1084         (WebDriver::Session::closeTopLevelBrowsingContext): Close the given toplevel browsing context and call
1085         getWindowHandles() when done.
1086         (WebDriver::Session::closeWindow): Call closeTopLevelBrowsingContext() passing the current toplevel browsing context.
1087         (WebDriver::Session::getWindowHandles): Remove the early return, this command doesn't depend on a current
1088         toplevel browsing context.
1089         * Session.h:
1090         * SessionHost.h:
1091         * WebDriverService.cpp:
1092         (WebDriver::WebDriverService::run): Disconnect the server when main loop quits.
1093         (WebDriver::WebDriverService::deleteSession): Do not fail if the given session is not active.
1094         (WebDriver::WebDriverService::closeWindow): Remove the session if the closed window was the last one.
1095         * WebDriverService.h: Remove unused quit() method.
1096         * glib/SessionHostGlib.cpp:
1097         (WebDriver::SessionHost::isConnected): Return whether host is connected to a browser instance.
1098         (WebDriver::SessionHost::dbusConnectionClosedCallback): Delete m_browser.
1099
1100 2017-08-14  Carlos Garcia Campos  <cgarcia@igalia.com>
1101
1102         WebDriver: handle click events on option elements
1103         https://bugs.webkit.org/show_bug.cgi?id=174710
1104         <rdar://problem/33459305>
1105
1106         Reviewed by Brian Burg.
1107
1108         Option elements are considered as a special case by the specification. When clicking an option element, we
1109         should get its container and use it when scrolling into view and calculating in-view center point instead of the
1110         option element itself. Then, we should not emulate a click, but change the selected status of the option element
1111         like if it were done by a user action, firing the corresponding events. Now we check whether the element is an
1112         option to call selectOptionElement() or performMouseInteraction().
1113
1114         This fixes more than 20 selenium tests.
1115
1116         * CommandResult.cpp:
1117         (WebDriver::CommandResult::CommandResult): Handle ElementNotSelectable protocol error.
1118         (WebDriver::CommandResult::httpStatusCode const): Add ElementNotSelectable.
1119         (WebDriver::CommandResult::errorString const): Ditto.
1120         * CommandResult.h:
1121         * Session.cpp:
1122         (WebDriver::Session::selectOptionElement): Ask automation to select the given option element.
1123         (WebDriver::Session::elementClick): Call selectOptionElement() or performMouseInteraction() depending on whether
1124         the element is an option or not.
1125         * Session.h:
1126
1127 2017-08-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>
1128
1129         Fix build warning in WebDriverService.h
1130         https://bugs.webkit.org/show_bug.cgi?id=166682
1131
1132         Unreviewed build fix.
1133
1134         * WebDriverService.h: Fixes the warning: class 'Capabilities' was previously declared as a struct [-Wmismatched-tags]
1135
1136 2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>
1137
1138         Unreviewed, fix Ubuntu LTS build
1139         https://bugs.webkit.org/show_bug.cgi?id=174490
1140
1141         * glib/SessionHostGlib.cpp:
1142
1143 2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>
1144
1145         [CMake] Properly test if compiler supports compiler flags
1146         https://bugs.webkit.org/show_bug.cgi?id=174490
1147
1148         Reviewed by Konstantin Tokarev.
1149
1150         * WebDriverService.cpp:
1151         (WebDriver::WebDriverService::run):
1152         * glib/SessionHostGlib.cpp:
1153
1154 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
1155
1156         Web Automation: setUserInputForCurrentJavaScriptPrompt should fail if current dialog is not a prompt
1157         https://bugs.webkit.org/show_bug.cgi?id=175261
1158
1159         Reviewed by Brian Burg.
1160
1161         * CommandResult.cpp:
1162         (WebDriver::CommandResult::CommandResult): Handle ElementNotInteractable protocol error.
1163
1164 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
1165
1166         WebDriver: implement unhandled prompt behavior
1167         https://bugs.webkit.org/show_bug.cgi?id=175184
1168
1169         Reviewed by Brian Burg.
1170
1171         Handle user prompts before running some of the commands according to the specification.
1172
1173         * Capabilities.h: Add UnhandledPromptBehavior capability.
1174         * CommandResult.cpp:
1175         (WebDriver::CommandResult::httpStatusCode const): Add UnexpectedAlertOpen error.
1176         (WebDriver::CommandResult::errorString const): Ditto.
1177         * CommandResult.h:
1178         (WebDriver::CommandResult::setAdditonalErrorData): New method to set an additional data object that will be sent
1179         as part of the result error message.
1180         (WebDriver::CommandResult::additionalErrorData const): Return the additional data object.
1181         * Session.cpp:
1182         (WebDriver::Session::handleUserPrompts): Check if there's an active JavaScript dialog and deal with it depeding
1183         on the unhandled prompt behavior.
1184         (WebDriver::Session::reportUnexpectedAlertOpen): Generate an error message with UnexpectedAlertOpen error and
1185         including the alert text as additional error data.
1186         (WebDriver::Session::go): Handle user prompts before running the command.
1187         (WebDriver::Session::getCurrentURL): Ditto.
1188         (WebDriver::Session::back): Ditto.
1189         (WebDriver::Session::forward): Ditto.
1190         (WebDriver::Session::refresh): Ditto.
1191         (WebDriver::Session::getTitle): Ditto.
1192         (WebDriver::Session::closeWindow): Ditto.
1193         (WebDriver::Session::switchToFrame): Ditto.
1194         (WebDriver::Session::switchToParentFrame): Ditto.
1195         (WebDriver::Session::isElementSelected): Ditto.
1196         (WebDriver::Session::getElementText): Ditto.
1197         (WebDriver::Session::getElementTagName): Ditto.
1198         (WebDriver::Session::getElementRect): Ditto.
1199         (WebDriver::Session::isElementEnabled): Ditto.
1200         (WebDriver::Session::isElementDisplayed): Ditto.
1201         (WebDriver::Session::getElementAttribute): Ditto.
1202         (WebDriver::Session::elementSendKeys): Ditto.
1203         (WebDriver::Session::elementSubmit): Ditto.
1204         (WebDriver::Session::executeScript): Ditto.
1205         * Session.h:
1206         * WebDriverService.cpp:
1207         (WebDriver::WebDriverService::sendResponse const): Send data object as part of the result error message if present.
1208         (WebDriver::deserializeUnhandledPromptBehavior):
1209         (WebDriver::WebDriverService::parseCapabilities const):
1210         (WebDriver::WebDriverService::validatedCapabilities const):
1211         (WebDriver::WebDriverService::newSession):
1212
1213 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
1214
1215         WebDriver: implement user prompt commands
1216         https://bugs.webkit.org/show_bug.cgi?id=174614
1217
1218         Reviewed by Brian Burg.
1219
1220         * CommandResult.cpp:
1221         (WebDriver::CommandResult::CommandResult): Handle NoJavaScriptDialog protocol error.
1222         (WebDriver::CommandResult::httpStatusCode const): Add NoSuchAlert.
1223         (WebDriver::CommandResult::errorString const): Ditto.
1224         * CommandResult.h:
1225         * Session.cpp:
1226         (WebDriver::Session::dismissAlert):
1227         (WebDriver::Session::acceptAlert):
1228         (WebDriver::Session::getAlertText):
1229         (WebDriver::Session::sendAlertText):
1230         * Session.h:
1231         * WebDriverService.cpp:
1232         (WebDriver::WebDriverService::dismissAlert):
1233         (WebDriver::WebDriverService::acceptAlert):
1234         (WebDriver::WebDriverService::getAlertText):
1235         (WebDriver::WebDriverService::sendAlertText):
1236         * WebDriverService.h:
1237
1238 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
1239
1240         [GTK][WPE] Add API to provide browser information required by automation
1241         https://bugs.webkit.org/show_bug.cgi?id=175130
1242
1243         Reviewed by Brian Burg.
1244
1245         * Session.cpp:
1246         (WebDriver::Session::createTopLevelBrowsingContext): Check if startAutomationSession and complete the command
1247         with error in that case.
1248         * SessionHost.h:
1249         * glib/SessionHostGlib.cpp:
1250         (WebDriver::SessionHost::matchCapabilities): Match the capabilities that are known only after the browser has
1251         been launched.
1252         (WebDriver::SessionHost::startAutomationSession): Handle the StartAutomationSession response, extracting the
1253         capabilities and calling matchCapabilities() to match them.
1254         (WebDriver::SessionHost::setTargetList): Return early if the session was rejected before due to invalid
1255         capabilities.
1256
1257 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
1258
1259         WebDriver: Implement page load strategy
1260         https://bugs.webkit.org/show_bug.cgi?id=175183
1261
1262         Reviewed by Brian Burg.
1263
1264         Validate and parse page load strategy when processing capabilities.
1265
1266         * Capabilities.h:
1267         * Session.cpp:
1268         (WebDriver::Session::pageLoadStrategyString const): Helper to get the page load strategy as a String to be
1269         passed to Automation.
1270         (WebDriver::Session::go): Pass page load strategy if present.
1271         (WebDriver::Session::back): Ditto.
1272         (WebDriver::Session::forward): Ditto.
1273         (WebDriver::Session::refresh): Ditto.
1274         (WebDriver::Session::waitForNavigationToComplete): Ditto.
1275         * Session.h:
1276         * WebDriverService.cpp:
1277         (WebDriver::deserializePageLoadStrategy):
1278         (WebDriver::WebDriverService::parseCapabilities const):
1279         (WebDriver::WebDriverService::validatedCapabilities const):
1280         (WebDriver::WebDriverService::newSession):
1281
1282 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
1283
1284         Unreviewed. Try to fix build with clang after r220315.
1285
1286         * WebDriverService.cpp:
1287         (WebDriver::WebDriverService::validatedCapabilities const):
1288         (WebDriver::WebDriverService::mergeCapabilities const):
1289
1290 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
1291
1292         WebDriver: properly handle capabilities and process firstMatch too
1293         https://bugs.webkit.org/show_bug.cgi?id=174618
1294
1295         Reviewed by Brian Burg.
1296
1297         Implement processing of capabilities following the spec. This patch adds validation, merging and matching of
1298         capabilities.
1299
1300         7.2 Processing Capabilities.
1301         https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities
1302
1303         * Capabilities.h: Make all capabilities optional and move Timeouts struct here.
1304         * Session.h:
1305         * WebDriverService.cpp:
1306         (WebDriver::deserializeTimeouts): Helper to extract timeouts from JSON object.
1307         (WebDriver::WebDriverService::parseCapabilities const): At this point capabilities have already been validated,
1308         so we just need to get them without checking the value type.
1309         (WebDriver::WebDriverService::validatedCapabilities const): Validate the given capabilities, ensuring types of
1310         values are the expected one.
1311         (WebDriver::WebDriverService::mergeCapabilities const): Merge the alwaysMatch and firstMatch capabilities into a
1312         single object ensuring that the same capability is not in both.
1313         (WebDriver::WebDriverService::matchCapabilities const): Try to match the merged capabilities againt the platform
1314         expected capabilities.
1315         (WebDriver::WebDriverService::processCapabilities const): Validate, merge and match the capabilities.
1316         (WebDriver::WebDriverService::newSession): Use processCapabilities(). Also initialize the timeouts from
1317         capabilities and add all capabilities to the command result.
1318         (WebDriver::WebDriverService::setTimeouts): Use deserializeTimeouts().
1319         * WebDriverService.h:
1320         * glib/SessionHostGlib.cpp:
1321         (WebDriver::SessionHost::launchBrowser): Updated to properly access the capabilities that are now optional.
1322         (WebDriver::SessionHost::startAutomationSession): Add FIXME.
1323         * gtk/WebDriverServiceGtk.cpp:
1324         (WebDriver::WebDriverService::platformCapabilities): Return the Capabilities with the known required ones filled.
1325         (WebDriver::WebDriverService::platformValidateCapability const): Validate webkitgtk:browserOptions.
1326         (WebDriver::WebDriverService::platformMatchCapability const): This does nothing for now.
1327         (WebDriver::WebDriverService::platformCompareBrowserVersions): Compare the given browser versions.
1328         (WebDriver::WebDriverService::platformParseCapabilities const): Updated now that capabilites have already been
1329         validated before.
1330
1331 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
1332
1333         WebDriver: use in-view center point for clicks instead of bounding box center point
1334         https://bugs.webkit.org/show_bug.cgi?id=174863
1335
1336         Reviewed by Simon Fraser.
1337
1338         The center of the element bounding box is not always part of the element, like in multiline links, for example.
1339
1340         11.1 Element Interactability.
1341         https://www.w3.org/TR/webdriver/#dfn-in-view-center-point
1342
1343         * CommandResult.cpp:
1344         (WebDriver::CommandResult::httpStatusCode): Add ElementClickIntercepted and ElementNotInteractable errors.
1345         (WebDriver::CommandResult::errorString): Ditto.
1346         * CommandResult.h: Ditto.
1347         * Session.cpp:
1348         (WebDriver::Session::computeElementLayout): Get the in-view center point and isObscured from the result too.
1349         (WebDriver::Session::getElementRect): Ignore in-view center point and isObscured.
1350         (WebDriver::Session::elementClick): Fail in case the element is not interactable or is obscured.
1351         * Session.h:
1352
1353 2017-08-01  Michael Catanzaro  <mcatanzaro@igalia.com>
1354
1355         [CMake] WebKitFS.cmake depends on options set in Option cmake files that are included later
1356         https://bugs.webkit.org/show_bug.cgi?id=174855
1357
1358         Reviewed by Carlos Garcia Campos.
1359
1360         Don't create derived sources directory here anymore.
1361
1362         * PlatformGTK.cmake:
1363
1364 2017-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>
1365
1366         Unreviewed. Fix GTK distcheck.
1367
1368         Ensure WebDriver derived sources directory is created, WebKitFS.cmake is useless for this.
1369
1370         * PlatformGTK.cmake:
1371
1372 2017-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>
1373
1374         WebDriver: rename m_browsingContext as m_currentBrowsingContext in Session
1375         https://bugs.webkit.org/show_bug.cgi?id=174783
1376
1377         Reviewed by Brian Burg.
1378
1379         We have m_toplevelBrowsingContext and m_browsingContext, which is confusing. m_browsingContext is actually the
1380         current browsing context, and the spec also refers to it as the current browsing context, so better use
1381         m_currentBrowsingContext.
1382
1383         * Session.cpp:
1384         (WebDriver::Session::switchToTopLevelBrowsingContext):
1385         (WebDriver::Session::switchToBrowsingContext):
1386         (WebDriver::Session::switchToFrame):
1387         (WebDriver::Session::switchToParentFrame):
1388         (WebDriver::Session::computeElementLayout):
1389         (WebDriver::Session::findElements):
1390         (WebDriver::Session::isElementSelected):
1391         (WebDriver::Session::getElementText):
1392         (WebDriver::Session::getElementTagName):
1393         (WebDriver::Session::isElementEnabled):
1394         (WebDriver::Session::isElementDisplayed):
1395         (WebDriver::Session::getElementAttribute):
1396         (WebDriver::Session::waitForNavigationToComplete):
1397         (WebDriver::Session::elementClear):
1398         (WebDriver::Session::elementSendKeys):
1399         (WebDriver::Session::elementSubmit):
1400         (WebDriver::Session::executeScript):
1401         * Session.h:
1402
1403 2017-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>
1404
1405         WebDriver: implement page load timeout
1406         https://bugs.webkit.org/show_bug.cgi?id=174672
1407
1408         Reviewed by Brian Burg.
1409
1410         Handle timeout errors and pass the page load timeout to waitForNavigationToComplete and all other navigation
1411         commands. Also fix the setTimeouts command that was still using the legacy name of the page load timeout,
1412         instead of the one in the spec.
1413
1414         8. Sessions
1415         https://www.w3.org/TR/webdriver/#dfn-session-page-load-timeout
1416
1417         * CommandResult.cpp:
1418         (WebDriver::CommandResult::CommandResult):
1419         (WebDriver::CommandResult::httpStatusCode):
1420         (WebDriver::CommandResult::errorString):
1421         * CommandResult.h:
1422         * Session.cpp:
1423         (WebDriver::Session::go):
1424         (WebDriver::Session::back):
1425         (WebDriver::Session::forward):
1426         (WebDriver::Session::refresh):
1427         (WebDriver::Session::waitForNavigationToComplete):
1428         * WebDriverService.cpp:
1429         (WebDriver::WebDriverService::setTimeouts):
1430
1431 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
1432
1433         WebDriver: wait until navigation is complete before running new commands and after a click
1434         https://bugs.webkit.org/show_bug.cgi?id=174670
1435
1436         Reviewed by Brian Burg.
1437
1438         We are already waiting for navigation to complete after navigation commands (go, back, forward, refresh), but
1439         the spec says we should always wait before executing a new command and also after a click. This is causing test
1440         testShouldBeAbleToNavigateBackInTheBrowserHistoryInPresenceOfIframes to sometimes fail, because it does .click()
1441         + .title and expects the title to tbe the one of the page loaded by the click. Since the load happens very fast,
1442         the test usually passes, but in a real case with a slower load, the title of the previous page will be returned
1443         most of the times.
1444
1445         6.3 Processing Model. Step 7. Wait for navigation to complete. If this returns an error return its value and
1446         jump to step 1 in this overall algorithm, otherwise continue.
1447         https://www.w3.org/TR/webdriver/#processing-model
1448
1449         14.1 Element Click. Step 10. If the click causes navigation: 1. Run the post-navigation checks and return its
1450         value if it is an error. 2. Try to wait for navigation to complete.
1451         https://www.w3.org/TR/webdriver/#element-click
1452
1453         * Session.cpp:
1454         (WebDriver::Session::waitForNavigationToComplete): Send waitForNavigationToComplete message to the browser to
1455         wait for any pending navigation of current browsing context to complete.
1456         (WebDriver::Session::elementClick): Call waitForNavigationToComplete() after the click.
1457         * Session.h:
1458         * WebDriverService.cpp:
1459         (WebDriver::WebDriverService::go): Wait for navigations to complete before running the command.
1460         (WebDriver::WebDriverService::getCurrentURL): Ditto.
1461         (WebDriver::WebDriverService::back): Ditto.
1462         (WebDriver::WebDriverService::forward): Ditto.
1463         (WebDriver::WebDriverService::refresh): Ditto.
1464         (WebDriver::WebDriverService::getTitle): Ditto.
1465         (WebDriver::WebDriverService::switchToFrame): Ditto.
1466         (WebDriver::WebDriverService::switchToParentFrame): Ditto.
1467         (WebDriver::WebDriverService::findElement): Ditto.
1468         (WebDriver::WebDriverService::findElements): Ditto.
1469         (WebDriver::WebDriverService::executeScript): Ditto.
1470         (WebDriver::WebDriverService::executeAsyncScript): Ditto.
1471
1472 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
1473
1474         WebDriver: correctly handle main frame handles
1475         https://bugs.webkit.org/show_bug.cgi?id=174668
1476
1477         Reviewed by Brian Burg.
1478
1479         When I switched to use std::optional instead of empty strings for the browsing contexts in WebDriver, I forgot
1480         that automation uses empty string for frames to refer to the main frame. We should handle that case, because we
1481         are currently considering empty strings as valid browsing context. It's not a big deal because Automation
1482         converts back the empty string received to the main frame, though. We should also ensure we close the current
1483         browsing context when switching to a new top level browsing context. This patch adds to helper private methods
1484         to switch browsing contexts that deal with the special cases.
1485
1486         * Session.cpp:
1487         (WebDriver::Session::close):
1488         (WebDriver::Session::switchToTopLevelBrowsingContext):
1489         (WebDriver::Session::switchToBrowsingContext):
1490         (WebDriver::Session::createTopLevelBrowsingContext):
1491         (WebDriver::Session::go):
1492         (WebDriver::Session::back):
1493         (WebDriver::Session::forward):
1494         (WebDriver::Session::refresh):
1495         (WebDriver::Session::switchToWindow):
1496         (WebDriver::Session::switchToFrame):
1497         (WebDriver::Session::switchToParentFrame):
1498         * Session.h:
1499
1500 2017-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>
1501
1502         WebDriver: handle invalid selector errors
1503         https://bugs.webkit.org/show_bug.cgi?id=174619
1504
1505         Reviewed by Brian Burg.
1506
1507         Add InvalidSelector error and handle it in case of protocol server error.
1508
1509         * CommandResult.cpp:
1510         (WebDriver::CommandResult::CommandResult):
1511         (WebDriver::CommandResult::httpStatusCode):
1512         (WebDriver::CommandResult::errorString):
1513         * CommandResult.h:
1514
1515 2017-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>
1516
1517         [GTK] Fix build with Clang after r219605.
1518         https://bugs.webkit.org/show_bug.cgi?id=166682
1519
1520         Unreviewed build fix.
1521
1522         Clang-3.8 complains with the following error:
1523         non-constant-expression cannot be narrowed from type 'gboolean' (aka 'int') to 'bool' in initializer list [-Wc++11-narrowing]
1524
1525         * glib/SessionHostGlib.cpp: insert an explicit cast to silence this issue.
1526
1527 2017-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
1528
1529         Add initial implementation of WebDriver process to run the HTTP server
1530         https://bugs.webkit.org/show_bug.cgi?id=166682
1531
1532         Reviewed by Brian Burg.
1533
1534         Add WebDriver process that runs the HTTP server and implements an initial set of commands. Most of the code is
1535         cross-platform, only the HTTP server implementation, the code to launch the browser and the communication with
1536         the remote inspector requires platform specific code. This patch includes the GTK port implementation, using
1537         libsoup for the HTTP server, and GLib for launching the browser and communicating with the remote
1538         inspector. This implementation follows the w3c spec (https://www.w3.org/TR/webdriver) as close as possible, but
1539         using the official selenium python tests as reference.
1540
1541         * CMakeLists.txt: Added.
1542         * Capabilities.h: Added.
1543         * CommandResult.cpp: Added.
1544         * CommandResult.h: Added.
1545         * HTTPServer.cpp: Added.
1546         * HTTPServer.h: Added.
1547         * PlatformGTK.cmake: Added.
1548         * Session.cpp: Added.
1549         * Session.h: Added.
1550         * SessionHost.cpp: Added.
1551         * SessionHost.h: Added.
1552         * WebDriverMain.cpp: Added.
1553         * WebDriverService.cpp: Added.
1554         * WebDriverService.h: Added.
1555         * config.h: Added.
1556         * glib/SessionHostGlib.cpp: Added.
1557         * gtk/WebDriverServiceGtk.cpp: Added.
1558         * soup/HTTPServerSoup.cpp: Added.