mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-05 03:54:35 +00:00
Bug 885054 - Sidebars should not migrate across private / non-private window. r=gavin
This commit is contained in:
parent
1a7d96b183
commit
b73190dfcb
@ -823,7 +823,8 @@ var gBrowserInit = {
|
||||
// setup history swipe animation
|
||||
gHistorySwipeAnimation.init();
|
||||
|
||||
if (window.opener && !window.opener.closed) {
|
||||
if (window.opener && !window.opener.closed &&
|
||||
PrivateBrowsingUtils.isWindowPrivate(window) == PrivateBrowsingUtils.isWindowPrivate(window.opener)) {
|
||||
let openerSidebarBox = window.opener.document.getElementById("sidebar-box");
|
||||
// If the opener had a sidebar, open the same sidebar in our window.
|
||||
// The opener can be the hidden window too, if we're coming from the state
|
||||
|
@ -45,6 +45,7 @@ MOCHITEST_BROWSER_FILES = \
|
||||
browser_privatebrowsing_popupblocker.js \
|
||||
browser_privatebrowsing_protocolhandler.js \
|
||||
browser_privatebrowsing_protocolhandler_page.html \
|
||||
browser_privatebrowsing_sidebar.js \
|
||||
browser_privatebrowsing_theming.js \
|
||||
browser_privatebrowsing_ui.js \
|
||||
browser_privatebrowsing_urlbarfocus.js \
|
||||
|
@ -0,0 +1,92 @@
|
||||
/* 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/. */
|
||||
|
||||
// This test makes sure that Sidebars do not migrate across windows with
|
||||
// different privacy states
|
||||
|
||||
// See Bug 885054: https://bugzilla.mozilla.org/show_bug.cgi?id=885054
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
let { utils: Cu } = Components;
|
||||
|
||||
let { Promise: { defer } } = Cu.import("resource://gre/modules/Promise.jsm", {});
|
||||
|
||||
// opens a sidebar
|
||||
function openSidebar(win) {
|
||||
let { promise, resolve } = defer();
|
||||
let doc = win.document;
|
||||
|
||||
let sidebarID = 'viewBookmarksSidebar';
|
||||
|
||||
let sidebar = doc.getElementById('sidebar');
|
||||
|
||||
let sidebarurl = doc.getElementById(sidebarID).getAttribute('sidebarurl');
|
||||
|
||||
sidebar.addEventListener('load', function onSidebarLoad() {
|
||||
if (sidebar.contentWindow.location.href != sidebarurl)
|
||||
return;
|
||||
sidebar.removeEventListener('load', onSidebarLoad, true);
|
||||
|
||||
resolve(win);
|
||||
}, true);
|
||||
|
||||
win.toggleSidebar(sidebarID, true);
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
let windowCache = [];
|
||||
function cacheWindow(w) {
|
||||
windowCache.push(w);
|
||||
return w;
|
||||
}
|
||||
function closeCachedWindows () {
|
||||
windowCache.forEach(function(w) w.close());
|
||||
}
|
||||
|
||||
// Part 1: NON PRIVATE WINDOW -> PRIVATE WINDOW
|
||||
openWindow(window, {}, 1).
|
||||
then(cacheWindow).
|
||||
then(openSidebar).
|
||||
then(function(win) openWindow(win, { private: true })).
|
||||
then(cacheWindow).
|
||||
then(function({ document }) {
|
||||
let sidebarBox = document.getElementById("sidebar-box");
|
||||
is(sidebarBox.hidden, true, 'Opening a private window from reg window does not open the sidebar');
|
||||
}).
|
||||
// Part 2: NON PRIVATE WINDOW -> NON PRIVATE WINDOW
|
||||
then(function() openWindow(window)).
|
||||
then(cacheWindow).
|
||||
then(openSidebar).
|
||||
then(function(win) openWindow(win)).
|
||||
then(cacheWindow).
|
||||
then(function({ document }) {
|
||||
let sidebarBox = document.getElementById("sidebar-box");
|
||||
is(sidebarBox.hidden, false, 'Opening a reg window from reg window does open the sidebar');
|
||||
}).
|
||||
// Part 3: PRIVATE WINDOW -> NON PRIVATE WINDOW
|
||||
then(function() openWindow(window, { private: true })).
|
||||
then(cacheWindow).
|
||||
then(openSidebar).
|
||||
then(function(win) openWindow(win)).
|
||||
then(cacheWindow).
|
||||
then(function({ document }) {
|
||||
let sidebarBox = document.getElementById("sidebar-box");
|
||||
is(sidebarBox.hidden, true, 'Opening a reg window from a private window does not open the sidebar');
|
||||
}).
|
||||
// Part 4: PRIVATE WINDOW -> PRIVATE WINDOW
|
||||
then(function() openWindow(window, { private: true })).
|
||||
then(cacheWindow).
|
||||
then(openSidebar).
|
||||
then(function(win) openWindow(win, { private: true })).
|
||||
then(cacheWindow).
|
||||
then(function({ document }) {
|
||||
let sidebarBox = document.getElementById("sidebar-box");
|
||||
is(sidebarBox.hidden, false, 'Opening a private window from private window does open the sidebar');
|
||||
}).
|
||||
then(closeCachedWindows).
|
||||
then(finish);
|
||||
}
|
@ -31,6 +31,20 @@ function whenNewWindowLoaded(aOptions, aCallback) {
|
||||
return win;
|
||||
}
|
||||
|
||||
function openWindow(aParent, aOptions, a3) {
|
||||
let { Promise: { defer } } = Components.utils.import("resource://gre/modules/Promise.jsm", {});
|
||||
let { promise, resolve } = defer();
|
||||
|
||||
let win = aParent.OpenBrowserWindow(aOptions);
|
||||
|
||||
win.addEventListener("load", function onLoad() {
|
||||
win.removeEventListener("load", onLoad, false);
|
||||
resolve(win);
|
||||
}, false);
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
function newDirectory() {
|
||||
let FileUtils =
|
||||
Cu.import("resource://gre/modules/FileUtils.jsm", {}).FileUtils;
|
||||
@ -62,4 +76,3 @@ function _initTest() {
|
||||
}
|
||||
|
||||
_initTest();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user