Bug 766871 - Part 1: window.open in <iframe> in in-process <iframe mozbrowser> should work. r=bz

--HG--
extra : rebase_source : 527c8bace08774f44bb5bace92fefad5341dab16
This commit is contained in:
Justin Lebar 2012-06-23 11:05:12 -04:00
Родитель 06a92f0310
Коммит c05e5dfd92
1 изменённых файлов: 14 добавлений и 3 удалений

Просмотреть файл

@ -170,12 +170,23 @@ BrowserElementParent::OpenWindowInProcess(nsIDOMWindow* aOpenerWindow,
{
*aReturnWindow = NULL;
// If we call window.open from an <iframe> inside an <iframe mozbrowser>,
// it's as though the top-level document inside the <iframe mozbrowser>
// called window.open. (Indeed, in the OOP case, the inner <iframe> lives
// out-of-process, so we couldn't touch it if we tried.)
//
// GetScriptableTop gets us the <iframe mozbrowser>'s window; we'll use its
// frame element, rather than aOpenerWindow's frame element, as our "opener
// frame element" below.
nsCOMPtr<nsIDOMWindow> topWindow;
aOpenerWindow->GetScriptableTop(getter_AddRefs(topWindow));
nsCOMPtr<nsIDOMElement> openerFrameDOMElement;
aOpenerWindow->GetFrameElement(getter_AddRefs(openerFrameDOMElement));
topWindow->GetFrameElement(getter_AddRefs(openerFrameDOMElement));
NS_ENSURE_TRUE(openerFrameDOMElement, false);
nsCOMPtr<nsINode> openerFrameNode = do_QueryInterface(openerFrameDOMElement);
nsRefPtr<Element> openerFrameElement = openerFrameNode->AsElement();
nsCOMPtr<Element> openerFrameElement =
do_QueryInterface(openerFrameDOMElement);
nsRefPtr<nsHTMLIFrameElement> popupFrameElement =
CreateIframe(openerFrameElement);