/* 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/. */

// Check about:cache after private browsing
// This test covers MozTrap test 6047
// bug 880621

var tmp = {};

const {Sanitizer} = ChromeUtils.import("resource:///modules/Sanitizer.jsm");

function test() {
  waitForExplicitFinish();

  Sanitizer.sanitize(["cache"], {ignoreTimespan: false});

  getStorageEntryCount("regular", function(nrEntriesR1) {
    is(nrEntriesR1, 0, "Disk cache reports 0KB and has no entries");

    get_cache_for_private_window();
  });
}

function getStorageEntryCount(device, goon) {
  var storage;
  switch (device) {
  case "private":
    storage = Services.cache2.diskCacheStorage(Services.loadContextInfo.private, false);
    break;
  case "regular":
    storage = Services.cache2.diskCacheStorage(Services.loadContextInfo.default, false);
    break;
  default:
    throw new Error(`Unknown device ${device} at getStorageEntryCount`);
  }

  var visitor = {
    entryCount: 0,
    onCacheStorageInfo(aEntryCount, aConsumption) {
    },
    onCacheEntryInfo(uri) {
      var urispec = uri.asciiSpec;
      info(device + ":" + urispec + "\n");
      if (urispec.match(/^http:\/\/example.org\//))
        ++this.entryCount;
    },
    onCacheEntryVisitCompleted() {
      goon(this.entryCount);
    },
  };

  storage.asyncVisitStorage(visitor, true);
}

function get_cache_for_private_window() {
  let win = whenNewWindowLoaded({private: true}, function() {
    executeSoon(function() {
      ok(true, "The private window got loaded");

      let tab = BrowserTestUtils.addTab(win.gBrowser, "http://example.org");
      win.gBrowser.selectedTab = tab;
      let newTabBrowser = win.gBrowser.getBrowserForTab(tab);

      BrowserTestUtils.browserLoaded(newTabBrowser).then(function() {
        executeSoon(function() {
          getStorageEntryCount("private", function(nrEntriesP) {
            ok(nrEntriesP >= 1, "Memory cache reports some entries from example.org domain");

            getStorageEntryCount("regular", function(nrEntriesR2) {
              is(nrEntriesR2, 0, "Disk cache reports 0KB and has no entries");

              win.close();
              finish();
            });
          });
        });
      });
    });
  });
}
