Commit 2285ed7f authored by Ovidio Henriquez's avatar Ovidio Henriquez Committed by Commit Bot

Split flag for WebUSBOnDedicatedAndSharedWorkers

This change splits the runtime enabled flag for
WebUSBOnDedicatedAndSharedWorkers into WebUSBOnDedicatedWorkers and
WebUSBOnSharedWorkers to facilitate the independent development of the
features.

Bug: 837414
Change-Id: Icb9237a42a1f0b27391f602db7b3f395d53dcd6d
Reviewed-on: https://chromium-review.googlesource.com/1098031
Commit-Queue: Ovidio Henriquez <odejesush@chromium.org>
Reviewed-by: default avatarOjan Vafai <ojan@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarChong Zhang <chongz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571914}
parent 5231c96c
...@@ -2372,6 +2372,7 @@ interface WorkerNavigator ...@@ -2372,6 +2372,7 @@ interface WorkerNavigator
getter platform getter platform
getter product getter product
getter storage getter storage
getter usb
getter userAgent getter userAgent
method constructor method constructor
interface WritableStream interface WritableStream
......
...@@ -2329,6 +2329,7 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -2329,6 +2329,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] getter platform [Worker] getter platform
[Worker] getter product [Worker] getter product
[Worker] getter storage [Worker] getter storage
[Worker] getter usb
[Worker] getter userAgent [Worker] getter userAgent
[Worker] method constructor [Worker] method constructor
[Worker] interface WritableStream [Worker] interface WritableStream
......
...@@ -2329,6 +2329,7 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -2329,6 +2329,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] getter platform [Worker] getter platform
[Worker] getter product [Worker] getter product
[Worker] getter storage [Worker] getter storage
[Worker] getter usb
[Worker] getter userAgent [Worker] getter userAgent
[Worker] method constructor [Worker] method constructor
[Worker] interface WritableStream [Worker] interface WritableStream
......
...@@ -268,22 +268,21 @@ void USB::EnsureDeviceManagerConnection() { ...@@ -268,22 +268,21 @@ void USB::EnsureDeviceManagerConnection() {
} }
bool USB::IsContextSupported() const { bool USB::IsContextSupported() const {
ExecutionContext* context = GetExecutionContext();
if (!context)
return false;
if (!(context->IsDedicatedWorkerGlobalScope() ||
context->IsSharedWorkerGlobalScope() || context->IsDocument()))
return false;
// Since WebUSB on Web Workers is in the process of being implemented, we // Since WebUSB on Web Workers is in the process of being implemented, we
// check here if the runtime flag for this feature is enabled. // check here if the runtime flag for the appropriate worker is enabled..
// TODO(https://crbug.com/837406): Remove this check once the feature has // TODO(https://crbug.com/837406): Remove this check once the feature has
// shipped. // shipped.
if (!context->IsDocument() && ExecutionContext* context = GetExecutionContext();
!RuntimeEnabledFeatures::WebUSBOnDedicatedAndSharedWorkersEnabled()) if (!context)
return false; return false;
DCHECK(context->IsDocument() || context->IsDedicatedWorkerGlobalScope() ||
context->IsSharedWorkerGlobalScope());
DCHECK(!context->IsDedicatedWorkerGlobalScope() ||
RuntimeEnabledFeatures::WebUSBOnDedicatedWorkersEnabled());
DCHECK(!context->IsSharedWorkerGlobalScope() ||
RuntimeEnabledFeatures::WebUSBOnSharedWorkersEnabled());
return true; return true;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// https://wicg.github.io/webusb/#usb // https://wicg.github.io/webusb/#usb
[ [
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
SecureContext SecureContext
] interface USB : EventTarget { ] interface USB : EventTarget {
attribute EventHandler onconnect; attribute EventHandler onconnect;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(USBInterface deviceInterface, octet alternateSetting), Constructor(USBInterface deviceInterface, octet alternateSetting),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor RaisesException=Constructor
] interface USBAlternateInterface { ] interface USBAlternateInterface {
readonly attribute octet alternateSetting; readonly attribute octet alternateSetting;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(USBDevice device, octet configurationValue), Constructor(USBDevice device, octet configurationValue),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor RaisesException=Constructor
] interface USBConfiguration { ] interface USBConfiguration {
readonly attribute octet configurationValue; readonly attribute octet configurationValue;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(DOMString type, USBConnectionEventInit eventInitDict), Constructor(DOMString type, USBConnectionEventInit eventInitDict),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB) Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBConnectionEvent : Event { ] interface USBConnectionEvent : Event {
[SameObject] readonly attribute USBDevice device; [SameObject] readonly attribute USBDevice device;
}; };
...@@ -13,7 +13,7 @@ enum USBTransferStatus { ...@@ -13,7 +13,7 @@ enum USBTransferStatus {
// https://wicg.github.io/webusb/#device-usage // https://wicg.github.io/webusb/#device-usage
[ [
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB) Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBDevice { ] interface USBDevice {
readonly attribute octet usbVersionMajor; readonly attribute octet usbVersionMajor;
readonly attribute octet usbVersionMinor; readonly attribute octet usbVersionMinor;
......
...@@ -17,7 +17,7 @@ enum USBEndpointType { ...@@ -17,7 +17,7 @@ enum USBEndpointType {
[ [
Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction), Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor RaisesException=Constructor
] interface USBEndpoint { ] interface USBEndpoint {
readonly attribute octet endpointNumber; readonly attribute octet endpointNumber;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// https://wicg.github.io/webusb/#usbintransferresult // https://wicg.github.io/webusb/#usbintransferresult
[ [
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
Constructor(USBTransferStatus status, optional DataView? data) Constructor(USBTransferStatus status, optional DataView? data)
] interface USBInTransferResult { ] interface USBInTransferResult {
readonly attribute DataView? data; readonly attribute DataView? data;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(USBConfiguration configuration, octet interfaceNumber), Constructor(USBConfiguration configuration, octet interfaceNumber),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor RaisesException=Constructor
] interface USBInterface { ] interface USBInterface {
readonly attribute octet interfaceNumber; readonly attribute octet interfaceNumber;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(USBTransferStatus status, optional DataView? data), Constructor(USBTransferStatus status, optional DataView? data),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB) Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousInTransferPacket { ] interface USBIsochronousInTransferPacket {
readonly attribute USBTransferStatus status; readonly attribute USBTransferStatus status;
readonly attribute DataView? data; readonly attribute DataView? data;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data), Constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB) Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousInTransferResult { ] interface USBIsochronousInTransferResult {
readonly attribute DataView? data; readonly attribute DataView? data;
readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets; readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0), Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB) Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousOutTransferPacket { ] interface USBIsochronousOutTransferPacket {
readonly attribute unsigned long bytesWritten; readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status; readonly attribute USBTransferStatus status;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Constructor(sequence<USBIsochronousOutTransferPacket> packets), Constructor(sequence<USBIsochronousOutTransferPacket> packets),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB) Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousOutTransferResult { ] interface USBIsochronousOutTransferResult {
readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets; readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets;
}; };
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// https://wicg.github.io/webusb/#usbouttransferresult // https://wicg.github.io/webusb/#usbouttransferresult
[ [
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0) Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0)
] interface USBOutTransferResult { ] interface USBOutTransferResult {
readonly attribute unsigned long bytesWritten; readonly attribute unsigned long bytesWritten;
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "third_party/blink/renderer/core/workers/worker_navigator.h" #include "third_party/blink/renderer/core/workers/worker_navigator.h"
#include "third_party/blink/renderer/modules/webusb/usb.h" #include "third_party/blink/renderer/modules/webusb/usb.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
namespace blink { namespace blink {
...@@ -20,22 +21,34 @@ WorkerNavigatorUSB& WorkerNavigatorUSB::From( ...@@ -20,22 +21,34 @@ WorkerNavigatorUSB& WorkerNavigatorUSB::From(
return *supplement; return *supplement;
} }
// static
USB* WorkerNavigatorUSB::usb(ScriptState* script_state, USB* WorkerNavigatorUSB::usb(ScriptState* script_state,
WorkerNavigator& worker_navigator) { WorkerNavigator& worker_navigator) {
return WorkerNavigatorUSB::From(worker_navigator).usb(script_state); return WorkerNavigatorUSB::From(worker_navigator).usb(script_state);
} }
USB* WorkerNavigatorUSB::usb(ScriptState* script_state) { USB* WorkerNavigatorUSB::usb(ScriptState* script_state) {
// A bug in the WebIDL compiler causes this attribute to be exposed to the // A bug in the WebIDL compiler causes this attribute to be incorrectly
// WorkerNavigator interface in the ServiceWorkerGlobalScope, therefore we // exposed in the other worker contexts if one of the RuntimeEnabled flags is
// will just return the empty usb_ member if the current context is a // enabled. Therefore, we will just return the empty usb_ member if the
// ServiceWorkerGlobalScope. // appropriate flag is not enabled for the current context, or if the
// TODO(https://crbug.com/839117): Once this attribute stops being exposed to // current context is a ServiceWorkerGlobalScope.
// the WorkerNavigator for a Service worker, remove this check. // TODO(https://crbug.com/839117): Once this attribute stops being incorrectly
if (!usb_ && // exposed to the worker contexts, remove these checks.
!ExecutionContext::From(script_state)->IsServiceWorkerGlobalScope()) { if (!usb_) {
DCHECK(ExecutionContext::From(script_state)); ExecutionContext* context = ExecutionContext::From(script_state);
usb_ = USB::Create(*ExecutionContext::From(script_state)); DCHECK(context);
bool isDedicatedWorkerAndEnabled =
context->IsDedicatedWorkerGlobalScope() &&
RuntimeEnabledFeatures::WebUSBOnDedicatedWorkersEnabled();
bool isSharedWorkerAndEnabled =
context->IsSharedWorkerGlobalScope() &&
RuntimeEnabledFeatures::WebUSBOnSharedWorkersEnabled();
if (isDedicatedWorkerAndEnabled || isSharedWorkerAndEnabled) {
usb_ = USB::Create(*context);
}
} }
return usb_; return usb_;
} }
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
// https://wicg.github.io/webusb/#enumeration // https://wicg.github.io/webusb/#enumeration
[ [
Exposed=(DedicatedWorker, SharedWorker), Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers),
ImplementedAs=WorkerNavigatorUSB, ImplementedAs=WorkerNavigatorUSB,
SecureContext SecureContext
] partial interface WorkerNavigator { ] partial interface WorkerNavigator {
[CallWith=ScriptState, SameObject, RuntimeEnabled=WebUSBOnDedicatedAndSharedWorkers] readonly attribute USB usb; [CallWith=ScriptState, SameObject] readonly attribute USB usb;
}; };
...@@ -1350,7 +1350,12 @@ ...@@ -1350,7 +1350,12 @@
status: "stable", status: "stable",
}, },
{ {
name: "WebUSBOnDedicatedAndSharedWorkers", name: "WebUSBOnDedicatedWorkers",
status: "experimental",
depends_on: ["WebUSB"],
},
{
name: "WebUSBOnSharedWorkers",
status: "test", status: "test",
depends_on: ["WebUSB"], depends_on: ["WebUSB"],
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment