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

Side by Side Diff: chrome/browser/policy/url_blacklist_manager_unittest.cc

Issue 7747018: Introduced the URLBlacklistManager, and wired it to various places. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added TODO for interaction with extensions Created 9 years, 3 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) 2011 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/policy/url_blacklist_manager.h"
6
7 #include "base/basictypes.h"
8 #include "base/memory/linked_ptr.h"
9 #include "base/message_loop.h"
10 #include "chrome/common/pref_names.h"
11 #include "chrome/test/base/testing_pref_service.h"
12 #include "content/browser/browser_thread.h"
13 #include "content/common/notification_service.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace policy {
18
19 namespace {
20
21 using ::testing::_;
22 using ::testing::Invoke;
23 using ::testing::Mock;
24
25 class TestingURLBlacklistManager : public URLBlacklistManager {
26 public:
27 explicit TestingURLBlacklistManager(PrefService* pref_service)
28 : URLBlacklistManager(pref_service) {
29 }
30
31 virtual ~TestingURLBlacklistManager() {
32 }
33
34 // Make this method public for testing.
35 using URLBlacklistManager::ScheduleUpdate;
36
37 // Post tasks without a delay during tests.
38 virtual void PostUpdateTask(Task* task) OVERRIDE {
39 MessageLoop::current()->PostTask(FROM_HERE, task);
40 }
41
42 // Makes a direct call to UpdateOnIO during tests.
43 void UpdateOnIO() {
44 linked_ptr<StringVector> block(new StringVector);
45 block->push_back("example.com");
46 linked_ptr<StringVector> allow(new StringVector);
47 URLBlacklistManager::UpdateOnIO(block, allow);
48 }
49
50 void UpdateNotMocked() {
51 URLBlacklistManager::Update();
52 }
53
54 MOCK_METHOD0(Update, void());
55 MOCK_METHOD1(SetBlacklist, void(linked_ptr<Blacklist>));
56
57 private:
58 DISALLOW_COPY_AND_ASSIGN(TestingURLBlacklistManager);
59 };
60
61 class URLBlacklistManagerTest : public testing::Test {
62 protected:
63 URLBlacklistManagerTest()
64 : ui_thread_(BrowserThread::UI, &loop_),
65 file_thread_(BrowserThread::FILE, &loop_),
66 io_thread_(BrowserThread::IO, &loop_) {
67 }
68
69 virtual void SetUp() OVERRIDE {
70 pref_service_.RegisterListPref(prefs::kUrlBlacklist);
71 pref_service_.RegisterListPref(prefs::kUrlWhitelist);
72 url_blacklist_manager_.reset(
73 new TestingURLBlacklistManager(&pref_service_));
74 loop_.RunAllPending();
75 }
76
77 virtual void TearDown() OVERRIDE {
78 if (url_blacklist_manager_.get())
79 url_blacklist_manager_->ShutdownOnUIThread();
80 loop_.RunAllPending();
81 }
82
83 void ExpectUpdate() {
84 EXPECT_CALL(*url_blacklist_manager_, Update())
85 .WillOnce(Invoke(url_blacklist_manager_.get(),
86 &TestingURLBlacklistManager::UpdateNotMocked));
87 }
88
89 MessageLoop loop_;
90 TestingPrefService pref_service_;
91 scoped_ptr<TestingURLBlacklistManager> url_blacklist_manager_;
92
93 private:
94 BrowserThread ui_thread_;
95 BrowserThread file_thread_;
96 BrowserThread io_thread_;
97
98 DISALLOW_COPY_AND_ASSIGN(URLBlacklistManagerTest);
99 };
100
101 TEST_F(URLBlacklistManagerTest, SingleUpdateForTwoPrefChanges) {
102 ExpectUpdate();
103
104 ListValue* blacklist = new ListValue;
105 blacklist->Append(new StringValue("*.google.com"));
106 ListValue* whitelist = new ListValue;
107 whitelist->Append(new StringValue("mail.google.com"));
108 pref_service_.SetManagedPref(prefs::kUrlBlacklist, blacklist);
109 pref_service_.SetManagedPref(prefs::kUrlBlacklist, whitelist);
110 loop_.RunAllPending();
111
112 Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
113 }
114
115 TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask0) {
116 // Post an update task to the UI thread.
117 url_blacklist_manager_->ScheduleUpdate();
118 // Shutdown comes before the task is executed.
119 url_blacklist_manager_->ShutdownOnUIThread();
120 url_blacklist_manager_.reset();
121 // Run the task after shutdown and deletion.
122 loop_.RunAllPending();
123 }
124
125 TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask1) {
126 EXPECT_CALL(*url_blacklist_manager_, Update()).Times(0);
127 // Post an update task.
128 url_blacklist_manager_->ScheduleUpdate();
129 // Shutdown comes before the task is executed.
130 url_blacklist_manager_->ShutdownOnUIThread();
131 // Run the task after shutdown, but before deletion.
132 loop_.RunAllPending();
133 Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
134 url_blacklist_manager_.reset();
135 loop_.RunAllPending();
136 }
137
138 TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask2) {
139 // Update posts a BuildBlacklistTask to the FILE thread.
140 url_blacklist_manager_->UpdateNotMocked();
141 // Shutdown comes before the task is executed.
142 url_blacklist_manager_->ShutdownOnUIThread();
143 url_blacklist_manager_.reset();
144 // Run the task after shutdown and deletion.
145 loop_.RunAllPending();
146 }
147
148 TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask3) {
149 EXPECT_CALL(*url_blacklist_manager_, SetBlacklist(_)).Times(0);
150 // Update posts a BuildBlacklistTask to the FILE thread.
151 url_blacklist_manager_->UpdateNotMocked();
152 // Shutdown comes before the task is executed.
153 url_blacklist_manager_->ShutdownOnUIThread();
154 // Run the task after shutdown, but before deletion.
155 loop_.RunAllPending();
156 Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
157 url_blacklist_manager_.reset();
158 loop_.RunAllPending();
159 }
160
161 TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask4) {
162 EXPECT_CALL(*url_blacklist_manager_, SetBlacklist(_)).Times(0);
163
164 // This posts a task to the FILE thread.
165 url_blacklist_manager_->UpdateOnIO();
166 // But shutdown happens before it is done.
167 url_blacklist_manager_->ShutdownOnUIThread();
168 url_blacklist_manager_.reset();
169 loop_.RunAllPending();
170
171 Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
172 }
173
174 TEST_F(URLBlacklistManagerTest, ShutdownWithPendingTask5) {
175 EXPECT_CALL(*url_blacklist_manager_, SetBlacklist(_)).Times(0);
176
177 // This posts a task to the FILE thread.
178 url_blacklist_manager_->UpdateOnIO();
179 // But shutdown happens before it is done.
180 url_blacklist_manager_->ShutdownOnUIThread();
181 // This time, shutdown on UI is done but the object is still alive.
182 loop_.RunAllPending();
183 url_blacklist_manager_.reset();
184 loop_.RunAllPending();
185
186 Mock::VerifyAndClearExpectations(url_blacklist_manager_.get());
187 }
188
189 } // namespace
190
191 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698