| Index: extensions/renderer/resources/data_sender.js
|
| diff --git a/extensions/renderer/resources/data_sender.js b/extensions/renderer/resources/data_sender.js
|
| index ee1abb33ab0b98d29639f21c8ae9098e500d2a24..8aa9ad9db90355c1e7c30b5eaaad39b04c474df0 100644
|
| --- a/extensions/renderer/resources/data_sender.js
|
| +++ b/extensions/renderer/resources/data_sender.js
|
| @@ -257,10 +257,50 @@ define('data_sender', [
|
| this.sendsAwaitingAck_.pop().reportBytesSentAndError(
|
| 0, this.fatalErrorValue_);
|
| }
|
| - if (this.pendingCancel_) {
|
| - this.pendingCancel_();
|
| - this.pendingCancel_ = null;
|
| + this.callCancelCallback_();
|
| + };
|
| +
|
| + DataSender.prototype.serialize = function() {
|
| + var readyToSerialize = Promise.resolve();
|
| + if (this.pendingSends_.length) {
|
| + if (this.pendingCancel_)
|
| + readyToSerialize = this.cancelPromise_;
|
| + else
|
| + readyToSerialize = this.cancel(this.fatalErrorValue_);
|
| }
|
| + return readyToSerialize.then(function() {
|
| + this.waiter_.stop();
|
| + var serialized = {
|
| + sink: this.router_.connector_.handle_,
|
| + data_pipe: this.sendPipe_,
|
| + fatal_error_value: this.fatalErrorValue_,
|
| + shut_down: this.shutDown_,
|
| + };
|
| + this.router_.connector_.handle_ = null;
|
| + this.router_.close();
|
| + this.shutDown_ = true;
|
| + return serialized;
|
| + }.bind(this));
|
| + };
|
| +
|
| + DataSender.deserialize = function(serialized) {
|
| + var sender = $Object.create(DataSender.prototype);
|
| + sender.deserialize_(serialized);
|
| + return sender;
|
| + };
|
| +
|
| + DataSender.prototype.deserialize_ = function(serialized) {
|
| + this.sendPipe_ = serialized.data_pipe;
|
| + this.fatalErrorValue_ = serialized.fatal_error_value;
|
| + this.shutDown_ = serialized.shut_down;
|
| + this.router_ = new routerModule.Router(serialized.sink);
|
| + this.sink_ = new dataStreamMojom.DataSinkProxy(this.router_);
|
| + this.router_.setIncomingReceiver(this);
|
| + this.waiter_ = new asyncWaiter.AsyncWaiter(this.sendPipe_,
|
| + core.HANDLE_SIGNAL_WRITABLE,
|
| + this.onHandleReady_.bind(this));
|
| + this.pendingSends_ = [];
|
| + this.sendsAwaitingAck_ = [];
|
| };
|
|
|
| /**
|
| @@ -301,9 +341,10 @@ define('data_sender', [
|
| return Promise.resolve();
|
|
|
| this.sink_.cancel(error);
|
| - return new Promise(function(resolve) {
|
| + this.cancelPromise_ = new Promise(function(resolve) {
|
| this.pendingCancel_ = resolve;
|
| }.bind(this));
|
| + return this.cancelPromise_;
|
| };
|
|
|
| /**
|
| @@ -337,6 +378,7 @@ define('data_sender', [
|
| */
|
| DataSender.prototype.callCancelCallback_ = function() {
|
| if (this.pendingCancel_) {
|
| + this.cancelPromise_ = null;
|
| this.pendingCancel_();
|
| this.pendingCancel_ = null;
|
| }
|
|
|