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(
g_child_process_list.Get().push_back(this);
GetContentClient()->browser()->BrowserChildProcessHostCreated(this);
power_monitor_message_broadcaster_.Init();
}
BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl() {
......
......@@ -24,6 +24,13 @@ PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster() {
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) {
sender_->Send(new PowerMonitorMsg_PowerStateChange(on_battery_power));
}
......
......@@ -28,6 +28,8 @@ class CONTENT_EXPORT PowerMonitorMessageBroadcaster
virtual void OnSuspend() OVERRIDE;
virtual void OnResume() OVERRIDE;
void Init();
private:
IPC::Sender* sender_;
......
......@@ -69,6 +69,10 @@ TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) {
PowerMonitorMessageSender 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.
source()->GenerateResumeEvent();
EXPECT_EQ(sender.resumes(), 0);
......@@ -91,19 +95,19 @@ TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) {
// Pretend the device has gone on battery power
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.
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
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.
source()->GeneratePowerStateEvent(false);
EXPECT_EQ(sender.power_state_changes(), 2);
EXPECT_EQ(sender.power_state_changes(), 3);
}
} // namespace base
......@@ -659,6 +659,8 @@ bool RenderProcessHostImpl::Init() {
GpuDataManagerImpl::GetInstance()->AddObserver(this);
}
power_monitor_broadcaster_.Init();
is_initialized_ = 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