Chromium Code Reviews| Index: extensions/renderer/resources/data_receiver.js |
| diff --git a/extensions/renderer/resources/data_receiver.js b/extensions/renderer/resources/data_receiver.js |
| index 9224e967bc92293f8c60e8cb1374c7ceeba5dd0f..4bd9790a9b0b24fad95019987c717a3962ffeac3 100644 |
| --- a/extensions/renderer/resources/data_receiver.js |
| +++ b/extensions/renderer/resources/data_receiver.js |
| @@ -5,9 +5,10 @@ |
| define('data_receiver', [ |
| 'async_waiter', |
| 'device/serial/data_stream.mojom', |
| + 'device/serial/data_stream_serialization.mojom', |
| 'mojo/public/js/bindings/core', |
| 'mojo/public/js/bindings/router', |
| -], function(asyncWaiter, dataStream, core, router) { |
| +], function(asyncWaiter, dataStream, serialization, core, router) { |
| /** |
| * @module data_receiver |
| */ |
| @@ -193,6 +194,67 @@ define('data_receiver', [ |
| }; |
| /** |
| + * Serializes this DataReceiver. |
| + * @return {Promise.<?SerializedDataReceiver>} The serialization of this |
|
raymes
2014/09/18 03:16:06
Well really it returns a promise that resolves to
Sam McNally
2014/09/19 04:58:46
Done.
|
| + * DataReceiver. If this DataReceiver has shut down, this will return |
| + * null. |
| + */ |
| + DataReceiver.prototype.serialize = function() { |
| + if (this.shutDown_) |
| + return Promise.resolve(null); |
|
raymes
2014/09/18 03:16:06
How come you decided to return null in this case r
Sam McNally
2014/09/19 04:58:46
None of the other state is useful after shutdown.
|
| + |
| + this.waiter_.stop(); |
| + if (this.receive_) { |
| + this.receive_.dispatchFatalError(this.fatalErrorValue_); |
| + this.receive_ = null; |
| + } |
| + var serialized = new serialization.SerializedDataReceiver(); |
| + serialized.source = this.router_.connector_.handle_; |
| + serialized.data_pipe = this.receivePipe_; |
| + serialized.fatal_error_value = this.fatalErrorValue_; |
| + serialized.bytes_received = this.bytesReceived_; |
| + serialized.paused = this.paused_; |
| + this.router_.connector_.handle_ = null; |
| + this.router_.close(); |
| + this.shutDown_ = true; |
| + return Promise.resolve(serialized); |
| + }; |
| + |
| + /** |
| + * Deserializes a SerializedDataReceiver. |
| + * @param {?SerializedDataReceiver} serialized The serialized DataReceiver. |
| + * @return {DataReceiver} The deserialized DataReceiver. |
| + */ |
| + DataReceiver.deserialize = function(serialized) { |
| + var receiver = $Object.create(DataReceiver.prototype); |
| + receiver.deserialize_(serialized); |
| + return receiver; |
| + }; |
| + |
| + /** |
| + * Deserializes a SerializedDataReceiver into this DataReceiver. |
| + * @param {?SerializedDataReceiver} serialized The serialized DataReceiver. |
| + * @private |
| + */ |
| + DataReceiver.prototype.deserialize_ = function(serialized) { |
| + if (!serialized) { |
| + this.shutDown_ = true; |
| + return; |
| + } |
| + this.receivePipe_ = serialized.data_pipe; |
| + this.fatalErrorValue_ = serialized.fatal_error_value; |
| + this.bytesReceived_ = serialized.bytes_received; |
| + this.paused_ = serialized.paused; |
| + this.shutDown_ = false; |
| + this.router_ = new router.Router(serialized.source); |
| + this.router_.setIncomingReceiver(this); |
| + this.source_ = new dataStream.DataSourceProxy(this.router_); |
| + this.waiter_ = new asyncWaiter.AsyncWaiter(this.receivePipe_, |
| + core.HANDLE_SIGNAL_READABLE, |
| + this.onHandleReady_.bind(this)); |
| + }; |
| + |
| + /** |
| * Receive data from the DataSource. |
| * @return {Promise.<ArrayBuffer>} A promise to the received data. If an error |
| * occurs, the promise will reject with an Error object with a property |
| @@ -202,7 +264,7 @@ define('data_receiver', [ |
| */ |
| DataReceiver.prototype.receive = function() { |
| if (this.shutDown_) |
| - throw new Error('System error'); |
| + throw new Error('DataReceiver has been closed'); |
| if (this.receive_) |
| throw new Error('Receive already in progress.'); |
| var receive = new PendingReceive(); |