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