| Index: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/test-helpers.sub.js
|
| diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/test-helpers.js b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/test-helpers.sub.js
|
| similarity index 71%
|
| copy from third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/test-helpers.js
|
| copy to third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/test-helpers.sub.js
|
| index 0bcdcc3e348b37640b9f5dc12b62dff057348410..b0ffbd40625c93a882740771bb967149c13023e0 100644
|
| --- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/test-helpers.js
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/test-helpers.sub.js
|
| @@ -13,10 +13,13 @@ function service_worker_unregister_and_register(test, url, scope) {
|
| 'unregister and register should not fail'));
|
| }
|
|
|
| -function service_worker_unregister(test, documentUrl) {
|
| - return navigator.serviceWorker.getRegistration(documentUrl)
|
| +// This unregisters the registration that precisely matches scope. Use this
|
| +// when unregistering by scope. If no registration is found, it just resolves.
|
| +function service_worker_unregister(test, scope) {
|
| + var absoluteScope = (new URL(scope, window.location).href);
|
| + return navigator.serviceWorker.getRegistration(scope)
|
| .then(function(registration) {
|
| - if (registration)
|
| + if (registration && registration.scope === absoluteScope)
|
| return registration.unregister();
|
| })
|
| .catch(unreached_rejection(test, 'unregister should not fail'));
|
| @@ -44,31 +47,14 @@ function unreached_rejection(test, prefix) {
|
| }
|
|
|
| // Adds an iframe to the document and returns a promise that resolves to the
|
| -// iframe when it finishes loading. When |options.auto_remove| is set to
|
| -// |false|, the caller is responsible for removing the iframe
|
| -// later. Otherwise, the frame will be removed after all tests are finished.
|
| -function with_iframe(url, options) {
|
| +// iframe when it finishes loading. The caller is responsible for removing the
|
| +// iframe later if needed.
|
| +function with_iframe(url) {
|
| return new Promise(function(resolve) {
|
| var frame = document.createElement('iframe');
|
| frame.src = url;
|
| frame.onload = function() { resolve(frame); };
|
| document.body.appendChild(frame);
|
| - if (typeof options === 'undefined')
|
| - options = {};
|
| - if (typeof options.auto_remove === 'undefined')
|
| - options.auto_remove = true;
|
| - if (options.auto_remove)
|
| - add_completion_callback(function() { frame.remove(); });
|
| - });
|
| -}
|
| -
|
| -function with_sandboxed_iframe(url, sandbox) {
|
| - return new Promise(function(resolve) {
|
| - var frame = document.createElement('iframe');
|
| - frame.sandbox = sandbox;
|
| - frame.src = url;
|
| - frame.onload = function() { resolve(frame); };
|
| - document.body.appendChild(frame);
|
| });
|
| }
|
|
|
| @@ -149,17 +135,15 @@ function wait_for_state(test, worker, state) {
|
| // The test will succeed if the specified service worker can be successfully
|
| // registered and installed.
|
| // - Creates a new ServiceWorker registration with a scope unique to the current
|
| -// document URL and the script URL. This allows more than one
|
| +// document URL. Note that this doesn't allow more than one
|
| // service_worker_test() to be run from the same document.
|
| // - Waits for the new worker to begin installing.
|
| // - Imports tests results from tests running inside the ServiceWorker.
|
| function service_worker_test(url, description) {
|
| // If the document URL is https://example.com/document and the script URL is
|
| // https://example.com/script/worker.js, then the scope would be
|
| - // https://example.com/script/scope/document/script/worker.js.
|
| - var document_path = window.location.pathname;
|
| - var script_path = new URL(url, window.location).pathname;
|
| - var scope = new URL('scope' + document_path + script_path,
|
| + // https://example.com/script/scope/document.
|
| + var scope = new URL('scope' + window.location.pathname,
|
| new URL(url, window.location)).toString();
|
| promise_test(function(test) {
|
| return service_worker_unregister_and_register(test, url, scope)
|
| @@ -182,8 +166,8 @@ function base_path() {
|
| function test_login(test, origin, username, password, cookie) {
|
| return new Promise(function(resolve, reject) {
|
| with_iframe(
|
| - origin +
|
| - '/serviceworker/resources/fetch-access-control-login.html')
|
| + origin + base_path() +
|
| + 'resources/fetch-access-control-login.html')
|
| .then(test.step_func(function(frame) {
|
| var channel = new MessageChannel();
|
| channel.port1.onmessage = test.step_func(function() {
|
| @@ -197,12 +181,47 @@ function test_login(test, origin, username, password, cookie) {
|
| });
|
| }
|
|
|
| -function login(test, local, remote) {
|
| - var suffix = (local.indexOf("https") != -1) ? "s": "";
|
| - return test_login(test, local, 'username1' + suffix, 'password1' + suffix,
|
| - 'cookie1')
|
| +function test_websocket(test, frame, url) {
|
| + return new Promise(function(resolve, reject) {
|
| + var ws = new frame.contentWindow.WebSocket(url, ['echo', 'chat']);
|
| + var openCalled = false;
|
| + ws.addEventListener('open', test.step_func(function(e) {
|
| + assert_equals(ws.readyState, 1, "The WebSocket should be open");
|
| + openCalled = true;
|
| + ws.close();
|
| + }), true);
|
| +
|
| + ws.addEventListener('close', test.step_func(function(e) {
|
| + assert_true(openCalled, "The WebSocket should be closed after being opened");
|
| + resolve();
|
| + }), true);
|
| +
|
| + ws.addEventListener('error', reject);
|
| + });
|
| +}
|
| +
|
| +function login(test) {
|
| + return test_login(test, 'http://{{domains[www1]}}:{{ports[http][0]}}',
|
| + 'username1', 'password1', 'cookie1')
|
| + .then(function() {
|
| + return test_login(test, 'http://{{host}}:{{ports[http][0]}}',
|
| + 'username2', 'password2', 'cookie2');
|
| + });
|
| +}
|
| +
|
| +function login_https(test) {
|
| + return test_login(test, 'https://{{domains[www1]}}:{{ports[https][0]}}',
|
| + 'username1s', 'password1s', 'cookie1')
|
| .then(function() {
|
| - return test_login(test, remote, 'username2' + suffix,
|
| - 'password2' + suffix, 'cookie2');
|
| + return test_login(test, 'https://{{host}}:{{ports[https][0]}}',
|
| + 'username2s', 'password2s', 'cookie2');
|
| });
|
| }
|
| +
|
| +function websocket(test, frame) {
|
| + return test_websocket(test, frame, get_websocket_url());
|
| +}
|
| +
|
| +function get_websocket_url() {
|
| + return 'wss://{{host}}:{{ports[wss][0]}}/echo';
|
| +}
|
|
|