Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Unified Diff: LayoutTests/http/tests/navigatorconnect/resources/test-helpers.js

Issue 1198653004: Update client side navigator.connect API to use ServicePortCollection [3/3] (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@serviceport-part2
Patch Set: rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/http/tests/navigatorconnect/resources/connect-tests.js ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: LayoutTests/http/tests/navigatorconnect/resources/test-helpers.js
diff --git a/LayoutTests/http/tests/navigatorconnect/resources/test-helpers.js b/LayoutTests/http/tests/navigatorconnect/resources/test-helpers.js
index 9c40755d8c447f05997677e1b3a6d9b88f5f926a..29f26da74df6fae488740144d00b9962971af752 100644
--- a/LayoutTests/http/tests/navigatorconnect/resources/test-helpers.js
+++ b/LayoutTests/http/tests/navigatorconnect/resources/test-helpers.js
@@ -17,9 +17,11 @@ function reply_as_promise(t, port) {
});
}
-// Method that behaves similarly to navigator.connect, but the actual connect
-// call is made from a cross origin iframe.
-function cross_origin_connect(t, service) {
+// Method that behaves similarly to navigator.services.connect, but the actual
+// connect call is made from a cross origin iframe. Also the returned port is a
+// MessagePort instead of a ServicePort, but with targetURL, name and data
+// attributes set.
+function cross_origin_connect(t, service, options) {
// |service| could be a relative URL, but for this to work from the iframe it
// needs an absolute URL.
var target_url = new URL(service, location.origin + base_path());
@@ -28,52 +30,43 @@ function cross_origin_connect(t, service) {
.then(function(iframe) {
var channel = new MessageChannel();
iframe.contentWindow.postMessage(
- {connect: target_url.href, port: channel.port2}, '*', [channel.port2]);
+ {connect: target_url.href, port: channel.port2, options: options}, '*', [channel.port2]);
return reply_as_promise(t, channel.port1);
- });
+ })
+ .then(function(result) {
+ var port = result.port;
+ port.targetURL = result.targetURL;
+ port.name = result.name;
+ port.data = result.data;
+ return port;
+ });
}
// Method that behaves similarly to navigator.connect, but the actual connect
-// call is made from a worker.
-function connect_from_worker(t, service) {
+// call is made from a worker. Also the returned port is a MessagePort instead
+// of a ServicePort, but with targetURL, name and data attributes set.
+function connect_from_worker(t, service, options) {
// |service| is a relative URL, but for this to work from the worker it needs
// an absolute URL.
var target_url = location.origin + base_path() + service;
var worker = new Worker('resources/connect-helper.js');
var channel = new MessageChannel();
worker.postMessage
- ({connect: target_url, port: channel.port2}, [channel.port2]);
- return reply_as_promise(t, channel.port1);
-}
-
-// Similar to Promise.race, except that returned promise only rejects if all
-// passed promises reject. Used temporarily to support both old and new client
-// side APIs.
-function first_to_resolve(promises) {
- return new Promise(function(resolve, reject) {
- var remaining = promises.length;
- var resolved = false;
- for (var i = 0; i < promises.length; ++i) {
- Promise.resolve(promises[i])
- .then(function(result) {
- if (!resolved) {
- resolve(result);
- resolved = true;
- }
- })
- .catch(function(result) {
- remaining--;
- if (remaining === 0) {
- reject(result);
- }
- });
- }
- });
+ ({connect: target_url, port: channel.port2, options: options}, [channel.port2]);
+ return reply_as_promise(t, channel.port1)
+ .then(function(result) {
+ var port = result.port;
+ port.targetURL = result.targetURL;
+ port.name = result.name;
+ port.data = result.data;
+ return port;
+ });
}
// Takes (a promise resolving to) a ServicePort instance, and returns a Promise
-// that resolves to a MessagePort wrapping that ServicePort. Used to support
-// both old and new APIs at the same time.
+// that resolves to a MessagePort wrapping that ServicePort. Used to simplify
+// testing code and to allow forwarding a connection from a cross origin iframe
+// or worker to the main test runner.
function wrap_in_port(maybe_port) {
return Promise.resolve(maybe_port).then(
function(port) {
@@ -86,6 +79,9 @@ function wrap_in_port(maybe_port) {
navigator.services.onmessage = function(event) {
channel.port2.postMessage(event.data, event.ports);
};
+ channel.port1.targetURL = port.targetURL;
+ channel.port1.name = port.name;
+ channel.port1.data = port.data;
return channel.port1;
}
);
« no previous file with comments | « LayoutTests/http/tests/navigatorconnect/resources/connect-tests.js ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698