⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 268857 in webkit


Ignore:
Timestamp:
Oct 22, 2020, 2:36:08 AM (6 years ago)
Author:
Carlos Garcia Campos
Message:

Unreviewed. Update W3C WebDriver imported tests.

Tools:

Always connect to WebKitWebView::close even if the view is never made active.

  • MiniBrowser/gtk/BrowserWindow.c:

(browserWindowSwitchTab):
(browser_window_append_view):

WebDriverTests:

  • TestExpectations.json:
  • imported/w3c/importer.json:
  • imported/w3c/tools/webdriver/webdriver/client.py:
  • imported/w3c/tools/wptrunner/wptrunner/browsers/android_weblayer.py:
  • imported/w3c/tools/wptrunner/wptrunner/browsers/chrome.py:
  • imported/w3c/tools/wptrunner/wptrunner/browsers/chrome_android.py:
  • imported/w3c/tools/wptrunner/wptrunner/environment.py:
  • imported/w3c/tools/wptrunner/wptrunner/executors/base.py:
  • imported/w3c/tools/wptrunner/wptrunner/executors/executormarionette.py:
  • imported/w3c/tools/wptrunner/wptrunner/executors/executorselenium.py:
  • imported/w3c/tools/wptrunner/wptrunner/executors/executorservodriver.py:
  • imported/w3c/tools/wptrunner/wptrunner/executors/executorwebdriver.py:
  • imported/w3c/tools/wptrunner/wptrunner/executors/protocol.py:
  • imported/w3c/tools/wptrunner/wptrunner/testdriver-extra.js:
  • imported/w3c/tools/wptrunner/wptrunner/testharnessreport.js:¡
  • imported/w3c/tools/wptrunner/wptrunner/webdriver_server.py:
  • imported/w3c/tools/wptrunner/wptrunner/wptcommandline.py:
  • imported/w3c/tools/wptrunner/wptrunner/wptrunner.py:
  • imported/w3c/webdriver/tests/element_click/shadow_dom.py: Added.
  • imported/w3c/webdriver/tests/perform_actions/support/refine.py:
  • imported/w3c/webdriver/tests/print/printcmd.py:
  • imported/w3c/webdriver/tests/print/user_prompts.py:
Location:
trunk
Files:
1 added
24 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r268855 r268857  
     12020-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        Unreviewed. Update W3C WebDriver imported tests.
     4
     5        Always connect to WebKitWebView::close even if the view is never made active.
     6
     7        * MiniBrowser/gtk/BrowserWindow.c:
     8        (browserWindowSwitchTab):
     9        (browser_window_append_view):
     10
    1112020-10-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>
    212
  • trunk/Tools/MiniBrowser/gtk/BrowserWindow.c

    r266055 r268857  
    11321132    g_signal_connect(webView, "notify::is-loading", G_CALLBACK(webViewIsLoadingChanged), window);
    11331133    g_signal_connect(webView, "create", G_CALLBACK(webViewCreate), window);
    1134     g_signal_connect(webView, "close", G_CALLBACK(webViewClose), window);
    11351134    g_signal_connect(webView, "load-failed", G_CALLBACK(webViewLoadFailed), window);
    11361135    g_signal_connect(webView, "decide-policy", G_CALLBACK(webViewDecidePolicy), window);
     
    13891388    }
    13901389
     1390    /* We always want close to be connected even for not active tabs */
     1391    g_signal_connect(webView, "close", G_CALLBACK(webViewClose), window);
     1392
    13911393    GtkWidget *tab = browser_tab_new(webView);
    13921394#if !GTK_CHECK_VERSION(3, 98, 0)
  • trunk/WebDriverTests/ChangeLog

    r268811 r268857  
     12020-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        Unreviewed. Update W3C WebDriver imported tests.
     4
     5        * TestExpectations.json:
     6        * imported/w3c/importer.json:
     7        * imported/w3c/tools/webdriver/webdriver/client.py:
     8        * imported/w3c/tools/wptrunner/wptrunner/browsers/android_weblayer.py:
     9        * imported/w3c/tools/wptrunner/wptrunner/browsers/chrome.py:
     10        * imported/w3c/tools/wptrunner/wptrunner/browsers/chrome_android.py:
     11        * imported/w3c/tools/wptrunner/wptrunner/environment.py:
     12        * imported/w3c/tools/wptrunner/wptrunner/executors/base.py:
     13        * imported/w3c/tools/wptrunner/wptrunner/executors/executormarionette.py:
     14        * imported/w3c/tools/wptrunner/wptrunner/executors/executorselenium.py:
     15        * imported/w3c/tools/wptrunner/wptrunner/executors/executorservodriver.py:
     16        * imported/w3c/tools/wptrunner/wptrunner/executors/executorwebdriver.py:
     17        * imported/w3c/tools/wptrunner/wptrunner/executors/protocol.py:
     18        * imported/w3c/tools/wptrunner/wptrunner/testdriver-extra.js:
     19        * imported/w3c/tools/wptrunner/wptrunner/testharnessreport.js:¡
     20        * imported/w3c/tools/wptrunner/wptrunner/webdriver_server.py:
     21        * imported/w3c/tools/wptrunner/wptrunner/wptcommandline.py:
     22        * imported/w3c/tools/wptrunner/wptrunner/wptrunner.py:
     23        * imported/w3c/webdriver/tests/element_click/shadow_dom.py: Added.
     24        * imported/w3c/webdriver/tests/perform_actions/support/refine.py:
     25        * imported/w3c/webdriver/tests/print/printcmd.py:
     26        * imported/w3c/webdriver/tests/print/user_prompts.py:
     27
    1282020-10-21  Lauro Moura  <lmoura@igalia.com>
    229
  • trunk/WebDriverTests/TestExpectations.json

    r268811 r268857  
    378378                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
    379379            },
    380             "test_special_key_sends_keydown[NULL-expected32]": {
    381                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
    382             },
    383380            "test_special_key_sends_keydown[R_META-expected58]": {
    384381                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
     
    388385            },
    389386            "test_special_key_sends_keydown[PAUSE-expected45]": {
    390                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
    391             },
    392             "test_special_key_sends_keydown[CLEAR-expected4]": {
    393387                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
    394388            },
  • trunk/WebDriverTests/imported/w3c/importer.json

    r267831 r268857  
    11{
    22    "repository": "https://github.com/w3c/web-platform-tests.git",
    3     "revision": "9da95c4ddd67ffc5010c1048250a7c67c0bee897",
     3    "revision": "b57da97fc05e5440ae675027dd45a26be48e2dbd",
    44    "paths_to_import": [
    55        "tools/webdriver",
  • trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/client.py

    r267831 r268857  
    582582
    583583    @command
    584     def new_window(self, type_hint=None):
     584    def new_window(self, type_hint="tab"):
    585585        body = {"type": type_hint}
    586586        value = self.send_session_command("POST", "window/new", body)
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/browsers/android_weblayer.py

    r267831 r268857  
    4848                                             **kwargs)
    4949    del executor_kwargs["capabilities"]["goog:chromeOptions"]["prefs"]
    50     del executor_kwargs["capabilities"]["goog:chromeOptions"]["useAutomationExtension"]
    5150    capabilities = executor_kwargs["capabilities"]
    5251    # Note that for WebLayer, we launch a test shell and have the test shell use
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/browsers/chrome.py

    r267831 r268857  
    5252                }
    5353            },
    54             "useAutomationExtension": False,
    5554            "excludeSwitches": ["enable-automation"],
    5655            "w3c": True
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/browsers/chrome_android.py

    r267831 r268857  
    5050    # Remove unsupported options on mobile.
    5151    del executor_kwargs["capabilities"]["goog:chromeOptions"]["prefs"]
    52     del executor_kwargs["capabilities"]["goog:chromeOptions"]["useAutomationExtension"]
    5352
    5453    assert kwargs["package_name"], "missing --package-name"
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/environment.py

    r267831 r268857  
    5656    def __init__(self, test_paths, testharness_timeout_multipler,
    5757                 pause_after_test, debug_info, options, ssl_config, env_extras,
    58                  enable_quic=False, serve_mojojs=False):
     58                 enable_quic=False, mojojs_path=None):
    5959        self.test_paths = test_paths
    6060        self.server = None
     
    7373        self.ssl_config = ssl_config
    7474        self.enable_quic = enable_quic
    75         self.serve_mojojs = serve_mojojs
     75        self.mojojs_path = mojojs_path
    7676
    7777    def __enter__(self):
     
    218218            del route_builder.mountpoint_routes["/"]
    219219
    220         if self.serve_mojojs:
    221             # TODO(Hexcles): Properly pass venv.path in.
    222             route_builder.add_mount_point("/gen/", "_venv2/mojojs/gen")
     220        if self.mojojs_path:
     221            route_builder.add_mount_point("/gen/", self.mojojs_path)
    223222
    224223        return route_builder.get_routes()
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/executors/base.py

    r267831 r268857  
    692692        pass
    693693
     694    def window_handles(self):
     695        return []
     696
    694697
    695698class ConnectionlessProtocol(Protocol):
     
    788791    def process_action(self, url, payload):
    789792        action = payload["action"]
     793        cmd_id = payload["id"]
    790794        self.logger.debug("Got action: %s" % action)
    791795        try:
     
    798802        except self.unimplemented_exc:
    799803            self.logger.warning("Action %s not implemented" % action)
    800             self._send_message("complete", "error", "Action %s not implemented" % action)
     804            self._send_message(cmd_id, "complete", "error", "Action %s not implemented" % action)
    801805        except Exception:
    802806            self.logger.warning("Action %s failed" % action)
    803807            self.logger.warning(traceback.format_exc())
    804             self._send_message("complete", "error")
     808            self._send_message(cmd_id, "complete", "error")
    805809            raise
    806810        else:
    807811            self.logger.debug("Action %s completed with result %s" % (action, result))
    808812            return_message = {"result": result}
    809             self._send_message("complete", "success", json.dumps(return_message))
     813            self._send_message(cmd_id, "complete", "success", json.dumps(return_message))
    810814
    811815        return False, None
    812816
    813     def _send_message(self, message_type, status, message=None):
    814         self.protocol.testdriver.send_message(message_type, status, message=message)
     817    def _send_message(self, cmd_id, message_type, status, message=None):
     818        self.protocol.testdriver.send_message(cmd_id, message_type, status, message=message)
    815819
    816820
     
    821825        self.context = context
    822826        self.initial_window = None
    823         self.switched_frame = False
    824827
    825828    def __enter__(self):
     
    827830            return
    828831
    829         window_id = self.context[0]
    830         if window_id:
    831             self.initial_window = self.protocol.base.current_window
    832             self.logger.debug("Switching to window %s" % window_id)
    833             self.protocol.testdriver.switch_to_window(window_id)
    834 
    835         for frame_id in self.context[1:]:
    836             self.switched_frame = True
    837             self.logger.debug("Switching to frame %s" % frame_id)
    838             self.protocol.testdriver.switch_to_frame(frame_id)
     832        self.initial_window = self.protocol.base.current_window
     833        self.logger.debug("Switching to window %s" % self.context)
     834        self.protocol.testdriver.switch_to_window(self.context)
    839835
    840836    def __exit__(self, *args):
    841         if self.initial_window is not None:
    842             self.logger.debug("Switching back to initial window")
    843             self.protocol.base.set_window(self.initial_window)
    844             self.initial_window = None
    845         elif self.switched_frame:
    846             self.protocol.testdriver.switch_to_frame(None)
    847         self.switched_frame = False
     837        if self.context is None:
     838            return
     839
     840        self.logger.debug("Switching back to initial window")
     841        self.protocol.base.set_window(self.initial_window)
     842        self.protocol.testdriver._switch_to_frame(None)
     843        self.initial_window = None
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/executors/executormarionette.py

    r267831 r268857  
    103103    def set_window(self, handle):
    104104        _switch_to_window(self.marionette, handle)
     105
     106    def window_handles(self):
     107        return self.marionette.window_handles
    105108
    106109    def load(self, url):
     
    461464        self.marionette = self.parent.marionette
    462465
    463     def send_message(self, message_type, status, message=None):
     466    def send_message(self, cmd_id, message_type, status, message=None):
    464467        obj = {
     468            "cmd_id": cmd_id,
    465469            "type": "testdriver-%s" % str(message_type),
    466470            "status": str(status)
     
    470474        self.parent.base.execute_script("window.postMessage(%s, '*')" % json.dumps(obj))
    471475
    472     def switch_to_window(self, window_id):
    473         if window_id is None:
    474             return
    475 
    476         for window_handle in self.marionette.window_handles:
    477             _switch_to_window(self.marionette, window_handle)
    478             try:
    479                 handle_window_id = self.marionette.execute_script("return window.name")
    480             except errors.JavascriptException:
    481                 continue
    482             if str(handle_window_id) == window_id:
    483                 return
    484 
    485         raise Exception("Window with id %s not found" % window_id)
    486 
    487     def switch_to_frame(self, frame_number):
     476    def _switch_to_frame(self, frame_number):
    488477        self.marionette.switch_to_frame(frame_number)
     478
     479    def _switch_to_parent_frame(self):
     480        self.marionette.switch_to_parent_frame()
    489481
    490482
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/executors/executorselenium.py

    r267831 r268857  
    6161    def set_window(self, handle):
    6262        self.webdriver.switch_to_window(handle)
     63
     64    def window_handles(self):
     65        return self.webdriver.window_handles
    6366
    6467    def load(self, url):
     
    201204        self.webdriver = self.parent.webdriver
    202205
    203     def send_message(self, message_type, status, message=None):
     206    def send_message(self, cmd_id, message_type, status, message=None):
    204207        obj = {
     208            "cmd_id": cmd_id,
    205209            "type": "testdriver-%s" % str(message_type),
    206210            "status": str(status)
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/executors/executorservodriver.py

    r267831 r268857  
    7676    def set_window(self, handle):
    7777        pass
     78
     79    def window_handles(self):
     80        return []
    7881
    7982    def load(self, url):
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/executors/executorwebdriver.py

    r267831 r268857  
    6262        self.webdriver.window_handle = handle
    6363
     64    def window_handles(self):
     65        return self.webdriver.handles
     66
    6467    def load(self, url):
    6568        self.webdriver.url = url
     
    215218        self.webdriver = self.parent.webdriver
    216219
    217     def send_message(self, message_type, status, message=None):
     220    def send_message(self, cmd_id, message_type, status, message=None):
    218221        obj = {
     222            "cmd_id": cmd_id,
    219223            "type": "testdriver-%s" % str(message_type),
    220224            "status": str(status)
     
    224228        self.webdriver.execute_script("window.postMessage(%s, '*')" % json.dumps(obj))
    225229
    226     def switch_to_window(self, window_id):
    227         if window_id is None:
    228             return
    229 
    230         for window_handle in self.webdriver.handles:
    231             self.webdriver.window_handle = window_handle
    232             try:
    233                 handle_window_id = self.webdriver.execute_script("return window.name")
    234             except client.JavascriptErrorException:
    235                 continue
    236             if str(handle_window_id) == window_id:
    237                 return
    238 
    239         raise Exception("Window with id %s not found" % window_id)
    240 
    241     def switch_to_frame(self, frame_number):
     230    def _switch_to_frame(self, frame_number):
    242231        self.webdriver.switch_frame(frame_number)
     232
     233    def _switch_to_parent_frame(self):
     234        self.webdriver.switch_frame("parent")
    243235
    244236
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/executors/protocol.py

    r267831 r268857  
    148148
    149149    @abstractmethod
     150    def window_handles(self):
     151        """Get a list of handles to top-level browsing contexts"""
     152        pass
     153
     154    @abstractmethod
    150155    def load(self, url):
    151156        """Load a url in the current browsing context
     
    344349
    345350    @abstractmethod
    346     def send_message(self, message_type, status, message=None):
     351    def send_message(self, cmd_id, message_type, status, message=None):
    347352        """Send a testdriver message to the browser.
    348353
     354        :param int cmd_id: The id of the command to which we're responding
    349355        :param str message_type: The kind of the message.
    350356        :param str status: Either "failure" or "success" depending on whether the
     
    357363
    358364        :param str wptrunner_id: window id"""
    359         pass
    360 
    361     def switch_to_frame(self, index):
     365        if wptrunner_id is None:
     366            return
     367
     368        stack = [str(item) for item in self.parent.base.window_handles()]
     369        while stack:
     370            item = stack.pop()
     371            if item is None:
     372                self._switch_to_parent_frame()
     373                continue
     374            elif isinstance(item, str):
     375                self.parent.base.set_window(item)
     376            else:
     377                self._switch_to_frame(item)
     378
     379            try:
     380                handle_window_id = self.parent.base.execute_script("return window.__wptrunner_id")
     381                if str(handle_window_id) == wptrunner_id:
     382                    return
     383            except Exception:
     384                pass
     385            frame_count = self.parent.base.execute_script("return window.length")
     386            # None here makes us switch back to the parent after we've processed all the subframes
     387            stack.append(None)
     388            if frame_count:
     389                stack.extend(reversed(range(0, frame_count)))
     390
     391        raise Exception("Window with id %s not found" % wptrunner_id)
     392
     393    @abstractmethod
     394    def _switch_to_frame(self, index):
    362395        """Switch to a frame in the current window
    363396
    364397        :param int index: Frame id"""
     398        pass
     399
     400    @abstractmethod
     401    def _switch_to_parent_frame(self):
     402        """Switch to the parent of the current frame"""
    365403        pass
    366404
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/testdriver-extra.js

    r267831 r268857  
    11"use strict";
    22
    3 (function(){
    4     let pending_resolve = null;
    5     let pending_reject = null;
     3(function() {
     4    const is_test_context = window.__wptrunner_message_queue !== undefined;
     5    const pending = new Map();
     6
    67    let result = null;
     8    let ctx_cmd_id = 0;
     9    let testharness_context = null;
     10
    711    window.addEventListener("message", function(event) {
    812        const data = event.data;
     
    1216        }
    1317
    14         if (data.type !== "testdriver-complete") {
    15             return;
    16         }
    17 
    18         if (data.status === "success") {
    19             result = JSON.parse(data.message).result;
    20             pending_resolve(result);
     18        if (is_test_context && data.type === "testdriver-command") {
     19            const command = data.message;
     20            const ctx_id = command.cmd_id;
     21            delete command.cmd_id;
     22            const cmd_id = window.__wptrunner_message_queue.push(command);
     23            let on_success = (data) => {
     24                data.type = "testdriver-complete";
     25                data.cmd_id = ctx_id;
     26                event.source.postMessage(data, "*");
     27            };
     28            let on_failure = (data) => {
     29                data.type = "testdriver-complete";
     30                data.cmd_id = ctx_id;
     31                event.source.postMessage(data, "*");
     32            };
     33            pending.set(cmd_id, [on_success, on_failure]);
     34        } else if (data.type === "testdriver-complete") {
     35            const cmd_id = data.cmd_id;
     36            const [on_success, on_failure] = pending.get(cmd_id);
     37            pending.clear(cmd_id);
     38            const resolver = data.status === "success" ? on_success : on_failure;
     39            resolver(data);
     40            if (is_test_context) {
     41                window.__wptrunner_process_next_event();
     42            }
     43        }
     44    });
     45
     46    // Code copied from /common/utils.js
     47    function rand_int(bits) {
     48        if (bits < 1 || bits > 53) {
     49            throw new TypeError();
    2150        } else {
    22             pending_reject(`${data.status}: ${data.message}`);
    23         }
    24     });
    25 
    26     let last_window_id = 0;
     51            if (bits >= 1 && bits <= 30) {
     52                return 0 | ((1 << bits) * Math.random());
     53            } else {
     54                var high = (0 | ((1 << (bits - 30)) * Math.random())) * (1 << 30);
     55                var low = 0 | ((1 << 30) * Math.random());
     56                return  high + low;
     57            }
     58        }
     59    }
     60
     61    function to_hex(x, length) {
     62        var rv = x.toString(16);
     63        while (rv.length < length) {
     64            rv = "0" + rv;
     65        }
     66        return rv;
     67    }
     68
    2769    function get_window_id(win) {
    28         if (win === window) {
     70        if (win == window && is_test_context) {
    2971            return null;
    3072        }
    31         // This is a hack until some implementations support proper window ids
    32         // It won't work cross-frame
    33         if (!win.name) {
    34             win.name = "__wptrunner_window " + last_window_id++;
    35         }
    36         return win.name;
     73        if (!win.__wptrunner_id) {
     74            // generate a uuid
     75            win.__wptrunner_id = [to_hex(rand_int(32), 8),
     76                                  to_hex(rand_int(16), 4),
     77                                  to_hex(0x4000 | rand_int(12), 4),
     78                                  to_hex(0x8000 | rand_int(14), 4),
     79                                  to_hex(rand_int(48), 12)].join("-");
     80        }
     81        return win.__wptrunner_id;
    3782    }
    3883
     
    4590            throw new Error("Browsing context for element was detached");
    4691        }
    47         let top = elementWindow.top;
    48         if (elementWindow === window) {
    49             if (top !== window) {
    50                 throw new Error("Can't load testdriver in a frame");
    51             }
    52             // For the current window just return null
    53             return null;
    54         }
    55         let rv = [];
    56         let currentWindow = elementWindow;
    57         while (currentWindow !== top) {
    58             rv.push(Array.prototype.indexOf.call(currentWindow.parent.frames, currentWindow));
    59             currentWindow = currentWindow.parent;
    60         }
    61         rv.push(top !== window ? get_window_id(top) : null);
    62         rv.reverse();
    63         return rv;
     92        return elementWindow;
    6493    };
    6594
     
    94123    };
    95124
     125    const create_action = function(name, props) {
     126        let cmd_id;
     127        const action_msg = {type: "action",
     128                            action: name,
     129                            ...props};
     130        if (action_msg.context) {
     131          action_msg.context = get_window_id(action_msg.context);
     132        }
     133        if (is_test_context) {
     134            cmd_id = window.__wptrunner_message_queue.push(action_msg);
     135        } else {
     136            if (testharness_context === null) {
     137                throw new Error("Tried to run in a non-testharness window without a call to set_test_context");
     138            }
     139            cmd_id = ctx_cmd_id++;
     140            action_msg.cmd_id = cmd_id;
     141            window.test_driver.message_test({type: "testdriver-command",
     142                                             message: action_msg});
     143        }
     144        const pending_promise = new Promise(function(resolve, reject) {
     145            const on_success = data => {
     146                result = JSON.parse(data.message).result;
     147                resolve(result);
     148            };
     149            const on_failure = data => {
     150                reject(`${data.status}: ${data.message}`);
     151            };
     152            pending.set(cmd_id, [on_success, on_failure]);
     153        });
     154        return pending_promise;
     155    };
     156
    96157    window.test_driver_internal.in_automation = true;
    97158
     159    window.test_driver_internal.set_test_context = function(context) {
     160        if (window.__wptrunner_message_queue) {
     161            throw new Error("Tried to set testharness context in a window containing testharness.js");
     162        }
     163        testharness_context = context;
     164    };
     165
    98166    window.test_driver_internal.click = function(element) {
     167        const selector = get_selector(element);
    99168        const context = get_context(element);
    100         const selector = get_selector(element);
    101         const pending_promise = new Promise(function(resolve, reject) {
    102             pending_resolve = resolve;
    103             pending_reject = reject;
    104         });
    105         window.__wptrunner_message_queue.push({"type": "action",
    106                                                "action": "click",
    107                                                selector,
    108                                                context});
    109         return pending_promise;
     169        return create_action("click", {selector, context});
    110170    };
    111171
     
    113173        const selector = get_selector(element);
    114174        const context = get_context(element);
    115         const pending_promise = new Promise(function(resolve, reject) {
    116             pending_resolve = resolve;
    117             pending_reject = reject;
    118         });
    119         window.__wptrunner_message_queue.push({"type": "action",
    120                                                "action": "send_keys",
    121                                                selector,
    122                                                keys,
    123                                                context});
    124         return pending_promise;
    125     };
    126 
    127     window.test_driver_internal.action_sequence = function(actions) {
    128         const pending_promise = new Promise(function(resolve, reject) {
    129             pending_resolve = resolve;
    130             pending_reject = reject;
    131         });
    132         let context = null;
     175        return create_action("send_keys", {selector, keys, context});
     176    };
     177
     178    window.test_driver_internal.action_sequence = function(actions, context=null) {
    133179        for (let actionSequence of actions) {
    134180            if (actionSequence.type == "pointer") {
     
    146192            }
    147193        }
    148         window.__wptrunner_message_queue.push({type: "action",
    149                                                action: "action_sequence",
    150                                                actions,
    151                                                context});
    152         return pending_promise;
    153     };
    154 
    155     window.test_driver_internal.generate_test_report = function(message) {
    156         const pending_promise = new Promise(function(resolve, reject) {
    157             pending_resolve = resolve;
    158             pending_reject = reject;
    159         });
    160         window.__wptrunner_message_queue.push({"type": "action",
    161                                                "action": "generate_test_report",
    162                                                message});
    163         return pending_promise;
    164     };
    165 
    166     window.test_driver_internal.set_permission = function(permission_params) {
    167         const pending_promise = new Promise(function(resolve, reject) {
    168             pending_resolve = resolve;
    169             pending_reject = reject;
    170         });
    171         window.__wptrunner_message_queue.push({"type": "action",
    172                                                "action": "set_permission",
    173                                                permission_params});
    174         return pending_promise;
    175     };
    176 
    177     window.test_driver_internal.add_virtual_authenticator = function(config) {
    178         const pending_promise = new Promise(function(resolve, reject) {
    179             pending_resolve = resolve;
    180             pending_reject = reject;
    181         });
    182         window.__wptrunner_message_queue.push({"type": "action",
    183                                                "action": "add_virtual_authenticator",
    184                                                config});
    185         return pending_promise;
    186     };
    187 
    188     window.test_driver_internal.remove_virtual_authenticator = function(authenticator_id) {
    189         const pending_promise = new Promise(function(resolve, reject) {
    190             pending_resolve = resolve;
    191             pending_reject = reject;
    192         });
    193         window.__wptrunner_message_queue.push({"type": "action",
    194                                                "action": "remove_virtual_authenticator",
    195                                                authenticator_id});
    196         return pending_promise;
    197     };
    198 
    199     window.test_driver_internal.add_credential = function(authenticator_id, credential) {
    200         const pending_promise = new Promise(function(resolve, reject) {
    201             pending_resolve = resolve;
    202             pending_reject = reject;
    203         });
    204         window.__wptrunner_message_queue.push({"type": "action",
    205                                                "action": "add_credential",
    206                                                authenticator_id, credential});
    207         return pending_promise;
    208     };
    209 
    210     window.test_driver_internal.get_credentials = function(authenticator_id) {
    211         const pending_promise = new Promise(function(resolve, reject) {
    212             pending_resolve = resolve;
    213             pending_reject = reject;
    214         });
    215         window.__wptrunner_message_queue.push({"type": "action",
    216                                                "action": "get_credentials",
    217                                                authenticator_id});
    218         return pending_promise;
    219     };
    220 
    221     window.test_driver_internal.remove_credential = function(authenticator_id, credential_id) {
    222         const pending_promise = new Promise(function(resolve, reject) {
    223             pending_resolve = resolve;
    224             pending_reject = reject;
    225         });
    226         window.__wptrunner_message_queue.push({"type": "action",
    227                                                "action": "remove_credential",
    228                                                authenticator_id,
    229                                                credential_id});
    230         return pending_promise;
    231     };
    232 
    233     window.test_driver_internal.remove_all_credentials = function(authenticator_id) {
    234         const pending_promise = new Promise(function(resolve, reject) {
    235             pending_resolve = resolve;
    236             pending_reject = reject;
    237         });
    238         window.__wptrunner_message_queue.push({"type": "action",
    239                                                "action": "remove_all_credentials",
    240                                                authenticator_id});
    241         return pending_promise;
    242     };
    243 
    244     window.test_driver_internal.set_user_verified = function(authenticator_id, uv) {
    245         const pending_promise = new Promise(function(resolve, reject) {
    246             pending_resolve = resolve;
    247             pending_reject = reject;
    248         });
    249         window.__wptrunner_message_queue.push({"type": "action",
    250                                                "action": "set_user_verified",
    251                                                authenticator_id,
    252                                                uv});
    253         return pending_promise;
     194        return create_action("action_sequence", {actions, context});
     195    };
     196
     197    window.test_driver_internal.generate_test_report = function(message, context=null) {
     198        return create_action("generate_test_report", {message, context});
     199    };
     200
     201    window.test_driver_internal.set_permission = function(permission_params, context=null) {
     202        return create_action("set_permission", {permission_params, context});
     203    };
     204
     205    window.test_driver_internal.add_virtual_authenticator = function(config, context=null) {
     206        return create_action("add_virtual_authenticator", {config, context});
     207    };
     208
     209    window.test_driver_internal.remove_virtual_authenticator = function(authenticator_id, context=null) {
     210        return create_action("remove_virtual_authenticator", {authenticator_id, context});
     211    };
     212
     213    window.test_driver_internal.add_credential = function(authenticator_id, credential, context=null) {
     214        return create_action("add_credential", {authenticator_id, credential, context});
     215    };
     216
     217    window.test_driver_internal.get_credentials = function(authenticator_id, context=null) {
     218        return create_action("get_credentials", {authenticator_id, context});
     219    };
     220
     221    window.test_driver_internal.remove_credential = function(authenticator_id, credential_id, context=null) {
     222        return create_action("remove_credential", {authenticator_id, credential_id, context});
     223    };
     224
     225    window.test_driver_internal.remove_all_credentials = function(authenticator_id, context=null) {
     226        return create_action("remove_all_credentials", {authenticator_id, context});
     227    };
     228
     229    window.test_driver_internal.set_user_verified = function(authenticator_id, uv, context=null) {
     230        return create_action("set_user_verified", {authenticator_id, uv, context});
    254231    };
    255232})();
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/testharnessreport.js

    r252358 r268857  
    11class MessageQueue {
    22  constructor() {
     3    this.item_id = 0;
    34    this._queue = [];
    45  }
    56
    67  push(item) {
     8    let cmd_id = this.item_id++;
     9    item.id = cmd_id;
    710    this._queue.push(item);
    811    __wptrunner_process_next_event();
     12    return cmd_id;
    913  }
    1014
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/webdriver_server.py

    r267831 r268857  
    132132        return [self.binary,
    133133                cmd_arg("port", str(self.port)),
    134                 cmd_arg("url-base", self.base_path) if self.base_path else ""] + self._args
     134                cmd_arg("url-base", self.base_path) if self.base_path else "",
     135                cmd_arg("enable-chrome-logs")] + self._args
    135136
    136137class CWTChromeDriverServer(WebDriverServer):
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/wptcommandline.py

    r267831 r268857  
    315315    servo_group = parser.add_argument_group("Chrome-specific")
    316316    servo_group.add_argument("--enable-mojojs", action="store_true", default=False,
    317                              help="Enable MojoJS for testing. Mojo bindings need to be available in "
    318                              "_venv2/mojojs.")
     317                             help="Enable MojoJS for testing. Note that this flag is usally "
     318                             "enabled automatically by `wpt run`, if it succeeds in downloading "
     319                             "the right version of mojojs.zip or if --mojojs-path is specified.")
     320    servo_group.add_argument("--mojojs-path",
     321                             help="Path to mojojs gen/ directory. If it is not specified, `wpt run` "
     322                             "will download and extract mojojs.zip into _venv2/mojojs/gen.")
    319323
    320324    sauce_group = parser.add_argument_group("Sauce Labs-specific")
  • trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/wptrunner.py

    r267831 r268857  
    214214                                                                       **kwargs)
    215215
     216        mojojs_path = kwargs["mojojs_path"] if kwargs["enable_mojojs"] else None
     217
    216218        recording.set(["startup", "start_environment"])
    217219        with env.TestEnvironment(test_paths,
     
    223225                                 env_extras,
    224226                                 kwargs["enable_quic"],
    225                                  kwargs["enable_mojojs"]) as test_environment:
     227                                 mojojs_path) as test_environment:
    226228            recording.set(["startup", "ensure_environment"])
    227229            try:
  • trunk/WebDriverTests/imported/w3c/webdriver/tests/perform_actions/support/refine.py

    r238881 r268857  
    1010            hex_suffix = key[key.index("+") + 1:]
    1111            e["key"] = unichr(int(hex_suffix, 16))
     12
     13        # WebKit sets code as 'Unidentified' for unidentified key codes, but
     14        # tests expect ''.
     15        if "code" in e and e["code"] == "Unidentified":
     16            e["code"] = ""
    1217    return events
    1318
  • trunk/WebDriverTests/imported/w3c/webdriver/tests/print/printcmd.py

    r267831 r268857  
    2828    response = do_print(session, {})
    2929    value = assert_success(response)
    30     pdf = base64.decodestring(value)
     30    pdf = base64.decodestring(ensure_binary(value))
    3131    assert_pdf(pdf)
    3232
  • trunk/WebDriverTests/imported/w3c/webdriver/tests/print/user_prompts.py

    r267831 r268857  
    88from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
    99from tests.support.inline import inline
    10 from printcmd import do_print, assert_pdf
     10from .printcmd import do_print, assert_pdf
    1111
    1212
Note: See TracChangeset for help on using the changeset viewer.