| Differences between
and this patch
- a/Source/WebCore/ChangeLog +17 lines
Lines 1-5 a/Source/WebCore/ChangeLog_sec1
1
2017-11-14  Youenn Fablet  <youenn@apple.com>
1
2017-11-14  Youenn Fablet  <youenn@apple.com>
2
2
3
        Remove service worker selection based on registration
4
        https://bugs.webkit.org/show_bug.cgi?id=179705
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Covered by updated tests.
9
10
        Selection is now handled at navigation time.
11
        We can remove the selection/unselection of worker based on registration.
12
13
        * workers/service/ServiceWorkerContainer.cpp:
14
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
15
        * workers/service/ServiceWorkerRegistration.cpp:
16
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
17
18
2017-11-14  Youenn Fablet  <youenn@apple.com>
19
3
        Implement ServiceWorker handle fetch for navigation loads
20
        Implement ServiceWorker handle fetch for navigation loads
4
        https://bugs.webkit.org/show_bug.cgi?id=179404
21
        https://bugs.webkit.org/show_bug.cgi?id=179404
5
22
- a/Source/WebCore/workers/service/ServiceWorkerContainer.cpp -4 lines
Lines 331-340 void ServiceWorkerContainer::jobResolvedWithUnregistrationResult(ServiceWorkerJo a/Source/WebCore/workers/service/ServiceWorkerContainer.cpp_sec1
331
        return;
331
        return;
332
    }
332
    }
333
333
334
    // FIXME: Implement proper selection of service workers.
335
    if (unregistrationResult)
336
        context->setActiveServiceWorker(nullptr);
337
338
    context->postTask([job = makeRef(job), unregistrationResult](ScriptExecutionContext&) mutable {
334
    context->postTask([job = makeRef(job), unregistrationResult](ScriptExecutionContext&) mutable {
339
        job->promise().resolve<IDLBoolean>(unregistrationResult);
335
        job->promise().resolve<IDLBoolean>(unregistrationResult);
340
    });
336
    });
- a/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp -3 lines
Lines 52-60 ServiceWorkerRegistration::ServiceWorkerRegistration(ScriptExecutionContext& con a/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp_sec1
52
    if (m_registrationData.activeWorker)
52
    if (m_registrationData.activeWorker)
53
        m_activeWorker = ServiceWorker::getOrCreate(context, WTFMove(*m_registrationData.activeWorker));
53
        m_activeWorker = ServiceWorker::getOrCreate(context, WTFMove(*m_registrationData.activeWorker));
54
54
55
    // FIXME: Implement proper selection of service workers.
56
    context.setActiveServiceWorker(getNewestWorker());
57
58
    m_container->addRegistration(*this);
55
    m_container->addRegistration(*this);
59
}
56
}
60
57
- a/LayoutTests/ChangeLog +54 lines
Lines 1-5 a/LayoutTests/ChangeLog_sec1
1
2017-11-14  Youenn Fablet  <youenn@apple.com>
1
2017-11-14  Youenn Fablet  <youenn@apple.com>
2
2
3
        Remove service worker selection based on registration
4
        https://bugs.webkit.org/show_bug.cgi?id=179705
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Updating tests to use actual selected frames.
9
10
        * http/tests/inspector/network/resource-response-service-worker.html:
11
        * http/tests/inspector/network/resources/fetch-service-worker.js:
12
        * http/tests/workers/service/ServiceWorkerGlobalScope-properties.html:
13
        * http/tests/workers/service/basic-fetch.https-expected.txt:
14
        * http/tests/workers/service/cors-image-fetch-expected.txt:
15
        * http/tests/workers/service/cors-image-fetch.html:
16
        * http/tests/workers/service/image-fetch-expected.txt:
17
        * http/tests/workers/service/resources/basic-ServiceWorker-postMessage.js:
18
        (then):
19
        * http/tests/workers/service/resources/basic-fetch-worker.js:
20
        * http/tests/workers/service/resources/basic-fetch.js:
21
        (async.test):
22
        * http/tests/workers/service/resources/cors-image-fetch.js:
23
        (async.test):
24
        (async.loadedImage): Deleted.
25
        (async.erroredImage): Deleted.
26
        (async.logStatus): Deleted.
27
        * http/tests/workers/service/resources/cors-image-fetch-iframe.html: Added.
28
        * http/tests/workers/service/resources/image-fetch.js:
29
        (async.test):
30
        (done): Deleted.
31
        (async.loadedImage): Deleted.
32
        (async.erroredImage): Deleted.
33
        (async.logStatus): Deleted.
34
        * http/tests/workers/service/resources/service-worker-crossorigin-fetch.js:
35
        (async.test):
36
        (done): Deleted.
37
        (async.logStatus): Deleted.
38
        * http/tests/workers/service/resources/service-worker-fetch.js:
39
        (async.test):
40
        (done): Deleted.
41
        (async.logStatus): Deleted.
42
        * http/tests/workers/service/resources/service-worker-importScript.js:
43
        (async.test):
44
        (async.logStatus): Deleted.
45
        * http/tests/workers/service/resources/sw-test-pre.js:
46
        (async.interceptedFrame):
47
        * http/tests/workers/service/resources/tainted-image-fetch.js:
48
        (async.test):
49
        (async.loadedImage): Deleted.
50
        (async.erroredImage): Deleted.
51
        (async.logStatus): Deleted.
52
        * http/tests/workers/service/service-worker-fetch.https-expected.txt:
53
        * http/tests/workers/service/tainted-image-fetch-expected.txt:
54
55
2017-11-14  Youenn Fablet  <youenn@apple.com>
56
3
        Implement ServiceWorker handle fetch for navigation loads
57
        Implement ServiceWorker handle fetch for navigation loads
4
        https://bugs.webkit.org/show_bug.cgi?id=179404
58
        https://bugs.webkit.org/show_bug.cgi?id=179404
5
59
- a/LayoutTests/imported/w3c/ChangeLog +9 lines
Lines 1-5 a/LayoutTests/imported/w3c/ChangeLog_sec1
1
2017-11-14  Youenn Fablet  <youenn@apple.com>
1
2017-11-14  Youenn Fablet  <youenn@apple.com>
2
2
3
        Remove service worker selection based on registration
4
        https://bugs.webkit.org/show_bug.cgi?id=179705
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        * web-platform-tests/service-workers/service-worker/controller-on-reload.https-expected.txt:
9
10
2017-11-14  Youenn Fablet  <youenn@apple.com>
11
3
        Implement ServiceWorker handle fetch for navigation loads
12
        Implement ServiceWorker handle fetch for navigation loads
4
        https://bugs.webkit.org/show_bug.cgi?id=179404
13
        https://bugs.webkit.org/show_bug.cgi?id=179404
5
14
- a/LayoutTests/http/tests/inspector/network/resource-response-service-worker.html -2 / +23 lines
Lines 4-11 a/LayoutTests/http/tests/inspector/network/resource-response-service-worker.html_sec1
4
<meta charset="utf-8">
4
<meta charset="utf-8">
5
<script src="../resources/inspector-test.js"></script>
5
<script src="../resources/inspector-test.js"></script>
6
<script>
6
<script>
7
async function startServiceWorker() {
7
async function startServiceWorker()
8
    await navigator.serviceWorker.register("resources/fetch-service-worker.js");
8
{
9
    var registration = await navigator.serviceWorker.register("resources/fetch-service-worker.js", { scope : "/"});
10
    await new Promise(resolve => {
11
        if (registration.active)
12
            resolve();
13
        worker = registration.installing;
14
        if (worker.state === "activated")
15
            resolve();
16
        worker.addEventListener("statechange", () => {
17
            if (worker.state === "activated")
18
                resolve();
19
        });
20
    });
21
22
    var frame;
23
    await new Promise(function(resolve) {
24
        frame = document.createElement('iframe');
25
        frame.src = "/";
26
        frame.onload = function() { resolve(frame); };
27
        document.body.appendChild(frame);
28
    });
29
    window.fetch = frame.contentWindow.fetch
9
    TestPage.dispatchEventToFrontend("SetupComplete");
30
    TestPage.dispatchEventToFrontend("SetupComplete");
10
}
31
}
11
32
- a/LayoutTests/http/tests/inspector/network/resources/fetch-service-worker.js -1 / +6 lines
Lines 9-13 self.addEventListener("fetch", (event) => { a/LayoutTests/http/tests/inspector/network/resources/fetch-service-worker.js_sec1
9
        return;
9
        return;
10
    }
10
    }
11
11
12
    event.respondWith(Response.error());
12
    if (event.request.url.includes("error")) {
13
        event.respondWith(Response.error());
14
        return;
15
    }
16
17
    event.respondWith(fetch(event.request.url));
13
});
18
});
- a/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope-properties.html -2 / +2 lines
Lines 20-28 navigator.serviceWorker.addEventListener("message", function(event) { a/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope-properties.html_sec1
20
        finishSWTest();
20
        finishSWTest();
21
});
21
});
22
22
23
navigator.serviceWorker.register("resources/ServiceWorkerGlobalScope-properties-worker.js", { }).then(function() {
23
navigator.serviceWorker.register("resources/ServiceWorkerGlobalScope-properties-worker.js", { }).then(function(registration) {
24
    for (let property of expectedProperties)
24
    for (let property of expectedProperties)
25
        navigator.serviceWorker.controller.postMessage("Object.getOwnPropertyDescriptor(self, '" + property + "')");
25
        registration.installing.postMessage("Object.getOwnPropertyDescriptor(self, '" + property + "')");
26
});
26
});
27
</script>
27
</script>
28
</body>
28
</body>
- a/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt +1 lines
Lines 1-3 a/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt_sec1
1
1
test1 status code: 200
2
test1 status code: 200
2
test1 status text: Hello from service worker
3
test1 status text: Hello from service worker
3
test1 header Hello: World
4
test1 header Hello: World
- a/LayoutTests/http/tests/workers/service/cors-image-fetch-expected.txt -2 / +1 lines
Lines 1-7 a/LayoutTests/http/tests/workers/service/cors-image-fetch-expected.txt_sec1
1
2
Registering service worker
1
Registering service worker
3
Service worker registered
2
Service worker registered
4
Status is no status
3
Status is Got response for http://127.0.0.1:8000/workers/service/resources/cors-image-fetch-iframe.html, status code is 200
5
Loading image
4
Loading image
6
PASS: Loaded image
5
PASS: Loaded image
7
Status is Got response for http://localhost:8000/resources/square100.png, status code is 200
6
Status is Got response for http://localhost:8000/resources/square100.png, status code is 200
- a/LayoutTests/http/tests/workers/service/cors-image-fetch.html -1 lines
Lines 3-9 a/LayoutTests/http/tests/workers/service/cors-image-fetch.html_sec1
3
<script src="resources/sw-test-pre.js"></script>
3
<script src="resources/sw-test-pre.js"></script>
4
</head>
4
</head>
5
<body>
5
<body>
6
    <img id="image" onload="loadedImage()" onerror="erroredImage()"></img>
7
    <script src="resources/cors-image-fetch.js"></script>
6
    <script src="resources/cors-image-fetch.js"></script>
8
</body>
7
</body>
9
</html>
8
</html>
- a/LayoutTests/http/tests/workers/service/image-fetch-expected.txt -1 / +1 lines
Lines 1-7 a/LayoutTests/http/tests/workers/service/image-fetch-expected.txt_sec1
1
1
2
Registering service worker
2
Registering service worker
3
Service worker registered
3
Service worker registered
4
Status is no status
4
Status is Got response for http://127.0.0.1:8000/workers/service/resources/cors-image-fetch-iframe.html, status code is 200
5
Loading image
5
Loading image
6
PASS: Loaded image
6
PASS: Loaded image
7
Status is Got response for http://127.0.0.1:8000/resources/square100.png, status code is 200
7
Status is Got response for http://127.0.0.1:8000/resources/square100.png, status code is 200
- a/LayoutTests/http/tests/workers/service/resources/basic-ServiceWorker-postMessage.js -2 / +2 lines
Lines 9-14 navigator.serviceWorker.addEventListener("message", function(event) { a/LayoutTests/http/tests/workers/service/resources/basic-ServiceWorker-postMessage.js_sec1
9
        finishSWTest();
9
        finishSWTest();
10
});
10
});
11
11
12
navigator.serviceWorker.register("resources/basic-ServiceWorker-postMessage-worker.js", { }).then(function() {
12
navigator.serviceWorker.register("resources/basic-ServiceWorker-postMessage-worker.js", { }).then(function(registration) {
13
    navigator.serviceWorker.controller.postMessage("Message 1");
13
    registration.installing.postMessage("Message 1");
14
});
14
});
- a/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js -1 / +1 lines
Lines 19-23 self.addEventListener("fetch", (event) => { a/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js_sec1
19
        return;
19
        return;
20
    }
20
    }
21
21
22
    event.respondWith(Response.error());
22
    event.respondWith(fetch(event.request.url));
23
});
23
});
- a/LayoutTests/http/tests/workers/service/resources/basic-fetch.js -1 / +2 lines
Lines 1-7 a/LayoutTests/http/tests/workers/service/resources/basic-fetch.js_sec1
1
async function test()
1
async function test()
2
{
2
{
3
    try {
3
    try {
4
        await navigator.serviceWorker.register("resources/basic-fetch-worker.js", { });
4
        var frame = await interceptedFrame("resources/basic-fetch-worker.js", "/");
5
        var fetch = frame.contentWindow.fetch;
5
6
6
        var response = await fetch("test1");
7
        var response = await fetch("test1");
7
        log("test1 status code: " + response.status);
8
        log("test1 status code: " + response.status);
- a/LayoutTests/http/tests/workers/service/resources/cors-image-fetch-iframe.html +46 lines
Line 0 a/LayoutTests/http/tests/workers/service/resources/cors-image-fetch-iframe.html_sec1
1
<html>
2
<body>
3
    <img id="image" onload="loadedImage()" onerror="erroredImage()"></img>
4
    <script>
5
function log(message)
6
{
7
    window.parent.postMessage(message, "*");
8
}
9
10
async function loadedImage()
11
{
12
    log("PASS: Loaded image");
13
    await logStatus();
14
    log("Image size: " + image.width + "x" + image.height);
15
    log("end");
16
}
17
18
async function erroredImage()
19
{
20
    log("FAIL: image loading failed");
21
    await logStatus();
22
    log("end");
23
}
24
25
async function logStatus()
26
{
27
    var response = await fetch("status");
28
    log("Status is " + response.statusText);
29
}
30
31
async function start(url, useCors)
32
{
33
    try {
34
        await logStatus();
35
        log("Loading image");
36
        if (useCors)
37
            image.crossOrigin = "anonymous";
38
        image.src = url;
39
    } catch(e) {
40
        log("Got exception: " + e);
41
        await logStatus();
42
    }
43
}
44
    </script>
45
</body>
46
</html>
- a/LayoutTests/http/tests/workers/service/resources/cors-image-fetch.js -34 / +11 lines
Lines 1-39 a/LayoutTests/http/tests/workers/service/resources/cors-image-fetch.js_sec1
1
async function loadedImage()
2
{
3
    log("PASS: Loaded image");
4
    await logStatus();
5
    log("Image size: " + image.width + "x" + image.height);
6
    finishSWTest();
7
}
8
9
async function erroredImage()
10
{
11
    log("FAIL: image loading failed");
12
    await logStatus();
13
    finishSWTest();
14
}
15
16
async function logStatus()
17
{
18
    var response = await fetch("status");
19
    log("Status is " + response.statusText);
20
}
21
22
async function test()
1
async function test()
23
{
2
{
24
    try {
3
    log("Registering service worker");
25
        log("Registering service worker");
4
    var frame = await interceptedFrame("/workers/service/resources/cors-image-fetch-worker.js", "/workers/service/resources/cors-image-fetch-iframe.html.fromserviceworker");
26
        await navigator.serviceWorker.register("resources/cors-image-fetch-worker.js", { });
5
    log("Service worker registered");
27
        log("Service worker registered");
6
    window.addEventListener("message", (event) => {
28
7
        if (event.data === "end") {
29
        await logStatus();
8
            finishSWTest();
30
        log("Loading image");
9
            return;
31
        image.crossOrigin = "anonymous";
10
        }
32
        image.src = "http://localhost:8000/resources/square100.png.fromserviceworker";
11
        log(event.data);
33
    } catch(e) {
12
    }, false);
34
        log("Got exception: " + e);
13
    frame.contentWindow.start("http://localhost:8000/resources/square100.png.fromserviceworker", true);
35
        await logStatus();
36
    }
37
}
14
}
38
15
39
test();
16
test();
- a/LayoutTests/http/tests/workers/service/resources/image-fetch.js -38 / +11 lines
Lines 1-43 a/LayoutTests/http/tests/workers/service/resources/image-fetch.js_sec1
1
function done()
2
{
3
    finishSWTest();
4
}
5
6
async function loadedImage()
7
{
8
    log("PASS: Loaded image");
9
    await logStatus();
10
    log("Image size: " + image.width + "x" + image.height);
11
    finishSWTest();
12
}
13
14
async function erroredImage()
15
{
16
    log("FAIL: image loading failed");
17
    await logStatus();
18
    finishSWTest();
19
}
20
21
async function logStatus()
22
{
23
    var response = await fetch("status");
24
    log("Status is " + response.statusText);
25
}
26
27
async function test()
1
async function test()
28
{
2
{
29
    try {
3
    log("Registering service worker");
30
        log("Registering service worker");
4
    var frame = await interceptedFrame("/workers/service/resources/cors-image-fetch-worker.js", "/workers/service/resources/cors-image-fetch-iframe.html.fromserviceworker");
31
        await navigator.serviceWorker.register("resources/image-fetch-worker.js", { });
5
    log("Service worker registered");
32
        log("Service worker registered");
6
    window.addEventListener("message", (event) => {
33
7
        if (event.data === "end") {
34
        await logStatus();
8
            finishSWTest();
35
        log("Loading image");
9
            return;
36
        image.src = "/resources/square100.png.fromserviceworker";
10
        }
37
    } catch(e) {
11
        log(event.data);
38
        log("Got exception: " + e);
12
    }, false);
39
        await logStatus();
13
    frame.contentWindow.start("/resources/square100.png.fromserviceworker");
40
    }
41
}
14
}
42
15
43
test();
16
test();
- a/LayoutTests/http/tests/workers/service/resources/service-worker-crossorigin-fetch.js -15 / +5 lines
Lines 1-14 a/LayoutTests/http/tests/workers/service/resources/service-worker-crossorigin-fetch.js_sec1
1
function done()
2
{
3
    finishSWTest();
4
}
5
6
async function logStatus()
7
{
8
    var response = await fetch("status");
9
    log("Status is " + response.statusText);
10
}
11
12
async function test()
1
async function test()
13
{
2
{
14
    try {
3
    try {
Lines 18-32 async function test() a/LayoutTests/http/tests/workers/service/resources/service-worker-crossorigin-fetch.js_sec2
18
            log("Failed: fetch suceeded unexpectedly");
7
            log("Failed: fetch suceeded unexpectedly");
19
        } catch(e) {
8
        } catch(e) {
20
            log("PASS: Fetch failed as expected with: " + e);
9
            log("PASS: Fetch failed as expected with: " + e);
21
        }        
10
        }
22
11
23
        await navigator.serviceWorker.register("resources/service-worker-crossorigin-fetch-worker.js", { });
12
        var frame = await interceptedFrame("resources/service-worker-crossorigin-fetch-worker.js", "/");
24
13
25
        var response = await fetch("http://localhost:8080/resources/square100.png.fromserviceworker", {headers: {"custom": "header"}});
14
        var response = await frame.contentWindow.fetch("http://localhost:8080/resources/square100.png.fromserviceworker", {headers: {"custom": "header"}});
26
        var buffer =  await response.arrayBuffer();
15
        var buffer =  await response.arrayBuffer();
27
        log("PASS: Got response with buffer byte length being " + buffer.byteLength);
16
        log("PASS: Got response with buffer byte length being " + buffer.byteLength);
28
17
29
        await logStatus();
18
        response = await frame.contentWindow.fetch("status");
19
        log("Status is " + response.statusText);
30
    } catch(e) {
20
    } catch(e) {
31
        log("Got exception: " + e);
21
        log("Got exception: " + e);
32
    }
22
    }
- a/LayoutTests/http/tests/workers/service/resources/service-worker-fetch.js -15 / +7 lines
Lines 1-26 a/LayoutTests/http/tests/workers/service/resources/service-worker-fetch.js_sec1
1
function done()
2
{
3
    finishSWTest();
4
}
5
6
async function logStatus()
7
{
8
    var response = await fetch("status");
9
    log("Status is " + response.statusText);
10
}
11
12
async function test()
1
async function test()
13
{
2
{
14
    try {
3
    try {
15
        await navigator.serviceWorker.register("resources/service-worker-fetch-worker.js", { });
4
        var frame = await interceptedFrame("resources/service-worker-fetch-worker.js", "/");
5
        var fetch = frame.contentWindow.fetch;
16
6
17
        await logStatus();
7
        var response = await fetch("status");
8
        log("Status is " + response.statusText);
18
9
19
        var response = await fetch("/resources/square100.png.fromserviceworker");
10
        response = await fetch("/resources/square100.png.fromserviceworker");
20
        var buffer =  await response.arrayBuffer();
11
        var buffer =  await response.arrayBuffer();
21
        log("Got response with buffer byte length being " + buffer.byteLength);
12
        log("Got response with buffer byte length being " + buffer.byteLength);
22
13
23
        await logStatus();
14
        response = await fetch("status");
15
        log("Status is " + response.statusText);
24
    } catch(e) {
16
    } catch(e) {
25
        log("Got exception: " + e);
17
        log("Got exception: " + e);
26
    }
18
    }
- a/LayoutTests/http/tests/workers/service/resources/service-worker-importScript.js -7 / +5 lines
Lines 1-9 a/LayoutTests/http/tests/workers/service/resources/service-worker-importScript.js_sec1
1
async function logStatus()
2
{
3
    var response = await fetch("status");
4
    log("Status is " + response.statusText);
5
}
6
7
async function test()
1
async function test()
8
{
2
{
9
    try {
3
    try {
Lines 11-17 async function test() a/LayoutTests/http/tests/workers/service/resources/service-worker-importScript.js_sec2
11
        await navigator.serviceWorker.register("resources/service-worker-importScript-worker.js", { });
5
        await navigator.serviceWorker.register("resources/service-worker-importScript-worker.js", { });
12
        log("Registered service worker");
6
        log("Registered service worker");
13
7
14
        await logStatus();
8
        var frame = await interceptedFrame("resources/service-worker-fetch-worker.js", "/");
9
        var fetch = frame.contentWindow.fetch;
10
        var response = await fetch("status");
11
        log("Status is " + response.statusText);
12
15
        log("PASS");
13
        log("PASS");
16
    } catch(e) {
14
    } catch(e) {
17
        console.log("Got exception: " + e);
15
        console.log("Got exception: " + e);
- a/LayoutTests/http/tests/workers/service/resources/sw-test-pre.js -2 / +25 lines
Lines 35-40 function waitForState(worker, state) a/LayoutTests/http/tests/workers/service/resources/sw-test-pre.js_sec1
35
35
36
function finishSWTest()
36
function finishSWTest()
37
{
37
{
38
	if (window.testRunner)
38
    if (window.testRunner)
39
		testRunner.notifyDone();
39
        testRunner.notifyDone();
40
}
41
42
async function interceptedFrame(workerURL, scopeURL)
43
{
44
    var registration = await navigator.serviceWorker.register(workerURL, { scope : scopeURL });
45
    await new Promise(resolve => {
46
        if (registration.active)
47
            resolve();
48
        worker = registration.installing;
49
        if (worker.state === "activated")
50
            resolve();
51
        worker.addEventListener("statechange", () => {
52
            if (worker.state === "activated")
53
                resolve();
54
        });
55
    });
56
57
    return await new Promise((resolve) => {
58
        var frame = document.createElement('iframe');
59
        frame.src = scopeURL;
60
        frame.onload = function() { resolve(frame); };
61
        document.body.appendChild(frame);
62
    });
40
}
63
}
- a/LayoutTests/http/tests/workers/service/resources/tainted-image-fetch.js -41 / +18 lines
Lines 1-46 a/LayoutTests/http/tests/workers/service/resources/tainted-image-fetch.js_sec1
1
async function loadedImage()
2
{
3
    log("PASS: Loaded image");
4
    await logStatus();
5
    log("Image size: " + image.width + "x" + image.height);
6
7
    canvas.getContext("2d").drawImage(image, 0, 0);
8
    try {
9
        canvas.toDataURL("image/jpeg");
10
        log("FAIL: Image is not tainted");
11
    } catch (e) {
12
        log("PASS: canvas toDataURL fails with " + e);
13
    }
14
    finishSWTest();
15
}
16
17
async function erroredImage()
18
{
19
    log("FAIL: image loading failed");
20
    await logStatus();
21
    finishSWTest();
22
}
23
24
async function logStatus()
25
{
26
    var response = await fetch("status");
27
    log("Status is " + response.statusText);
28
}
29
30
async function test()
1
async function test()
31
{
2
{
32
    try {
3
    log("Registering service worker");
33
        log("Registering service worker");
4
    var frame = await interceptedFrame("/workers/service/resources/cors-image-fetch-worker.js", "/workers/service/resources/cors-image-fetch-iframe.html.fromserviceworker");
34
        await navigator.serviceWorker.register("resources/cors-image-fetch-worker.js", { });
5
    log("Service worker registered");
35
        log("Service worker registered");
6
    window.addEventListener("message", (event) => {
36
7
        if (event.data === "end") {
37
        await logStatus();
8
            canvas.getContext("2d").drawImage(frame.contentWindow.image, 0, 0);
38
        log("Loading image");
9
            try {
39
        image.src = "http://localhost:8000/resources/square100.png.fromserviceworker";
10
                canvas.toDataURL("image/jpeg");
40
    } catch(e) {
11
                log("FAIL: Image is not tainted");
41
        log("Got exception: " + e);
12
            } catch (e) {
42
        await logStatus();
13
                log("PASS: canvas toDataURL fails with " + e);
43
    }
14
            }
15
            finishSWTest();
16
            return;
17
        }
18
        log(event.data);
19
    }, false);
20
    frame.contentWindow.start("http://localhost:8000/resources/square100.png.fromserviceworker");
44
}
21
}
45
22
46
test();
23
test();
- a/LayoutTests/http/tests/workers/service/service-worker-fetch.https-expected.txt +1 lines
Lines 1-3 a/LayoutTests/http/tests/workers/service/service-worker-fetch.https-expected.txt_sec1
1
1
Status is no status
2
Status is no status
2
Got response with buffer byte length being 12940
3
Got response with buffer byte length being 12940
3
Status is https://127.0.0.1:8443/resources/square100.png through fetch
4
Status is https://127.0.0.1:8443/resources/square100.png through fetch
- a/LayoutTests/http/tests/workers/service/tainted-image-fetch-expected.txt -1 / +1 lines
Lines 1-7 a/LayoutTests/http/tests/workers/service/tainted-image-fetch-expected.txt_sec1
1
 
1
 
2
Registering service worker
2
Registering service worker
3
Service worker registered
3
Service worker registered
4
Status is no status
4
Status is Got response for http://127.0.0.1:8000/workers/service/resources/cors-image-fetch-iframe.html, status code is 200
5
Loading image
5
Loading image
6
PASS: Loaded image
6
PASS: Loaded image
7
Status is Got response for http://localhost:8000/resources/square100.png, status code is 200
7
Status is Got response for http://localhost:8000/resources/square100.png, status code is 200
- a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/controller-on-reload.https-expected.txt -2 / +1 lines
Lines 1-4 a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/controller-on-reload.https-expected.txt_sec1
1
1
2
2
PASS controller is set upon reload after registration 
3
FAIL controller is set upon reload after registration assert_equals: controller should be null until the document is reloaded expected null but got object "[object ServiceWorker]"
4
3

Return to Bug 179705