| Index: extensions/browser/process_manager.cc
|
| diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc
|
| index c3bcd50ae425ff35c102616c72f73461c18ace31..1b6a45a2e65584557d1e78121f1236c45def0028 100644
|
| --- a/extensions/browser/process_manager.cc
|
| +++ b/extensions/browser/process_manager.cc
|
| @@ -41,7 +41,6 @@
|
| #include "extensions/common/manifest_handlers/background_info.h"
|
| #include "extensions/common/manifest_handlers/incognito_info.h"
|
| #include "extensions/common/one_shot_event.h"
|
| -#include "extensions/common/switches.h"
|
|
|
| using content::BrowserContext;
|
| using content::RenderViewHost;
|
| @@ -58,6 +57,16 @@ namespace extensions {
|
|
|
| namespace {
|
|
|
| +// The time to delay between an extension becoming idle and
|
| +// sending a ShouldSuspend message.
|
| +// Note: Must be sufficiently larger (e.g. 2x) than
|
| +// kKeepaliveThrottleIntervalInSeconds in ppapi/proxy/plugin_globals.
|
| +unsigned g_event_page_idle_time_msec = 10000;
|
| +
|
| +// The time to delay between sending a ShouldSuspend message and
|
| +// sending a Suspend message.
|
| +unsigned g_event_page_suspending_time_msec = 5000;
|
| +
|
| std::string GetExtensionID(RenderViewHost* render_view_host) {
|
| // This works for both apps and extensions because the site has been
|
| // normalized to the extension URL for hosted apps.
|
| @@ -267,24 +276,6 @@ ProcessManager::ProcessManager(BrowserContext* context,
|
| registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_CONNECTED,
|
| content::NotificationService::AllSources());
|
|
|
| - // Note: event_page_idle_time_ must be sufficiently larger (e.g. 2x) than
|
| - // kKeepaliveThrottleIntervalInSeconds in ppapi/proxy/plugin_globals.
|
| - event_page_idle_time_ = base::TimeDelta::FromSeconds(10);
|
| - unsigned idle_time_msec = 0;
|
| - if (base::StringToUint(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| - extensions::switches::kEventPageIdleTime), &idle_time_msec)) {
|
| - CHECK_GT(idle_time_msec, 0u); // OnKeepaliveImpulseCheck requires non zero.
|
| - event_page_idle_time_ = base::TimeDelta::FromMilliseconds(idle_time_msec);
|
| - }
|
| - event_page_suspending_time_ = base::TimeDelta::FromSeconds(5);
|
| - unsigned suspending_time_msec = 0;
|
| - if (base::StringToUint(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| - extensions::switches::kEventPageSuspendingTime),
|
| - &suspending_time_msec)) {
|
| - event_page_suspending_time_ =
|
| - base::TimeDelta::FromMilliseconds(suspending_time_msec);
|
| - }
|
| -
|
| content::DevToolsAgentHost::AddAgentStateCallback(devtools_callback_);
|
|
|
| OnKeepaliveImpulseCheck();
|
| @@ -465,7 +456,7 @@ void ProcessManager::DecrementLazyKeepaliveCount(
|
| weak_ptr_factory_.GetWeakPtr(),
|
| extension_id,
|
| last_background_close_sequence_id_),
|
| - event_page_idle_time_);
|
| + base::TimeDelta::FromMilliseconds(g_event_page_idle_time_msec));
|
| }
|
| }
|
|
|
| @@ -534,11 +525,12 @@ void ProcessManager::OnKeepaliveFromPlugin(int render_process_id,
|
| }
|
|
|
| // DecrementLazyKeepaliveCount is called when no calls to KeepaliveImpulse
|
| -// have been made for at least event_page_idle_time_. In the best case an
|
| +// have been made for at least g_event_page_idle_time_msec. In the best case an
|
| // impulse was made just before being cleared, and the decrement will occur
|
| -// event_page_idle_time_ later, causing a 2 * event_page_idle_time_ total time
|
| -// for extension to be shut down based on impulses. Worst case is an impulse
|
| -// just after a clear, adding one check cycle and resulting in 3x total time.
|
| +// g_event_page_idle_time_msec later, causing a 2 * g_event_page_idle_time_msec
|
| +// total time for extension to be shut down based on impulses. Worst case is
|
| +// an impulse just after a clear, adding one check cycle and resulting in 3x
|
| +// total time.
|
| void ProcessManager::OnKeepaliveImpulseCheck() {
|
| for (BackgroundPageDataMap::iterator i = background_page_data_.begin();
|
| i != background_page_data_.end();
|
| @@ -563,7 +555,7 @@ void ProcessManager::OnKeepaliveImpulseCheck() {
|
| FROM_HERE,
|
| base::Bind(&ProcessManager::OnKeepaliveImpulseCheck,
|
| weak_ptr_factory_.GetWeakPtr()),
|
| - event_page_idle_time_);
|
| + base::TimeDelta::FromMilliseconds(g_event_page_idle_time_msec));
|
| }
|
| }
|
|
|
| @@ -608,8 +600,10 @@ void ProcessManager::OnSuspendAck(const std::string& extension_id) {
|
| base::MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE,
|
| base::Bind(&ProcessManager::CloseLazyBackgroundPageNow,
|
| - weak_ptr_factory_.GetWeakPtr(), extension_id, sequence_id),
|
| - event_page_suspending_time_);
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + extension_id,
|
| + sequence_id),
|
| + base::TimeDelta::FromMilliseconds(g_event_page_suspending_time_msec));
|
| }
|
|
|
| void ProcessManager::CloseLazyBackgroundPageNow(const std::string& extension_id,
|
| @@ -677,6 +671,18 @@ void ProcessManager::SetKeepaliveImpulseDecrementCallbackForTesting(
|
| keepalive_impulse_decrement_callback_for_testing_ = callback;
|
| }
|
|
|
| +// static
|
| +void ProcessManager::SetEventPageIdleTimeForTesting(unsigned idle_time_msec) {
|
| + CHECK_GT(idle_time_msec, 0u); // OnKeepaliveImpulseCheck requires non zero.
|
| + g_event_page_idle_time_msec = idle_time_msec;
|
| +}
|
| +
|
| +// static
|
| +void ProcessManager::SetEventPageSuspendingTimeForTesting(
|
| + unsigned suspending_time_msec) {
|
| + g_event_page_suspending_time_msec = suspending_time_msec;
|
| +}
|
| +
|
| void ProcessManager::Observe(int type,
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) {
|
|
|