Bug 1456260 - Support concurrent GeckoSession.saveState() calls. r=jchen

This commit is contained in:
Dylan Roeh 2018-04-27 10:44:26 -05:00
Родитель 13bae3826c
Коммит 7702f5ab7c
2 изменённых файлов: 13 добавлений и 10 удалений

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

@ -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;
}
}