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

Side by Side Diff: chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc

Issue 7033018: Handler settings page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove in_unit_test_ Created 9 years, 7 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/custom_handlers/protocol_handler_registry.h" 5 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
6 6
7 #include "base/scoped_ptr.h" 7 #include "base/scoped_ptr.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/custom_handlers/protocol_handler.h" 9 #include "chrome/browser/custom_handlers/protocol_handler.h"
10 #include "chrome/test/testing_browser_process.h" 10 #include "chrome/test/testing_browser_process.h"
11 #include "chrome/test/testing_browser_process_test.h" 11 #include "chrome/test/testing_browser_process_test.h"
12 #include "chrome/test/testing_browser_process_test.h" 12 #include "chrome/test/testing_browser_process_test.h"
13 #include "chrome/test/testing_pref_service.h" 13 #include "chrome/test/testing_pref_service.h"
14 #include "chrome/test/testing_profile.h" 14 #include "chrome/test/testing_profile.h"
15 #include "content/browser/browser_thread.h"
16 #include "content/browser/renderer_host/test_render_view_host.h"
15 #include "content/common/notification_observer.h" 17 #include "content/common/notification_observer.h"
16 #include "content/common/notification_registrar.h" 18 #include "content/common/notification_registrar.h"
17 #include "content/common/notification_service.h" 19 #include "content/common/notification_service.h"
18 20
19 class FakeDelegate : public ProtocolHandlerRegistry::Delegate { 21 class FakeDelegate : public ProtocolHandlerRegistry::Delegate {
20 public: 22 public:
21 virtual ~FakeDelegate() { } 23 virtual ~FakeDelegate() { }
22 virtual void RegisterExternalHandler(const std::string& protocol) { 24 virtual void RegisterExternalHandler(const std::string& protocol) {
23 ASSERT_TRUE( 25 ASSERT_TRUE(
24 registered_protocols_.find(protocol) == registered_protocols_.end()); 26 registered_protocols_.find(protocol) == registered_protocols_.end());
25 registered_protocols_.insert(protocol); 27 registered_protocols_.insert(protocol);
26 } 28 }
27 virtual void DeregisterExternalHandler(const std::string& protocol) { 29 virtual void DeregisterExternalHandler(const std::string& protocol) {
28 registered_protocols_.erase(protocol); 30 registered_protocols_.erase(protocol);
29 } 31 }
30 32
31 bool IsExternalHandlerRegistered(const std::string& protocol) { 33 bool IsExternalHandlerRegistered(const std::string& protocol) {
32 return registered_protocols_.find(protocol) != registered_protocols_.end(); 34 return registered_protocols_.find(protocol) != registered_protocols_.end();
33 } 35 }
34 36
35 void Reset() { 37 void Reset() {
36 registered_protocols_.clear(); 38 registered_protocols_.clear();
37 } 39 }
38 40
39 private: 41 private:
40 std::set<std::string> registered_protocols_; 42 std::set<std::string> registered_protocols_;
41 }; 43 };
42 44
45 class NotificationCounter : public NotificationObserver {
46 public:
47 NotificationCounter()
48 : events_(0),
49 notification_registrar_() {
50 notification_registrar_.Add(this,
51 NotificationType::PROTOCOL_HANDLER_REGISTRY_CHANGED,
52 NotificationService::AllSources());
53 }
43 54
44 class ProtocolHandlerRegistryTest : public testing::Test { 55 ~NotificationCounter() {
56 notification_registrar_.Remove(this,
57 NotificationType::PROTOCOL_HANDLER_REGISTRY_CHANGED,
58 NotificationService::AllSources());
59 }
60
61 int events() { return events_; }
62 virtual void Observe(NotificationType type,
63 const NotificationSource& source,
64 const NotificationDetails& details) {
65 ++events_;
66 }
67
68 int events_;
69 NotificationRegistrar notification_registrar_;
70 };
71
72
73 class ProtocolHandlerRegistryTest : public RenderViewHostTestHarness {
45 protected: 74 protected:
46 ProtocolHandlerRegistryTest() 75 ProtocolHandlerRegistryTest()
47 : test_protocol_handler_(CreateProtocolHandler("test", "test")) {} 76 : ui_thread_(BrowserThread::UI, MessageLoop::current()),
77 test_protocol_handler_(CreateProtocolHandler("test", "test")) {}
48 78
49 FakeDelegate* delegate() const { return delegate_; } 79 FakeDelegate* delegate() const { return delegate_; }
50 TestingProfile* profile() const { return profile_.get(); } 80 TestingProfile* profile() const { return profile_.get(); }
51 PrefService* pref_service() const { return profile_->GetPrefs(); } 81 PrefService* pref_service() const { return profile_->GetPrefs(); }
52 ProtocolHandlerRegistry* registry() const { return registry_.get(); } 82 ProtocolHandlerRegistry* registry() const { return registry_.get(); }
53 const ProtocolHandler& test_protocol_handler() const { 83 const ProtocolHandler& test_protocol_handler() const {
54 return test_protocol_handler_; 84 return test_protocol_handler_;
55 } 85 }
56 86
57 ProtocolHandler CreateProtocolHandler(const std::string& protocol, 87 ProtocolHandler CreateProtocolHandler(const std::string& protocol,
(...skipping 19 matching lines...) Expand all
77 profile_.reset(new TestingProfile()); 107 profile_.reset(new TestingProfile());
78 profile_->SetPrefService(new TestingPrefService()); 108 profile_->SetPrefService(new TestingPrefService());
79 delegate_ = new FakeDelegate(); 109 delegate_ = new FakeDelegate();
80 registry_ = new ProtocolHandlerRegistry(profile(), delegate()); 110 registry_ = new ProtocolHandlerRegistry(profile(), delegate());
81 registry_->Load(); 111 registry_->Load();
82 test_protocol_handler_ = CreateProtocolHandler("test", GURL("http://test.com /%s"), "Test"); 112 test_protocol_handler_ = CreateProtocolHandler("test", GURL("http://test.com /%s"), "Test");
83 113
84 ProtocolHandlerRegistry::RegisterPrefs(pref_service()); 114 ProtocolHandlerRegistry::RegisterPrefs(pref_service());
85 } 115 }
86 116
117 BrowserThread ui_thread_;
87 FakeDelegate* delegate_; 118 FakeDelegate* delegate_;
88 scoped_ptr<TestingProfile> profile_; 119 scoped_ptr<TestingProfile> profile_;
89 scoped_refptr<ProtocolHandlerRegistry> registry_; 120 scoped_refptr<ProtocolHandlerRegistry> registry_;
90 ProtocolHandler test_protocol_handler_; 121 ProtocolHandler test_protocol_handler_;
91 }; 122 };
92 123
93 TEST_F(ProtocolHandlerRegistryTest, AcceptProtocolHandlerHandlesProtocol) { 124 TEST_F(ProtocolHandlerRegistryTest, AcceptProtocolHandlerHandlesProtocol) {
94 ASSERT_FALSE(registry()->IsHandledProtocol("test")); 125 ASSERT_FALSE(registry()->IsHandledProtocol("test"));
95 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 126 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler());
96 ASSERT_TRUE(registry()->IsHandledProtocol("test")); 127 ASSERT_TRUE(registry()->IsHandledProtocol("test"));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 registry()->Enable(); 165 registry()->Enable();
135 ASSERT_TRUE(registry()->enabled()); 166 ASSERT_TRUE(registry()->enabled());
136 } 167 }
137 168
138 TEST_F(ProtocolHandlerRegistryTest, 169 TEST_F(ProtocolHandlerRegistryTest,
139 DisallowRegisteringExternallyHandledProtocols) { 170 DisallowRegisteringExternallyHandledProtocols) {
140 delegate()->RegisterExternalHandler("test"); 171 delegate()->RegisterExternalHandler("test");
141 ASSERT_FALSE(registry()->CanSchemeBeOverridden("test")); 172 ASSERT_FALSE(registry()->CanSchemeBeOverridden("test"));
142 } 173 }
143 174
175 TEST_F(ProtocolHandlerRegistryTest, RemovingHandlerMeansItCanBeAddedAgain) {
176 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler());
177 ASSERT_TRUE(registry()->CanSchemeBeOverridden("test"));
178 registry()->RemoveHandler(test_protocol_handler());
179 ASSERT_TRUE(registry()->CanSchemeBeOverridden("test"));
180 }
181
144 TEST_F(ProtocolHandlerRegistryTest, TestStartsAsDefault) { 182 TEST_F(ProtocolHandlerRegistryTest, TestStartsAsDefault) {
145 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 183 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler());
146 ASSERT_TRUE(registry()->IsDefault(test_protocol_handler())); 184 ASSERT_TRUE(registry()->IsDefault(test_protocol_handler()));
147 } 185 }
148 186
149 TEST_F(ProtocolHandlerRegistryTest, 187 TEST_F(ProtocolHandlerRegistryTest,
150 TestClearDefaultDoesntClearImplicitDefault) { 188 TestClearDefaultDoesntClearImplicitDefault) {
151 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 189 registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler());
152 registry()->ClearDefault("test"); 190 registry()->ClearDefault("test");
153 ASSERT_TRUE(registry()->IsDefault(test_protocol_handler())); 191 ASSERT_TRUE(registry()->IsDefault(test_protocol_handler()));
154 } 192 }
155 193
156 TEST_F(ProtocolHandlerRegistryTest, TestClearDefault) { 194 TEST_F(ProtocolHandlerRegistryTest, TestClearDefault) {
157 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 195 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
158 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 196 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
159 registry()->OnAcceptRegisterProtocolHandler(ph1); 197 registry()->OnAcceptRegisterProtocolHandler(ph1);
160 registry()->OnAcceptRegisterProtocolHandler(ph2); 198 registry()->OnAcceptRegisterProtocolHandler(ph2);
161 199
162 registry()->SetDefault(ph2); 200 registry()->SetDefault(ph1);
163 registry()->ClearDefault("test"); 201 registry()->ClearDefault("test");
164 ASSERT_FALSE(registry()->IsDefault(ph2)); 202 ASSERT_FALSE(registry()->IsDefault(ph1));
203 ASSERT_TRUE(registry()->IsDefault(ph2));
165 } 204 }
166 205
167 TEST_F(ProtocolHandlerRegistryTest, TestGetHandlerFor) { 206 TEST_F(ProtocolHandlerRegistryTest, TestGetHandlerFor) {
168 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 207 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
169 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 208 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
170 registry()->OnAcceptRegisterProtocolHandler(ph1); 209 registry()->OnAcceptRegisterProtocolHandler(ph1);
171 registry()->OnAcceptRegisterProtocolHandler(ph2); 210 registry()->OnAcceptRegisterProtocolHandler(ph2);
172 211
173 registry()->SetDefault(ph2); 212 registry()->SetDefault(ph2);
174 ASSERT_EQ(ph2, registry()->GetHandlerFor("test")); 213 ASSERT_EQ(ph2, registry()->GetHandlerFor("test"));
175 ASSERT_TRUE(registry()->HasDefault("test")); 214 ASSERT_TRUE(registry()->HasDefault("test"));
176 } 215 }
177 216
178 TEST_F(ProtocolHandlerRegistryTest, TestMultipleHandlersClearsDefault) { 217 TEST_F(ProtocolHandlerRegistryTest, TestMostRecentHandlerIsDefault) {
179 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 218 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
180 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 219 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
181 registry()->OnAcceptRegisterProtocolHandler(ph1); 220 registry()->OnAcceptRegisterProtocolHandler(ph1);
182 registry()->OnAcceptRegisterProtocolHandler(ph2); 221 registry()->OnAcceptRegisterProtocolHandler(ph2);
183 ASSERT_FALSE(registry()->IsDefault(ph1)); 222 ASSERT_FALSE(registry()->IsDefault(ph1));
184 ASSERT_FALSE(registry()->IsDefault(ph2)); 223 ASSERT_TRUE(registry()->IsDefault(ph2));
185 } 224 }
186 225
187 TEST_F(ProtocolHandlerRegistryTest, TestSetDefault) { 226 TEST_F(ProtocolHandlerRegistryTest, TestSetDefault) {
188 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 227 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
189 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 228 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
190 registry()->OnAcceptRegisterProtocolHandler(ph1); 229 registry()->OnAcceptRegisterProtocolHandler(ph1);
191 registry()->OnAcceptRegisterProtocolHandler(ph2); 230 registry()->OnAcceptRegisterProtocolHandler(ph2);
192 231
193 registry()->SetDefault(ph1); 232 registry()->SetDefault(ph1);
194 ASSERT_TRUE(registry()->IsDefault(ph1)); 233 ASSERT_TRUE(registry()->IsDefault(ph1));
(...skipping 18 matching lines...) Expand all
213 ASSERT_TRUE(registry()->IsDefault(ph2)); 252 ASSERT_TRUE(registry()->IsDefault(ph2));
214 } 253 }
215 254
216 TEST_F(ProtocolHandlerRegistryTest, TestRemoveHandler) { 255 TEST_F(ProtocolHandlerRegistryTest, TestRemoveHandler) {
217 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 256 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
218 registry()->OnAcceptRegisterProtocolHandler(ph1); 257 registry()->OnAcceptRegisterProtocolHandler(ph1);
219 registry()->OnAcceptRegisterProtocolHandler(ph1); 258 registry()->OnAcceptRegisterProtocolHandler(ph1);
220 259
221 registry()->RemoveHandler(ph1); 260 registry()->RemoveHandler(ph1);
222 ASSERT_FALSE(registry()->IsRegistered(ph1)); 261 ASSERT_FALSE(registry()->IsRegistered(ph1));
223 ASSERT_FALSE(registry()->HasHandler("test")); 262 ASSERT_FALSE(registry()->IsHandledProtocol("test"));
224 } 263 }
225 264
226 TEST_F(ProtocolHandlerRegistryTest, TestIsRegistered) { 265 TEST_F(ProtocolHandlerRegistryTest, TestIsRegistered) {
227 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 266 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
228 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 267 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
229 registry()->OnAcceptRegisterProtocolHandler(ph1); 268 registry()->OnAcceptRegisterProtocolHandler(ph1);
230 registry()->OnAcceptRegisterProtocolHandler(ph2); 269 registry()->OnAcceptRegisterProtocolHandler(ph2);
231 270
232 ASSERT_TRUE(registry()->IsRegistered(ph1)); 271 ASSERT_TRUE(registry()->IsRegistered(ph1));
233 } 272 }
234 273
235 TEST_F(ProtocolHandlerRegistryTest, TestRemoveHandlerRemovesDefault) { 274 TEST_F(ProtocolHandlerRegistryTest, TestRemoveHandlerRemovesDefault) {
236 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 275 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
237 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 276 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
238 ProtocolHandler ph3 = CreateProtocolHandler("test", "test3"); 277 ProtocolHandler ph3 = CreateProtocolHandler("test", "test3");
278
239 registry()->OnAcceptRegisterProtocolHandler(ph1); 279 registry()->OnAcceptRegisterProtocolHandler(ph1);
240 registry()->OnAcceptRegisterProtocolHandler(ph2); 280 registry()->OnAcceptRegisterProtocolHandler(ph2);
241 registry()->OnAcceptRegisterProtocolHandler(ph3); 281 registry()->OnAcceptRegisterProtocolHandler(ph3);
242 282
243 registry()->SetDefault(ph1); 283 registry()->SetDefault(ph1);
244 registry()->RemoveHandler(ph1); 284 registry()->RemoveHandler(ph1);
245 ASSERT_FALSE(registry()->IsDefault(ph1)); 285 ASSERT_FALSE(registry()->IsDefault(ph1));
246 } 286 }
287
288 TEST_F(ProtocolHandlerRegistryTest, TestGetHandlersFor) {
289 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
290 ProtocolHandler ph2 = CreateProtocolHandler("test", "test2");
291 ProtocolHandler ph3 = CreateProtocolHandler("test", "test3");
292 registry()->OnAcceptRegisterProtocolHandler(ph1);
293 registry()->OnAcceptRegisterProtocolHandler(ph2);
294 registry()->OnAcceptRegisterProtocolHandler(ph3);
295
296 const ProtocolHandlerRegistry::ProtocolHandlerList* handlers =
297 registry()->GetHandlersFor("test");
298 ASSERT_TRUE(handlers != NULL);
299 ASSERT_EQ(ph1, (*handlers)[0]);
300 ASSERT_EQ(ph2, (*handlers)[1]);
301 ASSERT_EQ(ph3, (*handlers)[2]);
302 }
303
304 TEST_F(ProtocolHandlerRegistryTest, TestGetHandledProtocols) {
305 std::vector<std::string> protocols;
306 registry()->GetHandledProtocols(&protocols);
307 ASSERT_EQ((size_t) 0, protocols.size());
308
309 registry()->GetHandlersFor("test");
310
311 protocols.clear();
312 registry()->GetHandledProtocols(&protocols);
313 ASSERT_EQ((size_t) 0, protocols.size());
314 }
315
316 TEST_F(ProtocolHandlerRegistryTest, TestIsHandledProtocol) {
317 registry()->GetHandlersFor("test");
318 ASSERT_FALSE(registry()->IsHandledProtocol("test"));
319 }
320
321 TEST_F(ProtocolHandlerRegistryTest, TestNotifications) {
322 ProtocolHandler ph1 = CreateProtocolHandler("test", "test1");
323 NotificationCounter counter;
324
325 registry()->OnAcceptRegisterProtocolHandler(ph1);
326 ASSERT_EQ(1, counter.events());
327
328 registry()->Disable();
329 ASSERT_EQ(2, counter.events());
330
331 registry()->Enable();
332 ASSERT_EQ(3, counter.events());
333
334 registry()->RemoveHandler(ph1);
335 ASSERT_EQ(4, counter.events());
336 }
OLDNEW
« no previous file with comments | « chrome/browser/custom_handlers/protocol_handler_registry.cc ('k') | chrome/browser/resources/options/content_settings.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698