Unreviewed. Try to fix build with clang after r220315.
[WebKit-https.git] / Source / WebDriver / ChangeLog
1 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
2
3         Unreviewed. Try to fix build with clang after r220315.
4
5         * WebDriverService.cpp:
6         (WebDriver::WebDriverService::validatedCapabilities const):
7         (WebDriver::WebDriverService::mergeCapabilities const):
8
9 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
10
11         WebDriver: properly handle capabilities and process firstMatch too
12         https://bugs.webkit.org/show_bug.cgi?id=174618
13
14         Reviewed by Brian Burg.
15
16         Implement processing of capabilities following the spec. This patch adds validation, merging and matching of
17         capabilities.
18
19         7.2 Processing Capabilities.
20         https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities
21
22         * Capabilities.h: Make all capabilities optional and move Timeouts struct here.
23         * Session.h:
24         * WebDriverService.cpp:
25         (WebDriver::deserializeTimeouts): Helper to extract timeouts from JSON object.
26         (WebDriver::WebDriverService::parseCapabilities const): At this point capabilities have already been validated,
27         so we just need to get them without checking the value type.
28         (WebDriver::WebDriverService::validatedCapabilities const): Validate the given capabilities, ensuring types of
29         values are the expected one.
30         (WebDriver::WebDriverService::mergeCapabilities const): Merge the alwaysMatch and firstMatch capabilities into a
31         single object ensuring that the same capability is not in both.
32         (WebDriver::WebDriverService::matchCapabilities const): Try to match the merged capabilities againt the platform
33         expected capabilities.
34         (WebDriver::WebDriverService::processCapabilities const): Validate, merge and match the capabilities.
35         (WebDriver::WebDriverService::newSession): Use processCapabilities(). Also initialize the timeouts from
36         capabilities and add all capabilities to the command result.
37         (WebDriver::WebDriverService::setTimeouts): Use deserializeTimeouts().
38         * WebDriverService.h:
39         * glib/SessionHostGlib.cpp:
40         (WebDriver::SessionHost::launchBrowser): Updated to properly access the capabilities that are now optional.
41         (WebDriver::SessionHost::startAutomationSession): Add FIXME.
42         * gtk/WebDriverServiceGtk.cpp:
43         (WebDriver::WebDriverService::platformCapabilities): Return the Capabilities with the known required ones filled.
44         (WebDriver::WebDriverService::platformValidateCapability const): Validate webkitgtk:browserOptions.
45         (WebDriver::WebDriverService::platformMatchCapability const): This does nothing for now.
46         (WebDriver::WebDriverService::platformCompareBrowserVersions): Compare the given browser versions.
47         (WebDriver::WebDriverService::platformParseCapabilities const): Updated now that capabilites have already been
48         validated before.
49
50 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
51
52         WebDriver: use in-view center point for clicks instead of bounding box center point
53         https://bugs.webkit.org/show_bug.cgi?id=174863
54
55         Reviewed by Simon Fraser.
56
57         The center of the element bounding box is not always part of the element, like in multiline links, for example.
58
59         11.1 Element Interactability.
60         https://www.w3.org/TR/webdriver/#dfn-in-view-center-point
61
62         * CommandResult.cpp:
63         (WebDriver::CommandResult::httpStatusCode): Add ElementClickIntercepted and ElementNotInteractable errors.
64         (WebDriver::CommandResult::errorString): Ditto.
65         * CommandResult.h: Ditto.
66         * Session.cpp:
67         (WebDriver::Session::computeElementLayout): Get the in-view center point and isObscured from the result too.
68         (WebDriver::Session::getElementRect): Ignore in-view center point and isObscured.
69         (WebDriver::Session::elementClick): Fail in case the element is not interactable or is obscured.
70         * Session.h:
71
72 2017-08-01  Michael Catanzaro  <mcatanzaro@igalia.com>
73
74         [CMake] WebKitFS.cmake depends on options set in Option cmake files that are included later
75         https://bugs.webkit.org/show_bug.cgi?id=174855
76
77         Reviewed by Carlos Garcia Campos.
78
79         Don't create derived sources directory here anymore.
80
81         * PlatformGTK.cmake:
82
83 2017-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>
84
85         Unreviewed. Fix GTK distcheck.
86
87         Ensure WebDriver derived sources directory is created, WebKitFS.cmake is useless for this.
88
89         * PlatformGTK.cmake:
90
91 2017-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>
92
93         WebDriver: rename m_browsingContext as m_currentBrowsingContext in Session
94         https://bugs.webkit.org/show_bug.cgi?id=174783
95
96         Reviewed by Brian Burg.
97
98         We have m_toplevelBrowsingContext and m_browsingContext, which is confusing. m_browsingContext is actually the
99         current browsing context, and the spec also refers to it as the current browsing context, so better use
100         m_currentBrowsingContext.
101
102         * Session.cpp:
103         (WebDriver::Session::switchToTopLevelBrowsingContext):
104         (WebDriver::Session::switchToBrowsingContext):
105         (WebDriver::Session::switchToFrame):
106         (WebDriver::Session::switchToParentFrame):
107         (WebDriver::Session::computeElementLayout):
108         (WebDriver::Session::findElements):
109         (WebDriver::Session::isElementSelected):
110         (WebDriver::Session::getElementText):
111         (WebDriver::Session::getElementTagName):
112         (WebDriver::Session::isElementEnabled):
113         (WebDriver::Session::isElementDisplayed):
114         (WebDriver::Session::getElementAttribute):
115         (WebDriver::Session::waitForNavigationToComplete):
116         (WebDriver::Session::elementClear):
117         (WebDriver::Session::elementSendKeys):
118         (WebDriver::Session::elementSubmit):
119         (WebDriver::Session::executeScript):
120         * Session.h:
121
122 2017-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>
123
124         WebDriver: implement page load timeout
125         https://bugs.webkit.org/show_bug.cgi?id=174672
126
127         Reviewed by Brian Burg.
128
129         Handle timeout errors and pass the page load timeout to waitForNavigationToComplete and all other navigation
130         commands. Also fix the setTimeouts command that was still using the legacy name of the page load timeout,
131         instead of the one in the spec.
132
133         8. Sessions
134         https://www.w3.org/TR/webdriver/#dfn-session-page-load-timeout
135
136         * CommandResult.cpp:
137         (WebDriver::CommandResult::CommandResult):
138         (WebDriver::CommandResult::httpStatusCode):
139         (WebDriver::CommandResult::errorString):
140         * CommandResult.h:
141         * Session.cpp:
142         (WebDriver::Session::go):
143         (WebDriver::Session::back):
144         (WebDriver::Session::forward):
145         (WebDriver::Session::refresh):
146         (WebDriver::Session::waitForNavigationToComplete):
147         * WebDriverService.cpp:
148         (WebDriver::WebDriverService::setTimeouts):
149
150 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
151
152         WebDriver: wait until navigation is complete before running new commands and after a click
153         https://bugs.webkit.org/show_bug.cgi?id=174670
154
155         Reviewed by Brian Burg.
156
157         We are already waiting for navigation to complete after navigation commands (go, back, forward, refresh), but
158         the spec says we should always wait before executing a new command and also after a click. This is causing test
159         testShouldBeAbleToNavigateBackInTheBrowserHistoryInPresenceOfIframes to sometimes fail, because it does .click()
160         + .title and expects the title to tbe the one of the page loaded by the click. Since the load happens very fast,
161         the test usually passes, but in a real case with a slower load, the title of the previous page will be returned
162         most of the times.
163
164         6.3 Processing Model. Step 7. Wait for navigation to complete. If this returns an error return its value and
165         jump to step 1 in this overall algorithm, otherwise continue.
166         https://www.w3.org/TR/webdriver/#processing-model
167
168         14.1 Element Click. Step 10. If the click causes navigation: 1. Run the post-navigation checks and return its
169         value if it is an error. 2. Try to wait for navigation to complete.
170         https://www.w3.org/TR/webdriver/#element-click
171
172         * Session.cpp:
173         (WebDriver::Session::waitForNavigationToComplete): Send waitForNavigationToComplete message to the browser to
174         wait for any pending navigation of current browsing context to complete.
175         (WebDriver::Session::elementClick): Call waitForNavigationToComplete() after the click.
176         * Session.h:
177         * WebDriverService.cpp:
178         (WebDriver::WebDriverService::go): Wait for navigations to complete before running the command.
179         (WebDriver::WebDriverService::getCurrentURL): Ditto.
180         (WebDriver::WebDriverService::back): Ditto.
181         (WebDriver::WebDriverService::forward): Ditto.
182         (WebDriver::WebDriverService::refresh): Ditto.
183         (WebDriver::WebDriverService::getTitle): Ditto.
184         (WebDriver::WebDriverService::switchToFrame): Ditto.
185         (WebDriver::WebDriverService::switchToParentFrame): Ditto.
186         (WebDriver::WebDriverService::findElement): Ditto.
187         (WebDriver::WebDriverService::findElements): Ditto.
188         (WebDriver::WebDriverService::executeScript): Ditto.
189         (WebDriver::WebDriverService::executeAsyncScript): Ditto.
190
191 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
192
193         WebDriver: correctly handle main frame handles
194         https://bugs.webkit.org/show_bug.cgi?id=174668
195
196         Reviewed by Brian Burg.
197
198         When I switched to use std::optional instead of empty strings for the browsing contexts in WebDriver, I forgot
199         that automation uses empty string for frames to refer to the main frame. We should handle that case, because we
200         are currently considering empty strings as valid browsing context. It's not a big deal because Automation
201         converts back the empty string received to the main frame, though. We should also ensure we close the current
202         browsing context when switching to a new top level browsing context. This patch adds to helper private methods
203         to switch browsing contexts that deal with the special cases.
204
205         * Session.cpp:
206         (WebDriver::Session::close):
207         (WebDriver::Session::switchToTopLevelBrowsingContext):
208         (WebDriver::Session::switchToBrowsingContext):
209         (WebDriver::Session::createTopLevelBrowsingContext):
210         (WebDriver::Session::go):
211         (WebDriver::Session::back):
212         (WebDriver::Session::forward):
213         (WebDriver::Session::refresh):
214         (WebDriver::Session::switchToWindow):
215         (WebDriver::Session::switchToFrame):
216         (WebDriver::Session::switchToParentFrame):
217         * Session.h:
218
219 2017-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>
220
221         WebDriver: handle invalid selector errors
222         https://bugs.webkit.org/show_bug.cgi?id=174619
223
224         Reviewed by Brian Burg.
225
226         Add InvalidSelector error and handle it in case of protocol server error.
227
228         * CommandResult.cpp:
229         (WebDriver::CommandResult::CommandResult):
230         (WebDriver::CommandResult::httpStatusCode):
231         (WebDriver::CommandResult::errorString):
232         * CommandResult.h:
233
234 2017-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>
235
236         [GTK] Fix build with Clang after r219605.
237         https://bugs.webkit.org/show_bug.cgi?id=166682
238
239         Unreviewed build fix.
240
241         Clang-3.8 complains with the following error:
242         non-constant-expression cannot be narrowed from type 'gboolean' (aka 'int') to 'bool' in initializer list [-Wc++11-narrowing]
243
244         * glib/SessionHostGlib.cpp: insert an explicit cast to silence this issue.
245
246 2017-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
247
248         Add initial implementation of WebDriver process to run the HTTP server
249         https://bugs.webkit.org/show_bug.cgi?id=166682
250
251         Reviewed by Brian Burg.
252
253         Add WebDriver process that runs the HTTP server and implements an initial set of commands. Most of the code is
254         cross-platform, only the HTTP server implementation, the code to launch the browser and the communication with
255         the remote inspector requires platform specific code. This patch includes the GTK port implementation, using
256         libsoup for the HTTP server, and GLib for launching the browser and communicating with the remote
257         inspector. This implementation follows the w3c spec (https://www.w3.org/TR/webdriver) as close as possible, but
258         using the official selenium python tests as reference.
259
260         * CMakeLists.txt: Added.
261         * Capabilities.h: Added.
262         * CommandResult.cpp: Added.
263         * CommandResult.h: Added.
264         * HTTPServer.cpp: Added.
265         * HTTPServer.h: Added.
266         * PlatformGTK.cmake: Added.
267         * Session.cpp: Added.
268         * Session.h: Added.
269         * SessionHost.cpp: Added.
270         * SessionHost.h: Added.
271         * WebDriverMain.cpp: Added.
272         * WebDriverService.cpp: Added.
273         * WebDriverService.h: Added.
274         * config.h: Added.
275         * glib/SessionHostGlib.cpp: Added.
276         * gtk/WebDriverServiceGtk.cpp: Added.
277         * soup/HTTPServerSoup.cpp: Added.