Components.utils.import('resource://gre/modules/LoadContextInfo.jsm');

function run_test()
{
  do_get_profile();

  function checkNewBackEnd()
  {
    var storage = getCacheStorage("disk", LoadContextInfo.default);
    storage.asyncVisitStorage(
      new VisitCallback(1, 1024, ["http://an2/"], function() {
        storage = getCacheStorage("disk", LoadContextInfo.anonymous);
        storage.asyncVisitStorage(
          new VisitCallback(1, 1024, ["http://an2/"], function() {
            finish_cache2_test();
          }),
          true
        );
      }),
      true
    );
  }

  function checkOldBackEnd()
  {
    syncWithCacheIOThread(function() {
      var storage = getCacheStorage("disk", LoadContextInfo.default);
      storage.asyncVisitStorage(
        new VisitCallback(2, 24, ["http://an2/"], function() {
          storage = getCacheStorage("disk", LoadContextInfo.anonymous);
          storage.asyncVisitStorage(
            new VisitCallback(0, 0, ["http://an2/"], function() {
              finish_cache2_test();
            }),
            true
          );
        }),
        true
      );
    });
  }

  var mc = new MultipleCallbacks(2, newCacheBackEndUsed() ? checkNewBackEnd : checkOldBackEnd, !newCacheBackEndUsed());

  asyncOpenCacheEntry("http://an2/", "disk", Ci.nsICacheStorage.OPEN_NORMALLY, LoadContextInfo.default,
    new OpenCallback(NEW|WAITFORWRITE, "an2", "an2", function(entry) {
      mc.fired();
    })
  );

  asyncOpenCacheEntry("http://an2/", "disk", Ci.nsICacheStorage.OPEN_NORMALLY, LoadContextInfo.anonymous,
    new OpenCallback(NEW|WAITFORWRITE, "an2", "an2", function(entry) {
      mc.fired();
    })
  );

  do_test_pending();
}