зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1440592 - [4.3] Allow load delegation when opening windows before requesting a new session. r=snorp
This commit is contained in:
Родитель
65de3da95f
Коммит
994b2f05f2
|
@ -129,13 +129,13 @@ class EventProxy {
|
||||||
}
|
}
|
||||||
|
|
||||||
registerListener(aEventList) {
|
registerListener(aEventList) {
|
||||||
debug("rabbit register " + aEventList);
|
debug("register " + aEventList);
|
||||||
this.eventDispatcher.registerListener(this, aEventList);
|
this.eventDispatcher.registerListener(this, aEventList);
|
||||||
this._registeredEvents = this._registeredEvents.concat(aEventList);
|
this._registeredEvents = this._registeredEvents.concat(aEventList);
|
||||||
}
|
}
|
||||||
|
|
||||||
unregisterListener() {
|
unregisterListener() {
|
||||||
debug("rabbit unregister");
|
debug("unregister");
|
||||||
if (this._registeredEvents.length === 0) {
|
if (this._registeredEvents.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ class EventProxy {
|
||||||
|
|
||||||
onEvent(aEvent, aData, aCallback) {
|
onEvent(aEvent, aData, aCallback) {
|
||||||
if (this._enableQueuing) {
|
if (this._enableQueuing) {
|
||||||
debug("rabbit queue " + aEvent + ", aData=" + JSON.stringify(aData));
|
debug("queue " + aEvent + ", aData=" + JSON.stringify(aData));
|
||||||
this._eventQueue.unshift(arguments);
|
this._eventQueue.unshift(arguments);
|
||||||
} else {
|
} else {
|
||||||
this._dispatch.apply(this, arguments);
|
this._dispatch.apply(this, arguments);
|
||||||
|
@ -158,12 +158,12 @@ class EventProxy {
|
||||||
}
|
}
|
||||||
|
|
||||||
_dispatch(aEvent, aData, aCallback) {
|
_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);
|
this.listener.onEvent.apply(this.listener, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatchQueuedEvents() {
|
dispatchQueuedEvents() {
|
||||||
debug("rabbit dispatchQueued");
|
debug("dispatchQueued");
|
||||||
while (this._eventQueue.length) {
|
while (this._eventQueue.length) {
|
||||||
const e = this._eventQueue.pop();
|
const e = this._eventQueue.pop();
|
||||||
this._dispatch.apply(this, e);
|
this._dispatch.apply(this, e);
|
||||||
|
|
|
@ -152,9 +152,21 @@ class GeckoViewNavigation extends GeckoViewModule {
|
||||||
" aWhere=" + aWhere +
|
" aWhere=" + aWhere +
|
||||||
" aFlags=" + aFlags);
|
" 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,
|
const browser = this.handleNewSession(aUri, aOpener, aWhere, aFlags,
|
||||||
aTriggeringPrincipal);
|
aTriggeringPrincipal);
|
||||||
return browser && browser.contentWindow;
|
if (!browser) {
|
||||||
|
Components.returnCode = Cr.NS_ERROR_ABORT;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return browser.contentWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
// nsIBrowserDOMWindow.
|
// nsIBrowserDOMWindow.
|
||||||
|
@ -167,28 +179,42 @@ class GeckoViewNavigation extends GeckoViewModule {
|
||||||
" aNextTabParentId=" + aNextTabParentId +
|
" aNextTabParentId=" + aNextTabParentId +
|
||||||
" aName=" + aName);
|
" aName=" + aName);
|
||||||
|
|
||||||
const browser = this.handleNewSession(aUri, null, aWhere, aFlags, null);
|
if (LoadURIDelegate.load(this.eventDispatcher, aUri, aWhere, aFlags, null)) {
|
||||||
if (browser) {
|
// The app has handled the load, abort open-window handling.
|
||||||
browser.setAttribute("nextTabParentId", aNextTabParentId);
|
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;
|
return browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleOpenUri(aUri, aOpener, aWhere, aFlags, aTriggeringPrincipal,
|
handleOpenUri(aUri, aOpener, aWhere, aFlags, aTriggeringPrincipal,
|
||||||
aNextTabParentId) {
|
aNextTabParentId) {
|
||||||
let browser = this.browser;
|
debug("handleOpenUri: aUri=" + (aUri && aUri.spec) +
|
||||||
|
" aWhere=" + aWhere +
|
||||||
|
" aFlags=" + aFlags);
|
||||||
|
|
||||||
if (LoadURIDelegate.load(this.eventDispatcher, aUri, aWhere, aFlags,
|
if (LoadURIDelegate.load(this.eventDispatcher, aUri, aWhere, aFlags,
|
||||||
aTriggeringPrincipal)) {
|
aTriggeringPrincipal)) {
|
||||||
return browser;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let browser = this.browser;
|
||||||
|
|
||||||
if (aWhere === Ci.nsIBrowserDOMWindow.OPEN_NEWWINDOW ||
|
if (aWhere === Ci.nsIBrowserDOMWindow.OPEN_NEWWINDOW ||
|
||||||
aWhere === Ci.nsIBrowserDOMWindow.OPEN_NEWTAB ||
|
aWhere === Ci.nsIBrowserDOMWindow.OPEN_NEWTAB ||
|
||||||
aWhere === Ci.nsIBrowserDOMWindow.OPEN_SWITCHTAB) {
|
aWhere === Ci.nsIBrowserDOMWindow.OPEN_SWITCHTAB) {
|
||||||
browser = this.handleNewSession(aUri, aOpener, aWhere, aFlags,
|
browser = this.handleNewSession(aUri, aOpener, aWhere, aFlags,
|
||||||
aTriggeringPrincipal);
|
aTriggeringPrincipal);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!browser) {
|
if (!browser) {
|
||||||
// Should we throw?
|
// Should we throw?
|
||||||
return null;
|
return null;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче