Home | History | Annotate | Download | only in ppapi_plugin
      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
      3 // found in the LICENSE file.
      4 
      5 #include "content/ppapi_plugin/plugin_process_dispatcher.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/bind_helpers.h"
      9 #include "content/child/child_process.h"
     10 
     11 namespace content {
     12 namespace {
     13 
     14 // How long we wait before releasing the plugin process.
     15 const int kPluginReleaseTimeSeconds = 30;
     16 
     17 }  // namespace
     18 
     19 PluginProcessDispatcher::PluginProcessDispatcher(
     20     PP_GetInterface_Func get_interface,
     21     const ppapi::PpapiPermissions& permissions,
     22     bool incognito)
     23     : ppapi::proxy::PluginDispatcher(get_interface,
     24                                      permissions,
     25                                      incognito) {
     26   ChildProcess::current()->AddRefProcess();
     27 }
     28 
     29 PluginProcessDispatcher::~PluginProcessDispatcher() {
     30   // Don't free the process right away. This timer allows the child process
     31   // to be re-used if the user rapidly goes to a new page that requires this
     32   // plugin. This is the case for common plugins where they may be used on a
     33   // source and destination page of a navigation. We don't want to tear down
     34   // and re-start processes each time in these cases.
     35   base::MessageLoop::current()->PostDelayedTask(
     36       FROM_HERE,
     37       base::Bind(&ChildProcess::ReleaseProcess,
     38                  base::Unretained(ChildProcess::current())),
     39       base::TimeDelta::FromSeconds(kPluginReleaseTimeSeconds));
     40 }
     41 
     42 }  // namespace content
     43