2011-05-30 13:02:04 -07:00
|
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
2011-08-21 07:29:43 -07:00
|
|
|
|
|
|
|
const PREF_DISK_CACHE_SSL = "browser.cache.disk_cache_ssl";
|
|
|
|
|
2011-09-01 06:17:42 -07:00
|
|
|
let pb = Cc["@mozilla.org/privatebrowsing;1"].
|
|
|
|
getService(Ci.nsIPrivateBrowsingService);
|
|
|
|
|
2011-05-30 13:02:04 -07:00
|
|
|
let contentWindow;
|
|
|
|
let newTab;
|
|
|
|
|
|
|
|
function test() {
|
|
|
|
waitForExplicitFinish();
|
|
|
|
|
|
|
|
newTab = gBrowser.addTab();
|
|
|
|
|
|
|
|
HttpRequestObserver.register();
|
|
|
|
|
|
|
|
registerCleanupFunction(function () {
|
|
|
|
HttpRequestObserver.unregister();
|
|
|
|
if (gBrowser.tabs[1])
|
|
|
|
gBrowser.removeTab(gBrowser.tabs[1]);
|
2011-08-09 10:13:54 -07:00
|
|
|
hideTabView();
|
2011-05-30 13:02:04 -07:00
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
Services.prefs.clearUserPref(PREF_DISK_CACHE_SSL);
|
2011-09-01 06:17:42 -07:00
|
|
|
pb.privateBrowsingEnabled = false;
|
2011-05-30 13:02:04 -07:00
|
|
|
});
|
|
|
|
|
|
|
|
showTabView(function() {
|
|
|
|
contentWindow = TabView.getContentWindow();
|
|
|
|
test1();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function test1() {
|
|
|
|
// page with cache-control: no-store, should not save thumbnail
|
|
|
|
HttpRequestObserver.cacheControlValue = "no-store";
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
whenStorageDenied(newTab, function () {
|
2011-05-30 13:02:04 -07:00
|
|
|
let tabItem = newTab._tabViewTabItem;
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
ok(!contentWindow.StoragePolicy.canStoreThumbnailForTab(newTab),
|
2011-05-30 13:02:04 -07:00
|
|
|
"Should not save the thumbnail for tab");
|
|
|
|
|
2011-09-01 06:17:27 -07:00
|
|
|
whenDeniedToSaveImageData(tabItem, test2);
|
|
|
|
tabItem.saveThumbnail({synchronously: true});
|
2011-05-30 13:02:04 -07:00
|
|
|
HttpRequestObserver.cacheControlValue = null;
|
|
|
|
});
|
2011-08-21 07:29:43 -07:00
|
|
|
|
2011-10-05 08:46:47 -07:00
|
|
|
newTab.linkedBrowser.loadURI("http://www.example.com/browser/browser/components/tabview/test/dummy_page.html");
|
2011-05-30 13:02:04 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
function test2() {
|
|
|
|
// page with cache-control: private, should save thumbnail
|
|
|
|
HttpRequestObserver.cacheControlValue = "private";
|
|
|
|
|
|
|
|
newTab.linkedBrowser.loadURI("http://www.example.com/");
|
|
|
|
afterAllTabsLoaded(function() {
|
|
|
|
let tabItem = newTab._tabViewTabItem;
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
ok(contentWindow.StoragePolicy.canStoreThumbnailForTab(newTab),
|
2011-05-30 13:02:04 -07:00
|
|
|
"Should save the thumbnail for tab");
|
|
|
|
|
2011-07-14 10:54:25 -07:00
|
|
|
whenSavedCachedImageData(tabItem, test3);
|
2011-09-01 06:17:27 -07:00
|
|
|
tabItem.saveThumbnail({synchronously: true});
|
2011-05-30 13:02:04 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function test3() {
|
|
|
|
// page with cache-control: private with https caching enabled, should save thumbnail
|
|
|
|
HttpRequestObserver.cacheControlValue = "private";
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
Services.prefs.setBoolPref(PREF_DISK_CACHE_SSL, true);
|
2011-05-30 13:02:04 -07:00
|
|
|
|
2011-10-05 08:46:47 -07:00
|
|
|
newTab.linkedBrowser.loadURI("https://example.com/browser/browser/components/tabview/test/dummy_page.html");
|
2011-05-30 13:02:04 -07:00
|
|
|
afterAllTabsLoaded(function() {
|
|
|
|
let tabItem = newTab._tabViewTabItem;
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
ok(contentWindow.StoragePolicy.canStoreThumbnailForTab(newTab),
|
2011-05-30 13:02:04 -07:00
|
|
|
"Should save the thumbnail for tab");
|
|
|
|
|
2011-07-14 10:54:25 -07:00
|
|
|
whenSavedCachedImageData(tabItem, test4);
|
2011-09-01 06:17:27 -07:00
|
|
|
tabItem.saveThumbnail({synchronously: true});
|
2011-05-30 13:02:04 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function test4() {
|
|
|
|
// page with cache-control: public with https caching disabled, should save thumbnail
|
|
|
|
HttpRequestObserver.cacheControlValue = "public";
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
Services.prefs.setBoolPref(PREF_DISK_CACHE_SSL, false);
|
2011-05-30 13:02:04 -07:00
|
|
|
|
2011-10-05 08:46:47 -07:00
|
|
|
newTab.linkedBrowser.loadURI("https://example.com/browser/browser/components/tabview/test/");
|
2011-05-30 13:02:04 -07:00
|
|
|
afterAllTabsLoaded(function() {
|
|
|
|
let tabItem = newTab._tabViewTabItem;
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
ok(contentWindow.StoragePolicy.canStoreThumbnailForTab(newTab),
|
2011-05-30 13:02:04 -07:00
|
|
|
"Should save the thumbnail for tab");
|
|
|
|
|
2011-07-14 10:54:25 -07:00
|
|
|
whenSavedCachedImageData(tabItem, test5);
|
2011-09-01 06:17:27 -07:00
|
|
|
tabItem.saveThumbnail({synchronously: true});
|
2011-05-30 13:02:04 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function test5() {
|
|
|
|
// page with cache-control: private with https caching disabled, should not save thumbnail
|
|
|
|
HttpRequestObserver.cacheControlValue = "private";
|
2011-08-21 07:29:43 -07:00
|
|
|
|
|
|
|
whenStorageDenied(newTab, function () {
|
2011-05-30 13:02:04 -07:00
|
|
|
let tabItem = newTab._tabViewTabItem;
|
|
|
|
|
2011-08-21 07:29:43 -07:00
|
|
|
ok(!contentWindow.StoragePolicy.canStoreThumbnailForTab(newTab),
|
|
|
|
"Should not save the thumbnail for tab");
|
2011-05-30 13:02:04 -07:00
|
|
|
|
2011-09-01 06:17:27 -07:00
|
|
|
whenDeniedToSaveImageData(tabItem, function () {
|
2011-09-01 06:17:42 -07:00
|
|
|
gBrowser.removeTab(newTab);
|
|
|
|
test6();
|
2011-05-30 13:02:04 -07:00
|
|
|
});
|
2011-09-01 06:17:42 -07:00
|
|
|
|
2011-09-01 06:17:27 -07:00
|
|
|
tabItem.saveThumbnail({synchronously: true});
|
2011-05-30 13:02:04 -07:00
|
|
|
});
|
2011-08-21 07:29:43 -07:00
|
|
|
|
|
|
|
newTab.linkedBrowser.loadURI("https://example.com/");
|
2011-05-30 13:02:04 -07:00
|
|
|
}
|
|
|
|
|
2011-09-01 06:17:42 -07:00
|
|
|
// ensure that no thumbnails are saved while in private browsing mode
|
|
|
|
function test6() {
|
|
|
|
HttpRequestObserver.cacheControlValue = "public";
|
|
|
|
|
|
|
|
togglePrivateBrowsing(function () {
|
|
|
|
let tab = gBrowser.tabs[0];
|
|
|
|
|
|
|
|
ok(!contentWindow.StoragePolicy.canStoreThumbnailForTab(tab),
|
|
|
|
"Should not save the thumbnail for tab");
|
|
|
|
|
|
|
|
togglePrivateBrowsing(finish);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2011-05-30 13:02:04 -07:00
|
|
|
let HttpRequestObserver = {
|
|
|
|
cacheControlValue: null,
|
|
|
|
|
|
|
|
observe: function(subject, topic, data) {
|
|
|
|
if (topic == "http-on-examine-response" && this.cacheControlValue) {
|
|
|
|
let httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
|
|
|
|
httpChannel.setResponseHeader("Cache-Control", this.cacheControlValue, false);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
register: function() {
|
|
|
|
Services.obs.addObserver(this, "http-on-examine-response", false);
|
|
|
|
},
|
|
|
|
|
|
|
|
unregister: function() {
|
|
|
|
Services.obs.removeObserver(this, "http-on-examine-response");
|
|
|
|
}
|
|
|
|
};
|
2011-07-14 10:54:25 -07:00
|
|
|
|
|
|
|
function whenSavedCachedImageData(tabItem, callback) {
|
|
|
|
tabItem.addSubscriber("savedCachedImageData", function onSaved() {
|
|
|
|
tabItem.removeSubscriber("savedCachedImageData", onSaved);
|
|
|
|
callback();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2011-09-01 06:17:27 -07:00
|
|
|
function whenDeniedToSaveImageData(tabItem, callback) {
|
|
|
|
tabItem.addSubscriber("deniedToSaveImageData", function onDenied() {
|
|
|
|
tabItem.removeSubscriber("deniedToSaveImageData", onDenied);
|
2011-07-14 10:54:25 -07:00
|
|
|
callback();
|
|
|
|
});
|
|
|
|
}
|
2011-08-21 07:29:43 -07:00
|
|
|
|
|
|
|
function whenStorageDenied(tab, callback) {
|
|
|
|
let mm = tab.linkedBrowser.messageManager;
|
|
|
|
|
|
|
|
mm.addMessageListener("Panorama:StoragePolicy:denied", function onDenied() {
|
|
|
|
mm.removeMessageListener("Panorama:StoragePolicy:denied", onDenied);
|
|
|
|
executeSoon(callback);
|
|
|
|
});
|
|
|
|
}
|