diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /testing/web-platform/tests/service-workers/service-worker/registration.https.html | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/web-platform/tests/service-workers/service-worker/registration.https.html')
-rw-r--r-- | testing/web-platform/tests/service-workers/service-worker/registration.https.html | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/testing/web-platform/tests/service-workers/service-worker/registration.https.html b/testing/web-platform/tests/service-workers/service-worker/registration.https.html new file mode 100644 index 000000000..ae9f85fb2 --- /dev/null +++ b/testing/web-platform/tests/service-workers/service-worker/registration.https.html @@ -0,0 +1,368 @@ +<!DOCTYPE html> +<title>Service Worker: Registration</title> +<script src="/resources/testharness.js"></script> +<script src="resources/testharness-helpers.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/test-helpers.sub.js"></script> +<script> + +promise_test(function(t) { + var script = 'resources/registration-worker.js'; + var scope = 'resources/registration/normal'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_true(registration instanceof ServiceWorkerRegistration, + 'Successfully registered.'); + service_worker_unregister_and_done(t, scope); + }) + }, 'Registering normal scope'); + +promise_test(function(t) { + var script = 'resources/registration-worker.js'; + var scope = 'resources/registration/scope-with-fragment#ref'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_true( + registration instanceof ServiceWorkerRegistration, + 'Successfully registered.'); + assert_equals( + registration.scope, + normalizeURL('resources/registration/scope-with-fragment'), + 'A fragment should be removed from scope') + service_worker_unregister_and_done(t, scope); + }) + }, 'Registering scope with fragment'); + +promise_test(function(t) { + var script = 'resources/registration-worker.js'; + var scope = 'resources/'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_true(registration instanceof ServiceWorkerRegistration, + 'Successfully registered.'); + service_worker_unregister_and_done(t, scope); + }) + }, 'Registering same scope as the script directory'); + +promise_test(function(t) { + var script = 'resources/registration-worker.js'; + var scope = 'resources'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registering same scope as the script directory without the last ' + + 'slash should fail with SecurityError.'); + }, 'Registering same scope as the script directory without the last slash'); + +promise_test(function(t) { + var script = 'resources/registration-worker.js'; + var scope = 'different-directory/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registration scope outside the script directory should fail ' + + 'with SecurityError.'); + }, 'Registration scope outside the script directory'); + +promise_test(function(t) { + var script = 'resources/registration-worker.js'; + var scope = 'http://example.com/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registration scope outside domain should fail with SecurityError.'); + }, 'Registering scope outside domain'); + +promise_test(function(t) { + var script = 'http://example.com/worker.js'; + var scope = 'http://example.com/scope/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registration script outside domain should fail with SecurityError.'); + }, 'Registering script outside domain'); + +promise_test(function(t) { + var script = 'resources/no-such-worker.js'; + var scope = 'resources/scope/no-such-worker'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of non-existent script should fail.'); + }, 'Registering non-existent script'); + +promise_test(function(t) { + var script = 'resources/invalid-chunked-encoding.py'; + var scope = 'resources/scope/invalid-chunked-encoding/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of invalid chunked encoding script should fail.'); + }, 'Registering invalid chunked encoding script'); + +promise_test(function(t) { + var script = 'resources/invalid-chunked-encoding-with-flush.py'; + var scope = 'resources/scope/invalid-chunked-encoding-with-flush/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of invalid chunked encoding script should fail.'); + }, 'Registering invalid chunked encoding script with flush'); + +promise_test(function(t) { + var script = 'resources/mime-type-worker.py'; + var scope = 'resources/scope/no-mime-type-worker/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registration of no MIME type script should fail.'); + }, 'Registering script with no MIME type'); + +promise_test(function(t) { + var script = 'resources/mime-type-worker.py?mime=text/plain'; + var scope = 'resources/scope/bad-mime-type-worker/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registration of plain text script should fail.'); + }, 'Registering script with bad MIME type'); + +promise_test(function(t) { + var script = 'resources/redirect.py?Redirect=' + + encodeURIComponent('/resources/registration-worker.js'); + var scope = 'resources/scope/redirect/'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registration of redirected script should fail.'); + }, 'Registering redirected script'); + +promise_test(function(t) { + var script = 'resources/malformed-worker.py?parse-error'; + var scope = 'resources/scope/parse-error'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of script including parse error should fail.'); + }, 'Registering script including parse error'); + +promise_test(function(t) { + var script = 'resources/malformed-worker.py?undefined-error'; + var scope = 'resources/scope/undefined-error'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of script including undefined error should fail.'); + }, 'Registering script including undefined error'); + +promise_test(function(t) { + var script = 'resources/malformed-worker.py?uncaught-exception'; + var scope = 'resources/scope/uncaught-exception'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of script including uncaught exception should fail.'); + }, 'Registering script including uncaught exception'); + +promise_test(function(t) { + var script = 'resources/malformed-worker.py?caught-exception'; + var scope = 'resources/scope/caught-exception'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_true(registration instanceof ServiceWorkerRegistration, + 'Successfully registered.'); + service_worker_unregister_and_done(t, scope); + }) + }, 'Registering script including caught exception'); + +promise_test(function(t) { + var script = 'resources/malformed-worker.py?import-malformed-script'; + var scope = 'resources/scope/import-malformed-script'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of script importing malformed script should fail.'); + }, 'Registering script importing malformed script'); + +promise_test(function(t) { + var script = 'resources/malformed-worker.py?import-no-such-script'; + var scope = 'resources/scope/import-no-such-script'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'Registration of script importing non-existent script should fail.'); + }, 'Registering script importing non-existent script'); + +promise_test(function(t) { + // URL-encoded full-width 'scope'. + var name = '%ef%bd%93%ef%bd%83%ef%bd%8f%ef%bd%90%ef%bd%85'; + var script = 'resources/empty-worker.js'; + var scope = 'resources/' + name + '/escaped-multibyte-character-scope'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_equals( + registration.scope, + normalizeURL(scope), + 'URL-encoded multibyte characters should be available.'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Scope including URL-encoded multibyte characters'); + +promise_test(function(t) { + // Non-URL-encoded full-width "scope". + var name = String.fromCodePoint(0xff53, 0xff43, 0xff4f, 0xff50, 0xff45); + var script = 'resources/empty-worker.js'; + var scope = 'resources/' + name + '/non-escaped-multibyte-character-scope'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_equals( + registration.scope, + normalizeURL(scope), + 'Non-URL-encoded multibyte characters should be available.'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Scope including non-escaped multibyte characters'); + +promise_test(function(t) { + var script = 'resources%2fempty-worker.js'; + var scope = 'resources/scope/encoded-slash-in-script-url'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'URL-encoded slash in the script URL should be rejected.'); + }, 'Script URL including URL-encoded slash'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'resources/scope%2fencoded-slash-in-scope'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'URL-encoded slash in the scope should be rejected.'); + }, 'Scope including URL-encoded slash'); + +promise_test(function(t) { + var script = 'resources%5cempty-worker.js'; + var scope = 'resources/scope/encoded-slash-in-script-url'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'URL-encoded backslash in the script URL should be rejected.'); + }, 'Script URL including URL-encoded backslash'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'resources/scope%5cencoded-slash-in-scope'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + new TypeError(), + 'URL-encoded backslash in the scope should be rejected.'); + }, 'Scope including URL-encoded backslash'); + +promise_test(function(t) { + var script = 'resources/././empty-worker.js'; + var scope = 'resources/scope/parent-reference-in-script-url'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_equals( + registration.installing.scriptURL, + normalizeURL('resources/empty-worker.js'), + 'Script URL including self-reference should be normalized.'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Script URL including self-reference'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'resources/././scope/self-reference-in-scope'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_equals( + registration.scope, + normalizeURL('resources/scope/self-reference-in-scope'), + 'Scope including self-reference should be normalized.'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Scope including self-reference'); + +promise_test(function(t) { + var script = 'resources/../resources/empty-worker.js'; + var scope = 'resources/scope/parent-reference-in-script-url'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_equals( + registration.installing.scriptURL, + normalizeURL('resources/empty-worker.js'), + 'Script URL including parent-reference should be normalized.'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Script URL including parent-reference'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'resources/../resources/scope/parent-reference-in-scope'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + assert_equals( + registration.scope, + normalizeURL('resources/scope/parent-reference-in-scope'), + 'Scope including parent-reference should be normalized.'); + service_worker_unregister_and_done(t, scope); + }); + }, 'Scope including parent-reference'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'resources/../scope/parent-reference-in-scope'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Scope not under the script directory should be rejected.'); + }, 'Scope including parent-reference and not under the script directory'); + +promise_test(function(t) { + var script = 'resources////empty-worker.js'; + var scope = 'resources/scope/consecutive-slashes-in-script-url'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Consecutive slashes in the script url should not be unified.'); + }, 'Script URL including consecutive slashes'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'resources/scope////consecutive-slashes-in-scope'; + return navigator.serviceWorker.register(script, {scope: scope}) + .then(function(registration) { + // Although consecutive slashes in the scope are not unified, the + // scope is under the script directory and registration should + // succeed. + assert_equals( + registration.scope, + normalizeURL(scope), + 'Should successfully be registered.'); + service_worker_unregister_and_done(t, scope); + }) + }, 'Scope including consecutive slashes'); + +promise_test(function(t) { + var script = 'filesystem:' + normalizeURL('resources/empty-worker.js'); + var scope = 'resources/scope/filesystem-script-url'; + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registering a script which has same-origin filesystem: URL should ' + + 'fail with SecurityError.'); + }, 'Script URL is same-origin filesystem: URL'); + +promise_test(function(t) { + var script = 'resources/empty-worker.js'; + var scope = 'filesystem:' + normalizeURL('resources/scope/filesystem-scope-url'); + return assert_promise_rejects( + navigator.serviceWorker.register(script, {scope: scope}), + 'SecurityError', + 'Registering with the scope that has same-origin filesystem: URL ' + + 'should fail with SecurityError.'); + }, 'Scope URL is same-origin filesystem: URL'); + +</script> |