| // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/browser_watcher/endsession_watcher_window_win.h" |
| |
| #include <windows.h> |
| #include <stddef.h> |
| #include <vector> |
| |
| #include "base/bind.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace browser_watcher { |
| |
| namespace { |
| |
| class EndSessionWatcherWindowTest : public testing::Test { |
| public: |
| EndSessionWatcherWindowTest() |
| : num_callbacks_(0), last_message_(0), last_lparam_(0) { |
| } |
| |
| void OnEndSessionMessage(UINT message, LPARAM lparam) { |
| ++num_callbacks_; |
| last_message_ = message; |
| last_lparam_ = lparam; |
| } |
| |
| size_t num_callbacks_; |
| UINT last_message_; |
| LPARAM last_lparam_; |
| }; |
| |
| } // namespace browser_watcher |
| |
| TEST_F(EndSessionWatcherWindowTest, NoCallbackOnDestruction) { |
| { |
| EndSessionWatcherWindow watcher_window( |
| base::Bind(&EndSessionWatcherWindowTest::OnEndSessionMessage, |
| base::Unretained(this))); |
| } |
| |
| EXPECT_EQ(0u, num_callbacks_); |
| EXPECT_EQ(0, last_lparam_); |
| } |
| |
| TEST_F(EndSessionWatcherWindowTest, IssuesCallbackOnMessage) { |
| EndSessionWatcherWindow watcher_window( |
| base::Bind(&EndSessionWatcherWindowTest::OnEndSessionMessage, |
| base::Unretained(this))); |
| |
| ::SendMessage(watcher_window.window(), WM_QUERYENDSESSION, TRUE, 0xBEEF); |
| EXPECT_EQ(1u, num_callbacks_); |
| EXPECT_EQ(static_cast<DWORD>(WM_QUERYENDSESSION), last_message_); |
| EXPECT_EQ(0xBEEF, last_lparam_); |
| |
| ::SendMessage(watcher_window.window(), WM_ENDSESSION, TRUE, 0xCAFE); |
| EXPECT_EQ(2u, num_callbacks_); |
| EXPECT_EQ(static_cast<UINT>(WM_ENDSESSION), last_message_); |
| EXPECT_EQ(0xCAFE, last_lparam_); |
| |
| // Verify that other messages don't pass through. |
| ::SendMessage(watcher_window.window(), WM_CLOSE, TRUE, 0xCAFE); |
| EXPECT_EQ(2u, num_callbacks_); |
| } |
| |
| } // namespace browser_watcher |