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