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

Unified Diff: LayoutTests/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html

Issue 1208693003: Add LayoutTest for ServiceWorker's sandbox iframe handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: add service_worker_unregister_and_done 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
Index: LayoutTests/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html
diff --git a/LayoutTests/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html b/LayoutTests/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html
new file mode 100644
index 0000000000000000000000000000000000000000..e6a404fac6a33eb614a311e7489b94d0107f05b6
--- /dev/null
+++ b/LayoutTests/http/tests/serviceworker/chromium/sandboxed-iframe-fetch-event.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<title>ServiceWorker FetchEvent for sandboxed iframe.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../resources/test-helpers.js"></script>
+<body>
+<script>
+var lastCallbackId = 0;
+var callbacks = {};
+function postMassageAndWaitResult(frame) {
+ return new Promise(function(resolve) {
+ var id = ++lastCallbackId;
+ callbacks[id] = resolve;
+ frame.contentWindow.postMessage({id:id}, '*');
+ });
+}
+
+window.onmessage = function (e) {
+ message = e.data;
+ var id = message['id'];
+ var calback = callbacks[id];
+ delete callbacks[id];
+ calback(message['result']);
+};
+
+promise_test(function(t) {
+ var SCOPE = 'resources/sandboxed-iframe-fetch-event-iframe.html';
+ var SCRIPT = 'resources/sandboxed-iframe-fetch-event-worker.js';
+ var frames = [];
+ var worker;
+ return service_worker_unregister_and_register(t, SCRIPT, SCOPE)
+ .then(function(registration) {
+ worker = registration.installing;
+ return wait_for_state(t, registration.installing, 'activated');
+ })
+ .then(function() {
+ return with_iframe(SCOPE + '?iframe');
+ })
+ .then(function(frame) {
+ frames.push(frame);
+ return postMassageAndWaitResult(frame);
+ })
+ .then(function(result) {
+ assert_equals(result, 'done');
+ return with_sandboxed_iframe(SCOPE + '?script', 'allow-scripts');
+ })
+ .then(function(frame) {
+ frames.push(frame);
+ return postMassageAndWaitResult(frame);
+ })
+ .then(function(result) {
+ assert_equals(result, 'done');
+ return with_sandboxed_iframe(SCOPE + '?script-origin',
+ 'allow-scripts allow-same-origin');
+ })
+ .then(function(frame) {
+ frames.push(frame);
+ return postMassageAndWaitResult(frame);
+ })
+ .then(function(result) {
+ assert_equals(result, 'done');
+ return new Promise(function(resolve) {
+ var channel = new MessageChannel();
+ channel.port1.onmessage = function(msg) {
+ resolve(msg);
+ };
+ worker.postMessage({port: channel.port2}, [channel.port2]);
+ });
+ })
+ .then(function(msg) {
+ for (var frame of frames) {
+ frame.remove();
+ }
+ var expected_base_url = new URL(SCOPE, location.href).href;
+ var requests = msg.data.requests;
+ assert_equals(requests.length, 8);
+ assert_equals(requests[0], expected_base_url + '?iframe');
+ assert_equals(requests[1], expected_base_url + '?iframe_fetch');
+ assert_equals(requests[2], expected_base_url + '?iframe_iframe');
+ assert_equals(requests[3],
+ expected_base_url + '?iframe_script-origin');
+ assert_equals(requests[4], expected_base_url + '?script-origin');
nhiroki 2015/06/26 01:01:37 Adding comments (or 3rd parameter to assert_equals
horo 2015/06/26 03:59:10 Done.
+ assert_equals(requests[5],
+ expected_base_url + '?script-origin_fetch');
+ assert_equals(requests[6],
+ expected_base_url + '?script-origin_iframe');
+ assert_equals(requests[7],
+ expected_base_url + '?script-origin_script-origin');
nhiroki 2015/06/26 01:01:37 nit: Can you add a blank line after line 88 for re
horo 2015/06/26 03:59:11 Done.
+ var clients = msg.data.clients;
+ assert_equals(clients.length, 6);
+ assert_equals(clients[0], expected_base_url + '?iframe');
+ assert_equals(clients[1], expected_base_url + '?iframe_iframe');
+ assert_equals(clients[2],
+ expected_base_url + '?iframe_script-origin');
+ assert_equals(clients[3], expected_base_url + '?script-origin');
+ assert_equals(clients[4],
+ expected_base_url + '?script-origin_iframe');
+ assert_equals(clients[5],
+ expected_base_url + '?script-origin_script-origin');
+ return service_worker_unregister_and_done(t, SCOPE);
+ });
+ }, 'ServiceWorker FetchEvent for sandboxed iframe.');
+</script>
+</body>

Powered by Google App Engine
This is Rietveld 408576698