Commit 07bc7b3c authored by Robert Ma's avatar Robert Ma Committed by Commit Bot

[WPT] Refactor WebBluetooth tests to use test-only-api.js

And remove unused mojom.js files.

Bug: 1094512
Change-Id: Ibe8503d72fff30b96248c14647b65481c06c7b2f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2350482
Commit-Queue: Robert Ma <robertma@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Auto-Submit: Robert Ma <robertma@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798691}
parent 2b2b01f0
......@@ -18,19 +18,6 @@ function loadScript(path) {
return promise;
}
/**
* Loads the scripts in |paths|.
* @param {string[]} paths
* @returns {Promise<void>} A promise chain that resolves when all scripts have
* finished loading.
*/
async function loadScripts(paths) {
for (let path of paths) {
await loadScript(path);
}
return;
}
/**
* Performs the Chromium specific setup necessary to run the tests in the
* Chromium browser. This test file is shared between Web Platform Tests and
......@@ -42,36 +29,30 @@ async function loadScripts(paths) {
* @returns {Promise<void>} Resolves when Chromium specific setup is complete.
*/
async function performChromiumSetup() {
// Make sure we are actually on Chromium with Mojo enabled.
if (typeof Mojo === 'undefined') {
return;
}
// Load the Chromium-specific resources.
let prefix = '/resources/chromium';
let genPrefix = '/gen';
let extra = [];
// Determine path prefixes.
let resPrefix = '/resources';
let extra = ['/resources/chromium/web-bluetooth-test.js'];
const pathname = window.location.pathname;
if (pathname.includes('/LayoutTests/') || pathname.includes('/web_tests/')) {
let root = pathname.match(/.*(?:LayoutTests|web_tests)/);
prefix = `${root}/external/wpt/resources/chromium`;
if (pathname.includes('/web_tests/')) {
let root = pathname.match(/.*(?:web_tests)/);
resPrefix = `${root}/external/wpt/resources`;
extra = [
`${root}/external/wpt/resources/chromium/web-bluetooth-test.js`,
`${root}/resources/bluetooth/bluetooth-fake-adapter.js`,
];
genPrefix = 'file:///gen';
} else if (window.location.pathname.startsWith('/bluetooth/https/')) {
extra = [
'/js-test-resources/bluetooth/bluetooth-fake-adapter.js',
];
}
await loadScripts([
`${genPrefix}/layout_test_data/mojo/public/js/mojo_bindings.js`,
`${genPrefix}/content/test/data/mojo_web_test_helper_test.mojom.js`,
`${genPrefix}/device/bluetooth/public/mojom/uuid.mojom.js`,
`${genPrefix}/url/mojom/origin.mojom.js`,
`${genPrefix}/device/bluetooth/public/mojom/test/fake_bluetooth.mojom.js`,
`${genPrefix}/content/shell/common/web_test/fake_bluetooth_chooser.mojom.js`,
`${prefix}/web-bluetooth-test.js`,
await loadScript(`${resPrefix}/test-only-api.js`);
if (!isChromiumBased) {
return;
}
await loadMojoResources([
'/gen/content/test/data/mojo_web_test_helper_test.mojom.js',
'/gen/device/bluetooth/public/mojom/uuid.mojom.js',
'/gen/url/mojom/origin.mojom.js',
'/gen/device/bluetooth/public/mojom/test/fake_bluetooth.mojom.js',
'/gen/content/shell/common/web_test/fake_bluetooth_chooser.mojom.js',
].concat(extra));
// Call setBluetoothFakeAdapter() to clean up any fake adapters left over by
......@@ -98,8 +79,10 @@ async function performChromiumSetup() {
*/
function bluetooth_test(test_function, name, properties) {
return promise_test(async (t) => {
assert_implements(navigator.bluetooth, 'missing navigator.bluetooth');
// Trigger Chromium-specific setup.
await performChromiumSetup();
assert_implements(navigator.bluetooth.test, 'missing navigator.bluetooth.test');
await test_function(t);
let consumed = await navigator.bluetooth.test.allResponsesConsumed();
assert_true(consumed);
......
......@@ -714,12 +714,13 @@ WEB-PLATFORM.TEST:web-bundle/subresource-loading/subresource-loading-from-web-bu
# Tests that depend on resources in /gen/ in Chromium:
# https://github.com/web-platform-tests/wpt/issues/16455
# Please consult with ecosystem-infra@chromium.org before adding more.
MISSING DEPENDENCY: resources/test-only-api.js
MISSING DEPENDENCY: bluetooth/resources/bluetooth-test.js
MISSING DEPENDENCY: contacts/resources/helpers.js
MISSING DEPENDENCY: credential-management/support/otpcredential-helper.js
MISSING DEPENDENCY: generic-sensor/resources/generic-sensor-helpers.js
MISSING DEPENDENCY: idle-detection/interceptor.https.html
MISSING DEPENDENCY: orientation-event/resources/orientation-event-helpers.js
MISSING DEPENDENCY: resources/test-only-api.js
MISSING DEPENDENCY: screen_enumeration/resources/screenenumeration-helpers.js
MISSING DEPENDENCY: shape-detection/resources/shapedetection-helpers.js
MISSING DEPENDENCY: web-nfc/resources/nfc-helpers.js
......@@ -729,7 +730,6 @@ MISSING DEPENDENCY: webxr/resources/webxr_util.js
# TODO(Hexcles): delete these files once we include them in mojojs.zip.
MOJOM-JS: resources/chromium/image_capture.mojom.js
MOJOM-JS: resources/chromium/sensor_provider.mojom.js
MOJOM-JS: resources/chromium/mojo_web_test_helper_test.mojom.js
MOJOM-JS: resources/chromium/sensor.mojom.js
# Tests that are false positives for using Ahem as a system font
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'content/test/data/mojo_web_test_helper_test.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
// TODO(yzshen): Define these aliases to minimize the differences between the
// old/new modes. Remove them when the old mode goes away.
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('content.mojom');
function MojoWebTestHelper_Reverse_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
MojoWebTestHelper_Reverse_Params.prototype.initDefaults_ = function() {
this.message = null;
};
MojoWebTestHelper_Reverse_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
MojoWebTestHelper_Reverse_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate MojoWebTestHelper_Reverse_Params.message
err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
MojoWebTestHelper_Reverse_Params.encodedSize = codec.kStructHeaderSize + 8;
MojoWebTestHelper_Reverse_Params.decode = function(decoder) {
var packed;
var val = new MojoWebTestHelper_Reverse_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.message = decoder.decodeStruct(codec.String);
return val;
};
MojoWebTestHelper_Reverse_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(MojoWebTestHelper_Reverse_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStruct(codec.String, val.message);
};
function MojoWebTestHelper_Reverse_ResponseParams(values) {
this.initDefaults_();
this.initFields_(values);
}
MojoWebTestHelper_Reverse_ResponseParams.prototype.initDefaults_ = function() {
this.reversed = null;
};
MojoWebTestHelper_Reverse_ResponseParams.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
MojoWebTestHelper_Reverse_ResponseParams.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate MojoWebTestHelper_Reverse_ResponseParams.reversed
err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
MojoWebTestHelper_Reverse_ResponseParams.encodedSize = codec.kStructHeaderSize + 8;
MojoWebTestHelper_Reverse_ResponseParams.decode = function(decoder) {
var packed;
var val = new MojoWebTestHelper_Reverse_ResponseParams();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.reversed = decoder.decodeStruct(codec.String);
return val;
};
MojoWebTestHelper_Reverse_ResponseParams.encode = function(encoder, val) {
var packed;
encoder.writeUint32(MojoWebTestHelper_Reverse_ResponseParams.encodedSize);
encoder.writeUint32(0);
encoder.encodeStruct(codec.String, val.reversed);
};
var kMojoWebTestHelper_Reverse_Name = 0;
function MojoWebTestHelperPtr(handleOrPtrInfo) {
this.ptr = new bindings.InterfacePtrController(MojoWebTestHelper,
handleOrPtrInfo);
}
function MojoWebTestHelperAssociatedPtr(associatedInterfacePtrInfo) {
this.ptr = new associatedBindings.AssociatedInterfacePtrController(
MojoWebTestHelper, associatedInterfacePtrInfo);
}
MojoWebTestHelperAssociatedPtr.prototype =
Object.create(MojoWebTestHelperPtr.prototype);
MojoWebTestHelperAssociatedPtr.prototype.constructor =
MojoWebTestHelperAssociatedPtr;
function MojoWebTestHelperProxy(receiver) {
this.receiver_ = receiver;
}
MojoWebTestHelperPtr.prototype.reverse = function() {
return MojoWebTestHelperProxy.prototype.reverse
.apply(this.ptr.getProxy(), arguments);
};
MojoWebTestHelperProxy.prototype.reverse = function(message) {
var params = new MojoWebTestHelper_Reverse_Params();
params.message = message;
return new Promise(function(resolve, reject) {
var builder = new codec.MessageV1Builder(
kMojoWebTestHelper_Reverse_Name,
codec.align(MojoWebTestHelper_Reverse_Params.encodedSize),
codec.kMessageExpectsResponse, 0);
builder.encodeStruct(MojoWebTestHelper_Reverse_Params, params);
var message = builder.finish();
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
var reader = new codec.MessageReader(message);
var responseParams =
reader.decodeStruct(MojoWebTestHelper_Reverse_ResponseParams);
resolve(responseParams);
}).catch(function(result) {
reject(Error("Connection error: " + result));
});
}.bind(this));
};
function MojoWebTestHelperStub(delegate) {
this.delegate_ = delegate;
}
MojoWebTestHelperStub.prototype.reverse = function(message) {
return this.delegate_ && this.delegate_.reverse && this.delegate_.reverse(message);
}
MojoWebTestHelperStub.prototype.accept = function(message) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
default:
return false;
}
};
MojoWebTestHelperStub.prototype.acceptWithResponder =
function(message, responder) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
case kMojoWebTestHelper_Reverse_Name:
var params = reader.decodeStruct(MojoWebTestHelper_Reverse_Params);
this.reverse(params.message).then(function(response) {
var responseParams =
new MojoWebTestHelper_Reverse_ResponseParams();
responseParams.reversed = response.reversed;
var builder = new codec.MessageV1Builder(
kMojoWebTestHelper_Reverse_Name,
codec.align(MojoWebTestHelper_Reverse_ResponseParams.encodedSize),
codec.kMessageIsResponse, reader.requestID);
builder.encodeStruct(MojoWebTestHelper_Reverse_ResponseParams,
responseParams);
var message = builder.finish();
responder.accept(message);
});
return true;
default:
return false;
}
};
function validateMojoWebTestHelperRequest(messageValidator) {
var message = messageValidator.message;
var paramsClass = null;
switch (message.getName()) {
case kMojoWebTestHelper_Reverse_Name:
if (message.expectsResponse())
paramsClass = MojoWebTestHelper_Reverse_Params;
break;
}
if (paramsClass === null)
return validator.validationError.NONE;
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
}
function validateMojoWebTestHelperResponse(messageValidator) {
var message = messageValidator.message;
var paramsClass = null;
switch (message.getName()) {
case kMojoWebTestHelper_Reverse_Name:
if (message.isResponse())
paramsClass = MojoWebTestHelper_Reverse_ResponseParams;
break;
}
if (paramsClass === null)
return validator.validationError.NONE;
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
}
var MojoWebTestHelper = {
name: 'content.mojom.MojoWebTestHelper',
kVersion: 0,
ptrClass: MojoWebTestHelperPtr,
proxyClass: MojoWebTestHelperProxy,
stubClass: MojoWebTestHelperStub,
validateRequest: validateMojoWebTestHelperRequest,
validateResponse: validateMojoWebTestHelperResponse,
};
MojoWebTestHelperStub.prototype.validator = validateMojoWebTestHelperRequest;
MojoWebTestHelperProxy.prototype.validator = validateMojoWebTestHelperResponse;
exports.MojoWebTestHelper = MojoWebTestHelper;
exports.MojoWebTestHelperPtr = MojoWebTestHelperPtr;
exports.MojoWebTestHelperAssociatedPtr = MojoWebTestHelperAssociatedPtr;
})();
......@@ -31,7 +31,7 @@ function loadScript(path) {
}
/**
* A helper for Chromium-based browsers to load Mojo JS bindingds
* A helper for Chromium-based browsers to load Mojo JS bindings
*
* This is an async function that works in both workers and windows. It first
* loads mojo_bindings.js, disables automatic dependency loading, and loads all
......@@ -39,7 +39,12 @@ function loadScript(path) {
* successfully, or rejects if any exception is raised. If testharness.js is
* used, an uncaught exception will terminate the test with a harness error
* (unless `allow_uncaught_exception` is true), which is usually the desired
* behaviour. Only call this function if isChromiumBased === true.
* behaviour.
*
* This function also works with Blink web tests loaded from file://, in which
* case file:// will be prepended to all '/gen/...' URLs.
*
* Only call this function if isChromiumBased === true.
*
* @param {Array.<string>} resources - A list of scripts to load: Mojo JS
* bindings should be of the form '/gen/../*.mojom.js', the ordering of which
......@@ -55,14 +60,24 @@ async function loadMojoResources(resources) {
return;
}
let genPrefix = '';
if (self.location.pathname.includes('/web_tests/')) {
// Blink internal web tests
genPrefix = 'file://';
}
// We want to load mojo_bindings.js separately to set mojo.config.
if (resources.some(p => p.endsWith('/mojo_bindings.js'))) {
throw new Error('Do not load mojo_bindings.js explicitly.');
}
await loadScript('/gen/layout_test_data/mojo/public/js/mojo_bindings.js');
await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings.js');
mojo.config.autoLoadMojomDeps = false;
for (const path of resources) {
if (path.startsWith('/gen/')) {
await loadScript(genPrefix + path);
} else {
await loadScript(path);
}
}
}
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