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

Unified Diff: native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h

Issue 242533005: [NaCl SDK] nacl_io: Add flow control the JavaScript pipes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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: native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h
diff --git a/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h b/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h
index ad7ac995477d6ebedb9d52b8efbfa09af103d025..e770b0facd8c215f85eca6a400af7afbaf7b910f 100644
--- a/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h
+++ b/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h
@@ -5,27 +5,64 @@
#ifndef LIBRARIES_NACL_IO_DEVFS_JSPIPE_NODE_H_
#define LIBRARIES_NACL_IO_DEVFS_JSPIPE_NODE_H_
-#include "nacl_io/pipe/pipe_node.h"
-
+#include <ppapi/c/pp_var.h>
#include <string>
+#include "nacl_io/devfs/jspipe_event_emitter.h"
+#include "nacl_io/stream/stream_node.h"
+
namespace nacl_io {
-class JSPipeNode : public PipeNode {
+class MessagingInterface;
+class VarInterface;
+class VarArrayInterface;
+class VarArrayBufferInterface;
+class VarDictionaryInterface;
+
+/**
+ * JSPipeNode represents a two-way channel for communicating with JavaScript
+ * via calls to PostMessage. In order to use these some amount of logic on
+ * the JavaScript side is also required. The protocol to the communication
+ * looks the same in both directions and consists of two message types:
+ * 'write' and 'ack'.
+ * The messages are formated as JavaScript dictionary objects and take the
+ * following form:
+ * {
+ * pipe: <pipe_name>,
+ * operation: <operation_name>,
+ * payload: <operations_payload>
+ * }
+ * The payload for 'write' message is a ArrayBuffer containing binary data.
+ * The payload for 'ack' messages is the total number of bytes recieved at
+ * the other end.
+ * For example: { pipe: 'jspipe1', operation: 'ack', payload: 234 }
+ *
+ * Messages coming from JavaScript must be delivered using the
+ * NACL_IOC_HANDLEMESSAGE ioctl on the file handle.
+ */
+class JSPipeNode : public Node {
public:
- explicit JSPipeNode(Filesystem* filesystem) : PipeNode(filesystem) {}
+ explicit JSPipeNode(Filesystem* filesystem);
+
+ virtual void Destroy() { LOG_TRACE("JSPipeNode: Destroy"); };
+
+ virtual JSPipeEventEmitter* GetEventEmitter();
virtual Error VIoctl(int request, va_list args);
- // Writes go directly to PostMessage, reads come from a pipe
- // that gets populated by incoming messages
+ virtual Error Read(const HandleAttr& attr,
+ void* buf,
+ size_t count,
+ int* out_bytes);
virtual Error Write(const HandleAttr& attr,
const void* buf,
size_t count,
int* out_bytes);
- private:
- std::string name_;
+ protected:
+ Error SendAck();
+
+ ScopedJSPipeEventEmitter pipe_;
};
} // namespace nacl_io

Powered by Google App Engine
This is Rietveld 408576698