Make default apps cache multiprofile friendly
[chromium-blink-merge.git] / chrome / browser / extensions / blacklist_unittest.cc
blob1ccaf4cdb74c0a418851febe332ca3843d7fad80
1 // Copyright 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.
5 #include "base/bind.h"
6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h"
8 #include "chrome/browser/extensions/blacklist.h"
9 #include "chrome/browser/extensions/extension_prefs.h"
10 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h"
11 #include "chrome/browser/extensions/test_blacklist.h"
12 #include "chrome/browser/extensions/test_extension_prefs.h"
13 #include "content/public/test/test_browser_thread.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 namespace extensions {
17 namespace {
19 class BlacklistTest : public testing::Test {
20 public:
21 BlacklistTest()
22 : prefs_(message_loop_.message_loop_proxy().get()),
23 ui_thread_(content::BrowserThread::UI, &message_loop_),
24 io_thread_(content::BrowserThread::IO, &message_loop_),
25 safe_browsing_database_manager_(new FakeSafeBrowsingDatabaseManager()),
26 scoped_blacklist_database_manager_(safe_browsing_database_manager_),
27 blacklist_(prefs_.prefs()) {}
29 bool IsBlacklisted(const Extension* extension) {
30 return TestBlacklist(&blacklist_).IsBlacklisted(extension->id());
33 protected:
34 base::MessageLoop message_loop_;
36 TestExtensionPrefs prefs_;
38 content::TestBrowserThread ui_thread_;
39 content::TestBrowserThread io_thread_;
41 scoped_refptr<FakeSafeBrowsingDatabaseManager>
42 safe_browsing_database_manager_;
43 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_database_manager_;
45 Blacklist blacklist_;
48 TEST_F(BlacklistTest, SetFromUpdater) {
49 scoped_refptr<const Extension> extension_a = prefs_.AddExtension("a");
50 scoped_refptr<const Extension> extension_b = prefs_.AddExtension("b");
51 scoped_refptr<const Extension> extension_c = prefs_.AddExtension("c");
52 scoped_refptr<const Extension> extension_d = prefs_.AddExtension("d");
54 // c, d, start blacklisted.
55 prefs_.prefs()->SetExtensionBlacklisted(extension_c->id(), true);
56 prefs_.prefs()->SetExtensionBlacklisted(extension_d->id(), true);
58 EXPECT_FALSE(IsBlacklisted(extension_a.get()));
59 EXPECT_FALSE(IsBlacklisted(extension_b.get()));
60 EXPECT_TRUE(IsBlacklisted(extension_c.get()));
61 EXPECT_TRUE(IsBlacklisted(extension_d.get()));
63 // Mix up the blacklist.
65 std::vector<std::string> blacklist;
66 blacklist.push_back(extension_b->id());
67 blacklist.push_back(extension_c->id());
68 blacklist_.SetFromUpdater(blacklist, "1");
70 EXPECT_FALSE(IsBlacklisted(extension_a.get()));
71 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
72 EXPECT_TRUE(IsBlacklisted(extension_c.get()));
73 EXPECT_FALSE(IsBlacklisted(extension_d.get()));
75 // No-op, just in case.
77 std::vector<std::string> blacklist;
78 blacklist.push_back(extension_b->id());
79 blacklist.push_back(extension_c->id());
80 blacklist_.SetFromUpdater(blacklist, "2");
82 EXPECT_FALSE(IsBlacklisted(extension_a.get()));
83 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
84 EXPECT_TRUE(IsBlacklisted(extension_c.get()));
85 EXPECT_FALSE(IsBlacklisted(extension_d.get()));
87 // Strictly increase the blacklist.
89 std::vector<std::string> blacklist;
90 blacklist.push_back(extension_a->id());
91 blacklist.push_back(extension_b->id());
92 blacklist.push_back(extension_c->id());
93 blacklist.push_back(extension_d->id());
94 blacklist_.SetFromUpdater(blacklist, "3");
96 EXPECT_TRUE(IsBlacklisted(extension_a.get()));
97 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
98 EXPECT_TRUE(IsBlacklisted(extension_c.get()));
99 EXPECT_TRUE(IsBlacklisted(extension_d.get()));
101 // Strictly decrease the blacklist.
103 std::vector<std::string> blacklist;
104 blacklist.push_back(extension_a->id());
105 blacklist.push_back(extension_b->id());
106 blacklist_.SetFromUpdater(blacklist, "4");
108 EXPECT_TRUE(IsBlacklisted(extension_a.get()));
109 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
110 EXPECT_FALSE(IsBlacklisted(extension_c.get()));
111 EXPECT_FALSE(IsBlacklisted(extension_d.get()));
113 // Clear the blacklist.
115 std::vector<std::string> blacklist;
116 blacklist_.SetFromUpdater(blacklist, "5");
118 EXPECT_FALSE(IsBlacklisted(extension_a.get()));
119 EXPECT_FALSE(IsBlacklisted(extension_b.get()));
120 EXPECT_FALSE(IsBlacklisted(extension_c.get()));
121 EXPECT_FALSE(IsBlacklisted(extension_d.get()));
124 void Assign(std::set<std::string> *to, const std::set<std::string>& from) {
125 *to = from;
128 TEST_F(BlacklistTest, OnlyIncludesRequestedIDs) {
129 scoped_refptr<const Extension> extension_a = prefs_.AddExtension("a");
130 scoped_refptr<const Extension> extension_b = prefs_.AddExtension("b");
131 scoped_refptr<const Extension> extension_c = prefs_.AddExtension("c");
134 std::vector<std::string> blacklist;
135 blacklist.push_back(extension_a->id());
136 blacklist.push_back(extension_b->id());
137 blacklist_.SetFromUpdater(blacklist, "1");
138 base::RunLoop().RunUntilIdle();
141 std::set<std::string> blacklist_actual;
143 std::set<std::string> blacklist_query;
144 blacklist_query.insert(extension_a->id());
145 blacklist_query.insert(extension_c->id());
146 blacklist_.GetBlacklistedIDs(blacklist_query,
147 base::Bind(&Assign, &blacklist_actual));
148 base::RunLoop().RunUntilIdle();
151 std::set<std::string> blacklist_expected;
152 blacklist_expected.insert(extension_a->id());
153 EXPECT_EQ(blacklist_expected, blacklist_actual);
156 TEST_F(BlacklistTest, PrefsVsSafeBrowsing) {
157 scoped_refptr<const Extension> extension_a = prefs_.AddExtension("a");
158 scoped_refptr<const Extension> extension_b = prefs_.AddExtension("b");
159 scoped_refptr<const Extension> extension_c = prefs_.AddExtension("c");
161 // Prefs have a and b blacklisted, safebrowsing has b and c.
162 prefs_.prefs()->SetExtensionBlacklisted(extension_a->id(), true);
163 prefs_.prefs()->SetExtensionBlacklisted(extension_b->id(), true);
165 std::set<std::string> bc;
166 bc.insert(extension_b->id());
167 bc.insert(extension_c->id());
168 safe_browsing_database_manager_->set_unsafe_ids(bc);
171 // The manager is still disabled at this point, so c won't be blacklisted.
172 EXPECT_TRUE(IsBlacklisted(extension_a.get()));
173 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
174 EXPECT_FALSE(IsBlacklisted(extension_c.get()));
176 // Now it should be.
177 safe_browsing_database_manager_->set_enabled(true);
178 EXPECT_TRUE(IsBlacklisted(extension_a.get()));
179 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
180 EXPECT_TRUE(IsBlacklisted(extension_c.get()));
182 // Corner case: nothing in safebrowsing (but still enabled).
183 safe_browsing_database_manager_->set_unsafe_ids(std::set<std::string>());
184 EXPECT_TRUE(IsBlacklisted(extension_a.get()));
185 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
186 EXPECT_FALSE(IsBlacklisted(extension_c.get()));
188 // Corner case: nothing in prefs.
189 prefs_.prefs()->SetExtensionBlacklisted(extension_a->id(), false);
190 prefs_.prefs()->SetExtensionBlacklisted(extension_b->id(), false);
192 std::set<std::string> bc;
193 bc.insert(extension_b->id());
194 bc.insert(extension_c->id());
195 safe_browsing_database_manager_->set_unsafe_ids(bc);
197 EXPECT_FALSE(IsBlacklisted(extension_a.get()));
198 EXPECT_TRUE(IsBlacklisted(extension_b.get()));
199 EXPECT_TRUE(IsBlacklisted(extension_c.get()));
202 } // namespace extensions
203 } // namespace