/* 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 "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 = win.gBrowser.addTab("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();
            });
          });
        });
      });
    });
  });
}
