Index: blimp/engine/mojo/blob_channel_service.h |
diff --git a/blimp/engine/mojo/blob_channel_service.h b/blimp/engine/mojo/blob_channel_service.h |
index a137a0694087e56ab08a372acd940d50c251cd55..e364f6596a6d3499b588f8634b6809126d2122db 100644 |
--- a/blimp/engine/mojo/blob_channel_service.h |
+++ b/blimp/engine/mojo/blob_channel_service.h |
@@ -6,22 +6,28 @@ |
#define BLIMP_ENGINE_MOJO_BLOB_CHANNEL_SERVICE_H_ |
#include <string> |
+#include <vector> |
+#include "base/memory/weak_ptr.h" |
+#include "base/threading/thread_checker.h" |
#include "blimp/engine/mojo/blob_channel.mojom.h" |
+#include "blimp/net/blob_channel/blob_channel_sender.h" |
#include "mojo/public/cpp/bindings/binding_set.h" |
namespace blimp { |
- |
-class BlobChannelSender; |
- |
namespace engine { |
// Service for processing BlobChannel requests from the renderer. |
-// Runs on the browser process. |
+// Runs on the IO thread of the browser process. |
Wez
2016/08/19 19:15:50
nit: Is the caller responsible for calling it on t
Kevin M
2016/08/19 21:43:33
Done.
|
+// Calls to the UI thread are executed using the UI thread's TaskRunner. |
Wez
2016/08/19 19:15:50
nit: This comment seems tautologous; how else woul
Kevin M
2016/08/19 21:43:33
Acknowledged.
|
class BlobChannelService : public mojom::BlobChannel { |
public: |
- // |blob_channel_sender| must outlive the Mojo connection. |
- explicit BlobChannelService(BlobChannelSender* blob_channel_sender); |
+ // |blob_channel_sender|: The BlobChannelSender object which will receive |
+ // blobs and answer delivery status queries. |
+ // |task_runner|: The UI thread task runner. |
Wez
2016/08/19 19:15:50
Can we instead clarify _why_ the caller needs to p
Kevin M
2016/08/19 21:43:33
Done.
|
+ BlobChannelService( |
+ base::WeakPtr<BlobChannelSender> blob_channel_sender, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
Wez
2016/08/19 19:15:50
ui_task_runner?
Here and above, though, the desir
Kevin M
2016/08/19 21:43:33
Done.
Wez
2016/08/20 00:40:24
Is it necessary that this is all on the UI thread?
Kevin M
2016/08/22 19:46:56
Done.
|
~BlobChannelService() override; |
@@ -30,6 +36,14 @@ class BlobChannelService : public mojom::BlobChannel { |
void BindRequest(mojo::InterfaceRequest<mojom::BlobChannel> request); |
private: |
+ std::vector<BlobChannelSender::CacheStateEntry> GetCachedBlobIdsOnUiThread(); |
+ |
+ // Called when the list of blob IDs arrives from the BlobChannelSender on the |
+ // UI thread. |
Wez
2016/08/19 19:15:50
IIUC they "arrive" only because we request them, s
Kevin M
2016/08/19 21:43:33
Done.
|
+ void ReceivedBlobIds( |
+ const BlobChannelService::GetCachedBlobIdsCallback& response_callback, |
+ const std::vector<BlobChannelSender::CacheStateEntry>& ids); |
+ |
// BlobChannel implementation. |
void GetCachedBlobIds( |
const GetCachedBlobIdsCallback& response_callback) override; |
@@ -41,7 +55,12 @@ class BlobChannelService : public mojom::BlobChannel { |
mojo::BindingSet<mojom::BlobChannel> bindings_; |
// Sender object which will receive the blobs passed over the Mojo service. |
- BlobChannelSender* blob_channel_sender_; |
+ base::WeakPtr<BlobChannelSender> blob_channel_sender_; |
+ |
+ // UI thread TaskRunner. |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ |
+ base::ThreadChecker thread_checker_; |
DISALLOW_COPY_AND_ASSIGN(BlobChannelService); |
}; |