Update web-platform-tests to revision 2b7dace05fc1869398ee24f84fda4c0e4c0455ae

This commit is contained in:
WPT Sync Bot 2018-08-31 21:37:12 +00:00 committed by Tom Servo
parent b23125d590
commit 6c901de216
844 changed files with 19802 additions and 3093 deletions

View file

@ -0,0 +1 @@
Content-Type: text/javascript; charset=utf-8

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,227 @@
"use strict";
var ImageCaptureTest = (() => {
// Class that mocks ImageCapture interface defined in
// https://cs.chromium.org/chromium/src/media/capture/mojom/image_capture.mojom
class MockImageCapture {
constructor() {
this.interceptor_ = new MojoInterfaceInterceptor(
media.mojom.ImageCapture.name);
this.interceptor_.oninterfacerequest =
e => this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start();
this.state_ = {
state: {
supportedWhiteBalanceModes: [
media.mojom.MeteringMode.SINGLE_SHOT,
media.mojom.MeteringMode.CONTINUOUS
],
currentWhiteBalanceMode: media.mojom.MeteringMode.CONTINUOUS,
supportedExposureModes: [
media.mojom.MeteringMode.SINGLE_SHOT,
media.mojom.MeteringMode.CONTINUOUS
],
currentExposureMode: media.mojom.MeteringMode.SINGLE_SHOT,
supportedFocusModes: [
media.mojom.MeteringMode.MANUAL,
media.mojom.MeteringMode.SINGLE_SHOT
],
currentFocusMode: media.mojom.MeteringMode.MANUAL,
pointsOfInterest: [{
x: 0.4,
y: 0.6
}],
exposureCompensation: {
min: -200.0,
max: 200.0,
current: 33.0,
step: 33.0
},
colorTemperature: {
min: 2500.0,
max: 6500.0,
current: 6000.0,
step: 1000.0
},
iso: {
min: 100.0,
max: 12000.0,
current: 400.0,
step: 1.0
},
brightness: {
min: 1.0,
max: 10.0,
current: 5.0,
step: 1.0
},
contrast: {
min: 2.0,
max: 9.0,
current: 5.0,
step: 1.0
},
saturation: {
min: 3.0,
max: 8.0,
current: 6.0,
step: 1.0
},
sharpness: {
min: 4.0,
max: 7.0,
current: 7.0,
step: 1.0
},
zoom: {
min: 0.0,
max: 10.0,
current: 5.0,
step: 5.0
},
supportsTorch: true,
torch: false,
redEyeReduction: media.mojom.RedEyeReduction.CONTROLLABLE,
height: {
min: 240.0,
max: 2448.0,
current: 240.0,
step: 2.0
},
width: {
min: 320.0,
max: 3264.0,
current: 320.0,
step: 3.0
},
fillLightMode: [
media.mojom.FillLightMode.AUTO, media.mojom.FillLightMode.FLASH
],
}
};
this.settings_ = null;
this.bindingSet_ = new mojo.BindingSet(media.mojom.ImageCapture);
}
reset() {
this.bindingSet_.closeAllBindings();
this.interceptor_.stop();
}
getPhotoState(source_id) {
return Promise.resolve(this.state_);
}
setOptions(source_id, settings) {
this.settings_ = settings;
if (settings.hasIso)
this.state_.state.iso.current = settings.iso;
if (settings.hasHeight)
this.state_.state.height.current = settings.height;
if (settings.hasWidth)
this.state_.state.width.current = settings.width;
if (settings.hasZoom)
this.state_.state.zoom.current = settings.zoom;
if (settings.hasFocusMode)
this.state_.state.currentFocusMode = settings.focusMode;
if (settings.pointsOfInterest.length > 0) {
this.state_.state.pointsOfInterest =
settings.pointsOfInterest;
}
if (settings.hasExposureMode)
this.state_.state.currentExposureMode = settings.exposureMode;
if (settings.hasExposureCompensation) {
this.state_.state.exposureCompensation.current =
settings.exposureCompensation;
}
if (settings.hasWhiteBalanceMode) {
this.state_.state.currentWhiteBalanceMode =
settings.whiteBalanceMode;
}
if (settings.hasFillLightMode)
this.state_.state.fillLightMode = [settings.fillLightMode];
if (settings.hasRedEyeReduction)
this.state_.state.redEyeReduction = settings.redEyeReduction;
if (settings.hasColorTemperature) {
this.state_.state.colorTemperature.current =
settings.colorTemperature;
}
if (settings.hasBrightness)
this.state_.state.brightness.current = settings.brightness;
if (settings.hasContrast)
this.state_.state.contrast.current = settings.contrast;
if (settings.hasSaturation)
this.state_.state.saturation.current = settings.saturation;
if (settings.hasSharpness)
this.state_.state.sharpness.current = settings.sharpness;
if (settings.hasTorch)
this.state_.state.torch = settings.torch;
return Promise.resolve({
success: true
});
}
takePhoto(source_id) {
return Promise.resolve({
blob: {
mimeType: 'image/cat',
data: new Array(2)
}
});
}
state() {
return this.state_.state;
}
options() {
return this.settings_;
}
}
let testInternal = {
initialized: false,
mockImageCapture: null
}
class ImageCaptureTestChromium {
constructor() {
Object.freeze(this); // Make it immutable.
}
initialize() {
if (testInternal.initialized)
throw new Error('Call reset() before initialize().');
testInternal.mockImageCapture = new MockImageCapture;
testInternal.initialized = true;
}
// Resets state of image capture mocks between test runs.
async reset() {
if (!testInternal.initialized)
throw new Error('Call initialize() before reset().');
testInternal.mockImageCapture.reset();
testInternal.mockImageCapture = null;
testInternal.initialized = false;
await new Promise(resolve => setTimeout(resolve, 0));
}
mockImageCapture() {
return testInternal.mockImageCapture;
}
}
return ImageCaptureTestChromium;
})();

View file

@ -0,0 +1,40 @@
'use strict';
// This polyfill prepares a child context to be attached to a parent context.
// The parent must call navigator.usb.test.attachToContext() to attach to the
// child context.
(() => {
if (this.constructor.name === 'DedicatedWorkerGlobalScope' ||
this !== window.top) {
// Run Chromium specific set up code.
if (typeof MojoInterfaceInterceptor !== 'undefined') {
let messageChannel = new MessageChannel();
messageChannel.port1.onmessage = async (messageEvent) => {
if (messageEvent.data.type === 'Attach') {
messageEvent.data.interfaces.forEach(interfaceName => {
let interfaceInterceptor =
new MojoInterfaceInterceptor(interfaceName);
interfaceInterceptor.oninterfacerequest =
e => messageChannel.port1.postMessage({
type: interfaceName,
handle: e.handle
}, [e.handle]);
interfaceInterceptor.start();
});
// Wait for a call to GetDevices() to ensure that the interface
// handles are forwarded to the parent context.
await navigator.usb.getDevices();
messageChannel.port1.postMessage({ type: 'Complete' });
}
};
let message = { type: 'ReadyForAttachment', port: messageChannel.port2 };
if (typeof Window !== 'undefined')
parent.postMessage(message, '*', [messageChannel.port2]);
else
postMessage(message, [messageChannel.port2]);
}
}
})();

View file

@ -0,0 +1 @@
Content-Type: text/javascript; charset=utf-8

View file

@ -12,9 +12,23 @@ let internal = {
webUsbService: null,
webUsbServiceInterceptor: null,
webUsbServiceCrossFrameProxy: null,
messagePort: null,
};
function getMessagePort(target) {
return new Promise(resolve => {
target.addEventListener('message', messageEvent => {
if (messageEvent.data.type === 'ReadyForAttachment') {
if (internal.messagePort === null) {
internal.messagePort = messageEvent.data.port;
}
resolve();
}
}, {once: true});
});
}
// Converts an ECMAScript String object to an instance of
// mojo_base.mojom.String16.
function mojoString16ToString(string16) {
@ -421,25 +435,6 @@ class FakeUSBDevice {
}
}
// A helper for forwarding MojoHandle instances from one frame to another.
class CrossFrameHandleProxy {
constructor(callback) {
let {handle0, handle1} = Mojo.createMessagePipe();
this.sender_ = handle0;
this.receiver_ = handle1;
this.receiver_.watch({readable: true}, () => {
let message = this.receiver_.readMessage();
assert_equals(message.buffer.byteLength, 0);
assert_equals(message.handles.length, 1);
callback(message.handles[0]);
});
}
forwardHandle(handle) {
this.sender_.writeMessage(new ArrayBuffer, [handle]);
}
}
class USBTest {
constructor() {
this.onrequestdevice = undefined;
@ -449,14 +444,17 @@ class USBTest {
if (internal.initialized)
return;
// Be ready to handle 'ReadyForAttachment' message from child iframes.
if ('window' in self) {
getMessagePort(window);
}
internal.webUsbService = new FakeWebUsbService();
internal.webUsbServiceInterceptor =
new MojoInterfaceInterceptor(blink.mojom.WebUsbService.name);
internal.webUsbServiceInterceptor.oninterfacerequest =
e => internal.webUsbService.addBinding(e.handle);
internal.webUsbServiceInterceptor.start();
internal.webUsbServiceCrossFrameProxy = new CrossFrameHandleProxy(
handle => internal.webUsbService.addBinding(handle));
// Wait for a call to GetDevices() to pass between the renderer and the
// mock in order to establish that everything is set up.
@ -464,20 +462,32 @@ class USBTest {
internal.initialized = true;
}
async attachToWindow(otherWindow) {
// Returns a promise that is resolved when the implementation of |usb| in the
// global scope for |context| is controlled by the current context.
attachToContext(context) {
if (!internal.initialized)
throw new Error('Call initialize() before attachToWindow().');
throw new Error('Call initialize() before attachToContext()');
otherWindow.webUsbServiceInterceptor =
new otherWindow.MojoInterfaceInterceptor(
blink.mojom.WebUsbService.name);
otherWindow.webUsbServiceInterceptor.oninterfacerequest =
e => internal.webUsbServiceCrossFrameProxy.forwardHandle(e.handle);
otherWindow.webUsbServiceInterceptor.start();
// Wait for a call to GetDevices() to pass between the renderer and the
// mock in order to establish that everything is set up.
await otherWindow.navigator.usb.getDevices();
let target = context.constructor.name === 'Worker' ? context : window;
return getMessagePort(target).then(() => {
return new Promise(resolve => {
internal.messagePort.onmessage = channelEvent => {
switch (channelEvent.data.type) {
case blink.mojom.WebUsbService.name:
internal.webUsbService.addBinding(channelEvent.data.handle);
break;
case 'Complete':
resolve();
break;
}
};
internal.messagePort.postMessage({
type: 'Attach' ,
interfaces: [
blink.mojom.WebUsbService.name,
]});
});
});
}
addFakeDevice(deviceInit) {
@ -501,6 +511,9 @@ class USBTest {
// the fact that this polyfill can do this synchronously.
return new Promise(resolve => {
setTimeout(() => {
if (internal.messagePort !== null)
internal.messagePort.close();
internal.messagePort = null;
internal.webUsbService.removeAllDevices();
resolve();
}, 0);