| Index: third_party/WebKit/LayoutTests/resources/mojo-helpers.js
|
| diff --git a/third_party/WebKit/LayoutTests/resources/mojo-helpers.js b/third_party/WebKit/LayoutTests/resources/mojo-helpers.js
|
| index 625d7fdfe46e06c320489bf8f8267644dfb9c658..bad8c7e590b39dbe9eb15604665b85d96baff64e 100644
|
| --- a/third_party/WebKit/LayoutTests/resources/mojo-helpers.js
|
| +++ b/third_party/WebKit/LayoutTests/resources/mojo-helpers.js
|
| @@ -4,56 +4,64 @@
|
| */
|
| 'use strict';
|
|
|
| +// Fix up the global window.define, since all baked-in Mojo modules expect to
|
| +// find it there. This define() also returns a promise to the module.
|
| +function define(name, deps, factory) {
|
| + return new Promise(resolve => {
|
| + mojo.define(name, deps, (...modules) => {
|
| + let result = factory(...modules);
|
| + resolve(result);
|
| + return result;
|
| + });
|
| + });
|
| +}
|
| +
|
| +// Returns a promise to an object that exposes common Mojo module interfaces.
|
| +// Additional modules to load can be specified in the |modules| parameter. The
|
| +// result will contain them, in the same order, in the |modules| field.
|
| +function loadMojoModules(name, modules = []) {
|
| + return define('Mojo layout test module: ' + name, [
|
| + 'mojo/public/js/core',
|
| + 'mojo/public/js/router',
|
| + 'mojo/public/js/support',
|
| + 'content/public/renderer/service_provider',
|
| + ].concat(modules), (core, router, support, serviceProvider, ...rest) => {
|
| + return {
|
| + core: core,
|
| + router: router,
|
| + support: support,
|
| +
|
| + // |serviceProvider| is a bit of a misnomer. It should probably be
|
| + // called |serviceRegistry|, so let's call it that here.
|
| + serviceRegistry: serviceProvider,
|
| +
|
| + modules: rest,
|
| + };
|
| + });
|
| +}
|
| +
|
| // Runs a promise_test which depends on the Mojo system API modules available to
|
| // all layout tests. The test implementation function is called with an Object
|
| // that exposes common Mojo module interfaces.
|
| function mojo_test(func, name, properties) {
|
| - // Fix up the global window.define, since all baked-in Mojo modules expect to
|
| - // find it there.
|
| - window.define = mojo.define;
|
| -
|
| - promise_test(() => {
|
| - return new Promise((resolve, reject) => {
|
| - define('Mojo layout test module: ' + name, [
|
| - 'mojo/public/js/core',
|
| - 'mojo/public/js/router',
|
| - 'content/public/renderer/service_provider',
|
| - ], (core, router, serviceProvider) => {
|
| - try {
|
| - resolve(func({
|
| - core: core,
|
| - router: router,
|
| -
|
| - // |serviceProvider| is a bit of a misnomer. It should probably be
|
| - // called |serviceRegistry|, so let's call it that here.
|
| - serviceRegistry: serviceProvider,
|
| - }));
|
| - } catch (e) {
|
| - reject(e);
|
| - }
|
| - });
|
| - });
|
| - }, name, properties);
|
| + promise_test(() => loadMojoModules(name).then(func), name, properties);
|
| }
|
|
|
| -// Polls aggressively for a message to become available on a pipe.
|
| +// Waits for a message to become available on a pipe.
|
| function mojo_wait_for_incoming_message(mojo, pipe) {
|
| return new Promise((resolve, reject) => {
|
| - let wait = () => {
|
| - let result = mojo.core.readMessage(pipe, 0);
|
| - if (result.result === mojo.core.RESULT_SHOULD_WAIT) {
|
| - setTimeout(wait);
|
| + mojo.support.asyncWait(pipe, mojo.core.HANDLE_SIGNAL_READABLE, result => {
|
| + if (result != mojo.core.RESULT_OK) {
|
| + reject(result);
|
| return;
|
| }
|
| -
|
| - if (result.result !== mojo.core.RESULT_OK) {
|
| - reject(result.result);
|
| + let buffer, handles;
|
| + ({ result, buffer, handles } = mojo.core.readMessage(pipe, 0));
|
| + if (result !== mojo.core.RESULT_OK) {
|
| + reject(result);
|
| return;
|
| }
|
| -
|
| - resolve({ buffer: result.buffer, handles: result.handles });
|
| - };
|
| -
|
| - wait();
|
| + resolve({ buffer, handles });
|
| + });
|
| });
|
| };
|
|
|