Enable Enterprise enrollment on desktop builds.
[chromium-blink-merge.git] / chrome / browser / extensions / api / mdns / mdns_apitest.cc
blob411d3ce6f87472fb5f5365aa4a1267947a4027df
1 // Copyright 2013 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/command_line.h"
6 #include "chrome/browser/extensions/api/mdns/mdns_api.h"
7 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/common/extensions/api/mdns.h"
10 #include "extensions/common/switches.h"
11 #include "testing/gmock/include/gmock/gmock.h"
13 using extensions::DnsSdRegistry;
14 using ::testing::A;
15 using ::testing::_;
17 namespace api = extensions::api;
19 namespace {
21 class MockDnsSdRegistry : public DnsSdRegistry {
22 public:
23 explicit MockDnsSdRegistry(extensions::MDnsAPI* api) : api_(api) {}
24 virtual ~MockDnsSdRegistry() {}
26 MOCK_METHOD1(AddObserver, void(DnsSdObserver* observer));
27 MOCK_METHOD1(RemoveObserver, void(DnsSdObserver* observer));
28 MOCK_METHOD1(RegisterDnsSdListener, void(std::string service_type));
29 MOCK_METHOD1(UnregisterDnsSdListener, void(std::string service_type));
31 void DispatchMDnsEvent(const std::string& service_type,
32 const DnsSdServiceList& services) {
33 api_->OnDnsSdEvent(service_type, services);
36 private:
37 extensions::DnsSdRegistry::DnsSdObserver* api_;
40 class MDnsAPITest : public ExtensionApiTest {
41 public:
42 MDnsAPITest() {}
44 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
45 ExtensionApiTest::SetUpCommandLine(command_line);
46 command_line->AppendSwitchASCII(
47 extensions::switches::kWhitelistedExtensionID,
48 "ddchlicdkolnonkihahngkmmmjnjlkkf");
51 void SetUpTestDnsSdRegistry() {
52 extensions::MDnsAPI* api = extensions::MDnsAPI::Get(profile());
53 dns_sd_registry_ = new MockDnsSdRegistry(api);
54 // Transfers ownership of the registry instance.
55 api->SetDnsSdRegistryForTesting(
56 make_scoped_ptr<DnsSdRegistry>(dns_sd_registry_).Pass());
59 protected:
60 MockDnsSdRegistry* dns_sd_registry_;
63 } // namespace
65 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest
66 // always return true without actually running the test. Remove when fixed.
67 #if defined(OS_WIN) && !defined(NDEBUG)
68 #define MAYBE_RegisterListener DISABLED_RegisterListener
69 #else
70 #define MAYBE_RegisterListener RegisterListener
71 #endif
72 // Test loading extension, registering an MDNS listener and dispatching events.
73 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterListener) {
74 const std::string& service_type = "_googlecast._tcp.local";
75 SetUpTestDnsSdRegistry();
77 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type))
78 .Times(1);
79 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type))
80 .Times(1);
81 EXPECT_CALL(*dns_sd_registry_,
82 RemoveObserver(A<extensions::DnsSdRegistry::DnsSdObserver*>()))
83 .Times(1);
85 EXPECT_TRUE(RunExtensionSubtest("mdns/api", "register_listener.html"))
86 << message_;
88 ResultCatcher catcher;
89 // Dispatch 3 events, one of which should not be sent to the test extension.
90 DnsSdRegistry::DnsSdServiceList services;
92 extensions::DnsSdService service;
93 service.service_name = service_type;
94 services.push_back(service);
96 dns_sd_registry_->DispatchMDnsEvent(service_type, services);
97 dns_sd_registry_->DispatchMDnsEvent("_uninteresting._tcp.local", services);
98 dns_sd_registry_->DispatchMDnsEvent(service_type, services);
99 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
102 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest
103 // always return true without actually running the test. Remove when fixed.
104 #if defined(OS_WIN) && !defined(NDEBUG)
105 #define MAYBE_RegisterMultipleListeners DISABLED_RegisterMultipleListeners
106 #else
107 #define MAYBE_RegisterMultipleListeners RegisterMultipleListeners
108 #endif
109 // Test loading extension and registering multiple listeners.
110 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterMultipleListeners) {
111 const std::string& service_type = "_googlecast._tcp.local";
112 const std::string& test_service_type = "_testing._tcp.local";
113 SetUpTestDnsSdRegistry();
115 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type))
116 .Times(1);
117 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type))
118 .Times(1);
119 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(test_service_type))
120 .Times(1);
121 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(test_service_type))
122 .Times(1);
123 EXPECT_CALL(*dns_sd_registry_,
124 RemoveObserver(A<extensions::DnsSdRegistry::DnsSdObserver*>()))
125 .Times(1);
127 EXPECT_TRUE(RunExtensionSubtest("mdns/api",
128 "register_multiple_listeners.html"))
129 << message_;
131 ResultCatcher catcher;
132 DnsSdRegistry::DnsSdServiceList services;
134 extensions::DnsSdService service;
135 service.service_name = service_type;
136 services.push_back(service);
138 dns_sd_registry_->DispatchMDnsEvent(service_type, services);
139 dns_sd_registry_->DispatchMDnsEvent(test_service_type, services);
140 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();