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

Unified Diff: Source/modules/presentation/PresentationSession.h

Issue 1131463006: [PresentationAPI] Plumbing send(Blob) from PresentationSession IDL to platform/. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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: Source/modules/presentation/PresentationSession.h
diff --git a/Source/modules/presentation/PresentationSession.h b/Source/modules/presentation/PresentationSession.h
index 378995d434d77e45b804057c0fda35fbafcf9afd..3511a571b06b4448ec6985296efdfac6f89048cb 100644
--- a/Source/modules/presentation/PresentationSession.h
+++ b/Source/modules/presentation/PresentationSession.h
@@ -6,6 +6,8 @@
#define PresentationSession_h
#include "core/events/EventTarget.h"
+#include "core/fileapi/Blob.h"
+#include "core/fileapi/FileError.h"
#include "core/frame/DOMWindowProperty.h"
#include "public/platform/modules/presentation/WebPresentationSessionClient.h"
#include "wtf/text/WTFString.h"
@@ -44,6 +46,7 @@ public:
void send(const String& message, ExceptionState&);
void send(PassRefPtr<DOMArrayBuffer> data, ExceptionState&);
void send(PassRefPtr<DOMArrayBufferView> data, ExceptionState&);
+ void send(Blob* data, ExceptionState&);
void close();
DEFINE_ATTRIBUTE_EVENT_LISTENER(message);
@@ -59,6 +62,21 @@ public:
void didReceiveTextMessage(const String& message);
private:
+ class BlobLoader;
+ // Blob data items are queued and sent after loading asynchronously.
+ struct Message {
+ Message(PassRefPtr<BlobDataHandle> blobDataHandle)
+ : blobDataHandle(blobDataHandle)
+ {
+ }
+
+ RefPtr<BlobDataHandle> blobDataHandle;
+ // TODO(s.singapati): Currently String and ArrayBuffer data is sent
mark a. foltz 2015/05/26 20:41:48 It looks like the way that WebSocket implements se
USE s.singapati at gmail.com 2015/05/27 19:37:51 Done. One difference is, this patch does not repla
+ // immediately to the client, but Blob data is loaded as array buffer
+ // asynchrounously and then sent. This makes message sending order
+ // incorrect.
+ };
+
PresentationSession(LocalFrame*, const String& id, const String& url);
// Returns the |PresentationController| object associated with the frame
@@ -69,9 +87,19 @@ private:
// Common send method for both ArrayBufferView and ArrayBuffer.
void sendInternal(const uint8_t* data, size_t, ExceptionState&);
+ void handleMessageQueue();
+
+ // Callbacks invoked from BlobLoader.
+ void didFinishLoadingBlob(PassRefPtr<DOMArrayBuffer>);
+ void didFailLoadingBlob(FileError::ErrorCode);
+
String m_id;
String m_url;
WebPresentationSessionState m_state;
+
+ // For Blob data handling.
+ Member<BlobLoader> m_blobLoader;
+ Deque<OwnPtr<Message>> m_messages;
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698