Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ppapi / proxy / plugin_globals.cc
index d34adf1..6bb9c75 100644 (file)
 #include "ppapi/proxy/ppapi_messages.h"
 #include "ppapi/proxy/ppb_message_loop_proxy.h"
 #include "ppapi/proxy/resource_reply_thread_registrar.h"
+#include "ppapi/shared_impl/ppapi_constants.h"
 #include "ppapi/shared_impl/proxy_lock.h"
 #include "ppapi/thunk/enter.h"
 
-namespace {
-
-const int kKeepaliveThrottleIntervalDefault = 5000;
-
-}  // namespace
-
 namespace ppapi {
 namespace proxy {
 
@@ -37,7 +32,7 @@ class PluginGlobals::BrowserSender : public IPC::Sender {
   virtual ~BrowserSender() {}
 
   // IPC::Sender implementation.
-  virtual bool Send(IPC::Message* msg) OVERRIDE {
+  virtual bool Send(IPC::Message* msg) override {
     if (msg->is_sync()) {
       // Synchronous messages might be re-entrant, so we need to drop the lock.
       ProxyAutoUnlock unlock;
@@ -64,7 +59,7 @@ PluginGlobals::PluginGlobals()
           new ResourceReplyThreadRegistrar(GetMainThreadMessageLoop())),
       plugin_recently_active_(false),
       keepalive_throttle_interval_milliseconds_(
-          kKeepaliveThrottleIntervalDefault),
+          ppapi::kKeepaliveThrottleIntervalDefaultMilliseconds),
       weak_factory_(this) {
   DCHECK(!plugin_globals_);
   plugin_globals_ = this;
@@ -85,7 +80,7 @@ PluginGlobals::PluginGlobals(PerThreadForTest per_thread_for_test)
           new ResourceReplyThreadRegistrar(GetMainThreadMessageLoop())),
       plugin_recently_active_(false),
       keepalive_throttle_interval_milliseconds_(
-          kKeepaliveThrottleIntervalDefault),
+          kKeepaliveThrottleIntervalDefaultMilliseconds),
       weak_factory_(this) {
   DCHECK(!plugin_globals_);
 }
@@ -177,7 +172,7 @@ base::TaskRunner* PluginGlobals::GetFileTaskRunner() {
     options.message_loop_type = base::MessageLoop::TYPE_IO;
     file_thread_->StartWithOptions(options);
   }
-  return file_thread_->message_loop_proxy();
+  return file_thread_->message_loop_proxy().get();
 }
 
 void PluginGlobals::MarkPluginIsActive() {
@@ -186,21 +181,24 @@ void PluginGlobals::MarkPluginIsActive() {
     if (!GetBrowserSender() || !base::MessageLoop::current())
       return;
     GetBrowserSender()->Send(new PpapiHostMsg_Keepalive());
-
-    GetMainThreadMessageLoop()->PostDelayedTask(FROM_HERE,
+    DCHECK(keepalive_throttle_interval_milliseconds_);
+    GetMainThreadMessageLoop()->PostDelayedTask(
+        FROM_HERE,
         RunWhileLocked(base::Bind(&PluginGlobals::OnReleaseKeepaliveThrottle,
                                   weak_factory_.GetWeakPtr())),
         base::TimeDelta::FromMilliseconds(
-            keepalive_throttle_interval_milliseconds()));
+            keepalive_throttle_interval_milliseconds_));
   }
 }
 
 IPC::Sender* PluginGlobals::GetBrowserSender() {
-  if (!browser_sender_.get()) {
-    browser_sender_.reset(
-        new BrowserSender(plugin_proxy_delegate_->GetBrowserSender()));
-  }
-
+  // CAUTION: This function is called without the ProxyLock. See also
+  // InterfaceList::GetInterfaceForPPB.
+  //
+  // See also SetPluginProxyDelegate. That initializes browser_sender_ before
+  // the plugin can start threads, and it may be cleared after the
+  // plugin has torn down threads. So this pointer is expected to remain valid
+  // during the lifetime of the plugin.
   return browser_sender_.get();
 }
 
@@ -221,15 +219,24 @@ PP_Resource PluginGlobals::CreateBrowserFont(
       connection, instance, desc, prefs);
 }
 
-MessageLoopResource* PluginGlobals::loop_for_main_thread() {
-  return loop_for_main_thread_.get();
+void PluginGlobals::SetPluginProxyDelegate(PluginProxyDelegate* delegate) {
+  DCHECK(delegate && !plugin_proxy_delegate_);
+  plugin_proxy_delegate_ = delegate;
+  browser_sender_.reset(
+      new BrowserSender(plugin_proxy_delegate_->GetBrowserSender()));
+}
+
+void PluginGlobals::ResetPluginProxyDelegate() {
+  DCHECK(plugin_proxy_delegate_);
+  plugin_proxy_delegate_ = NULL;
+  browser_sender_.reset();
 }
 
-int PluginGlobals::keepalive_throttle_interval_milliseconds() const {
-  return keepalive_throttle_interval_milliseconds_;
+MessageLoopResource* PluginGlobals::loop_for_main_thread() {
+  return loop_for_main_thread_.get();
 }
 
-void PluginGlobals::set_keepalive_throttle_interval_milliseconds(int i) {
+void PluginGlobals::set_keepalive_throttle_interval_milliseconds(unsigned i) {
   keepalive_throttle_interval_milliseconds_ = i;
 }