summaryrefslogtreecommitdiffstats
path: root/devtools/client/styleeditor/test/browser_styleeditor_private_perwindowpb.js
blob: 4381704e97f75992c994b0039bf7196d3ccbe629 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

// This test makes sure that the style editor does not store any
// content CSS files in the permanent cache when opened from PB mode.

const TEST_URL = "http://" + TEST_HOST + "/browser/devtools/client/" +
  "styleeditor/test/test_private.html";
const {LoadContextInfo} =
  Cu.import("resource://gre/modules/LoadContextInfo.jsm", {});
const cache = Cc["@mozilla.org/netwerk/cache-storage-service;1"]
  .getService(Ci.nsICacheStorageService);

add_task(function* () {
  info("Opening a new private window");
  let win = OpenBrowserWindow({private: true});
  yield waitForDelayedStartupFinished(win);

  info("Clearing the browser cache");
  cache.clear();

  let { toolbox, ui } = yield openStyleEditorForURL(TEST_URL, win);

  is(ui.editors.length, 1, "The style editor contains one sheet.");
  let editor = ui.editors[0];

  yield editor.getSourceEditor();
  yield checkDiskCacheFor(TEST_HOST);

  yield toolbox.destroy();

  let onUnload = new Promise(done => {
    win.addEventListener("unload", function listener(event) {
      if (event.target == win.document) {
        win.removeEventListener("unload", listener);
        done();
      }
    });
  });
  win.close();
  yield onUnload;
});

function checkDiskCacheFor(host) {
  let foundPrivateData = false;
  let deferred = defer();

  Visitor.prototype = {
    onCacheStorageInfo: function (num) {
      info("disk storage contains " + num + " entries");
    },
    onCacheEntryInfo: function (uri) {
      let urispec = uri.asciiSpec;
      info(urispec);
      foundPrivateData |= urispec.includes(host);
    },
    onCacheEntryVisitCompleted: function () {
      is(foundPrivateData, false, "web content present in disk cache");
      deferred.resolve();
    }
  };
  function Visitor() {}

  let storage = cache.diskCacheStorage(LoadContextInfo.default, false);
  storage.asyncVisitStorage(new Visitor(),
    /* Do walk entries */
    true);

  return deferred.promise;
}

function waitForDelayedStartupFinished(win) {
  let deferred = defer();
  Services.obs.addObserver(function observer(subject, topic) {
    if (win == subject) {
      Services.obs.removeObserver(observer, topic);
      deferred.resolve();
    }
  }, "browser-delayed-startup-finished", false);

  return deferred.promise;
}