Ticket #13749: 0001-Bug-13749.2-Regression-tests-for-first-party-isolati.patch

File 0001-Bug-13749.2-Regression-tests-for-first-party-isolati.patch, 35.4 KB (added by arthuredelstein, 5 years ago)
  • netwerk/test/browser/browser.ini

    From d2b7c8b35ffcf50aa4d0e4b5a2027cbce72b6758 Mon Sep 17 00:00:00 2001
    From: Arthur Edelstein <arthuredelstein@gmail.com>
    Date: Mon, 15 Dec 2014 02:35:03 -0800
    Subject: [PATCH] Bug #13749.2: Regression tests for first-party isolation of
     cache
    
    This test ensures that if first-party isolation is enabled
    ("privacy.thirdparty.isolate" pref is set to 2) then when a loaded file is cached,
    it is indexed by the URL-bar domain.
    
    In this test, a number of files are loaded (via IFRAME, LINK, SCRIPT, IMG, OBJECT,
    EMBED, AUDIO, VIDEO, TRACK and XMLHttpRequest) by parent pages with different URL bar
    domains. When isolation is active, we test to confirm that a separate copy of each file
    is cached for each different parent domain. We also test to make sure that when
    isolation is inactive, a single copy of the child page is cached and reused for all
    parent domains.
    ---
     netwerk/test/browser/browser.ini                 |  14 ++
     netwerk/test/browser/browser_cacheFirstParty.js  | 157 +++++++++++++++++++++++
     netwerk/test/browser/firstPartyGrandParent.html  |  10 ++
     netwerk/test/browser/firstPartyParent.html       |  38 ++++++
     netwerk/test/browser/thirdPartyChild.audio.ogg   | Bin 0 -> 2603 bytes
     netwerk/test/browser/thirdPartyChild.embed.png   | Bin 0 -> 95 bytes
     netwerk/test/browser/thirdPartyChild.iframe.html |  13 ++
     netwerk/test/browser/thirdPartyChild.img.png     | Bin 0 -> 95 bytes
     netwerk/test/browser/thirdPartyChild.link.css    |   1 +
     netwerk/test/browser/thirdPartyChild.object.png  | Bin 0 -> 95 bytes
     netwerk/test/browser/thirdPartyChild.script.js   |   1 +
     netwerk/test/browser/thirdPartyChild.track.vtt   |  13 ++
     netwerk/test/browser/thirdPartyChild.video.ogv   | Bin 0 -> 16049 bytes
     netwerk/test/browser/thirdPartyChild.xhr.html    |   8 ++
     14 files changed, 255 insertions(+)
     create mode 100644 netwerk/test/browser/browser_cacheFirstParty.js
     create mode 100644 netwerk/test/browser/firstPartyGrandParent.html
     create mode 100644 netwerk/test/browser/firstPartyParent.html
     create mode 100644 netwerk/test/browser/thirdPartyChild.audio.ogg
     create mode 100644 netwerk/test/browser/thirdPartyChild.embed.png
     create mode 100644 netwerk/test/browser/thirdPartyChild.iframe.html
     create mode 100644 netwerk/test/browser/thirdPartyChild.img.png
     create mode 100644 netwerk/test/browser/thirdPartyChild.link.css
     create mode 100644 netwerk/test/browser/thirdPartyChild.object.png
     create mode 100644 netwerk/test/browser/thirdPartyChild.script.js
     create mode 100644 netwerk/test/browser/thirdPartyChild.track.vtt
     create mode 100644 netwerk/test/browser/thirdPartyChild.video.ogv
     create mode 100644 netwerk/test/browser/thirdPartyChild.xhr.html
    
    diff --git a/netwerk/test/browser/browser.ini b/netwerk/test/browser/browser.ini
    index a5f31f9..cae28f7 100644
    a b  
    11[DEFAULT]
     2support-files =
     3  firstPartyGrandParent.html
     4  firstPartyParent.html
     5  thirdPartyChild.link.css
     6  thirdPartyChild.iframe.html
     7  thirdPartyChild.script.js
     8  thirdPartyChild.audio.ogg
     9  thirdPartyChild.video.ogv
     10  thirdPartyChild.embed.png
     11  thirdPartyChild.img.png
     12  thirdPartyChild.object.png
     13  thirdPartyChild.xhr.html
     14  thirdPartyChild.track.vtt
    215
     16[browser_cacheFirstParty.js]
    317[browser_NetUtil.js]
  • new file netwerk/test/browser/browser_cacheFirstParty.js

    diff --git a/netwerk/test/browser/browser_cacheFirstParty.js b/netwerk/test/browser/browser_cacheFirstParty.js
    new file mode 100644
    index 0000000..673b8c9
    - +  
     1// # URL-bar domain (first party) isolation test
     2
     3// This test ensures that if first-party isolation is enabled
     4// ("privacy.thirdparty.isolate" pref is set to 2) then when a loaded file is cached,
     5// it is indexed by the URL-bar domain.
     6
     7// In this test, a number of files are loaded (via IFRAME, LINK, SCRIPT, IMG, OBJECT,
     8// EMBED, AUDIO, VIDEO, TRACK and XMLHttpRequest) by parent pages with different URL bar
     9// domains. When isolation is active, we test to confirm that a separate copy of each file
     10// is cached for each different parent domain. We also test to make sure that when
     11// isolation is inactive, a single copy of the child page is cached and reused for all
     12// parent domains.
     13
     14// In this file, functions are defined in call stack order (later functions call earlier
     15// functions). Comments are formatted for docco.
     16
     17/* jshint esnext:true */
     18
     19// __Mozilla utilities__.
     20const Cu = Components.utils;
     21const Ci = Components.interfaces;
     22Cu.import("resource://gre/modules/Services.jsm");
     23Cu.import("resource://gre/modules/Task.jsm");
     24
     25// __listen(target, eventType, timeoutMs, useCapture)__.
     26// Calls addEventListener on target, with the given eventType.
     27// Returns a Promise that resolves to an Event object, if the event fires.
     28// If a timeout occurs, then Promise is rejected with a "Timed out" error.
     29// For use with Task.jsm.
     30let listen = function (target, eventType, timeoutMs, useCapture) {
     31  return new Promise(function (resolve, reject) {
     32    let listenFunction = function (event) {
     33      target.removeEventListener(eventType, listenFunction, useCapture);
     34      resolve(event);
     35    };
     36    target.addEventListener(eventType, listenFunction, useCapture);
     37    window.setTimeout(() => reject(new Error("Timed out")), timeoutMs);
     38  });
     39};
     40
     41// __copyObject(obj)__.
     42// Returns a shallow copy of an object. Works with JS native objects.
     43let copyObject = function (obj) {
     44  let result = {};
     45  for (let k of Object.keys(obj)) {
     46    result[k] = obj[k];
     47  }
     48  return result;
     49};
     50
     51// __cacheData()__.
     52// Returns the current state of the cache.
     53let cacheData = function () {
     54  let devices = [],
     55      cacheEntries = [],
     56      cacheVisitor = { visitDevice : function (deviceID, deviceInfo) {
     57                                       devices.push(copyObject(deviceInfo));
     58                                       return true;
     59                                     },
     60                       visitEntry : function (deviceID, entryInfo) {
     61                                      cacheEntries.push(copyObject(entryInfo));
     62                                      return true;
     63                                    },
     64                       QueryInterface : function(iid) {
     65                             if (iid.equals(Ci.nsICacheVisitor)) return this;
     66                       } };
     67  Services.cache.visitEntries(cacheVisitor);
     68  return { devices : devices, cacheEntries : cacheEntries };
     69};
     70
     71// __loadURLinNewTab(URL)__.
     72// Opens a new tab at a given URL, and waits for it to load. Times out after 5 sec.
     73// Returns a promise that resolves to the tab. (Task.jsm coroutine.)
     74let loadURLinNewTab = function* (URL) {
     75  let tab = gBrowser.addTab(URL),
     76      browser = gBrowser.getBrowserForTab(tab),
     77      result = yield listen(browser, "load", 5000, true);
     78  return tab;
     79};
     80
     81// __countMatchingCacheEntries(cacheEntries, domain, fileSuffix)__.
     82// Reports how many cache entries contain a given domain name and file suffix.
     83let countMatchingCacheEntries = function (cacheEntries, domain, fileSuffix) {
     84  return cacheEntries.map(entry => entry.key)
     85           .filter(key => key.contains(domain))
     86           .filter(key => key.contains("thirdPartyChild." + fileSuffix))
     87           .length;
     88};
     89
     90// __Constants__.
     91let privacyPref = "privacy.thirdparty.isolate",
     92    parentPage = "/browser/netwerk/test/browser/firstPartyParent.html",
     93    grandParentPage = "/browser/netwerk/test/browser/firstPartyGrandParent.html",
     94    // Parent domains (the iframe "child" domain is example.net):
     95    domains = ["test1", "test2"],
     96    // We duplicate domains, to check that two pages with the same first party domain
     97    // share cached embedded objects.
     98    duplicatedDomains = [].concat(domains, domains),
     99    // We will check cache for example.net content from
     100    // iframe, link, script, img, object, embed, xhr, audio, video, track
     101    suffixes = ["iframe.html", "link.css", "script.js", "img.png", "object.png",
     102                "embed.png", "xhr.html", "audio.ogg", "video.ogv", "track.vtt" ];
     103
     104// __checkCachePopulation(pref, numberOfDomains)__.
     105// Check if the number of entries found in the cache for each
     106// embedded file type matches the number we expect, given the
     107// number of domains and the isolation state.
     108let checkCachePopulation = function (pref, numberOfDomains) {
     109  let expectedEntryCount = (pref === 2) ? (2 * numberOfDomains) : 1;
     110  // Collect cache data.
     111  let data = cacheData();
     112  for (let suffix of suffixes) {
     113    let foundEntryCount = countMatchingCacheEntries(data.cacheEntries, "example.net", suffix),
     114        result = (suffix.startsWith("video") || suffix.startsWith("audio")) ?
     115          // Video and audio elements aren't always cached, so
     116          // tolerate fewer cached copies.
     117          (expectedEntryCount === 1 ? (foundEntryCount <= 1) : (foundEntryCount > 1)) :
     118          (expectedEntryCount === foundEntryCount);
     119    // Report results to mochitest
     120    ok(result, "Cache entries expected for " + suffix +
     121                           ": " + expectedEntryCount);
     122  }
     123};
     124
     125// __test()__.
     126// The main testing function.
     127let test = function () {
     128  waitForExplicitFinish();
     129  // Launch a Task.jsm coroutine so we can open tabs and wait for each of them to open,
     130  // one by one.
     131  Task.spawn(function* () {
     132    // Keep original pref value for restoring after the tests.
     133    let originalPrefValue = Services.prefs.getIntPref(privacyPref);
     134    // Test the pref with both values: 2 (isolating by first party) or 0 (not isolating)
     135    for (let pref of [2, 0]) {
     136      // Clear the cache.
     137      Services.cache2.clear();
     138      // Set the pref to desired value
     139      Services.prefs.setIntPref(privacyPref, pref);
     140      // Open test tabs
     141      let tabs = [];
     142      for (let domain of duplicatedDomains) {
     143        tabs.push(yield loadURLinNewTab("http://" + domain + ".example.com" + parentPage));
     144        tabs.push(yield loadURLinNewTab("http://" + domain + ".example.org" + grandParentPage));
     145      }
     146      // Run checks to make sure cache has expected number of entries for
     147      // the chosen pref state.
     148      checkCachePopulation(pref, domains.length);
     149      // Clean up by removing tabs.
     150      tabs.forEach(tab => gBrowser.removeTab(tab));
     151    }
     152    // Restore the pref to its original value.
     153    Services.prefs.setIntPref(privacyPref, originalPrefValue);
     154    // All tests have now been run.
     155    finish();
     156  });
     157};
  • new file netwerk/test/browser/firstPartyGrandParent.html

    diff --git a/netwerk/test/browser/firstPartyGrandParent.html b/netwerk/test/browser/firstPartyGrandParent.html
    new file mode 100644
    index 0000000..c990831
    - +  
     1<!DOCTYPE html>
     2<html>
     3<head>
     4<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
     5</head>
     6<frameset cols="50%,50%">
     7  <frame src="http://example.net/browser/netwerk/test/browser/firstPartyParent.html">
     8  <frame src="">
     9</frameset>
     10</html>
  • new file netwerk/test/browser/firstPartyParent.html

    diff --git a/netwerk/test/browser/firstPartyParent.html b/netwerk/test/browser/firstPartyParent.html
    new file mode 100644
    index 0000000..7f2f5c8
    - +  
     1<!DOCTYPE html>
     2<html>
     3<!-- The parent page, used by browser_cacheFirstParty.js -->
     4<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
     5<head>
     6  <link rel="stylesheet" type="text/css"
     7        href="http://example.net/browser/netwerk/test/browser/thirdPartyChild.link.css">
     8</head>
     9<body>
     10<div>firstPartyParent.html</div>
     11
     12<iframe src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.iframe.html">
     13</iframe>
     14
     15<script src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.script.js">
     16</script>
     17
     18<img src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.img.png">
     19
     20<embed src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.embed.png">
     21
     22<object data="http://example.net/browser/netwerk/test/browser/thirdPartyChild.object.png"
     23        type="image/png"></object>
     24
     25<audio id="audio" autoplay>
     26  <source src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.audio.ogg"
     27          type="audio/ogg">
     28  <track src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.track.vtt"
     29         kind="subtitles">
     30</audio>
     31
     32<video id="video"
     33       src="http://example.net/browser/netwerk/test/browser/thirdPartyChild.video.ogv"
     34       type="video/ogg">
     35</video>
     36
     37</body>
     38</html>
  • new file netwerk/test/browser/thirdPartyChild.audio.ogg

    diff --git a/netwerk/test/browser/thirdPartyChild.audio.ogg b/netwerk/test/browser/thirdPartyChild.audio.ogg
    new file mode 100644
    index 0000000000000000000000000000000000000000..edda4e9128435b0cc9ba500c9daca90e2be30acf
    GIT binary patch
    literal 2603
    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
    Aj{pDw
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/netwerk/test/browser/thirdPartyChild.embed.png b/netwerk/test/browser/thirdPartyChild.embed.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..c5916f289705642eec4975cf51458b9afeefe46c
    GIT binary patch
    literal 95
    zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%mF?juK#@*VoWXSL2@NQe!*uh
    mnS}iXa=1KQ978JRBqsscYz)k1<~1vTECx?kKbLh*2~7ZT-W2Wt
  • new file netwerk/test/browser/thirdPartyChild.iframe.html

    literal 0
    HcmV?d00001
    
    diff --git a/netwerk/test/browser/thirdPartyChild.iframe.html b/netwerk/test/browser/thirdPartyChild.iframe.html
    new file mode 100644
    index 0000000..f7b7531
    - +  
     1<!DOCTYPE html>
     2<html>
     3<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
     4<!-- The child page, used by browser_cacheFirstParty.js -->
     5<body>
     6<div>thirdPartyChild.html</div>
     7<script>
     8  var xhr = new XMLHttpRequest();
     9  xhr.open("GET", "http://example.net/browser/netwerk/test/browser/thirdPartyChild.xhr.html", true);
     10  xhr.send();
     11</script>
     12</body>
     13</html>
  • new file netwerk/test/browser/thirdPartyChild.img.png

    diff --git a/netwerk/test/browser/thirdPartyChild.img.png b/netwerk/test/browser/thirdPartyChild.img.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..c5916f289705642eec4975cf51458b9afeefe46c
    GIT binary patch
    literal 95
    zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%mF?juK#@*VoWXSL2@NQe!*uh
    mnS}iXa=1KQ978JRBqsscYz)k1<~1vTECx?kKbLh*2~7ZT-W2Wt
  • new file netwerk/test/browser/thirdPartyChild.link.css

    literal 0
    HcmV?d00001
    
    diff --git a/netwerk/test/browser/thirdPartyChild.link.css b/netwerk/test/browser/thirdPartyChild.link.css
    new file mode 100644
    index 0000000..cf8a82e
    - +  
     1/* Dummy CSS file, used by browser_cacheFirstParty.js. */
     2 No newline at end of file
  • new file netwerk/test/browser/thirdPartyChild.object.png

    diff --git a/netwerk/test/browser/thirdPartyChild.object.png b/netwerk/test/browser/thirdPartyChild.object.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..c5916f289705642eec4975cf51458b9afeefe46c
    GIT binary patch
    literal 95
    zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%mF?juK#@*VoWXSL2@NQe!*uh
    mnS}iXa=1KQ978JRBqsscYz)k1<~1vTECx?kKbLh*2~7ZT-W2Wt
  • new file netwerk/test/browser/thirdPartyChild.script.js

    literal 0
    HcmV?d00001
    
    diff --git a/netwerk/test/browser/thirdPartyChild.script.js b/netwerk/test/browser/thirdPartyChild.script.js
    new file mode 100644
    index 0000000..1cf2937
    - +  
     1// Dummy child script, used by browser_cacheFirstParty.js
  • new file netwerk/test/browser/thirdPartyChild.track.vtt

    diff --git a/netwerk/test/browser/thirdPartyChild.track.vtt b/netwerk/test/browser/thirdPartyChild.track.vtt
    new file mode 100644
    index 0000000..b37cb40
    - +  
     1WEBVTT FILE
     2
     31
     400:00:00.500 --> 00:00:02.000 D:vertical A:start
     5blah blah blah
     6
     72
     800:00:02.500 --> 00:00:04.300
     9this is a test
     10
     113
     1200:00:05.000 --> 00:00:07.000
     13one more line
  • new file netwerk/test/browser/thirdPartyChild.video.ogv

    diff --git a/netwerk/test/browser/thirdPartyChild.video.ogv b/netwerk/test/browser/thirdPartyChild.video.ogv
    new file mode 100644
    index 0000000000000000000000000000000000000000..68dee3cf2b1de3d820a7b606cdca809f8224e855
    GIT binary patch
    literal 16049
    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
  • new file netwerk/test/browser/thirdPartyChild.xhr.html

    literal 0
    HcmV?d00001
    
    diff --git a/netwerk/test/browser/thirdPartyChild.xhr.html b/netwerk/test/browser/thirdPartyChild.xhr.html
    new file mode 100644
    index 0000000..b750364
    - +  
     1<!DOCTYPE html>
     2<html>
     3<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
     4<!-- The child page, used by browser_cacheFirstParty.js -->
     5<body>
     6<div>thirdPartyChild.html</div>
     7</body>
     8</html>