[CMake] Properly test if compiler supports compiler flags
[WebKit-https.git] / Source / WebDriver / ChangeLog
1 2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>
2
3         [CMake] Properly test if compiler supports compiler flags
4         https://bugs.webkit.org/show_bug.cgi?id=174490
5
6         Reviewed by Konstantin Tokarev.
7
8         * WebDriverService.cpp:
9         (WebDriver::WebDriverService::run):
10         * glib/SessionHostGlib.cpp:
11
12 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
13
14         Web Automation: setUserInputForCurrentJavaScriptPrompt should fail if current dialog is not a prompt
15         https://bugs.webkit.org/show_bug.cgi?id=175261
16
17         Reviewed by Brian Burg.
18
19         * CommandResult.cpp:
20         (WebDriver::CommandResult::CommandResult): Handle ElementNotInteractable protocol error.
21
22 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
23
24         WebDriver: implement unhandled prompt behavior
25         https://bugs.webkit.org/show_bug.cgi?id=175184
26
27         Reviewed by Brian Burg.
28
29         Handle user prompts before running some of the commands according to the specification.
30
31         * Capabilities.h: Add UnhandledPromptBehavior capability.
32         * CommandResult.cpp:
33         (WebDriver::CommandResult::httpStatusCode const): Add UnexpectedAlertOpen error.
34         (WebDriver::CommandResult::errorString const): Ditto.
35         * CommandResult.h:
36         (WebDriver::CommandResult::setAdditonalErrorData): New method to set an additional data object that will be sent
37         as part of the result error message.
38         (WebDriver::CommandResult::additionalErrorData const): Return the additional data object.
39         * Session.cpp:
40         (WebDriver::Session::handleUserPrompts): Check if there's an active JavaScript dialog and deal with it depeding
41         on the unhandled prompt behavior.
42         (WebDriver::Session::reportUnexpectedAlertOpen): Generate an error message with UnexpectedAlertOpen error and
43         including the alert text as additional error data.
44         (WebDriver::Session::go): Handle user prompts before running the command.
45         (WebDriver::Session::getCurrentURL): Ditto.
46         (WebDriver::Session::back): Ditto.
47         (WebDriver::Session::forward): Ditto.
48         (WebDriver::Session::refresh): Ditto.
49         (WebDriver::Session::getTitle): Ditto.
50         (WebDriver::Session::closeWindow): Ditto.
51         (WebDriver::Session::switchToFrame): Ditto.
52         (WebDriver::Session::switchToParentFrame): Ditto.
53         (WebDriver::Session::isElementSelected): Ditto.
54         (WebDriver::Session::getElementText): Ditto.
55         (WebDriver::Session::getElementTagName): Ditto.
56         (WebDriver::Session::getElementRect): Ditto.
57         (WebDriver::Session::isElementEnabled): Ditto.
58         (WebDriver::Session::isElementDisplayed): Ditto.
59         (WebDriver::Session::getElementAttribute): Ditto.
60         (WebDriver::Session::elementSendKeys): Ditto.
61         (WebDriver::Session::elementSubmit): Ditto.
62         (WebDriver::Session::executeScript): Ditto.
63         * Session.h:
64         * WebDriverService.cpp:
65         (WebDriver::WebDriverService::sendResponse const): Send data object as part of the result error message if present.
66         (WebDriver::deserializeUnhandledPromptBehavior):
67         (WebDriver::WebDriverService::parseCapabilities const):
68         (WebDriver::WebDriverService::validatedCapabilities const):
69         (WebDriver::WebDriverService::newSession):
70
71 2017-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
72
73         WebDriver: implement user prompt commands
74         https://bugs.webkit.org/show_bug.cgi?id=174614
75
76         Reviewed by Brian Burg.
77
78         * CommandResult.cpp:
79         (WebDriver::CommandResult::CommandResult): Handle NoJavaScriptDialog protocol error.
80         (WebDriver::CommandResult::httpStatusCode const): Add NoSuchAlert.
81         (WebDriver::CommandResult::errorString const): Ditto.
82         * CommandResult.h:
83         * Session.cpp:
84         (WebDriver::Session::dismissAlert):
85         (WebDriver::Session::acceptAlert):
86         (WebDriver::Session::getAlertText):
87         (WebDriver::Session::sendAlertText):
88         * Session.h:
89         * WebDriverService.cpp:
90         (WebDriver::WebDriverService::dismissAlert):
91         (WebDriver::WebDriverService::acceptAlert):
92         (WebDriver::WebDriverService::getAlertText):
93         (WebDriver::WebDriverService::sendAlertText):
94         * WebDriverService.h:
95
96 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
97
98         [GTK][WPE] Add API to provide browser information required by automation
99         https://bugs.webkit.org/show_bug.cgi?id=175130
100
101         Reviewed by Brian Burg.
102
103         * Session.cpp:
104         (WebDriver::Session::createTopLevelBrowsingContext): Check if startAutomationSession and complete the command
105         with error in that case.
106         * SessionHost.h:
107         * glib/SessionHostGlib.cpp:
108         (WebDriver::SessionHost::matchCapabilities): Match the capabilities that are known only after the browser has
109         been launched.
110         (WebDriver::SessionHost::startAutomationSession): Handle the StartAutomationSession response, extracting the
111         capabilities and calling matchCapabilities() to match them.
112         (WebDriver::SessionHost::setTargetList): Return early if the session was rejected before due to invalid
113         capabilities.
114
115 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
116
117         WebDriver: Implement page load strategy
118         https://bugs.webkit.org/show_bug.cgi?id=175183
119
120         Reviewed by Brian Burg.
121
122         Validate and parse page load strategy when processing capabilities.
123
124         * Capabilities.h:
125         * Session.cpp:
126         (WebDriver::Session::pageLoadStrategyString const): Helper to get the page load strategy as a String to be
127         passed to Automation.
128         (WebDriver::Session::go): Pass page load strategy if present.
129         (WebDriver::Session::back): Ditto.
130         (WebDriver::Session::forward): Ditto.
131         (WebDriver::Session::refresh): Ditto.
132         (WebDriver::Session::waitForNavigationToComplete): Ditto.
133         * Session.h:
134         * WebDriverService.cpp:
135         (WebDriver::deserializePageLoadStrategy):
136         (WebDriver::WebDriverService::parseCapabilities const):
137         (WebDriver::WebDriverService::validatedCapabilities const):
138         (WebDriver::WebDriverService::newSession):
139
140 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
141
142         Unreviewed. Try to fix build with clang after r220315.
143
144         * WebDriverService.cpp:
145         (WebDriver::WebDriverService::validatedCapabilities const):
146         (WebDriver::WebDriverService::mergeCapabilities const):
147
148 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
149
150         WebDriver: properly handle capabilities and process firstMatch too
151         https://bugs.webkit.org/show_bug.cgi?id=174618
152
153         Reviewed by Brian Burg.
154
155         Implement processing of capabilities following the spec. This patch adds validation, merging and matching of
156         capabilities.
157
158         7.2 Processing Capabilities.
159         https://w3c.github.io/webdriver/webdriver-spec.html#processing-capabilities
160
161         * Capabilities.h: Make all capabilities optional and move Timeouts struct here.
162         * Session.h:
163         * WebDriverService.cpp:
164         (WebDriver::deserializeTimeouts): Helper to extract timeouts from JSON object.
165         (WebDriver::WebDriverService::parseCapabilities const): At this point capabilities have already been validated,
166         so we just need to get them without checking the value type.
167         (WebDriver::WebDriverService::validatedCapabilities const): Validate the given capabilities, ensuring types of
168         values are the expected one.
169         (WebDriver::WebDriverService::mergeCapabilities const): Merge the alwaysMatch and firstMatch capabilities into a
170         single object ensuring that the same capability is not in both.
171         (WebDriver::WebDriverService::matchCapabilities const): Try to match the merged capabilities againt the platform
172         expected capabilities.
173         (WebDriver::WebDriverService::processCapabilities const): Validate, merge and match the capabilities.
174         (WebDriver::WebDriverService::newSession): Use processCapabilities(). Also initialize the timeouts from
175         capabilities and add all capabilities to the command result.
176         (WebDriver::WebDriverService::setTimeouts): Use deserializeTimeouts().
177         * WebDriverService.h:
178         * glib/SessionHostGlib.cpp:
179         (WebDriver::SessionHost::launchBrowser): Updated to properly access the capabilities that are now optional.
180         (WebDriver::SessionHost::startAutomationSession): Add FIXME.
181         * gtk/WebDriverServiceGtk.cpp:
182         (WebDriver::WebDriverService::platformCapabilities): Return the Capabilities with the known required ones filled.
183         (WebDriver::WebDriverService::platformValidateCapability const): Validate webkitgtk:browserOptions.
184         (WebDriver::WebDriverService::platformMatchCapability const): This does nothing for now.
185         (WebDriver::WebDriverService::platformCompareBrowserVersions): Compare the given browser versions.
186         (WebDriver::WebDriverService::platformParseCapabilities const): Updated now that capabilites have already been
187         validated before.
188
189 2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>
190
191         WebDriver: use in-view center point for clicks instead of bounding box center point
192         https://bugs.webkit.org/show_bug.cgi?id=174863
193
194         Reviewed by Simon Fraser.
195
196         The center of the element bounding box is not always part of the element, like in multiline links, for example.
197
198         11.1 Element Interactability.
199         https://www.w3.org/TR/webdriver/#dfn-in-view-center-point
200
201         * CommandResult.cpp:
202         (WebDriver::CommandResult::httpStatusCode): Add ElementClickIntercepted and ElementNotInteractable errors.
203         (WebDriver::CommandResult::errorString): Ditto.
204         * CommandResult.h: Ditto.
205         * Session.cpp:
206         (WebDriver::Session::computeElementLayout): Get the in-view center point and isObscured from the result too.
207         (WebDriver::Session::getElementRect): Ignore in-view center point and isObscured.
208         (WebDriver::Session::elementClick): Fail in case the element is not interactable or is obscured.
209         * Session.h:
210
211 2017-08-01  Michael Catanzaro  <mcatanzaro@igalia.com>
212
213         [CMake] WebKitFS.cmake depends on options set in Option cmake files that are included later
214         https://bugs.webkit.org/show_bug.cgi?id=174855
215
216         Reviewed by Carlos Garcia Campos.
217
218         Don't create derived sources directory here anymore.
219
220         * PlatformGTK.cmake:
221
222 2017-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>
223
224         Unreviewed. Fix GTK distcheck.
225
226         Ensure WebDriver derived sources directory is created, WebKitFS.cmake is useless for this.
227
228         * PlatformGTK.cmake:
229
230 2017-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>
231
232         WebDriver: rename m_browsingContext as m_currentBrowsingContext in Session
233         https://bugs.webkit.org/show_bug.cgi?id=174783
234
235         Reviewed by Brian Burg.
236
237         We have m_toplevelBrowsingContext and m_browsingContext, which is confusing. m_browsingContext is actually the
238         current browsing context, and the spec also refers to it as the current browsing context, so better use
239         m_currentBrowsingContext.
240
241         * Session.cpp:
242         (WebDriver::Session::switchToTopLevelBrowsingContext):
243         (WebDriver::Session::switchToBrowsingContext):
244         (WebDriver::Session::switchToFrame):
245         (WebDriver::Session::switchToParentFrame):
246         (WebDriver::Session::computeElementLayout):
247         (WebDriver::Session::findElements):
248         (WebDriver::Session::isElementSelected):
249         (WebDriver::Session::getElementText):
250         (WebDriver::Session::getElementTagName):
251         (WebDriver::Session::isElementEnabled):
252         (WebDriver::Session::isElementDisplayed):
253         (WebDriver::Session::getElementAttribute):
254         (WebDriver::Session::waitForNavigationToComplete):
255         (WebDriver::Session::elementClear):
256         (WebDriver::Session::elementSendKeys):
257         (WebDriver::Session::elementSubmit):
258         (WebDriver::Session::executeScript):
259         * Session.h:
260
261 2017-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>
262
263         WebDriver: implement page load timeout
264         https://bugs.webkit.org/show_bug.cgi?id=174672
265
266         Reviewed by Brian Burg.
267
268         Handle timeout errors and pass the page load timeout to waitForNavigationToComplete and all other navigation
269         commands. Also fix the setTimeouts command that was still using the legacy name of the page load timeout,
270         instead of the one in the spec.
271
272         8. Sessions
273         https://www.w3.org/TR/webdriver/#dfn-session-page-load-timeout
274
275         * CommandResult.cpp:
276         (WebDriver::CommandResult::CommandResult):
277         (WebDriver::CommandResult::httpStatusCode):
278         (WebDriver::CommandResult::errorString):
279         * CommandResult.h:
280         * Session.cpp:
281         (WebDriver::Session::go):
282         (WebDriver::Session::back):
283         (WebDriver::Session::forward):
284         (WebDriver::Session::refresh):
285         (WebDriver::Session::waitForNavigationToComplete):
286         * WebDriverService.cpp:
287         (WebDriver::WebDriverService::setTimeouts):
288
289 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
290
291         WebDriver: wait until navigation is complete before running new commands and after a click
292         https://bugs.webkit.org/show_bug.cgi?id=174670
293
294         Reviewed by Brian Burg.
295
296         We are already waiting for navigation to complete after navigation commands (go, back, forward, refresh), but
297         the spec says we should always wait before executing a new command and also after a click. This is causing test
298         testShouldBeAbleToNavigateBackInTheBrowserHistoryInPresenceOfIframes to sometimes fail, because it does .click()
299         + .title and expects the title to tbe the one of the page loaded by the click. Since the load happens very fast,
300         the test usually passes, but in a real case with a slower load, the title of the previous page will be returned
301         most of the times.
302
303         6.3 Processing Model. Step 7. Wait for navigation to complete. If this returns an error return its value and
304         jump to step 1 in this overall algorithm, otherwise continue.
305         https://www.w3.org/TR/webdriver/#processing-model
306
307         14.1 Element Click. Step 10. If the click causes navigation: 1. Run the post-navigation checks and return its
308         value if it is an error. 2. Try to wait for navigation to complete.
309         https://www.w3.org/TR/webdriver/#element-click
310
311         * Session.cpp:
312         (WebDriver::Session::waitForNavigationToComplete): Send waitForNavigationToComplete message to the browser to
313         wait for any pending navigation of current browsing context to complete.
314         (WebDriver::Session::elementClick): Call waitForNavigationToComplete() after the click.
315         * Session.h:
316         * WebDriverService.cpp:
317         (WebDriver::WebDriverService::go): Wait for navigations to complete before running the command.
318         (WebDriver::WebDriverService::getCurrentURL): Ditto.
319         (WebDriver::WebDriverService::back): Ditto.
320         (WebDriver::WebDriverService::forward): Ditto.
321         (WebDriver::WebDriverService::refresh): Ditto.
322         (WebDriver::WebDriverService::getTitle): Ditto.
323         (WebDriver::WebDriverService::switchToFrame): Ditto.
324         (WebDriver::WebDriverService::switchToParentFrame): Ditto.
325         (WebDriver::WebDriverService::findElement): Ditto.
326         (WebDriver::WebDriverService::findElements): Ditto.
327         (WebDriver::WebDriverService::executeScript): Ditto.
328         (WebDriver::WebDriverService::executeAsyncScript): Ditto.
329
330 2017-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>
331
332         WebDriver: correctly handle main frame handles
333         https://bugs.webkit.org/show_bug.cgi?id=174668
334
335         Reviewed by Brian Burg.
336
337         When I switched to use std::optional instead of empty strings for the browsing contexts in WebDriver, I forgot
338         that automation uses empty string for frames to refer to the main frame. We should handle that case, because we
339         are currently considering empty strings as valid browsing context. It's not a big deal because Automation
340         converts back the empty string received to the main frame, though. We should also ensure we close the current
341         browsing context when switching to a new top level browsing context. This patch adds to helper private methods
342         to switch browsing contexts that deal with the special cases.
343
344         * Session.cpp:
345         (WebDriver::Session::close):
346         (WebDriver::Session::switchToTopLevelBrowsingContext):
347         (WebDriver::Session::switchToBrowsingContext):
348         (WebDriver::Session::createTopLevelBrowsingContext):
349         (WebDriver::Session::go):
350         (WebDriver::Session::back):
351         (WebDriver::Session::forward):
352         (WebDriver::Session::refresh):
353         (WebDriver::Session::switchToWindow):
354         (WebDriver::Session::switchToFrame):
355         (WebDriver::Session::switchToParentFrame):
356         * Session.h:
357
358 2017-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>
359
360         WebDriver: handle invalid selector errors
361         https://bugs.webkit.org/show_bug.cgi?id=174619
362
363         Reviewed by Brian Burg.
364
365         Add InvalidSelector error and handle it in case of protocol server error.
366
367         * CommandResult.cpp:
368         (WebDriver::CommandResult::CommandResult):
369         (WebDriver::CommandResult::httpStatusCode):
370         (WebDriver::CommandResult::errorString):
371         * CommandResult.h:
372
373 2017-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>
374
375         [GTK] Fix build with Clang after r219605.
376         https://bugs.webkit.org/show_bug.cgi?id=166682
377
378         Unreviewed build fix.
379
380         Clang-3.8 complains with the following error:
381         non-constant-expression cannot be narrowed from type 'gboolean' (aka 'int') to 'bool' in initializer list [-Wc++11-narrowing]
382
383         * glib/SessionHostGlib.cpp: insert an explicit cast to silence this issue.
384
385 2017-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
386
387         Add initial implementation of WebDriver process to run the HTTP server
388         https://bugs.webkit.org/show_bug.cgi?id=166682
389
390         Reviewed by Brian Burg.
391
392         Add WebDriver process that runs the HTTP server and implements an initial set of commands. Most of the code is
393         cross-platform, only the HTTP server implementation, the code to launch the browser and the communication with
394         the remote inspector requires platform specific code. This patch includes the GTK port implementation, using
395         libsoup for the HTTP server, and GLib for launching the browser and communicating with the remote
396         inspector. This implementation follows the w3c spec (https://www.w3.org/TR/webdriver) as close as possible, but
397         using the official selenium python tests as reference.
398
399         * CMakeLists.txt: Added.
400         * Capabilities.h: Added.
401         * CommandResult.cpp: Added.
402         * CommandResult.h: Added.
403         * HTTPServer.cpp: Added.
404         * HTTPServer.h: Added.
405         * PlatformGTK.cmake: Added.
406         * Session.cpp: Added.
407         * Session.h: Added.
408         * SessionHost.cpp: Added.
409         * SessionHost.h: Added.
410         * WebDriverMain.cpp: Added.
411         * WebDriverService.cpp: Added.
412         * WebDriverService.h: Added.
413         * config.h: Added.
414         * glib/SessionHostGlib.cpp: Added.
415         * gtk/WebDriverServiceGtk.cpp: Added.
416         * soup/HTTPServerSoup.cpp: Added.