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
getter platform
getter product
getter storage
getter usb
getter userAgent
method constructor
interface WritableStream
......
......@@ -2329,6 +2329,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] getter platform
[Worker] getter product
[Worker] getter storage
[Worker] getter usb
[Worker] getter userAgent
[Worker] method constructor
[Worker] interface WritableStream
......
......@@ -2329,6 +2329,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] getter platform
[Worker] getter product
[Worker] getter storage
[Worker] getter usb
[Worker] getter userAgent
[Worker] method constructor
[Worker] interface WritableStream
......
......@@ -268,22 +268,21 @@ void USB::EnsureDeviceManagerConnection() {
}
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
// 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
// shipped.
if (!context->IsDocument() &&
!RuntimeEnabledFeatures::WebUSBOnDedicatedAndSharedWorkersEnabled())
ExecutionContext* context = GetExecutionContext();
if (!context)
return false;
DCHECK(context->IsDocument() || context->IsDedicatedWorkerGlobalScope() ||
context->IsSharedWorkerGlobalScope());
DCHECK(!context->IsDedicatedWorkerGlobalScope() ||
RuntimeEnabledFeatures::WebUSBOnDedicatedWorkersEnabled());
DCHECK(!context->IsSharedWorkerGlobalScope() ||
RuntimeEnabledFeatures::WebUSBOnSharedWorkersEnabled());
return true;
}
......
......@@ -5,7 +5,7 @@
// https://wicg.github.io/webusb/#usb
[
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB),
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
SecureContext
] interface USB : EventTarget {
attribute EventHandler onconnect;
......
......@@ -6,7 +6,7 @@
[
Constructor(USBInterface deviceInterface, octet alternateSetting),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB),
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor
] interface USBAlternateInterface {
readonly attribute octet alternateSetting;
......
......@@ -6,7 +6,7 @@
[
Constructor(USBDevice device, octet configurationValue),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB),
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor
] interface USBConfiguration {
readonly attribute octet configurationValue;
......
......@@ -6,7 +6,7 @@
[
Constructor(DOMString type, USBConnectionEventInit eventInitDict),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB)
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBConnectionEvent : Event {
[SameObject] readonly attribute USBDevice device;
};
......@@ -13,7 +13,7 @@ enum USBTransferStatus {
// https://wicg.github.io/webusb/#device-usage
[
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB)
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBDevice {
readonly attribute octet usbVersionMajor;
readonly attribute octet usbVersionMinor;
......
......@@ -17,7 +17,7 @@ enum USBEndpointType {
[
Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB),
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor
] interface USBEndpoint {
readonly attribute octet endpointNumber;
......
......@@ -5,7 +5,7 @@
// 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)
] interface USBInTransferResult {
readonly attribute DataView? data;
......
......@@ -6,7 +6,7 @@
[
Constructor(USBConfiguration configuration, octet interfaceNumber),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB),
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB),
RaisesException=Constructor
] interface USBInterface {
readonly attribute octet interfaceNumber;
......
......@@ -6,7 +6,7 @@
[
Constructor(USBTransferStatus status, optional DataView? data),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB)
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousInTransferPacket {
readonly attribute USBTransferStatus status;
readonly attribute DataView? data;
......
......@@ -6,7 +6,7 @@
[
Constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB)
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousInTransferResult {
readonly attribute DataView? data;
readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets;
......
......@@ -6,7 +6,7 @@
[
Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB)
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousOutTransferPacket {
readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status;
......
......@@ -6,7 +6,7 @@
[
Constructor(sequence<USBIsochronousOutTransferPacket> packets),
Exposed(DedicatedWorker WebUSBOnDedicatedAndSharedWorkers, SharedWorker WebUSBOnDedicatedAndSharedWorkers, Window WebUSB)
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers, Window WebUSB)
] interface USBIsochronousOutTransferResult {
readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets;
};
......@@ -5,7 +5,7 @@
// 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)
] interface USBOutTransferResult {
readonly attribute unsigned long bytesWritten;
......
......@@ -6,6 +6,7 @@
#include "third_party/blink/renderer/core/workers/worker_navigator.h"
#include "third_party/blink/renderer/modules/webusb/usb.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
namespace blink {
......@@ -20,22 +21,34 @@ WorkerNavigatorUSB& WorkerNavigatorUSB::From(
return *supplement;
}
// static
USB* WorkerNavigatorUSB::usb(ScriptState* script_state,
WorkerNavigator& worker_navigator) {
return WorkerNavigatorUSB::From(worker_navigator).usb(script_state);
}
USB* WorkerNavigatorUSB::usb(ScriptState* script_state) {
// A bug in the WebIDL compiler causes this attribute to be exposed to the
// WorkerNavigator interface in the ServiceWorkerGlobalScope, therefore we
// will just return the empty usb_ member if the current context is a
// ServiceWorkerGlobalScope.
// TODO(https://crbug.com/839117): Once this attribute stops being exposed to
// the WorkerNavigator for a Service worker, remove this check.
if (!usb_ &&
!ExecutionContext::From(script_state)->IsServiceWorkerGlobalScope()) {
DCHECK(ExecutionContext::From(script_state));
usb_ = USB::Create(*ExecutionContext::From(script_state));
// A bug in the WebIDL compiler causes this attribute to be incorrectly
// exposed in the other worker contexts if one of the RuntimeEnabled flags is
// enabled. Therefore, we will just return the empty usb_ member if the
// appropriate flag is not enabled for the current context, or if the
// current context is a ServiceWorkerGlobalScope.
// TODO(https://crbug.com/839117): Once this attribute stops being incorrectly
// exposed to the worker contexts, remove these checks.
if (!usb_) {
ExecutionContext* context = 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_;
}
......
......@@ -5,9 +5,9 @@
// https://wicg.github.io/webusb/#enumeration
[
Exposed=(DedicatedWorker, SharedWorker),
Exposed(DedicatedWorker WebUSBOnDedicatedWorkers, SharedWorker WebUSBOnSharedWorkers),
ImplementedAs=WorkerNavigatorUSB,
SecureContext
] partial interface WorkerNavigator {
[CallWith=ScriptState, SameObject, RuntimeEnabled=WebUSBOnDedicatedAndSharedWorkers] readonly attribute USB usb;
[CallWith=ScriptState, SameObject] readonly attribute USB usb;
};
......@@ -1350,7 +1350,12 @@
status: "stable",
},
{
name: "WebUSBOnDedicatedAndSharedWorkers",
name: "WebUSBOnDedicatedWorkers",
status: "experimental",
depends_on: ["WebUSB"],
},
{
name: "WebUSBOnSharedWorkers",
status: "test",
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