WebDriver: deserializeTimeouts should fail if the value is not integer
[WebKit-https.git] / Source / WebDriver / ChangeLog
1 2017-10-27  Carlos Garcia Campos  <cgarcia@igalia.com>
2
3         WebDriver: deserializeTimeouts should fail if the value is not integer
4         https://bugs.webkit.org/show_bug.cgi?id=178866
5
6         Reviewed by Brian Burg.
7
8         If value is not an integer, or it is less than 0 or greater than 2^64 – 1, return error with error code invalid
9         argument.
10         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-deserialize-as-a-timeout
11
12         Fixes: imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_values[timeouts-value59-body0]
13                imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py::test_invalid_values[timeouts-value59-body1]
14
15         * WebDriverService.cpp:
16         (WebDriver::deserializeTimeouts):
17
18 2017-10-27  Carlos Garcia Campos  <cgarcia@igalia.com>
19
20         WebDriver: failing to process capabilities should produce InvalidArgument error not SessionNotCreated
21         https://bugs.webkit.org/show_bug.cgi?id=178864
22
23         Reviewed by Brian Burg.
24
25         Fixes most of the tests in imported/w3c/webdriver/tests/sessions/new_session/invalid_capabilities.py.
26
27         7.2 Processing Capabilities
28         https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities
29
30         * WebDriverService.cpp:
31         (WebDriver::WebDriverService::processCapabilities const):
32
33 2017-10-10  Sam Weinig  <sam@webkit.org>
34
35         Replace copyKeysToVector/copyValuesToVector with copyToVector(map.keys())/copyToVector(map.values())
36         https://bugs.webkit.org/show_bug.cgi?id=178102
37
38         Reviewed by Tim Horton.
39
40         * SessionHost.cpp:
41         (WebDriver::SessionHost::inspectorDisconnected):
42
43 2017-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>
44
45         WebDriver: HTTP status code is not correct for some of the errors
46         https://bugs.webkit.org/show_bug.cgi?id=177354
47
48         Reviewed by Brian Burg.
49
50         I think this changed in the spec at some point. The thing is that no such alert, frame and window and stale
51         element reference errors should return 404 instead of 400.
52
53         https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors
54
55         * CommandResult.cpp:
56         (WebDriver::CommandResult::httpStatusCode const):
57
58 2017-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>
59
60         WebDriver: Implement commands to get and set the window rect
61         https://bugs.webkit.org/show_bug.cgi?id=177134
62
63         Reviewed by Brian Burg.
64
65         We are currently implementing the selenium legacy ones, we should implement the w3c ones instead.
66
67         https://w3c.github.io/webdriver/webdriver-spec.html#resizing-and-positioning-windows
68
69         * Session.cpp:
70         (WebDriver::Session::getToplevelBrowsingContextRect): Helper to get the window rect. This is used by both get
71         and set window rect commands.
72         (WebDriver::Session::moveToplevelBrowsingContextwindow): Helper to ask automation to move the window.
73         (WebDriver::Session::resizeToplevelBrowsingContextwindow): Helper to ask automation to resize the window.
74         (WebDriver::Session::getWindowRect): Handle prompts and then call getToplevelBrowsingContextRect().
75         (WebDriver::Session::setWindowRect): Handle prompts and then move and resize the window according to the given
76         parameters and finish the operation calling getToplevelBrowsingContextRect().
77         * Session.h:
78         * WebDriverService.cpp:
79         (WebDriver::WebDriverService::getWindowRect): Ask the session to get the window rect.
80         (WebDriver::valueAsNumberInRange): Helper to check a value is a valid number in the given range.
81         (WebDriver::WebDriverService::setWindowRect): Get and check size and position from parameters and then ask the
82         session to set the window rect.
83         * WebDriverService.h:
84
85 2017-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>
86
87         WebDriver: wrong response in case of errors
88         https://bugs.webkit.org/show_bug.cgi?id=177127
89
90         Reviewed by Brian Burg.
91
92         I misunderstood the spec when I implemented this, so we either return a "value" key with the result in case of
93         success or the error object as the body in case of error. We should always add a "value" key to the body and set
94         it with either the result or the error object.
95
96         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-send-an-error
97
98         * WebDriverService.cpp:
99         (WebDriver::WebDriverService::sendResponse const):
100
101 2017-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>
102
103         WebDriver: wrong key name for capabilities in new session response
104         https://bugs.webkit.org/show_bug.cgi?id=177074
105
106         Reviewed by Brian Burg.
107
108         We are using "value", it should be "capabilities".
109         https://w3c.github.io/webdriver/webdriver-spec.html#new-session
110
111         * WebDriverService.cpp:
112         (WebDriver::WebDriverService::newSession):
113
114 2017-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>
115
116         WebDriver: HTTP responses should include Cache-Control header with no-cache value
117         https://bugs.webkit.org/show_bug.cgi?id=177073
118
119         Reviewed by Sergio Villar Senin.
120
121         6.3 Processing Model.
122         Set the response’s header with name and value with the following values:
123
124         Content-Type "application/json; charset=utf-8"
125         Cache-Control "no-cache"
126
127         https://w3c.github.io/webdriver/webdriver-spec.html#dfn-send-a-response
128
129         We were setting the Content-Type, but not the Cache-Control. This is checked by all WPT WebDriver tests.
130
131         * soup/HTTPServerSoup.cpp:
132         (WebDriver::HTTPServer::listen): Add Cache-Control header.
133
134 2017-09-18  Michael Catanzaro  <mcatanzaro@igalia.com>
135
136         [CMake] Rename WebKit target to WebKitLegacy and rename WebKit2 target to WebKit
137         https://bugs.webkit.org/show_bug.cgi?id=174558
138
139         Reviewed by Alex Christensen.
140
141         * CMakeLists.txt:
142
143 2017-09-15  JF Bastien  <jfbastien@apple.com>
144
145         WTF: use Forward.h when appropriate instead of Vector.h
146         https://bugs.webkit.org/show_bug.cgi?id=176984
147
148         Reviewed by Saam Barati.
149
150         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.
151
152         * Session.h:
153
154 2017-09-09  Carlos Garcia Campos  <cgarcia@igalia.com>
155
156         WebDriver: ensure we close all windows handles when closing the session
157         https://bugs.webkit.org/show_bug.cgi?id=176508
158
159         Reviewed by Brian Burg.
160
161         The spec says that when closing the session all top level browsing contexts should be closed. We are currently
162         checking if we have an active top level browsing context and then we try to close it before trying with the
163         rest. It can happen that we are in an inconsistent state, for example if the current top level browsing context
164         has been closed by JavaScript or another action and the user didn't switch to another one before closing the
165         session. In such case, closing the session will fail with NoSuchwindow and any other window open will not be
166         closed. It's safer to always ask for all window handles and close them, which is what the spec says too.
167
168         * Session.cpp:
169         (WebDriver::firstWindowHandleInResult): Helper class to get the first window handle in the result array.
170         (WebDriver::Session::closeAllToplevelBrowsingContexts): Use firstWindowHandleInResult().
171         (WebDriver::Session::close): Close the current top level browsing context and get all window handles to close
172         them all if needed.
173
174 2017-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>
175
176         WebDriver: implement screen capture commands
177         https://bugs.webkit.org/show_bug.cgi?id=174615
178
179         Reviewed by Brian Burg.
180
181         Implement takeScreenshot and takeElementScreenshot commands.
182
183         19. Screen Capture.
184         https://w3c.github.io/webdriver/webdriver-spec.html#screen-capture
185
186         * CommandResult.cpp:
187         (WebDriver::CommandResult::CommandResult): Handle ScreenshotError protocol error.
188         (WebDriver::CommandResult::httpStatusCode const): Add UnableToCaptureScreen.
189         (WebDriver::CommandResult::errorString const): Ditto.
190         * CommandResult.h:
191         * Session.cpp:
192         (WebDriver::Session::takeScreenshot):
193         * Session.h:
194         * WebDriverService.cpp:
195         (WebDriver::WebDriverService::takeScreenshot):
196         (WebDriver::WebDriverService::takeElementScreenshot):
197         * WebDriverService.h:
198
199 2017-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>
200
201         WebDriver: implement cookies commands
202         https://bugs.webkit.org/show_bug.cgi?id=174613
203
204         Reviewed by Brian Burg.
205
206         Add cookies commands.
207
208         16. Cookies.
209         https://w3c.github.io/webdriver/webdriver-spec.html#cookies
210
211         * CommandResult.cpp:
212         (WebDriver::CommandResult::httpStatusCode const): Add NoSuchCookie error.
213         (WebDriver::CommandResult::errorString const): Ditto.
214         * CommandResult.h:
215         * Session.cpp:
216         (WebDriver::parseAutomationCookie): Parse JSON cookie object returned by automation and convert it to a Cookie struct.
217         (WebDriver::builtAutomationCookie): Build a JSON cookie object as expected by automation from a Cookie struct.
218         (WebDriver::serializeCookie): Serialize a Cookie struct into a JSON cookie object according to the WebDriver spec.
219         (WebDriver::Session::getAllCookies):
220         (WebDriver::Session::getNamedCookie):
221         (WebDriver::Session::addCookie):
222         (WebDriver::Session::deleteCookie):
223         (WebDriver::Session::deleteAllCookies):
224         * Session.h:
225         * WebDriverService.cpp:
226         (WebDriver::WebDriverService::getAllCookies):
227         (WebDriver::WebDriverService::getNamedCookie):
228         (WebDriver::deserializeCookie):
229         (WebDriver::WebDriverService::addCookie):
230         (WebDriver::WebDriverService::deleteCookie):
231         (WebDriver::WebDriverService::deleteAllCookies):
232         * WebDriverService.h:
233
234 2017-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>
235
236         WebDriver: fix return value of close window command
237         https://bugs.webkit.org/show_bug.cgi?id=174861
238
239         Reviewed by Brian Burg.
240
241         We are currently returning null, but we should return the list of window handles, and try to close the session
242         if there aren't more window handles.
243
244         10.2 Close Window
245         https://w3c.github.io/webdriver/webdriver-spec.html#close-window
246
247         3. If there are no more open top-level browsing contexts, then try to close the session.
248         4. Return the result of running the remote end steps for the Get Window Handles command.
249
250         * Session.cpp:
251         (WebDriver::Session::closeAllToplevelBrowsingContexts): Helper function to close the given toplevel browsing
252         context and the next one if there are more.
253         (WebDriver::Session::close): Call closeAllToplevelBrowsingContexts() to delete all toplevel browsing contexts of
254         the session.
255         (WebDriver::Session::closeTopLevelBrowsingContext): Close the given toplevel browsing context and call
256         getWindowHandles() when done.
257         (WebDriver::Session::closeWindow): Call closeTopLevelBrowsingContext() passing the current toplevel browsing context.
258         (WebDriver::Session::getWindowHandles): Remove the early return, this command doesn't depend on a current
259         toplevel browsing context.
260         * Session.h:
261         * SessionHost.h:
262         * WebDriverService.cpp:
263         (WebDriver::WebDriverService::run): Disconnect the server when main loop quits.
264         (WebDriver::WebDriverService::deleteSession): Do not fail if the given session is not active.
265         (WebDriver::WebDriverService::closeWindow): Remove the session if the closed window was the last one.
266         * WebDriverService.h: Remove unused quit() method.
267         * glib/SessionHostGlib.cpp:
268         (WebDriver::SessionHost::isConnected): Return whether host is connected to a browser instance.
269         (WebDriver::SessionHost::dbusConnectionClosedCallback): Delete m_browser.
270
271 2017-08-14  Carlos Garcia Campos  <cgarcia@igalia.com>
272
273         WebDriver: handle click events on option elements
274         https://bugs.webkit.org/show_bug.cgi?id=174710
275         <rdar://problem/33459305>
276
277         Reviewed by Brian Burg.
278
279         Option elements are considered as a special case by the specification. When clicking an option element, we
280         should get its container and use it when scrolling into view and calculating in-view center point instead of the
281         option element itself. Then, we should not emulate a click, but change the selected status of the option element
282         like if it were done by a user action, firing the corresponding events. Now we check whether the element is an
283         option to call selectOptionElement() or performMouseInteraction().
284
285         This fixes more than 20 selenium tests.
286
287         * CommandResult.cpp:
288         (WebDriver::CommandResult::CommandResult): Handle ElementNotSelectable protocol error.
289         (WebDriver::CommandResult::httpStatusCode const): Add ElementNotSelectable.
290         (WebDriver::CommandResult::errorString const): Ditto.
291         * CommandResult.h:
292         * Session.cpp:
293         (WebDriver::Session::selectOptionElement): Ask automation to select the given option element.
294         (WebDriver::Session::elementClick): Call selectOptionElement() or performMouseInteraction() depending on whether
295         the element is an option or not.
296         * Session.h:
297
298 2017-08-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>
299
300         Fix build warning in WebDriverService.h
301         https://bugs.webkit.org/show_bug.cgi?id=166682
302
303         Unreviewed build fix.
304
305         * WebDriverService.h: Fixes the warning: class 'Capabilities' was previously declared as a struct [-Wmismatched-tags]
306
307 2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>
308
309         Unreviewed, fix Ubuntu LTS build
310         https://bugs.webkit.org/show_bug.cgi?id=174490
311
312         * glib/SessionHostGlib.cpp:
313
314 2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>
315
316         [CMake] Properly test if compiler supports compiler flags
317         https://bugs.webkit.org/show_bug.cgi?id=174490
318
319         Reviewed by Konstantin Tokarev.
320
321         * WebDriverService.cpp:
322         (WebDriver::WebDriverService::run):
323         * glib/SessionHostGlib.cpp:
324
325 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
326
327         Web Automation: setUserInputForCurrentJavaScriptPrompt should fail if current dialog is not a prompt
328         https://bugs.webkit.org/show_bug.cgi?id=175261
329
330         Reviewed by Brian Burg.
331
332         * CommandResult.cpp:
333         (WebDriver::CommandResult::CommandResult): Handle ElementNotInteractable protocol error.
334
335 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
336
337         WebDriver: implement unhandled prompt behavior
338         https://bugs.webkit.org/show_bug.cgi?id=175184
339
340         Reviewed by Brian Burg.
341
342         Handle user prompts before running some of the commands according to the specification.
343
344         * Capabilities.h: Add UnhandledPromptBehavior capability.
345         * CommandResult.cpp:
346         (WebDriver::CommandResult::httpStatusCode const): Add UnexpectedAlertOpen error.
347         (WebDriver::CommandResult::errorString const): Ditto.
348         * CommandResult.h:
349         (WebDriver::CommandResult::setAdditonalErrorData): New method to set an additional data object that will be sent
350         as part of the result error message.
351         (WebDriver::CommandResult::additionalErrorData const): Return the additional data object.
352         * Session.cpp:
353         (WebDriver::Session::handleUserPrompts): Check if there's an active JavaScript dialog and deal with it depeding
354         on the unhandled prompt behavior.
355         (WebDriver::Session::reportUnexpectedAlertOpen): Generate an error message with UnexpectedAlertOpen error and
356         including the alert text as additional error data.
357         (WebDriver::Session::go): Handle user prompts before running the command.
358         (WebDriver::Session::getCurrentURL): Ditto.
359         (WebDriver::Session::back): Ditto.
360         (WebDriver::Session::forward): Ditto.
361         (WebDriver::Session::refresh): Ditto.
362         (WebDriver::Session::getTitle): Ditto.
363         (WebDriver::Session::closeWindow): Ditto.
364         (WebDriver::Session::switchToFrame): Ditto.
365         (WebDriver::Session::switchToParentFrame): Ditto.
366         (WebDriver::Session::isElementSelected): Ditto.
367         (WebDriver::Session::getElementText): Ditto.
368         (WebDriver::Session::getElementTagName): Ditto.
369         (WebDriver::Session::getElementRect): Ditto.
370         (WebDriver::Session::isElementEnabled): Ditto.
371         (WebDriver::Session::isElementDisplayed): Ditto.
372         (WebDriver::Session::getElementAttribute): Ditto.
373         (WebDriver::Session::elementSendKeys): Ditto.
374         (WebDriver::Session::elementSubmit): Ditto.
375         (WebDriver::Session::executeScript): Ditto.
376         * Session.h:
377         * WebDriverService.cpp:
378         (WebDriver::WebDriverService::sendResponse const): Send data object as part of the result error message if present.
379         (WebDriver::deserializeUnhandledPromptBehavior):
380         (WebDriver::WebDriverService::parseCapabilities const):
381         (WebDriver::WebDriverService::validatedCapabilities const):
382         (WebDriver::WebDriverService::newSession):
383
384 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
385
386         WebDriver: implement user prompt commands
387         https://bugs.webkit.org/show_bug.cgi?id=174614
388
389         Reviewed by Brian Burg.
390
391         * CommandResult.cpp:
392         (WebDriver::CommandResult::CommandResult): Handle NoJavaScriptDialog protocol error.
393         (WebDriver::CommandResult::httpStatusCode const): Add NoSuchAlert.
394         (WebDriver::CommandResult::errorString const): Ditto.
395         * CommandResult.h:
396         * Session.cpp:
397         (WebDriver::Session::dismissAlert):
398         (WebDriver::Session::acceptAlert):
399         (WebDriver::Session::getAlertText):
400         (WebDriver::Session::sendAlertText):
401         * Session.h:
402         * WebDriverService.cpp:
403         (WebDriver::WebDriverService::dismissAlert):
404         (WebDriver::WebDriverService::acceptAlert):
405         (WebDriver::WebDriverService::getAlertText):
406         (WebDriver::WebDriverService::sendAlertText):
407         * WebDriverService.h:
408
409 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
410
411         [GTK][WPE] Add API to provide browser information required by automation
412         https://bugs.webkit.org/show_bug.cgi?id=175130
413
414         Reviewed by Brian Burg.
415
416         * Session.cpp:
417         (WebDriver::Session::createTopLevelBrowsingContext): Check if startAutomationSession and complete the command
418         with error in that case.
419         * SessionHost.h:
420         * glib/SessionHostGlib.cpp:
421         (WebDriver::SessionHost::matchCapabilities): Match the capabilities that are known only after the browser has
422         been launched.
423         (WebDriver::SessionHost::startAutomationSession): Handle the StartAutomationSession response, extracting the
424         capabilities and calling matchCapabilities() to match them.
425         (WebDriver::SessionHost::setTargetList): Return early if the session was rejected before due to invalid
426         capabilities.
427
428 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
429
430         WebDriver: Implement page load strategy
431         https://bugs.webkit.org/show_bug.cgi?id=175183
432
433         Reviewed by Brian Burg.
434
435         Validate and parse page load strategy when processing capabilities.
436
437         * Capabilities.h:
438         * Session.cpp:
439         (WebDriver::Session::pageLoadStrategyString const): Helper to get the page load strategy as a String to be
440         passed to Automation.
441         (WebDriver::Session::go): Pass page load strategy if present.
442         (WebDriver::Session::back): Ditto.
443         (WebDriver::Session::forward): Ditto.
444         (WebDriver::Session::refresh): Ditto.
445         (WebDriver::Session::waitForNavigationToComplete): Ditto.
446         * Session.h:
447         * WebDriverService.cpp:
448         (WebDriver::deserializePageLoadStrategy):
449         (WebDriver::WebDriverService::parseCapabilities const):
450         (WebDriver::WebDriverService::validatedCapabilities const):
451         (WebDriver::WebDriverService::newSession):
452
453 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
454
455         Unreviewed. Try to fix build with clang after r220315.
456
457         * WebDriverService.cpp:
458         (WebDriver::WebDriverService::validatedCapabilities const):
459         (WebDriver::WebDriverService::mergeCapabilities const):
460
461 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
462
463         WebDriver: properly handle capabilities and process firstMatch too
464         https://bugs.webkit.org/show_bug.cgi?id=174618
465
466         Reviewed by Brian Burg.
467
468         Implement processing of capabilities following the spec. This patch adds validation, merging and matching of
469         capabilities.
470
471         7.2 Processing Capabilities.
472         https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities
473
474         * Capabilities.h: Make all capabilities optional and move Timeouts struct here.
475         * Session.h:
476         * WebDriverService.cpp:
477         (WebDriver::deserializeTimeouts): Helper to extract timeouts from JSON object.
478         (WebDriver::WebDriverService::parseCapabilities const): At this point capabilities have already been validated,
479         so we just need to get them without checking the value type.
480         (WebDriver::WebDriverService::validatedCapabilities const): Validate the given capabilities, ensuring types of
481         values are the expected one.
482         (WebDriver::WebDriverService::mergeCapabilities const): Merge the alwaysMatch and firstMatch capabilities into a
483         single object ensuring that the same capability is not in both.
484         (WebDriver::WebDriverService::matchCapabilities const): Try to match the merged capabilities againt the platform
485         expected capabilities.
486         (WebDriver::WebDriverService::processCapabilities const): Validate, merge and match the capabilities.
487         (WebDriver::WebDriverService::newSession): Use processCapabilities(). Also initialize the timeouts from
488         capabilities and add all capabilities to the command result.
489         (WebDriver::WebDriverService::setTimeouts): Use deserializeTimeouts().
490         * WebDriverService.h:
491         * glib/SessionHostGlib.cpp:
492         (WebDriver::SessionHost::launchBrowser): Updated to properly access the capabilities that are now optional.
493         (WebDriver::SessionHost::startAutomationSession): Add FIXME.
494         * gtk/WebDriverServiceGtk.cpp:
495         (WebDriver::WebDriverService::platformCapabilities): Return the Capabilities with the known required ones filled.
496         (WebDriver::WebDriverService::platformValidateCapability const): Validate webkitgtk:browserOptions.
497         (WebDriver::WebDriverService::platformMatchCapability const): This does nothing for now.
498         (WebDriver::WebDriverService::platformCompareBrowserVersions): Compare the given browser versions.
499         (WebDriver::WebDriverService::platformParseCapabilities const): Updated now that capabilites have already been
500         validated before.
501
502 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
503
504         WebDriver: use in-view center point for clicks instead of bounding box center point
505         https://bugs.webkit.org/show_bug.cgi?id=174863
506
507         Reviewed by Simon Fraser.
508
509         The center of the element bounding box is not always part of the element, like in multiline links, for example.
510
511         11.1 Element Interactability.
512         https://www.w3.org/TR/webdriver/#dfn-in-view-center-point
513
514         * CommandResult.cpp:
515         (WebDriver::CommandResult::httpStatusCode): Add ElementClickIntercepted and ElementNotInteractable errors.
516         (WebDriver::CommandResult::errorString): Ditto.
517         * CommandResult.h: Ditto.
518         * Session.cpp:
519         (WebDriver::Session::computeElementLayout): Get the in-view center point and isObscured from the result too.
520         (WebDriver::Session::getElementRect): Ignore in-view center point and isObscured.
521         (WebDriver::Session::elementClick): Fail in case the element is not interactable or is obscured.
522         * Session.h:
523
524 2017-08-01  Michael Catanzaro  <mcatanzaro@igalia.com>
525
526         [CMake] WebKitFS.cmake depends on options set in Option cmake files that are included later
527         https://bugs.webkit.org/show_bug.cgi?id=174855
528
529         Reviewed by Carlos Garcia Campos.
530
531         Don't create derived sources directory here anymore.
532
533         * PlatformGTK.cmake:
534
535 2017-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>
536
537         Unreviewed. Fix GTK distcheck.
538
539         Ensure WebDriver derived sources directory is created, WebKitFS.cmake is useless for this.
540
541         * PlatformGTK.cmake:
542
543 2017-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>
544
545         WebDriver: rename m_browsingContext as m_currentBrowsingContext in Session
546         https://bugs.webkit.org/show_bug.cgi?id=174783
547
548         Reviewed by Brian Burg.
549
550         We have m_toplevelBrowsingContext and m_browsingContext, which is confusing. m_browsingContext is actually the
551         current browsing context, and the spec also refers to it as the current browsing context, so better use
552         m_currentBrowsingContext.
553
554         * Session.cpp:
555         (WebDriver::Session::switchToTopLevelBrowsingContext):
556         (WebDriver::Session::switchToBrowsingContext):
557         (WebDriver::Session::switchToFrame):
558         (WebDriver::Session::switchToParentFrame):
559         (WebDriver::Session::computeElementLayout):
560         (WebDriver::Session::findElements):
561         (WebDriver::Session::isElementSelected):
562         (WebDriver::Session::getElementText):
563         (WebDriver::Session::getElementTagName):
564         (WebDriver::Session::isElementEnabled):
565         (WebDriver::Session::isElementDisplayed):
566         (WebDriver::Session::getElementAttribute):
567         (WebDriver::Session::waitForNavigationToComplete):
568         (WebDriver::Session::elementClear):
569         (WebDriver::Session::elementSendKeys):
570         (WebDriver::Session::elementSubmit):
571         (WebDriver::Session::executeScript):
572         * Session.h:
573
574 2017-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>
575
576         WebDriver: implement page load timeout
577         https://bugs.webkit.org/show_bug.cgi?id=174672
578
579         Reviewed by Brian Burg.
580
581         Handle timeout errors and pass the page load timeout to waitForNavigationToComplete and all other navigation
582         commands. Also fix the setTimeouts command that was still using the legacy name of the page load timeout,
583         instead of the one in the spec.
584
585         8. Sessions
586         https://www.w3.org/TR/webdriver/#dfn-session-page-load-timeout
587
588         * CommandResult.cpp:
589         (WebDriver::CommandResult::CommandResult):
590         (WebDriver::CommandResult::httpStatusCode):
591         (WebDriver::CommandResult::errorString):
592         * CommandResult.h:
593         * Session.cpp:
594         (WebDriver::Session::go):
595         (WebDriver::Session::back):
596         (WebDriver::Session::forward):
597         (WebDriver::Session::refresh):
598         (WebDriver::Session::waitForNavigationToComplete):
599         * WebDriverService.cpp:
600         (WebDriver::WebDriverService::setTimeouts):
601
602 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
603
604         WebDriver: wait until navigation is complete before running new commands and after a click
605         https://bugs.webkit.org/show_bug.cgi?id=174670
606
607         Reviewed by Brian Burg.
608
609         We are already waiting for navigation to complete after navigation commands (go, back, forward, refresh), but
610         the spec says we should always wait before executing a new command and also after a click. This is causing test
611         testShouldBeAbleToNavigateBackInTheBrowserHistoryInPresenceOfIframes to sometimes fail, because it does .click()
612         + .title and expects the title to tbe the one of the page loaded by the click. Since the load happens very fast,
613         the test usually passes, but in a real case with a slower load, the title of the previous page will be returned
614         most of the times.
615
616         6.3 Processing Model. Step 7. Wait for navigation to complete. If this returns an error return its value and
617         jump to step 1 in this overall algorithm, otherwise continue.
618         https://www.w3.org/TR/webdriver/#processing-model
619
620         14.1 Element Click. Step 10. If the click causes navigation: 1. Run the post-navigation checks and return its
621         value if it is an error. 2. Try to wait for navigation to complete.
622         https://www.w3.org/TR/webdriver/#element-click
623
624         * Session.cpp:
625         (WebDriver::Session::waitForNavigationToComplete): Send waitForNavigationToComplete message to the browser to
626         wait for any pending navigation of current browsing context to complete.
627         (WebDriver::Session::elementClick): Call waitForNavigationToComplete() after the click.
628         * Session.h:
629         * WebDriverService.cpp:
630         (WebDriver::WebDriverService::go): Wait for navigations to complete before running the command.
631         (WebDriver::WebDriverService::getCurrentURL): Ditto.
632         (WebDriver::WebDriverService::back): Ditto.
633         (WebDriver::WebDriverService::forward): Ditto.
634         (WebDriver::WebDriverService::refresh): Ditto.
635         (WebDriver::WebDriverService::getTitle): Ditto.
636         (WebDriver::WebDriverService::switchToFrame): Ditto.
637         (WebDriver::WebDriverService::switchToParentFrame): Ditto.
638         (WebDriver::WebDriverService::findElement): Ditto.
639         (WebDriver::WebDriverService::findElements): Ditto.
640         (WebDriver::WebDriverService::executeScript): Ditto.
641         (WebDriver::WebDriverService::executeAsyncScript): Ditto.
642
643 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
644
645         WebDriver: correctly handle main frame handles
646         https://bugs.webkit.org/show_bug.cgi?id=174668
647
648         Reviewed by Brian Burg.
649
650         When I switched to use std::optional instead of empty strings for the browsing contexts in WebDriver, I forgot
651         that automation uses empty string for frames to refer to the main frame. We should handle that case, because we
652         are currently considering empty strings as valid browsing context. It's not a big deal because Automation
653         converts back the empty string received to the main frame, though. We should also ensure we close the current
654         browsing context when switching to a new top level browsing context. This patch adds to helper private methods
655         to switch browsing contexts that deal with the special cases.
656
657         * Session.cpp:
658         (WebDriver::Session::close):
659         (WebDriver::Session::switchToTopLevelBrowsingContext):
660         (WebDriver::Session::switchToBrowsingContext):
661         (WebDriver::Session::createTopLevelBrowsingContext):
662         (WebDriver::Session::go):
663         (WebDriver::Session::back):
664         (WebDriver::Session::forward):
665         (WebDriver::Session::refresh):
666         (WebDriver::Session::switchToWindow):
667         (WebDriver::Session::switchToFrame):
668         (WebDriver::Session::switchToParentFrame):
669         * Session.h:
670
671 2017-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>
672
673         WebDriver: handle invalid selector errors
674         https://bugs.webkit.org/show_bug.cgi?id=174619
675
676         Reviewed by Brian Burg.
677
678         Add InvalidSelector error and handle it in case of protocol server error.
679
680         * CommandResult.cpp:
681         (WebDriver::CommandResult::CommandResult):
682         (WebDriver::CommandResult::httpStatusCode):
683         (WebDriver::CommandResult::errorString):
684         * CommandResult.h:
685
686 2017-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>
687
688         [GTK] Fix build with Clang after r219605.
689         https://bugs.webkit.org/show_bug.cgi?id=166682
690
691         Unreviewed build fix.
692
693         Clang-3.8 complains with the following error:
694         non-constant-expression cannot be narrowed from type 'gboolean' (aka 'int') to 'bool' in initializer list [-Wc++11-narrowing]
695
696         * glib/SessionHostGlib.cpp: insert an explicit cast to silence this issue.
697
698 2017-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
699
700         Add initial implementation of WebDriver process to run the HTTP server
701         https://bugs.webkit.org/show_bug.cgi?id=166682
702
703         Reviewed by Brian Burg.
704
705         Add WebDriver process that runs the HTTP server and implements an initial set of commands. Most of the code is
706         cross-platform, only the HTTP server implementation, the code to launch the browser and the communication with
707         the remote inspector requires platform specific code. This patch includes the GTK port implementation, using
708         libsoup for the HTTP server, and GLib for launching the browser and communicating with the remote
709         inspector. This implementation follows the w3c spec (https://www.w3.org/TR/webdriver) as close as possible, but
710         using the official selenium python tests as reference.
711
712         * CMakeLists.txt: Added.
713         * Capabilities.h: Added.
714         * CommandResult.cpp: Added.
715         * CommandResult.h: Added.
716         * HTTPServer.cpp: Added.
717         * HTTPServer.h: Added.
718         * PlatformGTK.cmake: Added.
719         * Session.cpp: Added.
720         * Session.h: Added.
721         * SessionHost.cpp: Added.
722         * SessionHost.h: Added.
723         * WebDriverMain.cpp: Added.
724         * WebDriverService.cpp: Added.
725         * WebDriverService.h: Added.
726         * config.h: Added.
727         * glib/SessionHostGlib.cpp: Added.
728         * gtk/WebDriverServiceGtk.cpp: Added.
729         * soup/HTTPServerSoup.cpp: Added.