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(); |