Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(717)

Side by Side Diff: content/browser/power_monitor_message_broadcaster_unittest.cc

Issue 2433203003: Mojoify PoweMonitorMessageBroadcaster IPC from browser to child process (Closed)
Patch Set: code rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/macros.h" 5 #include "base/macros.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h"
7 #include "base/test/power_monitor_test_base.h" 8 #include "base/test/power_monitor_test_base.h"
8 #include "content/browser/power_monitor_message_broadcaster.h" 9 #include "content/browser/power_monitor_message_broadcaster.h"
9 #include "content/common/power_monitor_messages.h" 10 #include "mojo/public/cpp/bindings/binding.h"
10 #include "ipc/ipc_sender.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace content { 13 namespace content {
14 14
15 class PowerMonitorMessageSender : public IPC::Sender { 15 class FakePowerMonitorClient : public device::mojom::PowerMonitorClient {
16 public: 16 public:
17 PowerMonitorMessageSender() 17 FakePowerMonitorClient(device::mojom::PowerMonitorClientRequest request)
18 : power_state_changes_(0), 18 : binding_(this, std::move(request)),
19 power_state_changes_(0),
19 suspends_(0), 20 suspends_(0),
20 resumes_(0) { 21 resumes_(0) {}
22 ~FakePowerMonitorClient() override {}
23
24 // Implement device::mojom::PowerMonitorClient
25 void PowerStateChange(bool on_battery_power) override {
26 power_state_changes_++;
21 } 27 }
22 ~PowerMonitorMessageSender() override {} 28 void Suspend() override { suspends_++; }
23 29 void Resume() override { resumes_++; }
24 bool Send(IPC::Message* msg) override {
25 switch (msg->type()) {
26 case PowerMonitorMsg_Suspend::ID:
27 suspends_++;
28 break;
29 case PowerMonitorMsg_Resume::ID:
30 resumes_++;
31 break;
32 case PowerMonitorMsg_PowerStateChange::ID:
33 power_state_changes_++;
34 break;
35 }
36 delete msg;
37 return true;
38 };
39 30
40 // Test status counts. 31 // Test status counts.
41 int power_state_changes() { return power_state_changes_; } 32 int power_state_changes() { return power_state_changes_; }
42 int suspends() { return suspends_; } 33 int suspends() { return suspends_; }
43 int resumes() { return resumes_; } 34 int resumes() { return resumes_; }
44 35
45 private: 36 private:
37 mojo::Binding<device::mojom::PowerMonitorClient> binding_;
46 int power_state_changes_; // Count of OnPowerStateChange notifications. 38 int power_state_changes_; // Count of OnPowerStateChange notifications.
47 int suspends_; // Count of OnSuspend notifications. 39 int suspends_; // Count of OnSuspend notifications.
48 int resumes_; // Count of OnResume notifications. 40 int resumes_; // Count of OnResume notifications.
49 }; 41 };
50 42
51 class PowerMonitorMessageBroadcasterTest : public testing::Test { 43 class PowerMonitorMessageBroadcasterTest : public testing::Test {
52 protected: 44 protected:
53 PowerMonitorMessageBroadcasterTest() { 45 PowerMonitorMessageBroadcasterTest() {
54 power_monitor_source_ = new base::PowerMonitorTestSource(); 46 power_monitor_source_ = new base::PowerMonitorTestSource();
55 power_monitor_.reset(new base::PowerMonitor( 47 power_monitor_.reset(new base::PowerMonitor(
56 std::unique_ptr<base::PowerMonitorSource>(power_monitor_source_))); 48 std::unique_ptr<base::PowerMonitorSource>(power_monitor_source_)));
57 } 49 }
58 ~PowerMonitorMessageBroadcasterTest() override {} 50 ~PowerMonitorMessageBroadcasterTest() override {}
59 51
60 base::PowerMonitorTestSource* source() { return power_monitor_source_; } 52 base::PowerMonitorTestSource* source() { return power_monitor_source_; }
61 base::PowerMonitor* monitor() { return power_monitor_.get(); } 53 base::PowerMonitor* monitor() { return power_monitor_.get(); }
62 54
63 private: 55 private:
64 base::MessageLoop message_loop_; 56 base::MessageLoop message_loop_;
65 base::PowerMonitorTestSource* power_monitor_source_; 57 base::PowerMonitorTestSource* power_monitor_source_;
66 std::unique_ptr<base::PowerMonitor> power_monitor_; 58 std::unique_ptr<base::PowerMonitor> power_monitor_;
67 59
68 DISALLOW_COPY_AND_ASSIGN(PowerMonitorMessageBroadcasterTest); 60 DISALLOW_COPY_AND_ASSIGN(PowerMonitorMessageBroadcasterTest);
69 }; 61 };
70 62
71 TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) { 63 TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) {
72 PowerMonitorMessageSender sender; 64 device::mojom::PowerMonitorClientPtr proxy;
73 PowerMonitorMessageBroadcaster broadcaster(&sender); 65 FakePowerMonitorClient client(mojo::GetProxy(&proxy));
66 PowerMonitorMessageBroadcaster broadcaster;
74 67
75 // Calling Init should invoke a power state change. 68 // Calling SetClient should invoke a power state change.
76 broadcaster.Init(); 69 broadcaster.SetClient(std::move(proxy));
77 EXPECT_EQ(sender.power_state_changes(), 1); 70
71 base::RunLoop().RunUntilIdle();
72 EXPECT_EQ(client.power_state_changes(), 1);
78 73
79 // Sending resume when not suspended should have no effect. 74 // Sending resume when not suspended should have no effect.
80 source()->GenerateResumeEvent(); 75 source()->GenerateResumeEvent();
81 EXPECT_EQ(sender.resumes(), 0); 76 EXPECT_EQ(client.resumes(), 0);
82 77
83 // Pretend we suspended. 78 // Pretend we suspended.
84 source()->GenerateSuspendEvent(); 79 source()->GenerateSuspendEvent();
85 EXPECT_EQ(sender.suspends(), 1); 80 EXPECT_EQ(client.suspends(), 1);
86 81
87 // Send a second suspend notification. This should be suppressed. 82 // Send a second suspend notification. This should be suppressed.
88 source()->GenerateSuspendEvent(); 83 source()->GenerateSuspendEvent();
89 EXPECT_EQ(sender.suspends(), 1); 84 EXPECT_EQ(client.suspends(), 1);
90 85
91 // Pretend we were awakened. 86 // Pretend we were awakened.
92 source()->GenerateResumeEvent(); 87 source()->GenerateResumeEvent();
93 EXPECT_EQ(sender.resumes(), 1); 88 EXPECT_EQ(client.resumes(), 1);
94 89
95 // Send a duplicate resume notification. This should be suppressed. 90 // Send a duplicate resume notification. This should be suppressed.
96 source()->GenerateResumeEvent(); 91 source()->GenerateResumeEvent();
97 EXPECT_EQ(sender.resumes(), 1); 92 EXPECT_EQ(client.resumes(), 1);
98 93
99 // Pretend the device has gone on battery power 94 // Pretend the device has gone on battery power
100 source()->GeneratePowerStateEvent(true); 95 source()->GeneratePowerStateEvent(true);
101 EXPECT_EQ(sender.power_state_changes(), 2); 96 EXPECT_EQ(client.power_state_changes(), 2);
102 97
103 // Repeated indications the device is on battery power should be suppressed. 98 // Repeated indications the device is on battery power should be suppressed.
104 source()->GeneratePowerStateEvent(true); 99 source()->GeneratePowerStateEvent(true);
105 EXPECT_EQ(sender.power_state_changes(), 2); 100 EXPECT_EQ(client.power_state_changes(), 2);
106 101
107 // Pretend the device has gone off battery power 102 // Pretend the device has gone off battery power
108 source()->GeneratePowerStateEvent(false); 103 source()->GeneratePowerStateEvent(false);
109 EXPECT_EQ(sender.power_state_changes(), 3); 104 EXPECT_EQ(client.power_state_changes(), 3);
110 105
111 // Repeated indications the device is off battery power should be suppressed. 106 // Repeated indications the device is off battery power should be suppressed.
112 source()->GeneratePowerStateEvent(false); 107 source()->GeneratePowerStateEvent(false);
113 EXPECT_EQ(sender.power_state_changes(), 3); 108 EXPECT_EQ(client.power_state_changes(), 3);
114 } 109 }
115 110
116 } // namespace base 111 } // namespace base
OLDNEW
« no previous file with comments | « content/browser/power_monitor_message_broadcaster.cc ('k') | content/browser/renderer_host/render_process_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698