Index: ppapi/proxy/resource_reply_thread_registrar.h |
diff --git a/ppapi/proxy/resource_reply_thread_registrar.h b/ppapi/proxy/resource_reply_thread_registrar.h |
index eef6d615965cf6a4656ecba302f028b541ff3b2d..4c0d7a992984ad23da8b3316ce397b6b28c2047d 100644 |
--- a/ppapi/proxy/resource_reply_thread_registrar.h |
+++ b/ppapi/proxy/resource_reply_thread_registrar.h |
@@ -6,6 +6,7 @@ |
#define PPAPI_PROXY_RESOURCE_REPLY_THREAD_REGISTRAR_H_ |
#include <map> |
+#include <set> |
#include "base/basictypes.h" |
#include "base/memory/ref_counted.h" |
@@ -18,12 +19,18 @@ namespace base { |
class MessageLoopProxy; |
} |
+namespace IPC { |
+class Message; |
+} |
+ |
namespace ppapi { |
class TrackedCallback; |
namespace proxy { |
+class ResourceMessageReplyParams; |
+ |
// ResourceReplyThreadRegistrar records the handling thread for |
// PpapiPluginMsg_ResourceReply messages. |
// This class is thread safe. |
@@ -31,7 +38,7 @@ class PPAPI_PROXY_EXPORT ResourceReplyThreadRegistrar |
: public base::RefCountedThreadSafe<ResourceReplyThreadRegistrar> { |
public: |
explicit ResourceReplyThreadRegistrar( |
- scoped_refptr<base::MessageLoopProxy> default_thread); |
+ scoped_refptr<base::MessageLoopProxy> main_thread); |
// This method can only be called while holding the Pepper proxy lock; the |
// other methods can be called with/without the Pepper proxy lock. |
@@ -39,18 +46,31 @@ class PPAPI_PROXY_EXPORT ResourceReplyThreadRegistrar |
int32_t sequence_number, |
scoped_refptr<TrackedCallback> reply_thread_hint); |
+ // This results in Resource::OnReplyReceived() for the specified resource and |
+ // message type to be called on the IO thread directly, while holding the |
+ // Pepper proxy lock. |
+ void HandleOnIOThread(PP_Resource resource, uint32 nested_msg_type); |
+ |
void Unregister(PP_Resource resource); |
- scoped_refptr<base::MessageLoopProxy> GetTargetThreadAndUnregister( |
- PP_Resource resource, |
- int32_t sequence_number); |
+ // This method returns NULL if the target thread is the IO thread (because |
+ // that is the thread on which this method is supposed to be called). |
+ scoped_refptr<base::MessageLoopProxy> GetTargetThread( |
+ const ResourceMessageReplyParams& reply_params, |
+ const IPC::Message& nested_msg); |
private: |
friend class base::RefCountedThreadSafe<ResourceReplyThreadRegistrar>; |
typedef std::map<int32_t, scoped_refptr<base::MessageLoopProxy> > |
- SequenceNumberMap; |
- typedef std::map<PP_Resource, SequenceNumberMap> ResourceMap; |
+ SequenceThreadMap; |
+ |
+ struct ResourceInfo { |
+ SequenceThreadMap thread_map; |
+ std::set<uint32> io_thread_message_types; |
dmichael (off chromium)
2014/09/12 19:49:07
I think it's likely that messages intended for the
yzshen1
2014/09/15 20:59:39
I agree. I have a question related to this in udp_
|
+ }; |
+ |
+ typedef std::map<PP_Resource, ResourceInfo> ResourceMap; |
~ResourceReplyThreadRegistrar(); |
@@ -59,7 +79,7 @@ class PPAPI_PROXY_EXPORT ResourceReplyThreadRegistrar |
// holding |lock_|, otherwise we will cause deadlock. |
base::Lock lock_; |
ResourceMap map_; |
- scoped_refptr<base::MessageLoopProxy> default_thread_; |
+ scoped_refptr<base::MessageLoopProxy> main_thread_; |
DISALLOW_COPY_AND_ASSIGN(ResourceReplyThreadRegistrar); |
}; |