Attachment #8678362: WIP for bug 1202085 for bug #1202085

View | Details | Raw Unified | Return to bug 1202085
Collapse All | Expand All

(-)a/dom/workers/test/serviceworkers/fetch/imagecache/imagecache_test.js (+15 lines)
Line     Link Here 
Line 0    Link Here 
1
function synthesizeImage() {
2
  return clients.matchAll().then(clients => {
3
    var url = "image-40px.png";
4
    clients.forEach(client => {
5
      client.postMessage(url);
6
    });
7
    return fetch(url);
8
  });
9
}
10
11
self.addEventListener("fetch", function(event) {
12
  if (event.request.url.indexOf("image-20px.png") >= 0) {
13
    event.respondWith(synthesizeImage());
14
  }
15
});
(-)a/dom/workers/test/serviceworkers/fetch/imagecache/index.html (+20 lines)
Line     Link Here 
Line 0    Link Here 
1
<!DOCTYPE html>
2
<script>
3
var width, url;
4
function maybeReport() {
5
  if (width !== undefined && url !== undefined) {
6
    window.parent.postMessage({status: "result",
7
                               width: width,
8
                               url: url}, "*");
9
  }
10
}
11
onload = function() {
12
  width = document.querySelector("img").width;
13
  maybeReport();
14
};
15
navigator.serviceWorker.onmessage = function(event) {
16
  url = event.data;
17
  maybeReport();
18
};
19
</script>
20
<img src="image-20px.png">
(-)a/dom/workers/test/serviceworkers/fetch/imagecache/postmortem.html (+9 lines)
Line     Link Here 
Line 0    Link Here 
1
<!DOCTYPE html>
2
<script>
3
onload = function() {
4
  var width = document.querySelector("img").width;
5
  window.parent.postMessage({status: "postmortem",
6
                             width: width}, "*");
7
};
8
</script>
9
<img src="image-20px.png">
(-)a/dom/workers/test/serviceworkers/fetch/imagecache/register.html (+16 lines)
Line     Link Here 
Line 0    Link Here 
1
<!DOCTYPE html>
2
<!-- Load the image here to put it in the image cache -->
3
<img src="image-20px.png">
4
<script>
5
  function ok(v, msg) {
6
    window.parent.postMessage({status: "ok", result: !!v, message: msg}, "*");
7
  }
8
9
  function done(reg) {
10
    ok(reg.active, "The active worker should be available.");
11
    window.parent.postMessage({status: "registrationdone"}, "*");
12
  }
13
14
  navigator.serviceWorker.ready.then(done);
15
  navigator.serviceWorker.register("imagecache_test.js", {scope: "."});
16
</script>
(-)a/dom/workers/test/serviceworkers/fetch/imagecache/unregister.html (+12 lines)
Line     Link Here 
Line 0    Link Here 
1
<!DOCTYPE html>
2
<script>
3
  navigator.serviceWorker.getRegistration(".").then(function(registration) {
4
    registration.unregister().then(function(success) {
5
      if (success) {
6
        window.parent.postMessage({status: "unregistrationdone"}, "*");
7
      }
8
    }, function(e) {
9
      dump("Unregistering the SW failed with " + e + "\n");
10
    });
11
  });
12
</script>
(-)a/dom/workers/test/serviceworkers/mochitest.ini (+2 lines)
Line     Link Here 
 Lines 54-69   support-files = Link Here 
54
  fetch/https/index.html
54
  fetch/https/index.html
55
  fetch/https/register.html
55
  fetch/https/register.html
56
  fetch/https/unregister.html
56
  fetch/https/unregister.html
57
  fetch/https/https_test.js
57
  fetch/https/https_test.js
58
  fetch/https/clonedresponse/index.html
58
  fetch/https/clonedresponse/index.html
59
  fetch/https/clonedresponse/register.html
59
  fetch/https/clonedresponse/register.html
60
  fetch/https/clonedresponse/unregister.html
60
  fetch/https/clonedresponse/unregister.html
61
  fetch/https/clonedresponse/https_test.js
61
  fetch/https/clonedresponse/https_test.js
62
  fetch/imagecache/*
62
  fetch/imagecache-maxage/index.html
63
  fetch/imagecache-maxage/index.html
63
  fetch/imagecache-maxage/image-20px.png
64
  fetch/imagecache-maxage/image-20px.png
64
  fetch/imagecache-maxage/image-40px.png
65
  fetch/imagecache-maxage/image-40px.png
65
  fetch/imagecache-maxage/maxage_test.js
66
  fetch/imagecache-maxage/maxage_test.js
66
  fetch/imagecache-maxage/register.html
67
  fetch/imagecache-maxage/register.html
67
  fetch/imagecache-maxage/unregister.html
68
  fetch/imagecache-maxage/unregister.html
68
  fetch/importscript-mixedcontent/register.html
69
  fetch/importscript-mixedcontent/register.html
69
  fetch/importscript-mixedcontent/unregister.html
70
  fetch/importscript-mixedcontent/unregister.html
 Lines 289-297   skip-if = toolkit == "android" || toolkit == "gonk" Link Here 
289
[test_unresolved_fetch_interception.html]
290
[test_unresolved_fetch_interception.html]
290
[test_hsts_upgrade_intercept.html]
291
[test_hsts_upgrade_intercept.html]
291
skip-if = e10s # Bug 1214305
292
skip-if = e10s # Bug 1214305
292
[test_csp_upgrade-insecure_intercept.html]
293
[test_csp_upgrade-insecure_intercept.html]
293
skip-if = e10s # Bug 1214305
294
skip-if = e10s # Bug 1214305
294
[test_importscript_mixedcontent.html]
295
[test_importscript_mixedcontent.html]
295
tags = mcb
296
tags = mcb
296
[test_serviceworker_header.html]
297
[test_serviceworker_header.html]
298
[test_imagecache.html]
297
[test_imagecache_max_age.html]
299
[test_imagecache_max_age.html]
(-)a/dom/workers/test/serviceworkers/test_imagecache.html (+56 lines)
Line     Link Here 
Line 0    Link Here 
1
<!--
2
  Any copyright is dedicated to the Public Domain.
3
  http://creativecommons.org/publicdomain/zero/1.0/
4
-->
5
<!DOCTYPE HTML>
6
<html>
7
<head>
8
  <title>Bug 1202085 - Test that images from different controllers don't cached together</title>
9
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
10
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
11
</head>
12
<body>
13
<p id="display"></p>
14
<div id="content">
15
<iframe></iframe>
16
</div>
17
<pre id="test"></pre>
18
<script class="testbody" type="text/javascript">
19
20
  var iframe;
21
  function runTest() {
22
    iframe = document.querySelector("iframe");
23
    iframe.src = "/tests/dom/workers/test/serviceworkers/fetch/imagecache/register.html";
24
    window.onmessage = function(e) {
25
      if (e.data.status == "ok") {
26
        ok(e.data.result, e.data.message);
27
      } else if (e.data.status == "registrationdone") {
28
        iframe.src = "/tests/dom/workers/test/serviceworkers/fetch/imagecache/index.html";
29
      } else if (e.data.status == "result") {
30
        is(e.data.url, "image-40px.png", "Correct url expected");
31
        is(e.data.width, 40, "Correct width expected");
32
        iframe.src = "/tests/dom/workers/test/serviceworkers/fetch/imagecache/unregister.html";
33
      } else if (e.data.status == "unregistrationdone") {
34
        iframe.src = "/tests/dom/workers/test/serviceworkers/fetch/imagecache/postmortem.html";
35
      } else if (e.data.status == "postmortem") {
36
        is(e.data.width, 20, "Correct width expected");
37
        window.onmessage = null;
38
        ok(true, "Test finished successfully");
39
        SimpleTest.finish();
40
      }
41
    };
42
  }
43
44
  SimpleTest.waitForExplicitFinish();
45
  onload = function() {
46
    SpecialPowers.pushPrefEnv({"set": [
47
      ["dom.serviceWorkers.exemptFromPerDomainMax", true],
48
      ["dom.serviceWorkers.interception.enabled", true],
49
      ["dom.serviceWorkers.enabled", true],
50
      ["dom.serviceWorkers.testing.enabled", true],
51
    ]}, runTest);
52
  };
53
</script>
54
</pre>
55
</body>
56
</html>
(-)a/image/imgRequest.cpp (+11 lines)
Line     Link Here 
 Lines 18-33    Link Here 
18
18
19
#include "nsIChannel.h"
19
#include "nsIChannel.h"
20
#include "nsICachingChannel.h"
20
#include "nsICachingChannel.h"
21
#include "nsIDocument.h"
21
#include "nsIDocument.h"
22
#include "nsIThreadRetargetableRequest.h"
22
#include "nsIThreadRetargetableRequest.h"
23
#include "nsIInputStream.h"
23
#include "nsIInputStream.h"
24
#include "nsIMultiPartChannel.h"
24
#include "nsIMultiPartChannel.h"
25
#include "nsIHttpChannel.h"
25
#include "nsIHttpChannel.h"
26
#include "nsIHttpChannelInternal.h"
26
#include "nsIApplicationCache.h"
27
#include "nsIApplicationCache.h"
27
#include "nsIApplicationCacheChannel.h"
28
#include "nsIApplicationCacheChannel.h"
28
#include "nsMimeTypes.h"
29
#include "nsMimeTypes.h"
29
30
30
#include "nsIInterfaceRequestorUtils.h"
31
#include "nsIInterfaceRequestorUtils.h"
31
#include "nsISupportsPrimitives.h"
32
#include "nsISupportsPrimitives.h"
32
#include "nsIScriptSecurityManager.h"
33
#include "nsIScriptSecurityManager.h"
33
#include "nsContentUtils.h"
34
#include "nsContentUtils.h"
 Lines 766-781   imgRequest::OnStartRequest(nsIRequest* aRequest, nsISupports* ctxt) Link Here 
766
      nsresult rv =
767
      nsresult rv =
767
        secMan->GetChannelResultPrincipal(channel, getter_AddRefs(mPrincipal));
768
        secMan->GetChannelResultPrincipal(channel, getter_AddRefs(mPrincipal));
768
      if (NS_FAILED(rv)) {
769
      if (NS_FAILED(rv)) {
769
        return rv;
770
        return rv;
770
      }
771
      }
771
    }
772
    }
772
  }
773
  }
773
774
775
  nsCOMPtr<nsIHttpChannelInternal> httpChannelInternal =
776
    do_QueryInterface(channel);
777
  if (httpChannelInternal) {
778
    bool responseSynthesized = false;
779
    httpChannelInternal->GetResponseSynthesized(&responseSynthesized);
780
    if (responseSynthesized) {
781
      ResetCacheEntry();
782
    }
783
  }
784
774
  SetCacheValidation(mCacheEntry, aRequest);
785
  SetCacheValidation(mCacheEntry, aRequest);
775
786
776
  mApplicationCache = GetApplicationCache(aRequest);
787
  mApplicationCache = GetApplicationCache(aRequest);
777
788
778
  // Shouldn't we be dead already if this gets hit?
789
  // Shouldn't we be dead already if this gets hit?
779
  // Probably multipart/x-mixed-replace...
790
  // Probably multipart/x-mixed-replace...
780
  RefPtr<ProgressTracker> progressTracker = GetProgressTracker();
791
  RefPtr<ProgressTracker> progressTracker = GetProgressTracker();
781
  if (progressTracker->ObserverCount() == 0) {
792
  if (progressTracker->ObserverCount() == 0) {

Return to bug 1202085