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

Unified Diff: third_party/WebKit/LayoutTests/http/tests/serviceworker/windowclient-navigate.html

Issue 1604893002: ServiceWorker: Rewrite windowclient-navigate.html test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 4 years, 10 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 | « third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/windowclient-navigate-worker.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/http/tests/serviceworker/windowclient-navigate.html
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/windowclient-navigate.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/windowclient-navigate.html
index 6249dad9196ff8f4e49192038163dd19ed7cc92a..bde2ce831f4b5826c5d54b9ba21eee2fd3616ea2 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/windowclient-navigate.html
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/windowclient-navigate.html
@@ -4,74 +4,137 @@
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/get-host-info.js"></script>
<script src="resources/test-helpers.js"></script>
+<body>
<script>
-var scope = 'resources/blank.html?windowclient-navigate';
-var script_url = 'resources/windowclient-navigate-worker.js';
-var client_frame;
-var worker;
-var test;
-
-var current_index = 0;
-var test_list = [
- { url : 'blank.html' },
- { url : '' },
- { url : 'blank.html', init : 'uncontrolled/blank.html' },
- { url : get_host_info()['HTTP_REMOTE_ORIGIN'] +
- '/serviceworker/resources/blank.html' },
- { url : 'http://[example].com' },
- { url : 'view-source://example.com' },
- { url : 'file:///' },
- { url : 'about:blank' },
- { url : 'about:crash' }
-];
-
-var expected = [
- location.origin + '/serviceworker/resources/blank.html',
- location.origin + '/serviceworker/' + script_url,
- 'TypeError',
- null,
- 'TypeError',
- 'TypeError',
- 'TypeError',
- 'TypeError',
- 'TypeError'
-];
-
-var actual = [];
-
-async_test(function(t) {
- test = t;
- return service_worker_unregister_and_register(test, script_url, scope)
- .then(function(registration) {
- worker = registration.installing;
- return wait_for_state(test, worker, 'activated');
- })
- .then(function() {
- var channel = new MessageChannel();
- channel.port1.onmessage = test.step_func(function(e) {
- on_message(e, channel.port1);
- });
- worker.postMessage({ port : channel.port2 }, [channel.port2]);
- })
- .catch(unreached_rejection(t));
-}, 'WindowClient.navigate() test');
-
-function on_message(e, port) {
- var message = e.data;
-
- message == 'ready' || actual.push(message);
- if (expected.length == actual.length) {
- assert_array_equals(actual, expected);
- service_worker_unregister_and_done(test, scope);
- } else {
- client_frame && client_frame.remove();
- var init_url = test_list[current_index].init || scope;
- with_iframe(init_url).then(function(f) {
- client_frame = f;
- port.postMessage(test_list[current_index++].url);
- });
- }
+const SCOPE = 'resources/blank.html';
+const SCRIPT_URL = 'resources/windowclient-navigate-worker.js';
+const CROSS_ORIGIN_URL = get_host_info()['HTTP_REMOTE_ORIGIN'] +
+ '/serviceworker/resources/blank.html';
+
+navigate_test({
+ description: 'normal test',
+ dest_url: 'blank.html?navigate',
+ expected: normalizeURL(SCOPE) + '?navigate',
+ });
+
+navigate_test({
+ description: 'blank url test',
+ dest_url: '',
+ expected: normalizeURL(SCRIPT_URL)
+ });
+
+navigate_test({
+ description: 'in scope but not controlled test on installing worker',
+ dest_url: 'blank.html?navigate',
+ expected: 'TypeError',
+ wait_state: 'installing',
+ });
+
+navigate_test({
+ description: 'in scope but not controlled test on active worker',
+ dest_url: 'blank.html?navigate',
+ expected: 'TypeError',
+ should_be_reload: false,
+ });
+
+navigate_test({
+ description: 'out scope test',
+ src_url: 'out_scope/blank.html',
+ dest_url: 'blank.html?navigate',
+ expected: 'TypeError',
+ });
+
+navigate_test({
+ description: 'cross orgin url test',
+ dest_url: CROSS_ORIGIN_URL,
+ expected: null
+ });
+
+navigate_test({
+ description: 'invalid url(http://[example.com]) test',
+ dest_url: 'http://[example].com',
+ expected: 'TypeError'
+ });
+
+navigate_test({
+ description: 'invalid url(view-source://example.com) test',
+ dest_url: 'view-source://example.com',
+ expected: 'TypeError'
+ });
+
+navigate_test({
+ description: 'invalid url(file:///) test',
+ dest_url: 'file:///',
+ expected: 'TypeError'
+ });
+
+navigate_test({
+ description: 'invalid url(about:blank) test',
+ dest_url: 'about:blank',
+ expected: 'TypeError'
+ });
+
+function navigate_test(override_parameters) {
+ // default parameters
+ var parameters = {
+ description: null,
+ src_url: SCOPE,
+ dest_url: null,
+ expected: null,
+ wait_state: 'activated',
+ scope: SCOPE,
+ should_be_reload: true
+ };
+
+ for (key in override_parameters)
+ parameters[key] = override_parameters[key];
+
+ promise_test(function(test) {
+ var service_worker;
+ var client_frame;
+ var script_url = SCRIPT_URL;
+
+ // For in-scope-but-not-controlled test on installing worker,
+ // if the wait_state is "installing", then append the query to script_url.
+ if (parameters.wait_state == 'installing')
+ script_url += '?' + parameters.wait_state;
+
+ return with_iframe(parameters.src_url)
+ .then(function(frame) {
+ client_frame = frame;
+ return service_worker_unregister_and_register(
+ test, script_url, parameters.scope);
+ })
+ .then(function(registration) {
+ service_worker = registration.installing;
+ return wait_for_state(test, service_worker, parameters.wait_state);
+ })
+ .then(function(state) {
+ if (parameters.should_be_reload) {
+ client_frame.remove();
+ return with_iframe(parameters.src_url);
+ }
+ return client_frame;
+ })
+ .then(function(frame) {
+ client_frame = frame;
+ return new Promise(function(resolve) {
+ var channel = new MessageChannel();
+ channel.port1.onmessage = test.step_func(resolve);
+ service_worker.postMessage({
+ port: channel.port2,
+ url: parameters.dest_url
+ }, [channel.port2]);
+ });
+ })
+ .then(function(response) {
+ client_frame && client_frame.remove()
+ assert_equals(response.data, parameters.expected);
+ return service_worker_unregister_and_done(test, parameters.scope);
+ })
+ }, parameters.description);
}
</script>
+</body>
« no previous file with comments | « third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/windowclient-navigate-worker.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698