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