OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef PPAPI_PROXY_HOST_DISPATCHER_H_ | 5 #ifndef PPAPI_PROXY_HOST_DISPATCHER_H_ |
6 #define PPAPI_PROXY_HOST_DISPATCHER_H_ | 6 #define PPAPI_PROXY_HOST_DISPATCHER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
| 12 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
13 #include "base/process.h" | 14 #include "base/process.h" |
| 15 #include "ipc/ipc_channel_proxy.h" |
14 #include "ppapi/c/pp_instance.h" | 16 #include "ppapi/c/pp_instance.h" |
15 #include "ppapi/proxy/dispatcher.h" | 17 #include "ppapi/proxy/dispatcher.h" |
16 #include "ppapi/shared_impl/function_group_base.h" | 18 #include "ppapi/shared_impl/function_group_base.h" |
17 | 19 |
18 struct PPB_Proxy_Private; | 20 struct PPB_Proxy_Private; |
19 | 21 |
20 namespace ppapi { | 22 namespace ppapi { |
21 | 23 |
22 struct Preferences; | 24 struct Preferences; |
23 | 25 |
24 namespace proxy { | 26 namespace proxy { |
25 | 27 |
26 class PPAPI_PROXY_EXPORT HostDispatcher : public Dispatcher { | 28 class PPAPI_PROXY_EXPORT HostDispatcher : public Dispatcher { |
27 public: | 29 public: |
28 // Constructor for the renderer side. | 30 // This interface receives notifications about sync messages being sent by |
| 31 // the dispatcher to the plugin process. It is used to detect a hung plugin. |
| 32 // |
| 33 // Note that there can be nested sync messages, so the begin/end status |
| 34 // actually represents a stack of blocking messages. |
| 35 class SyncMessageStatusReceiver : public IPC::ChannelProxy::MessageFilter { |
| 36 public: |
| 37 virtual ~SyncMessageStatusReceiver() {} |
| 38 |
| 39 // Notification that a sync message is about to be sent out. |
| 40 virtual void BeginBlockOnSyncMessage() = 0; |
| 41 |
| 42 // Notification that a sync message reply was received and the dispatcher |
| 43 // is no longer blocked on a sync message. |
| 44 virtual void EndBlockOnSyncMessage() = 0; |
| 45 }; |
| 46 |
| 47 // Constructor for the renderer side. This will take a reference to the |
| 48 // SyncMessageStatusReceiver. |
29 // | 49 // |
30 // You must call InitHostWithChannel after the constructor. | 50 // You must call InitHostWithChannel after the constructor. |
31 HostDispatcher(base::ProcessHandle host_process_handle, | 51 HostDispatcher(base::ProcessHandle host_process_handle, |
32 PP_Module module, | 52 PP_Module module, |
33 GetInterfaceFunc local_get_interface); | 53 GetInterfaceFunc local_get_interface, |
| 54 SyncMessageStatusReceiver* sync_status); |
34 ~HostDispatcher(); | 55 ~HostDispatcher(); |
35 | 56 |
36 // You must call this function before anything else. Returns true on success. | 57 // You must call this function before anything else. Returns true on success. |
37 // The delegate pointer must outlive this class, ownership is not | 58 // The delegate pointer must outlive this class, ownership is not |
38 // transferred. | 59 // transferred. |
39 virtual bool InitHostWithChannel(Delegate* delegate, | 60 virtual bool InitHostWithChannel(Delegate* delegate, |
40 const IPC::ChannelHandle& channel_handle, | 61 const IPC::ChannelHandle& channel_handle, |
41 bool is_client, | 62 bool is_client, |
42 const Preferences& preferences); | 63 const Preferences& preferences); |
43 | 64 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 protected: | 104 protected: |
84 // Overridden from Dispatcher. | 105 // Overridden from Dispatcher. |
85 virtual void OnInvalidMessageReceived(); | 106 virtual void OnInvalidMessageReceived(); |
86 | 107 |
87 private: | 108 private: |
88 void OnHostMsgLogWithSource(PP_Instance instance, | 109 void OnHostMsgLogWithSource(PP_Instance instance, |
89 int int_log_level, | 110 int int_log_level, |
90 const std::string& source, | 111 const std::string& source, |
91 const std::string& value); | 112 const std::string& value); |
92 | 113 |
| 114 scoped_refptr<SyncMessageStatusReceiver> sync_status_; |
| 115 |
93 PP_Module pp_module_; | 116 PP_Module pp_module_; |
94 | 117 |
95 // Maps interface name to whether that interface is supported. If an interface | 118 // Maps interface name to whether that interface is supported. If an interface |
96 // name is not in the map, that implies that we haven't queried for it yet. | 119 // name is not in the map, that implies that we haven't queried for it yet. |
97 typedef base::hash_map<std::string, bool> PluginSupportedMap; | 120 typedef base::hash_map<std::string, bool> PluginSupportedMap; |
98 PluginSupportedMap plugin_supported_; | 121 PluginSupportedMap plugin_supported_; |
99 | 122 |
100 // Guaranteed non-NULL. | 123 // Guaranteed non-NULL. |
101 const PPB_Proxy_Private* ppb_proxy_; | 124 const PPB_Proxy_Private* ppb_proxy_; |
102 | 125 |
(...skipping 21 matching lines...) Expand all Loading... |
124 private: | 147 private: |
125 HostDispatcher* dispatcher_; | 148 HostDispatcher* dispatcher_; |
126 | 149 |
127 DISALLOW_COPY_AND_ASSIGN(ScopedModuleReference); | 150 DISALLOW_COPY_AND_ASSIGN(ScopedModuleReference); |
128 }; | 151 }; |
129 | 152 |
130 } // namespace proxy | 153 } // namespace proxy |
131 } // namespace ppapi | 154 } // namespace ppapi |
132 | 155 |
133 #endif // PPAPI_PROXY_HOST_DISPATCHER_H_ | 156 #endif // PPAPI_PROXY_HOST_DISPATCHER_H_ |
OLD | NEW |