forked from mirrors/gecko-dev
In Bug 1622749 a user preference for where to open new documents (from a service worker notification) was temporarily overriden in order to quickly fix a crash that was happening in mozilla::dom::ClientOpenWindow. The crash was ocurring when the pref "browser.link.open_newwindow" was set to 2, meaning new documents are opened in a new window, instead of a new tab. The reason the browser crashed is because the path for opening a new document is different depending on the current user setting, and in NEWWINDOW case we did not get a browsing context returned when calling mozilla::dom::OpenWindow which resulted in a failed assertion. The solution is to pass in a callback to mozilla::dom::OpenWindow as part of nsOpenWindowInfo object, and invoke that callback with a corresponding BrowsingContext in nsFrameLoader when that browsing context is ready. After we call mozilla::dom::OpenWindow, we wait on a promise, that will be resolved when the callback is invoked, before executing the rest of the code that depends on the browsing context for a newly opened document being available. Differential Revision: https://phabricator.services.mozilla.com/D72745
66 lines
2.2 KiB
Text
66 lines
2.2 KiB
Text
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
*
|
|
* 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/. */
|
|
|
|
#include "nsISupports.idl"
|
|
|
|
webidl BrowsingContext;
|
|
|
|
%{ C++
|
|
namespace mozilla {
|
|
class OriginAttributes;
|
|
namespace dom {
|
|
class BrowserParent;
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
%}
|
|
[ref] native const_OriginAttributes(const mozilla::OriginAttributes);
|
|
[ptr] native BrowserParent(mozilla::dom::BrowserParent);
|
|
|
|
/*
|
|
* nsIBrowsingContextReadyCallback.browsingContextReady() is called within
|
|
* nsFrameLoader to indicate that the browsing context for a newly opened
|
|
* window/tab is ready.
|
|
*/
|
|
[uuid(0524ee06-7f4c-4cd3-ab80-084562745cad)]
|
|
interface nsIBrowsingContextReadyCallback : nsISupports
|
|
{
|
|
void browsingContextReady(in BrowsingContext bc);
|
|
};
|
|
|
|
/**
|
|
* nsIOpenWindowInfo is a helper type which contains details used when opening
|
|
* new content windows. This object is used to correctly create new initial
|
|
* content documents when creating a new window.
|
|
*/
|
|
[scriptable, builtinclass, uuid(30359edb-126c-4f65-ae80-07fb158697f9)]
|
|
interface nsIOpenWindowInfo : nsISupports {
|
|
/** BrowsingContext which requested the creation of this new window */
|
|
[infallible]
|
|
readonly attribute BrowsingContext parent;
|
|
|
|
/** If `true`, the content document should be created initially-remote */
|
|
[infallible]
|
|
readonly attribute boolean isRemote;
|
|
|
|
/** Should |opener| be set on the newly-created content window? */
|
|
[infallible]
|
|
readonly attribute boolean forceNoOpener;
|
|
|
|
/** BrowserParent instance to use in the new window */
|
|
[notxpcom, nostdcall]
|
|
BrowserParent getNextRemoteBrowser();
|
|
|
|
/** Origin Attributes for the to-be-created toplevel BrowsingContext */
|
|
[implicit_jscontext, binaryname(ScriptableOriginAttributes)]
|
|
readonly attribute jsval originAttributes;
|
|
|
|
[notxpcom, nostdcall, binaryname(GetOriginAttributes)]
|
|
const_OriginAttributes binaryGetOriginAttributes();
|
|
|
|
/* Callback to invoke when the browsing context for a new window is ready. */
|
|
[notxpcom, nostdcall]
|
|
nsIBrowsingContextReadyCallback browsingContextReadyCallback();
|
|
};
|