Skip to content

Commit

Permalink
Implement consume_user_activation() for testdriver
Browse files Browse the repository at this point in the history
  • Loading branch information
marcoscaceres committed Dec 18, 2023
1 parent da43adc commit bc3e0bc
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 5 deletions.
6 changes: 6 additions & 0 deletions docs/writing-tests/testdriver.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ the global scope.
.. js:autofunction:: test_driver.bless
```

### User Activation ###

```eval_rst
.. js:autofunction:: test_driver.consume_user_activation
```

### Window State ###
```eval_rst
.. js:autofunction:: test_driver.minimize_window
Expand Down
28 changes: 26 additions & 2 deletions resources/testdriver.js
Original file line number Diff line number Diff line change
Expand Up @@ -1004,7 +1004,27 @@
*/
get_virtual_sensor_information: function(sensor_type, context=null) {
return window.test_driver_internal.get_virtual_sensor_information(sensor_type, context);
}
},
/*
* Consumes the user activation
*
* Matches the consume-user-activation WebDriver command:
* https://html.spec.whatwg.org/#user-activation-user-agent-automation
*
* Which corresponds to these steps in HTML:
* https://html.spec.whatwg.org/#consume-user-activation
*
* @example
* await test_driver.consume_user_activation();
* await test_driver.consume_user_activation(iframe.contentWindow);
*
* @param {WindowProxy?} [context=null] - Browsing context in which to run the
* call.
* @returns {Promise<boolean>} fulfilled when user activation is consumed.
*/
consume_user_activation(context=null) {
return window.test_driver_internal.consume_user_activation(context);
},
};

window.test_driver_internal = {
Expand Down Expand Up @@ -1180,6 +1200,10 @@

async get_virtual_sensor_information(sensor_type, context=null) {
throw new Error("get_virtual_sensor_information() is not implemented by testdriver-vendor.js");
}
},

async consume_user_activation () {
throw new Error("Consume_user_activation() is not implemented by testdriver-vendor.js");
},
};
})();
14 changes: 13 additions & 1 deletion tools/wptrunner/wptrunner/executors/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,16 @@ def __call__(self, payload):
self.logger.debug("Requesting information from %s sensor" % sensor_type)
return self.protocol.virtual_sensor.get_virtual_sensor_information(sensor_type)

class ConsumeUserActivationAction:
name = "consume_user_activation"

def __init__(self, logger, protocol):
self.logger = logger
self.protocol = protocol

def __call__(self, payload):
self.logger.debug("Consuming user activation")
return self.protocol.user_activation.consume_user_activation()

actions = [ClickAction,
DeleteAllCookiesAction,
Expand Down Expand Up @@ -466,4 +476,6 @@ def __call__(self, payload):
CreateVirtualSensorAction,
UpdateVirtualSensorAction,
RemoveVirtualSensorAction,
GetVirtualSensorInformationAction]
GetVirtualSensorInformationAction,
ConsumeUserActivationAction,
]
11 changes: 10 additions & 1 deletion tools/wptrunner/wptrunner/executors/executormarionette.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
PrintProtocolPart,
DebugProtocolPart,
VirtualSensorProtocolPart,
UserActivationProtocolPart,
merge_dicts)


Expand Down Expand Up @@ -741,6 +742,12 @@ def remove_virtual_sensor(self, remove_parameters):
def get_virtual_sensor_information(self, information_parameters):
raise NotImplementedError("get_virtual_sensor_information not yet implemented")

class MarionetteUserActivationProtocolPart(UserActivationProtocolPart):
def setup(self):
self.marionette = self.parent.marionette

def consume_user_activation(self, sensor_type, sensor_params):
raise NotImplementedError("consume_user_activation not yet implemented")

class MarionetteProtocol(Protocol):
implements = [MarionetteBaseProtocolPart,
Expand All @@ -762,7 +769,9 @@ class MarionetteProtocol(Protocol):
MarionettePrintProtocolPart,
MarionetteDebugProtocolPart,
MarionetteAccessibilityProtocolPart,
MarionetteVirtualSensorProtocolPart]
MarionetteVirtualSensorProtocolPart,
MarionetteUserActivationProtocolPart,
]

def __init__(self, executor, browser, capabilities=None, timeout_multiplier=1, e10s=True, ccov=False):
do_delayed_imports()
Expand Down
12 changes: 11 additions & 1 deletion tools/wptrunner/wptrunner/executors/executorwebdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
RPHRegistrationsProtocolPart,
FedCMProtocolPart,
VirtualSensorProtocolPart,
ConsumeUserActivationProtocolPart,
merge_dicts)

from webdriver.client import Session
Expand Down Expand Up @@ -425,6 +426,13 @@ def get_virtual_sensor_information(self, sensor_type):
return self.webdriver.send_session_command("GET", "sensor/%s" % sensor_type)


class WebDriverUserActivationPart(UserActivationProtocolPart):
def setup(self):
self.webdriver = self.parent.webdriver

def consume_user_activation():
return self.webdriver.send_session_command("POST", "consume-user-activation")

class WebDriverProtocol(Protocol):
implements = [WebDriverBaseProtocolPart,
WebDriverTestharnessProtocolPart,
Expand All @@ -443,7 +451,9 @@ class WebDriverProtocol(Protocol):
WebDriverRPHRegistrationsProtocolPart,
WebDriverFedCMProtocolPart,
WebDriverDebugProtocolPart,
WebDriverVirtualSensorPart]
WebDriverVirtualSensorPart,
WebDriverUserActivationPart,
]

def __init__(self, executor, browser, capabilities, **kwargs):
super().__init__(executor, browser)
Expand Down
10 changes: 10 additions & 0 deletions tools/wptrunner/wptrunner/executors/protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -795,3 +795,13 @@ def remove_virtual_sensor(self, sensor_type):
@abstractmethod
def get_virtual_sensor_information(self, sensor_type):
pass

class UserActivationProtocolPart(ProtocolPart):
"""Protocol part for User Activation"""
__metaclass__ = ABCMeta

name = "user_activation"

@abstractmethod
def consume_user_activation(self):
pass
5 changes: 5 additions & 0 deletions tools/wptrunner/wptrunner/testdriver-extra.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,4 +320,9 @@
window.test_driver_internal.get_virtual_sensor_information = function(sensor_type, context=null) {
return create_action("get_virtual_sensor_information", {sensor_type, context});
};

window.test_driver_internal.consume_user_activation = function(context=null) {
return create_action("consume_user_activation", {context});
};

})();

0 comments on commit bc3e0bc

Please sign in to comment.