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

Side by Side Diff: chrome/browser/chromeos/extensions/power/power_api_browsertest.cc

Issue 12576018: Add chrome.power extension API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update PermissionsTest.PermissionMessages Created 7 years, 9 months 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/memory/scoped_ptr.h"
6 #include "chrome/browser/chromeos/extensions/power/power_api.h"
7 #include "chrome/browser/extensions/extension_function_test_utils.h"
8 #include "chrome/common/extensions/extension_test_util.h"
9 #include "chrome/common/extensions/manifest.h"
10 #include "chrome/test/base/in_process_browser_test.h"
11 #include "chrome/test/base/ui_test_utils.h"
12 #include "chromeos/dbus/mock_dbus_thread_manager.h"
13 #include "chromeos/dbus/mock_power_manager_client.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 using ::testing::_;
17 using ::testing::Return;
18
19 namespace extensions {
20
21 class PowerApiTest : public InProcessBrowserTest {
22 public:
23 PowerApiTest() {}
24 virtual ~PowerApiTest() {}
25
26 virtual void SetUp() OVERRIDE {
27 chromeos::MockDBusThreadManager* mock_dbus_thread_manager =
28 new chromeos::MockDBusThreadManager;
29
30 EXPECT_CALL(*mock_dbus_thread_manager, GetSystemBus())
31 .WillRepeatedly(Return(reinterpret_cast<dbus::Bus*>(NULL)));
32 chromeos::DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager);
33 power_client_ = mock_dbus_thread_manager->mock_power_manager_client();
34
35 InProcessBrowserTest::SetUp();
36 }
37
38 virtual void TearDown() OVERRIDE {
39 chromeos::DBusThreadManager::Shutdown();
40
41 InProcessBrowserTest::TearDown();
42 }
43
44 protected:
45 static const int kRequestId = 5; // arbitrary
46
47 scoped_refptr<Extension> CreateExtensionWithId(const std::string& id) {
48 return extension_test_util::CreateExtensionWithID(
49 extension_test_util::MakeId(id));
50 }
51
52 void RunFunctionAndExpectPass(UIThreadExtensionFunction* function,
53 Extension* extension) {
54 function->set_extension(extension);
55 function->set_has_callback(true);
56
57 scoped_ptr<base::Value> result(
58 extension_function_test_utils::RunFunctionAndReturnSingleResult(
59 function, "[]", browser()));
60
61 ASSERT_TRUE(result.get() != NULL);
62 ASSERT_EQ(base::Value::TYPE_BOOLEAN, result->GetType());
63 bool boolean_value;
64 result->GetAsBoolean(&boolean_value);
65 EXPECT_EQ(boolean_value, true);
66
67 MessageLoop::current()->RunUntilIdle();
68 }
69
70 // Adds an expectation that RequestPowerStateOverrides() will be called once
71 // to create a new override. The callback is stored in
72 // |request_id_callback_|, which should be invoked with |kRequestId|.
73 void AddRequestPowerStateOverridesExpectation() {
74 EXPECT_CALL(*power_client_, RequestPowerStateOverrides(0, _, _, _))
75 .WillOnce(testing::SaveArg<3>(&request_id_callback_));
76 }
77
78 // Adds an expectation that CancelPowerStateOverrides() will be called once to
79 // cancel an override previously created via
80 // AddRequestPowerStateOverridesExpectation().
81 void AddCancelPowerStateOverridesExpectation() {
82 EXPECT_CALL(*power_client_, CancelPowerStateOverrides(kRequestId)).Times(1);
83 }
84
85 void RequestKeepAwake(scoped_refptr<Extension> extension) {
86 scoped_refptr<PowerRequestKeepAwakeFunction> function(
87 new PowerRequestKeepAwakeFunction);
88 RunFunctionAndExpectPass(function.get(), extension);
89 }
90
91 void ReleaseKeepAwake(scoped_refptr<Extension> extension) {
92 scoped_refptr<PowerReleaseKeepAwakeFunction> function(
93 new PowerReleaseKeepAwakeFunction);
94 RunFunctionAndExpectPass(function.get(), extension);
95 }
96
97 chromeos::MockPowerManagerClient* power_client_;
98
99 chromeos::PowerStateRequestIdCallback request_id_callback_;
100
101 private:
102 DISALLOW_COPY_AND_ASSIGN(PowerApiTest);
103 };
104
105 IN_PROC_BROWSER_TEST_F(PowerApiTest, RequestAndRelease) {
106 scoped_refptr<Extension> extension(CreateExtensionWithId("0"));
107 AddRequestPowerStateOverridesExpectation();
108 RequestKeepAwake(extension);
109 request_id_callback_.Run(kRequestId);
110
111 AddCancelPowerStateOverridesExpectation();
112 ReleaseKeepAwake(extension);
113 }
114
115 IN_PROC_BROWSER_TEST_F(PowerApiTest, RequestMultipleAndReleaseOne) {
116 scoped_refptr<Extension> extension1(CreateExtensionWithId("1"));
117 scoped_refptr<Extension> extension2(CreateExtensionWithId("2"));
118
119 AddRequestPowerStateOverridesExpectation();
120 RequestKeepAwake(extension1);
121 RequestKeepAwake(extension2);
122 RequestKeepAwake(extension1);
123 request_id_callback_.Run(kRequestId);
124
125 AddCancelPowerStateOverridesExpectation();
126 ReleaseKeepAwake(extension1);
127 }
128
129 IN_PROC_BROWSER_TEST_F(PowerApiTest, RequestOneAndReleaseMultiple) {
130 scoped_refptr<Extension> extension(CreateExtensionWithId("3"));
131
132 AddRequestPowerStateOverridesExpectation();
133 RequestKeepAwake(extension);
134 request_id_callback_.Run(kRequestId);
135
136 AddCancelPowerStateOverridesExpectation();
137 ReleaseKeepAwake(extension);
138 ReleaseKeepAwake(extension);
139 ReleaseKeepAwake(extension);
140 }
141
142 IN_PROC_BROWSER_TEST_F(PowerApiTest, RequestMultipleAndReleaseAll) {
143 scoped_refptr<Extension> extension1(CreateExtensionWithId("4"));
144 scoped_refptr<Extension> extension2(CreateExtensionWithId("5"));
145 scoped_refptr<Extension> extension3(CreateExtensionWithId("6"));
146
147 AddRequestPowerStateOverridesExpectation();
148 RequestKeepAwake(extension1);
149 RequestKeepAwake(extension2);
150 RequestKeepAwake(extension3);
151 request_id_callback_.Run(kRequestId);
152
153 AddCancelPowerStateOverridesExpectation();
154 ReleaseKeepAwake(extension3);
155 ReleaseKeepAwake(extension1);
156 ReleaseKeepAwake(extension2);
157 }
158
159 // TODO(rkc): Add another test to verify a Request->Release->Request scenario.
160
161 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698