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

Side by Side Diff: chrome/browser/managed_mode_unittest.cc

Issue 11027017: Move ManagedMode classes to chrome/browser/managed_mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync Created 8 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 | 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 "chrome/browser/managed_mode.h"
6
7 #include <algorithm>
8 #include <vector>
9
10 #include "base/bind.h"
11 #include "base/bind_helpers.h"
12 #include "base/message_loop.h"
13 #include "chrome/browser/managed_mode.h"
14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/test/base/test_browser_window.h"
16 #include "chrome/test/base/testing_profile.h"
17 #include "content/public/test/test_browser_thread.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "testing/gmock/include/gmock/gmock.h"
20
21 using ::testing::StrictMock;
22
23 namespace {
24
25 class FakeManagedMode : public ManagedMode {
26 public:
27 FakeManagedMode() : in_managed_mode_(false), should_cancel_enter_(false) {
28 }
29
30 void set_should_cancel_enter(bool should_cancel_enter) {
31 should_cancel_enter_ = should_cancel_enter;
32 }
33
34 void EnterManagedModeForTesting(Profile* profile,
35 const base::Callback<void(bool)>& callback) {
36 EnterManagedModeImpl(profile, callback);
37 }
38
39 // ManagedMode overrides:
40 virtual bool IsInManagedModeImpl() const OVERRIDE {
41 return in_managed_mode_;
42 }
43
44 virtual void SetInManagedMode(Profile* newly_managed_profile) OVERRIDE {
45 if (newly_managed_profile) {
46 ASSERT_TRUE(!managed_profile_ ||
47 managed_profile_ == newly_managed_profile);
48 }
49 managed_profile_ = newly_managed_profile;
50 in_managed_mode_ = (newly_managed_profile != NULL);
51 }
52
53 virtual bool PlatformConfirmEnter() OVERRIDE {
54 return !should_cancel_enter_;
55 }
56
57 virtual bool PlatformConfirmLeave() OVERRIDE {
58 return true;
59 }
60
61 private:
62 bool in_managed_mode_;
63 bool should_cancel_enter_;
64 };
65
66 class MockBrowserWindow : public TestBrowserWindow {
67 public:
68 MOCK_METHOD0(Close, void());
69 };
70
71 class BrowserFixture {
72 public:
73 BrowserFixture(FakeManagedMode* managed_mode,
74 TestingProfile* profile) {
75 Browser::CreateParams params(profile);
76 params.window = &window_;
77 browser_.reset(new Browser(params));
78 }
79
80 ~BrowserFixture() {
81 }
82
83 MockBrowserWindow* window() {
84 return &window_;
85 }
86
87 private:
88 scoped_ptr<Browser> browser_;
89 StrictMock<MockBrowserWindow> window_;
90 };
91
92 class MockCallback : public base::RefCountedThreadSafe<MockCallback> {
93 public:
94 explicit MockCallback(FakeManagedMode* managed_mode)
95 : managed_mode_(managed_mode) {
96 }
97
98 void CheckManagedMode(bool success) {
99 EXPECT_EQ(success, managed_mode_->IsInManagedModeImpl());
100 DidEnterManagedMode(success);
101 }
102
103 MOCK_METHOD1(DidEnterManagedMode, void(bool));
104
105 protected:
106 virtual ~MockCallback() {}
107
108 private:
109 friend class base::RefCountedThreadSafe<MockCallback>;
110
111 FakeManagedMode* managed_mode_;
112
113 DISALLOW_COPY_AND_ASSIGN(MockCallback);
114 };
115
116 } // namespace
117
118 class ManagedModeTest : public ::testing::Test {
119 public:
120 ManagedModeTest() : message_loop_(MessageLoop::TYPE_UI),
121 ui_thread_(content::BrowserThread::UI, &message_loop_) {
122 }
123
124 scoped_refptr<MockCallback> CreateCallback() {
125 return new StrictMock<MockCallback>(&managed_mode_);
126 }
127
128 base::Callback<void(bool)> CreateExpectedCallback(bool success) {
129 scoped_refptr<MockCallback> callback = CreateCallback();
130 EXPECT_CALL(*callback, DidEnterManagedMode(success));
131 return base::Bind(&MockCallback::CheckManagedMode, callback);
132 }
133
134 protected:
135 MessageLoop message_loop_;
136 content::TestBrowserThread ui_thread_;
137 TestingProfile managed_mode_profile_;
138 TestingProfile other_profile_;
139 FakeManagedMode managed_mode_;
140 };
141
142 TEST_F(ManagedModeTest, SingleBrowser) {
143 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
144
145 // If there are no browsers belonging to a different profile, entering should
146 // immediately succeed.
147 managed_mode_.EnterManagedModeForTesting(&managed_mode_profile_,
148 CreateExpectedCallback(true));
149 }
150
151 TEST_F(ManagedModeTest, AlreadyInManagedMode) {
152 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
153 BrowserFixture other_browser(&managed_mode_, &other_profile_);
154
155 // If we're already in managed mode in this profile, entering should
156 // immediately succeed.
157 managed_mode_.SetInManagedMode(&managed_mode_profile_);
158 managed_mode_.EnterManagedModeForTesting(&managed_mode_profile_,
159 CreateExpectedCallback(true));
160 }
161
162 TEST_F(ManagedModeTest, QueueRequests) {
163 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
164
165 // Keep this before the other browser is constructed, so we verify its
166 // expectations after the browser is destroyed.
167 scoped_refptr<MockCallback> callback = CreateCallback();
168 BrowserFixture other_browser(&managed_mode_, &other_profile_);
169
170 EXPECT_CALL(*other_browser.window(), Close());
171 managed_mode_.EnterManagedModeForTesting(
172 &managed_mode_profile_,
173 base::Bind(&MockCallback::CheckManagedMode, callback));
174 managed_mode_.EnterManagedModeForTesting(
175 &managed_mode_profile_,
176 base::Bind(&MockCallback::CheckManagedMode, callback));
177 // The callbacks should run as soon as |other_browser| is closed.
178 EXPECT_CALL(*callback, DidEnterManagedMode(true)).Times(2);
179 }
180
181 TEST_F(ManagedModeTest, OpenNewBrowser) {
182 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
183 BrowserFixture other_browser(&managed_mode_, &other_profile_);
184
185 scoped_refptr<MockCallback> callback = CreateCallback();
186 EXPECT_CALL(*other_browser.window(), Close());
187 managed_mode_.EnterManagedModeForTesting(
188 &managed_mode_profile_,
189 base::Bind(&MockCallback::CheckManagedMode, callback));
190
191 // Opening another browser with the managed profile should not cancel entering
192 // managed mode.
193 BrowserFixture other_managed_mode_browser(&managed_mode_,
194 &managed_mode_profile_);
195
196 // Opening another browser should cancel entering managed mode.
197 EXPECT_CALL(*callback, DidEnterManagedMode(false));
198 BrowserFixture yet_another_browser(&managed_mode_, &other_profile_);
199 }
200
201 TEST_F(ManagedModeTest, DifferentProfile) {
202 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
203
204 // Keep this before the other browser is constructed, so we verify its
205 // expectations after the browser is destroyed.
206 scoped_refptr<MockCallback> callback = CreateCallback();
207 BrowserFixture other_browser(&managed_mode_, &other_profile_);
208
209 EXPECT_CALL(*other_browser.window(), Close());
210 managed_mode_.EnterManagedModeForTesting(
211 &managed_mode_profile_,
212 base::Bind(&MockCallback::CheckManagedMode, callback));
213
214 // Trying to enter managed mode with a different profile should fail
215 // immediately.
216 managed_mode_.EnterManagedModeForTesting(&other_profile_,
217 CreateExpectedCallback(false));
218
219 // The first request should still succeed as soon as the other browser is
220 // closed.
221 EXPECT_CALL(*callback, DidEnterManagedMode(true));
222 }
223
224 TEST_F(ManagedModeTest, Cancelled) {
225 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
226 BrowserFixture other_browser(&managed_mode_, &other_profile_);
227
228 // If the user cancelled entering managed mode, it should fail immediately.
229 managed_mode_.set_should_cancel_enter(true);
230 managed_mode_.EnterManagedModeForTesting(&managed_mode_profile_,
231 CreateExpectedCallback(false));
232 }
233
234 TEST_F(ManagedModeTest, ExtensionManagementPolicyProvider) {
235 BrowserFixture managed_mode_browser(&managed_mode_, &managed_mode_profile_);
236
237 EXPECT_TRUE(managed_mode_.UserMayLoad(NULL, NULL));
238 EXPECT_TRUE(managed_mode_.UserMayModifySettings(NULL, NULL));
239
240 managed_mode_.SetInManagedMode(&managed_mode_profile_);
241 EXPECT_FALSE(managed_mode_.UserMayLoad(NULL, NULL));
242 EXPECT_FALSE(managed_mode_.UserMayModifySettings(NULL, NULL));
243
244 #ifndef NDEBUG
245 EXPECT_FALSE(managed_mode_.GetDebugPolicyProviderName().empty());
246 #endif
247 }
OLDNEW
« no previous file with comments | « chrome/browser/managed_mode/managed_mode_url_filter_unittest.cc ('k') | chrome/browser/managed_mode_url_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698