OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "ppapi/proxy/plugin_globals.h" | 5 #include "ppapi/proxy/plugin_globals.h" |
6 | 6 |
7 #include "base/task_runner.h" | 7 #include "base/task_runner.h" |
8 #include "base/threading/thread.h" | 8 #include "base/threading/thread.h" |
9 #include "ipc/ipc_message.h" | 9 #include "ipc/ipc_message.h" |
10 #include "ipc/ipc_sender.h" | 10 #include "ipc/ipc_sender.h" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 GetMainThreadMessageLoop()->PostDelayedTask( | 185 GetMainThreadMessageLoop()->PostDelayedTask( |
186 FROM_HERE, | 186 FROM_HERE, |
187 RunWhileLocked(base::Bind(&PluginGlobals::OnReleaseKeepaliveThrottle, | 187 RunWhileLocked(base::Bind(&PluginGlobals::OnReleaseKeepaliveThrottle, |
188 weak_factory_.GetWeakPtr())), | 188 weak_factory_.GetWeakPtr())), |
189 base::TimeDelta::FromMilliseconds( | 189 base::TimeDelta::FromMilliseconds( |
190 keepalive_throttle_interval_milliseconds_)); | 190 keepalive_throttle_interval_milliseconds_)); |
191 } | 191 } |
192 } | 192 } |
193 | 193 |
194 IPC::Sender* PluginGlobals::GetBrowserSender() { | 194 IPC::Sender* PluginGlobals::GetBrowserSender() { |
195 if (!browser_sender_.get()) { | 195 // CAUTION: This function is called without the ProxyLock. See also |
196 browser_sender_.reset( | 196 // InterfaceList::GetInterfaceForPPB. |
197 new BrowserSender(plugin_proxy_delegate_->GetBrowserSender())); | 197 // |
198 } | 198 // See also SetPluginProxyDelegate. That initializes browser_sender_ before |
199 | 199 // the plugin can start threads, and it may be cleared after the |
| 200 // plugin has torn down threads. So this pointer is expected to remain valid |
| 201 // during the lifetime of the plugin. |
200 return browser_sender_.get(); | 202 return browser_sender_.get(); |
201 } | 203 } |
202 | 204 |
203 std::string PluginGlobals::GetUILanguage() { | 205 std::string PluginGlobals::GetUILanguage() { |
204 return plugin_proxy_delegate_->GetUILanguage(); | 206 return plugin_proxy_delegate_->GetUILanguage(); |
205 } | 207 } |
206 | 208 |
207 void PluginGlobals::SetActiveURL(const std::string& url) { | 209 void PluginGlobals::SetActiveURL(const std::string& url) { |
208 plugin_proxy_delegate_->SetActiveURL(url); | 210 plugin_proxy_delegate_->SetActiveURL(url); |
209 } | 211 } |
210 | 212 |
211 PP_Resource PluginGlobals::CreateBrowserFont( | 213 PP_Resource PluginGlobals::CreateBrowserFont( |
212 Connection connection, | 214 Connection connection, |
213 PP_Instance instance, | 215 PP_Instance instance, |
214 const PP_BrowserFont_Trusted_Description& desc, | 216 const PP_BrowserFont_Trusted_Description& desc, |
215 const ppapi::Preferences& prefs) { | 217 const ppapi::Preferences& prefs) { |
216 return plugin_proxy_delegate_->CreateBrowserFont( | 218 return plugin_proxy_delegate_->CreateBrowserFont( |
217 connection, instance, desc, prefs); | 219 connection, instance, desc, prefs); |
218 } | 220 } |
219 | 221 |
| 222 void PluginGlobals::SetPluginProxyDelegate(PluginProxyDelegate* delegate) { |
| 223 DCHECK(delegate && !plugin_proxy_delegate_); |
| 224 plugin_proxy_delegate_ = delegate; |
| 225 browser_sender_.reset( |
| 226 new BrowserSender(plugin_proxy_delegate_->GetBrowserSender())); |
| 227 } |
| 228 |
| 229 void PluginGlobals::ResetPluginProxyDelegate() { |
| 230 DCHECK(plugin_proxy_delegate_); |
| 231 plugin_proxy_delegate_ = NULL; |
| 232 browser_sender_.reset(); |
| 233 } |
| 234 |
220 MessageLoopResource* PluginGlobals::loop_for_main_thread() { | 235 MessageLoopResource* PluginGlobals::loop_for_main_thread() { |
221 return loop_for_main_thread_.get(); | 236 return loop_for_main_thread_.get(); |
222 } | 237 } |
223 | 238 |
224 void PluginGlobals::set_keepalive_throttle_interval_milliseconds(unsigned i) { | 239 void PluginGlobals::set_keepalive_throttle_interval_milliseconds(unsigned i) { |
225 keepalive_throttle_interval_milliseconds_ = i; | 240 keepalive_throttle_interval_milliseconds_ = i; |
226 } | 241 } |
227 | 242 |
228 bool PluginGlobals::IsPluginGlobals() const { | 243 bool PluginGlobals::IsPluginGlobals() const { |
229 return true; | 244 return true; |
230 } | 245 } |
231 | 246 |
232 void PluginGlobals::OnReleaseKeepaliveThrottle() { | 247 void PluginGlobals::OnReleaseKeepaliveThrottle() { |
233 ppapi::ProxyLock::AssertAcquiredDebugOnly(); | 248 ppapi::ProxyLock::AssertAcquiredDebugOnly(); |
234 plugin_recently_active_ = false; | 249 plugin_recently_active_ = false; |
235 } | 250 } |
236 | 251 |
237 } // namespace proxy | 252 } // namespace proxy |
238 } // namespace ppapi | 253 } // namespace ppapi |
OLD | NEW |