зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1456260 - Support concurrent GeckoSession.saveState() calls. r=jchen
This commit is contained in:
Родитель
13bae3826c
Коммит
7702f5ab7c
|
@ -185,10 +185,10 @@ class GeckoViewContent extends GeckoViewContentModule {
|
|||
case "GeckoView:SaveState":
|
||||
if (this._savedState) {
|
||||
// Short circuit and return the pending state if we're in the process of restoring
|
||||
sendAsyncMessage("GeckoView:SaveStateFinish", {state: JSON.stringify(this._savedState)});
|
||||
sendAsyncMessage("GeckoView:SaveStateFinish", {state: JSON.stringify(this._savedState), id: aMsg.data.id});
|
||||
} else {
|
||||
let state = this.collectSessionState();
|
||||
sendAsyncMessage("GeckoView:SaveStateFinish", {state: JSON.stringify(state)});
|
||||
sendAsyncMessage("GeckoView:SaveStateFinish", {state: JSON.stringify(state), id: aMsg.data.id});
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -72,12 +72,13 @@ class GeckoViewContent extends GeckoViewModule {
|
|||
}
|
||||
break;
|
||||
case "GeckoView:SaveState":
|
||||
if (this._saveStateCallback) {
|
||||
aCallback.onError();
|
||||
} else {
|
||||
this.messageManager.sendAsyncMessage("GeckoView:SaveState");
|
||||
this._saveStateCallback = aCallback;
|
||||
if (!this._saveStateCallbacks) {
|
||||
this._saveStateCallbacks = new Map();
|
||||
this._saveStateNextId = 0;
|
||||
}
|
||||
this._saveStateCallbacks.set(this._saveStateNextId, aCallback);
|
||||
this.messageManager.sendAsyncMessage("GeckoView:SaveState", {id: this._saveStateNextId})
|
||||
this._saveStateNextId++;
|
||||
break;
|
||||
case "GeckoView:RestoreState":
|
||||
this.messageManager.sendAsyncMessage("GeckoView:RestoreState", {state: aData.state});
|
||||
|
@ -118,10 +119,12 @@ class GeckoViewContent extends GeckoViewModule {
|
|||
.remoteFrameFullscreenChanged(aMsg.target);
|
||||
break;
|
||||
case "GeckoView:SaveStateFinish":
|
||||
if (this._saveStateCallback) {
|
||||
this._saveStateCallback.onSuccess(aMsg.data.state);
|
||||
delete this._saveStateCallback;
|
||||
if (!this._saveStateCallbacks || !this._saveStateCallbacks.has(aMsg.data.id)) {
|
||||
warn `Failed to save state due to missing callback`;
|
||||
return;
|
||||
}
|
||||
this._saveStateCallbacks.get(aMsg.data.id).onSuccess(aMsg.data.state);
|
||||
this._saveStateCallbacks.delete(aMsg.data.id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче