Bug 1440592 - [4.3] Allow load delegation when opening windows before requesting a new session. r=snorp

This commit is contained in:
Eugen Sawin 2018-03-27 22:35:17 +02:00
Родитель 65de3da95f
Коммит 994b2f05f2
2 изменённых файлов: 37 добавлений и 11 удалений

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

@ -129,13 +129,13 @@ class EventProxy {
}
registerListener(aEventList) {
debug("rabbit register " + aEventList);
debug("register " + aEventList);
this.eventDispatcher.registerListener(this, aEventList);
this._registeredEvents = this._registeredEvents.concat(aEventList);
}
unregisterListener() {
debug("rabbit unregister");
debug("unregister");
if (this._registeredEvents.length === 0) {
return;
}
@ -145,7 +145,7 @@ class EventProxy {
onEvent(aEvent, aData, aCallback) {
if (this._enableQueuing) {
debug("rabbit queue " + aEvent + ", aData=" + JSON.stringify(aData));
debug("queue " + aEvent + ", aData=" + JSON.stringify(aData));
this._eventQueue.unshift(arguments);
} else {
this._dispatch.apply(this, arguments);
@ -158,12 +158,12 @@ class EventProxy {
}
_dispatch(aEvent, aData, aCallback) {
debug("rabbit dispatch " + aEvent + ", aData=" + JSON.stringify(aData));
debug("dispatch " + aEvent + ", aData=" + JSON.stringify(aData));
this.listener.onEvent.apply(this.listener, arguments);
}
dispatchQueuedEvents() {
debug("rabbit dispatchQueued");
debug("dispatchQueued");
while (this._eventQueue.length) {
const e = this._eventQueue.pop();
this._dispatch.apply(this, e);

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

@ -152,9 +152,21 @@ class GeckoViewNavigation extends GeckoViewModule {
" aWhere=" + aWhere +
" aFlags=" + aFlags);
if (LoadURIDelegate.load(this.eventDispatcher, aUri, aWhere, aFlags,
aTriggeringPrincipal)) {
// The app has handled the load, abort open-window handling.
Components.returnCode = Cr.NS_ERROR_ABORT;
return null;
}
const browser = this.handleNewSession(aUri, aOpener, aWhere, aFlags,
aTriggeringPrincipal);
return browser && browser.contentWindow;
if (!browser) {
Components.returnCode = Cr.NS_ERROR_ABORT;
return null;
}
return browser.contentWindow;
}
// nsIBrowserDOMWindow.
@ -167,28 +179,42 @@ class GeckoViewNavigation extends GeckoViewModule {
" aNextTabParentId=" + aNextTabParentId +
" aName=" + aName);
const browser = this.handleNewSession(aUri, null, aWhere, aFlags, null);
if (browser) {
browser.setAttribute("nextTabParentId", aNextTabParentId);
if (LoadURIDelegate.load(this.eventDispatcher, aUri, aWhere, aFlags, null)) {
// The app has handled the load, abort open-window handling.
Components.returnCode = Cr.NS_ERROR_ABORT;
return null;
}
const browser = this.handleNewSession(aUri, null, aWhere, aFlags, null);
if (!browser) {
Components.returnCode = Cr.NS_ERROR_ABORT;
return null;
}
browser.setAttribute("nextTabParentId", aNextTabParentId);
return browser;
}
handleOpenUri(aUri, aOpener, aWhere, aFlags, aTriggeringPrincipal,
aNextTabParentId) {
let browser = this.browser;
debug("handleOpenUri: aUri=" + (aUri && aUri.spec) +
" aWhere=" + aWhere +
" aFlags=" + aFlags);
if (LoadURIDelegate.load(this.eventDispatcher, aUri, aWhere, aFlags,
aTriggeringPrincipal)) {
return browser;
return null;
}
let browser = this.browser;
if (aWhere === Ci.nsIBrowserDOMWindow.OPEN_NEWWINDOW ||
aWhere === Ci.nsIBrowserDOMWindow.OPEN_NEWTAB ||
aWhere === Ci.nsIBrowserDOMWindow.OPEN_SWITCHTAB) {
browser = this.handleNewSession(aUri, aOpener, aWhere, aFlags,
aTriggeringPrincipal);
}
if (!browser) {
// Should we throw?
return null;