mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-08 14:03:49 +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
|
// setup history swipe animation
|
||||||
gHistorySwipeAnimation.init();
|
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");
|
let openerSidebarBox = window.opener.document.getElementById("sidebar-box");
|
||||||
// If the opener had a sidebar, open the same sidebar in our window.
|
// 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
|
// 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_popupblocker.js \
|
||||||
browser_privatebrowsing_protocolhandler.js \
|
browser_privatebrowsing_protocolhandler.js \
|
||||||
browser_privatebrowsing_protocolhandler_page.html \
|
browser_privatebrowsing_protocolhandler_page.html \
|
||||||
|
browser_privatebrowsing_sidebar.js \
|
||||||
browser_privatebrowsing_theming.js \
|
browser_privatebrowsing_theming.js \
|
||||||
browser_privatebrowsing_ui.js \
|
browser_privatebrowsing_ui.js \
|
||||||
browser_privatebrowsing_urlbarfocus.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;
|
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() {
|
function newDirectory() {
|
||||||
let FileUtils =
|
let FileUtils =
|
||||||
Cu.import("resource://gre/modules/FileUtils.jsm", {}).FileUtils;
|
Cu.import("resource://gre/modules/FileUtils.jsm", {}).FileUtils;
|
||||||
@ -62,4 +76,3 @@ function _initTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_initTest();
|
_initTest();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user