Changeset 252238 in webkit


Ignore:
Timestamp:
Nov 8, 2019 7:09:00 AM (4 years ago)
Author:
Carlos Garcia Campos
Message:

WebDriver: implement get page source command
https://bugs.webkit.org/show_bug.cgi?id=180399

Reviewed by Carlos Alberto Lopez Perez.

Source/WebDriver:

  • Session.cpp:

(WebDriver::Session::getPageSource):

  • Session.h:
  • WebDriverService.cpp:

(WebDriver::WebDriverService::getPageSource):

  • WebDriverService.h:

WebDriverTests:

Unskip tests that are now passing.

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebDriver/ChangeLog

    r252180 r252238  
     12019-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        WebDriver: implement get page source command
     4        https://bugs.webkit.org/show_bug.cgi?id=180399
     5
     6        Reviewed by Carlos Alberto Lopez Perez.
     7
     8        * Session.cpp:
     9        (WebDriver::Session::getPageSource):
     10        * Session.h:
     11        * WebDriverService.cpp:
     12        (WebDriver::WebDriverService::getPageSource):
     13        * WebDriverService.h:
     14
    1152019-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • trunk/Source/WebDriver/Session.cpp

    r252180 r252238  
    18201820}
    18211821
     1822void Session::getPageSource(Function<void (CommandResult&&)>&& completionHandler)
     1823{
     1824    if (!m_toplevelBrowsingContext) {
     1825        completionHandler(CommandResult::fail(CommandResult::ErrorCode::NoSuchWindow));
     1826        return;
     1827    }
     1828
     1829    handleUserPrompts([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)](CommandResult&& result) mutable {
     1830        if (result.isError()) {
     1831            completionHandler(WTFMove(result));
     1832            return;
     1833        }
     1834        RefPtr<JSON::Object> parameters = JSON::Object::create();
     1835        parameters->setString("browsingContextHandle"_s, m_toplevelBrowsingContext.value());
     1836        parameters->setString("function"_s, "function() { return document.documentElement.outerHTML; }"_s);
     1837        parameters->setArray("arguments"_s, JSON::Array::create());
     1838        m_host->sendCommandToBackend("evaluateJavaScriptFunction"_s, WTFMove(parameters), [protectedThis = protectedThis.copyRef(), completionHandler = WTFMove(completionHandler)](SessionHost::CommandResponse&& response) {
     1839            if (response.isError || !response.responseObject) {
     1840                completionHandler(CommandResult::fail(WTFMove(response.responseObject)));
     1841                return;
     1842            }
     1843            String valueString;
     1844            if (!response.responseObject->getString("result"_s, valueString)) {
     1845                completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError));
     1846                return;
     1847            }
     1848            RefPtr<JSON::Value> resultValue;
     1849            if (!JSON::Value::parseJSON(valueString, resultValue)) {
     1850                completionHandler(CommandResult::fail(CommandResult::ErrorCode::UnknownError));
     1851                return;
     1852            }
     1853            completionHandler(CommandResult::success(WTFMove(resultValue)));
     1854        });
     1855    });
     1856}
     1857
    18221858RefPtr<JSON::Value> Session::handleScriptResult(RefPtr<JSON::Value>&& resultValue)
    18231859{
  • trunk/Source/WebDriver/Session.h

    r239427 r252238  
    108108    void elementClear(const String& elementID, Function<void (CommandResult&&)>&&);
    109109    void elementSendKeys(const String& elementID, const String& text, Function<void (CommandResult&&)>&&);
     110    void getPageSource(Function<void (CommandResult&&)>&&);
    110111    void executeScript(const String& script, RefPtr<JSON::Array>&& arguments, ExecuteScriptMode, Function<void (CommandResult&&)>&&);
    111112    void getAllCookies(Function<void (CommandResult&&)>&&);
  • trunk/Source/WebDriver/WebDriverService.cpp

    r248846 r252238  
    154154    { HTTPMethod::Post, "/session/$sessionId/element/$elementId/value", &WebDriverService::elementSendKeys },
    155155
     156    { HTTPMethod::Get, "/session/$sessionId/source", &WebDriverService::getPageSource },
    156157    { HTTPMethod::Post, "/session/$sessionId/execute/sync", &WebDriverService::executeScript },
    157158    { HTTPMethod::Post, "/session/$sessionId/execute/async", &WebDriverService::executeAsyncScript },
     
    13961397}
    13971398
     1399void WebDriverService::getPageSource(RefPtr<JSON::Object>&& parameters, Function<void (CommandResult&&)>&& completionHandler)
     1400{
     1401    // §15.1 Getting Page Source.
     1402    // https://w3c.github.io/webdriver/webdriver-spec.html#getting-page-source
     1403    if (!findSessionOrCompleteWithError(*parameters, completionHandler))
     1404        return;
     1405
     1406    m_session->getPageSource(WTFMove(completionHandler));
     1407}
     1408
    13981409static bool findScriptAndArgumentsOrCompleteWithError(JSON::Object& parameters, Function<void (CommandResult&&)>& completionHandler, String& script, RefPtr<JSON::Array>& arguments)
    13991410{
  • trunk/Source/WebDriver/WebDriverService.h

    r239427 r252238  
    100100    void elementClear(RefPtr<JSON::Object>&&, Function<void (CommandResult&&)>&&);
    101101    void elementSendKeys(RefPtr<JSON::Object>&&, Function<void (CommandResult&&)>&&);
     102    void getPageSource(RefPtr<JSON::Object>&&, Function<void (CommandResult&&)>&&);
    102103    void executeScript(RefPtr<JSON::Object>&&, Function<void (CommandResult&&)>&&);
    103104    void executeAsyncScript(RefPtr<JSON::Object>&&, Function<void (CommandResult&&)>&&);
  • trunk/WebDriverTests/ChangeLog

    r252180 r252238  
     12019-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        WebDriver: implement get page source command
     4        https://bugs.webkit.org/show_bug.cgi?id=180399
     5
     6        Reviewed by Carlos Alberto Lopez Perez.
     7
     8        Unskip tests that are now passing.
     9
     10        * TestExpectations.json:
     11
    1122019-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>
    213
  • trunk/WebDriverTests/TestExpectations.json

    r252180 r252238  
    399399            }
    400400        }
    401     },
    402     "imported/w3c/webdriver/tests/get_page_source/source.py": {
    403         "expected": {"all": {"status": ["SKIP"], "bug": "webkit.org/b/180399"}}
    404     },
    405     "imported/w3c/webdriver/tests/get_page_source/user_prompts.py": {
    406         "expected": {"all": {"status": ["SKIP"], "bug": "webkit.org/b/180399"}}
    407401    },
    408402    "imported/w3c/webdriver/tests/element_click/bubbling.py": {
Note: See TracChangeset for help on using the changeset viewer.