diff options
author | yukawa@chromium.org <yukawa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 04:15:10 +0000 |
---|---|---|
committer | yukawa@chromium.org <yukawa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 04:15:10 +0000 |
commit | 924a98b1b7b50ceca9fd9ea60597b6a1373900ae (patch) | |
tree | 7636d55bb7a6163d4f5d463b9acb282e0a349050 /base/power_monitor | |
parent | ef4efd96729d227268a36f8f88e3bff17c3b56fc (diff) | |
download | chromium_src-924a98b1b7b50ceca9fd9ea60597b6a1373900ae.zip chromium_src-924a98b1b7b50ceca9fd9ea60597b6a1373900ae.tar.gz chromium_src-924a98b1b7b50ceca9fd9ea60597b6a1373900ae.tar.bz2 |
Fix WM_POWERBROADCAST handling
This is a follow up CL of r185433, which mistook |message| for |wparam|.
With this CL, base::PowerMonitor and base::PowerObserver become
functional again on Windows.
BUG=314477, 149059
TEST=manually done with a debugger (by disconnecting the power supply cable)
Review URL: https://codereview.chromium.org/57383002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232900 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/power_monitor')
-rw-r--r-- | base/power_monitor/power_monitor_device_source.h | 3 | ||||
-rw-r--r-- | base/power_monitor/power_monitor_device_source_win.cc | 92 |
2 files changed, 36 insertions, 59 deletions
diff --git a/base/power_monitor/power_monitor_device_source.h b/base/power_monitor/power_monitor_device_source.h index 9939560..37b065a 100644 --- a/base/power_monitor/power_monitor_device_source.h +++ b/base/power_monitor/power_monitor_device_source.h @@ -61,9 +61,6 @@ class BASE_EXPORT PowerMonitorDeviceSource : public PowerMonitorSource { ~PowerMessageWindow(); private: - void ProcessWmPowerBroadcastMessage(int event_id); - LRESULT CALLBACK WndProc(HWND hwnd, UINT message, - WPARAM wparam, LPARAM lparam); static LRESULT CALLBACK WndProcThunk(HWND hwnd, UINT message, WPARAM wparam, diff --git a/base/power_monitor/power_monitor_device_source_win.cc b/base/power_monitor/power_monitor_device_source_win.cc index 6f4c131..6609bd0 100644 --- a/base/power_monitor/power_monitor_device_source_win.cc +++ b/base/power_monitor/power_monitor_device_source_win.cc @@ -17,6 +17,37 @@ namespace { const wchar_t kWindowClassName[] = L"Base_PowerMessageWindow"; +void ProcessWmPowerBroadcastMessage(WPARAM event_id) { + PowerMonitorSource::PowerEvent power_event; + switch (event_id) { + case PBT_APMPOWERSTATUSCHANGE: // The power status changed. + power_event = PowerMonitorSource::POWER_STATE_EVENT; + break; + case PBT_APMRESUMEAUTOMATIC: // Resume from suspend. + //case PBT_APMRESUMESUSPEND: // User-initiated resume from suspend. + // We don't notify for this latter event + // because if it occurs it is always sent as a + // second event after PBT_APMRESUMEAUTOMATIC. + power_event = PowerMonitorSource::RESUME_EVENT; + break; + case PBT_APMSUSPEND: // System has been suspended. + power_event = PowerMonitorSource::SUSPEND_EVENT; + break; + default: + return; + + // Other Power Events: + // PBT_APMBATTERYLOW - removed in Vista. + // PBT_APMOEMEVENT - removed in Vista. + // PBT_APMQUERYSUSPEND - removed in Vista. + // PBT_APMQUERYSUSPENDFAILED - removed in Vista. + // PBT_APMRESUMECRITICAL - removed in Vista. + // PBT_POWERSETTINGCHANGE - user changed the power settings. + } + + ProcessPowerEventHelper(power_event); +} + } // namespace // Function to query the system to see if it is currently running on @@ -52,8 +83,6 @@ PowerMonitorDeviceSource::PowerMessageWindow::PowerMessageWindow() message_hwnd_ = CreateWindowEx(WS_EX_NOACTIVATE, kWindowClassName, NULL, WS_POPUP, 0, 0, 0, 0, NULL, NULL, instance_, NULL); - SetWindowLongPtr(message_hwnd_, GWLP_USERDATA, - reinterpret_cast<LONG_PTR>(this)); } PowerMonitorDeviceSource::PowerMessageWindow::~PowerMessageWindow() { @@ -63,68 +92,19 @@ PowerMonitorDeviceSource::PowerMessageWindow::~PowerMessageWindow() { } } -void -PowerMonitorDeviceSource::PowerMessageWindow::ProcessWmPowerBroadcastMessage( - int event_id) { - PowerMonitorSource::PowerEvent power_event; - switch (event_id) { - case PBT_APMPOWERSTATUSCHANGE: // The power status changed. - power_event = PowerMonitorSource::POWER_STATE_EVENT; - break; - case PBT_APMRESUMEAUTOMATIC: // Resume from suspend. - //case PBT_APMRESUMESUSPEND: // User-initiated resume from suspend. - // We don't notify for this latter event - // because if it occurs it is always sent as a - // second event after PBT_APMRESUMEAUTOMATIC. - power_event = PowerMonitorSource::RESUME_EVENT; - break; - case PBT_APMSUSPEND: // System has been suspended. - power_event = PowerMonitorSource::SUSPEND_EVENT; - break; - default: - return; - - // Other Power Events: - // PBT_APMBATTERYLOW - removed in Vista. - // PBT_APMOEMEVENT - removed in Vista. - // PBT_APMQUERYSUSPEND - removed in Vista. - // PBT_APMQUERYSUSPENDFAILED - removed in Vista. - // PBT_APMRESUMECRITICAL - removed in Vista. - // PBT_POWERSETTINGCHANGE - user changed the power settings. - } - - ProcessPowerEventHelper(power_event); -} - -LRESULT CALLBACK PowerMonitorDeviceSource::PowerMessageWindow::WndProc( +// static +LRESULT CALLBACK PowerMonitorDeviceSource::PowerMessageWindow::WndProcThunk( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch (message) { - case WM_POWERBROADCAST: { - DWORD power_event = static_cast<DWORD>(message); - ProcessWmPowerBroadcastMessage(power_event); + case WM_POWERBROADCAST: + ProcessWmPowerBroadcastMessage(wparam); return TRUE; - } default: - break; + return ::DefWindowProc(hwnd, message, wparam, lparam); } - return ::DefWindowProc(hwnd, message, wparam, lparam); -} - -// static -LRESULT CALLBACK PowerMonitorDeviceSource::PowerMessageWindow::WndProcThunk( - HWND hwnd, - UINT message, - WPARAM wparam, - LPARAM lparam) { - PowerMonitorDeviceSource::PowerMessageWindow* message_hwnd = - reinterpret_cast<PowerMonitorDeviceSource::PowerMessageWindow*>( - GetWindowLongPtr(hwnd, GWLP_USERDATA)); - if (message_hwnd) - return message_hwnd->WndProc(hwnd, message, wparam, lparam); - return ::DefWindowProc(hwnd, message, wparam, lparam); } } // namespace base |