mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-23 10:15:41 +00:00
Bug 1440592 - [4.3] Allow load delegation when opening windows before requesting a new session. r=snorp
This commit is contained in:
parent
65de3da95f
commit
994b2f05f2
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user