Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Unified Diff: extensions/renderer/resources/data_receiver.js

Issue 571333002: Add serialization support to the JS DataSender and DataReceiver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@stash-service
Patch Set: address comments Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698