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

Side by Side Diff: chrome/browser/extensions/api/mdns/mdns_api_unittest.cc

Issue 2874243003: [mDns] Make DnsSdRegistry a leaky singleton (Closed)
Patch Set: resolve code review comments from Mark Created 3 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/extensions/api/mdns/mdns_api.h" 5 #include "chrome/browser/extensions/api/mdns/mdns_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/extensions/extension_service.h" 15 #include "chrome/browser/extensions/extension_service.h"
16 #include "chrome/browser/extensions/extension_service_test_base.h" 16 #include "chrome/browser/extensions/extension_service_test_base.h"
17 #include "chrome/browser/extensions/test_extension_system.h" 17 #include "chrome/browser/extensions/test_extension_system.h"
18 #include "chrome/browser/media/router/discovery/mdns/mock_dns_sd_registry.h"
18 #include "chrome/common/extensions/api/mdns.h" 19 #include "chrome/common/extensions/api/mdns.h"
19 #include "content/public/browser/browser_context.h" 20 #include "content/public/browser/browser_context.h"
20 #include "content/public/test/mock_render_process_host.h" 21 #include "content/public/test/mock_render_process_host.h"
21 #include "extensions/browser/event_listener_map.h" 22 #include "extensions/browser/event_listener_map.h"
22 #include "extensions/browser/event_router_factory.h" 23 #include "extensions/browser/event_router_factory.h"
23 #include "extensions/browser/extension_prefs.h" 24 #include "extensions/browser/extension_prefs.h"
24 #include "extensions/browser/extension_registry.h" 25 #include "extensions/browser/extension_registry.h"
25 #include "extensions/common/manifest_constants.h" 26 #include "extensions/common/manifest_constants.h"
26 #include "testing/gmock/include/gmock/gmock.h" 27 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
28 29
30 using media_router::MockDnsSdRegistry;
29 using testing::_; 31 using testing::_;
30 using testing::Return; 32 using testing::Return;
31 using testing::ReturnRef; 33 using testing::ReturnRef;
32 34
33 namespace extensions { 35 namespace extensions {
34 namespace { 36 namespace {
35 37
36 const char kExtId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 38 const char kExtId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
37 const char kService1[] = "service1"; 39 const char kService1[] = "service1";
38 const char kService2[] = "service2"; 40 const char kService2[] = "service2";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 return base::MakeUnique<extensions::EventRouter>( 86 return base::MakeUnique<extensions::EventRouter>(
85 context, ExtensionPrefs::Get(context)); 87 context, ExtensionPrefs::Get(context));
86 } 88 }
87 89
88 // For ExtensionService interface when it requires a path that is not used. 90 // For ExtensionService interface when it requires a path that is not used.
89 base::FilePath bogus_file_pathname(const std::string& name) { 91 base::FilePath bogus_file_pathname(const std::string& name) {
90 return base::FilePath(FILE_PATH_LITERAL("//foobar_nonexistent")) 92 return base::FilePath(FILE_PATH_LITERAL("//foobar_nonexistent"))
91 .AppendASCII(name); 93 .AppendASCII(name);
92 } 94 }
93 95
94 class MockDnsSdRegistry : public media_router::DnsSdRegistry {
95 public:
96 explicit MockDnsSdRegistry(extensions::MDnsAPI* api) : api_(api) {}
97 virtual ~MockDnsSdRegistry() {}
98
99 MOCK_METHOD1(AddObserver, void(DnsSdObserver* observer));
100 MOCK_METHOD1(RemoveObserver, void(DnsSdObserver* observer));
101 MOCK_METHOD1(RegisterDnsSdListener, void(const std::string& service_type));
102 MOCK_METHOD1(UnregisterDnsSdListener, void(const std::string& service_type));
103 MOCK_METHOD1(Publish, void(const std::string&));
104 MOCK_METHOD0(ForceDiscovery, void(void));
105
106 void DispatchMDnsEvent(const std::string& service_type,
107 const DnsSdServiceList& services) {
108 api_->OnDnsSdEvent(service_type, services);
109 }
110
111 private:
112 media_router::DnsSdRegistry::DnsSdObserver* api_;
113 };
114
115 class MockEventRouter : public EventRouter { 96 class MockEventRouter : public EventRouter {
116 public: 97 public:
117 explicit MockEventRouter(content::BrowserContext* browser_context, 98 explicit MockEventRouter(content::BrowserContext* browser_context,
118 ExtensionPrefs* extension_prefs) 99 ExtensionPrefs* extension_prefs)
119 : EventRouter(browser_context, extension_prefs) {} 100 : EventRouter(browser_context, extension_prefs) {}
120 virtual ~MockEventRouter() {} 101 virtual ~MockEventRouter() {}
121 102
122 virtual void BroadcastEvent(std::unique_ptr<Event> event) { 103 virtual void BroadcastEvent(std::unique_ptr<Event> event) {
123 BroadcastEventPtr(event.get()); 104 BroadcastEventPtr(event.get());
124 } 105 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 MDnsAPI::GetFactoryInstance()->SetTestingFactory(browser_context(), 178 MDnsAPI::GetFactoryInstance()->SetTestingFactory(browser_context(),
198 GetMDnsFactory()); 179 GetMDnsFactory());
199 180
200 EventRouterFactory::GetInstance()->SetTestingFactory(browser_context(), 181 EventRouterFactory::GetInstance()->SetTestingFactory(browser_context(),
201 &BuildEventRouter); 182 &BuildEventRouter);
202 183
203 // Do some sanity checking 184 // Do some sanity checking
204 ASSERT_TRUE(MDnsAPI::Get(browser_context())); // constructs MDnsAPI 185 ASSERT_TRUE(MDnsAPI::Get(browser_context())); // constructs MDnsAPI
205 ASSERT_TRUE(EventRouter::Get(browser_context())); // constructs EventRouter 186 ASSERT_TRUE(EventRouter::Get(browser_context())); // constructs EventRouter
206 187
207 registry_ = new MockDnsSdRegistry(MDnsAPI::Get(browser_context())); 188 registry_ =
189 base::MakeUnique<MockDnsSdRegistry>(MDnsAPI::Get(browser_context()));
208 EXPECT_CALL(*dns_sd_registry(), 190 EXPECT_CALL(*dns_sd_registry(),
209 AddObserver(MDnsAPI::Get(browser_context()))) 191 AddObserver(MDnsAPI::Get(browser_context())))
210 .Times(1); 192 .Times(1);
211 MDnsAPI::Get(browser_context()) 193 MDnsAPI::Get(browser_context())
212 ->SetDnsSdRegistryForTesting( 194 ->SetDnsSdRegistryForTesting(registry_.get());
213 std::unique_ptr<media_router::DnsSdRegistry>(registry_));
214 195
215 render_process_host_.reset( 196 render_process_host_.reset(
216 new content::MockRenderProcessHost(browser_context())); 197 new content::MockRenderProcessHost(browser_context()));
217 } 198 }
218 199
219 // Returns the mDNS API factory function (mock vs. real) to use for the test. 200 // Returns the mDNS API factory function (mock vs. real) to use for the test.
220 virtual BrowserContextKeyedServiceFactory::TestingFactoryFunction 201 virtual BrowserContextKeyedServiceFactory::TestingFactoryFunction
221 GetMDnsFactory() { 202 GetMDnsFactory() {
222 return MDnsAPITestingFactoryFunction; 203 return MDnsAPITestingFactoryFunction;
223 } 204 }
224 205
225 void TearDown() override { 206 void TearDown() override {
226 EXPECT_CALL(*dns_sd_registry(), 207 MDnsAPI::Get(browser_context())->SetDnsSdRegistryForTesting(nullptr);
227 RemoveObserver(MDnsAPI::Get(browser_context())))
228 .Times(1);
229 render_process_host_.reset(); 208 render_process_host_.reset();
230 extensions::ExtensionServiceTestBase::TearDown(); 209 extensions::ExtensionServiceTestBase::TearDown();
231 } 210 }
232 211
233 virtual MockDnsSdRegistry* dns_sd_registry() { 212 virtual MockDnsSdRegistry* dns_sd_registry() { return registry_.get(); }
234 return registry_;
235 }
236 213
237 // Constructs an extension according to the parameters that matter most to 214 // Constructs an extension according to the parameters that matter most to
238 // MDnsAPI the local unit tests. 215 // MDnsAPI the local unit tests.
239 const scoped_refptr<extensions::Extension> CreateExtension( 216 const scoped_refptr<extensions::Extension> CreateExtension(
240 std::string name, 217 std::string name,
241 bool is_platform_app, 218 bool is_platform_app,
242 std::string extension_id) { 219 std::string extension_id) {
243 base::DictionaryValue manifest; 220 base::DictionaryValue manifest;
244 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0"); 221 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0");
245 manifest.SetString(extensions::manifest_keys::kName, name); 222 manifest.SetString(extensions::manifest_keys::kName, name);
(...skipping 12 matching lines...) Expand all
258 Extension::NO_FLAGS, 235 Extension::NO_FLAGS,
259 extension_id, 236 extension_id,
260 &error); 237 &error);
261 } 238 }
262 239
263 content::RenderProcessHost* render_process_host() const { 240 content::RenderProcessHost* render_process_host() const {
264 return render_process_host_.get(); 241 return render_process_host_.get();
265 } 242 }
266 243
267 private: 244 private:
268 // The registry is owned by MDnsAPI, but MDnsAPI does not have an accessor 245 std::unique_ptr<MockDnsSdRegistry> registry_;
269 // for it, so use a private member.
270 MockDnsSdRegistry* registry_;
271 246
272 std::unique_ptr<content::RenderProcessHost> render_process_host_; 247 std::unique_ptr<content::RenderProcessHost> render_process_host_;
273 }; 248 };
274 249
275 class MDnsAPIMaxServicesTest : public MDnsAPITest { 250 class MDnsAPIMaxServicesTest : public MDnsAPITest {
276 public: 251 public:
277 MockEventRouter* event_router() { 252 MockEventRouter* event_router() {
278 return static_cast<MockEventRouter*>(EventRouter::Get(browser_context())); 253 return static_cast<MockEventRouter*>(EventRouter::Get(browser_context()));
279 } 254 }
280 }; 255 };
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 render_process_host(), kExtId, filter, false); 413 render_process_host(), kExtId, filter, false);
439 414
440 EXPECT_CALL(*dns_sd_registry(), UnregisterDnsSdListener("_trex._tcp.local")); 415 EXPECT_CALL(*dns_sd_registry(), UnregisterDnsSdListener("_trex._tcp.local"));
441 EventRouter::Get(browser_context()) 416 EventRouter::Get(browser_context())
442 ->RemoveFilteredEventListener(api::mdns::OnServiceList::kEventName, 417 ->RemoveFilteredEventListener(api::mdns::OnServiceList::kEventName,
443 render_process_host(), kExtId, filter, 418 render_process_host(), kExtId, filter,
444 false); 419 false);
445 } 420 }
446 421
447 } // namespace extensions 422 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/mdns/mdns_api.cc ('k') | chrome/browser/extensions/api/mdns/mdns_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698