Skip to content

Commit

Permalink
Merge a1a6400 into 6ae3985
Browse files Browse the repository at this point in the history
  • Loading branch information
jugglinmike authored Mar 22, 2017
2 parents 6ae3985 + a1a6400 commit efc99c4
Show file tree
Hide file tree
Showing 10 changed files with 317 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,33 @@
<script src="resources/testharness-helpers.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script src="resources/service-worker-recorder.js"></script>
<script>
promise_test(function(t) {
var script = 'resources/fetch-event-async-respond-with-worker.js';
var scope = 'resources/simple.html';

return service_worker_unregister_and_register(t, script, scope)
.then(function(registration) {
return wait_for_state(t, registration.installing, 'activated');
return wait_for_state(t, registration.installing, 'activated')
.then(function() {
return ServiceWorkerRecorder.client.clear(registration.active);
});
})
.then(function() {
return with_iframe(scope);
})
.then(function(frame) {
var channel = new MessageChannel();
var saw_message = new Promise(function(resolve) {
channel.port1.onmessage = function(e) { resolve(e.data); }
});
var worker = frame.contentWindow.navigator.serviceWorker.controller;

worker.postMessage({port: channel.port2}, [channel.port2]);
frame.remove();
return saw_message;
return ServiceWorkerRecorder.client.read(
frame.contentWindow.navigator.serviceWorker.controller
)
.then(function(results) {
frame.remove();
return results;
});
})
.then(function(message) {
assert_equals(message, 'PASS');
.then(function(results) {
assert_array_equals(results, ['PASS']);
return service_worker_unregister_and_done(t, scope);
})
}, 'Calling respondWith asynchronously throws an exception');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<script src="resources/testharness-helpers.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script src="resources/service-worker-recorder.js"></script>
<script>
promise_test(function(t) {
var script =
Expand All @@ -11,24 +12,25 @@

return service_worker_unregister_and_register(t, script, scope)
.then(function(registration) {
return wait_for_state(t, registration.installing, 'activated');
return wait_for_state(t, registration.installing, 'activated')
.then(function() {
return ServiceWorkerRecorder.client.clear(registration.active);
});
})
.then(function() {
return with_iframe(scope);
})
.then(function(frame) {
var channel = new MessageChannel();
var saw_message = new Promise(function(resolve) {
channel.port1.onmessage = function(e) { resolve(e.data); }
});
var worker = frame.contentWindow.navigator.serviceWorker.controller;

worker.postMessage({port: channel.port2}, [channel.port2]);
frame.remove();
return saw_message;
return ServiceWorkerRecorder.client.read(worker)
.then(function(result) {
frame.remove();
return result;
});
})
.then(function(message) {
assert_equals(message, 'PASS');
.then(function(result) {
assert_array_equals(result, ['first handler invoked']);
return service_worker_unregister_and_done(t, scope);
})
}, 'respondWith() invokes stopImmediatePropagation()');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,25 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/test-helpers.sub.js?pipe=sub"></script>
<script src="resources/service-worker-recorder.js"></script>
<script>
// Continually execute the provided function until it returns the value `true`
// or a Promise that resolves to `true`.
function waitFor(condition) {
function go() {
return Promise.resolve(condition())
.then(function(result) {
if (result === true) {
return;
}
return new Promise(function(resolve) { step_timeout(resolve, 100); })
.then(go);
});
};

return go();
};

async_test(function(t) {
var SCOPE = 'resources/fetch-request-css-base-url-iframe.html';
var SCRIPT = 'resources/fetch-request-css-base-url-worker.js';
Expand All @@ -14,42 +32,43 @@
return service_worker_unregister_and_register(t, SCRIPT, SCOPE)
.then(function(registration) {
worker = registration.installing;
return wait_for_state(t, worker, 'activated');
})
.then(function() {
return new Promise(function(resolve) {
var channel = new MessageChannel();
testDonePromise = new Promise(function(resolveTestDone) {
channel.port1.onmessage = t.step_func(function(msg) {
if (msg.data.ready) {
resolve();
return;
}
var result = msg.data;
var base = get_host_info()['HTTPS_ORIGIN'] + base_path();
assert_equals(
result.url,
base + 'resources/dummy.png',
'The base URL while loading the images referred from CSS ' +
'must be the request URL of CSS.');
assert_equals(
result.referrer,
base + 'resources/fetch-request-css-base-url-style.css',
'While loading the image defined in CSS the referrer must ' +
'be the request URL of CSS.');
resolveTestDone();
});
return wait_for_state(t, worker, 'activated')
.then(function() {
return ServiceWorkerRecorder.client.clear(registration.active);
});
worker.postMessage(
{port: channel.port2}, [channel.port2]);
});
})
.then(function() { return with_iframe(SCOPE); })
.then(function(f) {
return testDonePromise.then(function() {
f.remove();
return service_worker_unregister_and_done(t, SCOPE);
});
.then(function(iframe) {
var requestInfo;
// There is no event that signals when a stylesheet's sub-resources
// have been loaded, so a polling approach must be used to delay test
// execution until after the service worker has intercepted the
// request as expected.
return waitFor(function() {
return ServiceWorkerRecorder.client.read(worker)
.then(function(results) {
requestInfo = results[0];
return results.length > 0;
});
})
.then(function() {
iframe.remove();
return requestInfo;
});
})
.then(function(result) {
var base = get_host_info()['HTTPS_ORIGIN'] + base_path();
assert_equals(
result.url,
base + 'resources/dummy.png',
'The base URL while loading the images referred from CSS ' +
'must be the request URL of CSS.');
assert_equals(
result.referrer,
base + 'resources/fetch-request-css-base-url-style.css',
'While loading the image defined in CSS the referrer must ' +
'be the request URL of CSS.');
return service_worker_unregister_and_done(t, SCOPE);
})
.catch(unreached_rejection(t));
}, 'CSS\'s base URL must be the request URL even when fetched from other URL.');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
var result;

self.addEventListener('message', function(event) {
event.data.port.postMessage(result);
});
importScripts('./service-worker-recorder.js');

self.addEventListener('fetch', function(event) {
setTimeout(function() {
try {
event.respondWith(new Response());
result = 'FAIL: did not throw';
ServiceWorkerRecorder.worker.save('FAIL: did not throw');
} catch (error) {
if (error.name == 'InvalidStateError')
result = 'PASS';
else
result = 'FAIL: Unexpected exception: ' + error;
if (error.name == 'InvalidStateError') {
ServiceWorkerRecorder.worker.save('PASS');
} else {
ServiceWorkerRecorder.worker.save(
'FAIL: Unexpected exception: ' + error
);
}
}
}, 0);
});
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
var result = null;

self.addEventListener('message', function(event) {
event.data.port.postMessage(result);
});
importScripts('./service-worker-recorder.js');

self.addEventListener('fetch', function(event) {
if (!result)
result = 'PASS';
ServiceWorkerRecorder.worker.save('first handler invoked');
event.respondWith(new Response());
});

self.addEventListener('fetch', function(event) {
result = 'FAIL: fetch event propagated';
ServiceWorkerRecorder.worker.save('second handler invoked');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
importScripts('./service-worker-recorder.js');

self.addEventListener('fetch', function(event) {
ServiceWorkerRecorder.worker.save(event.request.url);
});
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
importScripts('/common/get-host-info.sub.js');
importScripts('test-helpers.sub.js');

var port = undefined;

self.onmessage = function(e) {
var message = e.data;
if ('port' in message) {
port = message.port;
port.postMessage({ready: true});
}
};
importScripts('./service-worker-recorder.js');

self.addEventListener('fetch', function(event) {
var url = event.request.url;
Expand All @@ -19,7 +10,7 @@ self.addEventListener('fetch', function(event) {
'fetch-request-css-base-url-style.css',
{mode: 'no-cors'}));
} else if (url.indexOf('dummy.png') != -1) {
port.postMessage({
ServiceWorkerRecorder.worker.save({
url: event.request.url,
referrer: event.request.referrer
});
Expand Down
Loading

0 comments on commit efc99c4

Please sign in to comment.