Commit 30c4c67a authored by fmeawad@chromium.org's avatar fmeawad@chromium.org

Initialize PowerMonitor on_power_battery initial value for newly created processes.

Adding an Init method to the Broadcaster, that gets invoked while initializing the host.
The Init method broadcasts the original on_power_battery value to the new processes.

BUG=153139

Review URL: https://codereview.chromium.org/401083002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284599 0039d316-1c4b-4281-b951-d872f2087c98
parent 196b96a7
...@@ -106,6 +106,8 @@ BrowserChildProcessHostImpl::BrowserChildProcessHostImpl( ...@@ -106,6 +106,8 @@ BrowserChildProcessHostImpl::BrowserChildProcessHostImpl(
g_child_process_list.Get().push_back(this); g_child_process_list.Get().push_back(this);
GetContentClient()->browser()->BrowserChildProcessHostCreated(this); GetContentClient()->browser()->BrowserChildProcessHostCreated(this);
power_monitor_message_broadcaster_.Init();
} }
BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl() { BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl() {
......
...@@ -24,6 +24,13 @@ PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster() { ...@@ -24,6 +24,13 @@ PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster() {
power_monitor->RemoveObserver(this); power_monitor->RemoveObserver(this);
} }
void PowerMonitorMessageBroadcaster::Init() {
base::PowerMonitor* power_monitor = base::PowerMonitor::Get();
// Unit tests does not initialize the PowerMonitor.
if (power_monitor)
OnPowerStateChange(power_monitor->IsOnBatteryPower());
}
void PowerMonitorMessageBroadcaster::OnPowerStateChange(bool on_battery_power) { void PowerMonitorMessageBroadcaster::OnPowerStateChange(bool on_battery_power) {
sender_->Send(new PowerMonitorMsg_PowerStateChange(on_battery_power)); sender_->Send(new PowerMonitorMsg_PowerStateChange(on_battery_power));
} }
......
...@@ -28,6 +28,8 @@ class CONTENT_EXPORT PowerMonitorMessageBroadcaster ...@@ -28,6 +28,8 @@ class CONTENT_EXPORT PowerMonitorMessageBroadcaster
virtual void OnSuspend() OVERRIDE; virtual void OnSuspend() OVERRIDE;
virtual void OnResume() OVERRIDE; virtual void OnResume() OVERRIDE;
void Init();
private: private:
IPC::Sender* sender_; IPC::Sender* sender_;
......
...@@ -69,6 +69,10 @@ TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) { ...@@ -69,6 +69,10 @@ TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) {
PowerMonitorMessageSender sender; PowerMonitorMessageSender sender;
PowerMonitorMessageBroadcaster broadcaster(&sender); PowerMonitorMessageBroadcaster broadcaster(&sender);
// Calling Init should invoke a power state change.
broadcaster.Init();
EXPECT_EQ(sender.power_state_changes(), 1);
// Sending resume when not suspended should have no effect. // Sending resume when not suspended should have no effect.
source()->GenerateResumeEvent(); source()->GenerateResumeEvent();
EXPECT_EQ(sender.resumes(), 0); EXPECT_EQ(sender.resumes(), 0);
...@@ -91,19 +95,19 @@ TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) { ...@@ -91,19 +95,19 @@ TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) {
// Pretend the device has gone on battery power // Pretend the device has gone on battery power
source()->GeneratePowerStateEvent(true); source()->GeneratePowerStateEvent(true);
EXPECT_EQ(sender.power_state_changes(), 1); EXPECT_EQ(sender.power_state_changes(), 2);
// Repeated indications the device is on battery power should be suppressed. // Repeated indications the device is on battery power should be suppressed.
source()->GeneratePowerStateEvent(true); source()->GeneratePowerStateEvent(true);
EXPECT_EQ(sender.power_state_changes(), 1); EXPECT_EQ(sender.power_state_changes(), 2);
// Pretend the device has gone off battery power // Pretend the device has gone off battery power
source()->GeneratePowerStateEvent(false); source()->GeneratePowerStateEvent(false);
EXPECT_EQ(sender.power_state_changes(), 2); EXPECT_EQ(sender.power_state_changes(), 3);
// Repeated indications the device is off battery power should be suppressed. // Repeated indications the device is off battery power should be suppressed.
source()->GeneratePowerStateEvent(false); source()->GeneratePowerStateEvent(false);
EXPECT_EQ(sender.power_state_changes(), 2); EXPECT_EQ(sender.power_state_changes(), 3);
} }
} // namespace base } // namespace base
...@@ -659,6 +659,8 @@ bool RenderProcessHostImpl::Init() { ...@@ -659,6 +659,8 @@ bool RenderProcessHostImpl::Init() {
GpuDataManagerImpl::GetInstance()->AddObserver(this); GpuDataManagerImpl::GetInstance()->AddObserver(this);
} }
power_monitor_broadcaster_.Init();
is_initialized_ = true; is_initialized_ = true;
return true; return true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment