| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/memory/ptr_util.h" | 6 #include "base/memory/ptr_util.h" |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 #include "chrome/browser/extensions/api/mdns/mdns_api.h" | 8 #include "chrome/browser/extensions/api/mdns/mdns_api.h" |
| 9 #include "chrome/browser/extensions/extension_apitest.h" | 9 #include "chrome/browser/extensions/extension_apitest.h" |
| 10 #include "chrome/browser/extensions/extension_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
| 11 #include "chrome/common/extensions/api/mdns.h" | 11 #include "chrome/common/extensions/api/mdns.h" |
| 12 #include "extensions/common/switches.h" | 12 #include "extensions/common/switches.h" |
| 13 #include "extensions/test/result_catcher.h" | 13 #include "extensions/test/result_catcher.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 | 15 |
| 16 using extensions::DnsSdRegistry; | |
| 17 using ::testing::_; | 16 using ::testing::_; |
| 18 using ::testing::A; | 17 using ::testing::A; |
| 18 using DnsSdRegistry = media_router::DnsSdRegistry; |
| 19 | 19 |
| 20 namespace api = extensions::api; | 20 namespace api = extensions::api; |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 class MockDnsSdRegistry : public DnsSdRegistry { | 24 class MockDnsSdRegistry : public DnsSdRegistry { |
| 25 public: | 25 public: |
| 26 explicit MockDnsSdRegistry(extensions::MDnsAPI* api) : api_(api) {} | 26 explicit MockDnsSdRegistry(extensions::MDnsAPI* api) : api_(api) {} |
| 27 virtual ~MockDnsSdRegistry() {} | 27 virtual ~MockDnsSdRegistry() {} |
| 28 | 28 |
| 29 MOCK_METHOD1(AddObserver, void(DnsSdObserver* observer)); | 29 MOCK_METHOD1(AddObserver, void(DnsSdObserver* observer)); |
| 30 MOCK_METHOD1(RemoveObserver, void(DnsSdObserver* observer)); | 30 MOCK_METHOD1(RemoveObserver, void(DnsSdObserver* observer)); |
| 31 MOCK_METHOD1(RegisterDnsSdListener, void(const std::string& service_type)); | 31 MOCK_METHOD1(RegisterDnsSdListener, void(const std::string& service_type)); |
| 32 MOCK_METHOD1(UnregisterDnsSdListener, void(const std::string& service_type)); | 32 MOCK_METHOD1(UnregisterDnsSdListener, void(const std::string& service_type)); |
| 33 MOCK_METHOD0(ForceDiscovery, void(void)); | 33 MOCK_METHOD0(ForceDiscovery, void(void)); |
| 34 | 34 |
| 35 void DispatchMDnsEvent(const std::string& service_type, | 35 void DispatchMDnsEvent(const std::string& service_type, |
| 36 const DnsSdServiceList& services) { | 36 const DnsSdServiceList& services) { |
| 37 api_->OnDnsSdEvent(service_type, services); | 37 api_->OnDnsSdEvent(service_type, services); |
| 38 } | 38 } |
| 39 | 39 |
| 40 private: | 40 private: |
| 41 extensions::DnsSdRegistry::DnsSdObserver* api_; | 41 DnsSdRegistry::DnsSdObserver* api_; |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 class MDnsAPITest : public ExtensionApiTest { | 44 class MDnsAPITest : public ExtensionApiTest { |
| 45 public: | 45 public: |
| 46 MDnsAPITest() {} | 46 MDnsAPITest() {} |
| 47 | 47 |
| 48 void SetUpCommandLine(base::CommandLine* command_line) override { | 48 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 49 ExtensionApiTest::SetUpCommandLine(command_line); | 49 ExtensionApiTest::SetUpCommandLine(command_line); |
| 50 command_line->AppendSwitchASCII( | 50 command_line->AppendSwitchASCII( |
| 51 extensions::switches::kWhitelistedExtensionID, | 51 extensions::switches::kWhitelistedExtensionID, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 78 // Test loading extension, registering an MDNS listener and dispatching events. | 78 // Test loading extension, registering an MDNS listener and dispatching events. |
| 79 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterListener) { | 79 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterListener) { |
| 80 const std::string& service_type = "_googlecast._tcp.local"; | 80 const std::string& service_type = "_googlecast._tcp.local"; |
| 81 SetUpTestDnsSdRegistry(); | 81 SetUpTestDnsSdRegistry(); |
| 82 | 82 |
| 83 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)) | 83 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)) |
| 84 .Times(1); | 84 .Times(1); |
| 85 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) | 85 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) |
| 86 .Times(1); | 86 .Times(1); |
| 87 EXPECT_CALL(*dns_sd_registry_, | 87 EXPECT_CALL(*dns_sd_registry_, |
| 88 RemoveObserver(A<extensions::DnsSdRegistry::DnsSdObserver*>())) | 88 RemoveObserver(A<DnsSdRegistry::DnsSdObserver*>())) |
| 89 .Times(1); | 89 .Times(1); |
| 90 | 90 |
| 91 EXPECT_TRUE(RunExtensionSubtest("mdns/api", "register_listener.html")) | 91 EXPECT_TRUE(RunExtensionSubtest("mdns/api", "register_listener.html")) |
| 92 << message_; | 92 << message_; |
| 93 | 93 |
| 94 extensions::ResultCatcher catcher; | 94 extensions::ResultCatcher catcher; |
| 95 // Dispatch 3 events, one of which should not be sent to the test extension. | 95 // Dispatch 3 events, one of which should not be sent to the test extension. |
| 96 DnsSdRegistry::DnsSdServiceList services; | 96 DnsSdRegistry::DnsSdServiceList services; |
| 97 | 97 |
| 98 extensions::DnsSdService service; | 98 media_router::DnsSdService service; |
| 99 service.service_name = service_type; | 99 service.service_name = service_type; |
| 100 services.push_back(service); | 100 services.push_back(service); |
| 101 | 101 |
| 102 dns_sd_registry_->DispatchMDnsEvent(service_type, services); | 102 dns_sd_registry_->DispatchMDnsEvent(service_type, services); |
| 103 dns_sd_registry_->DispatchMDnsEvent("_uninteresting._tcp.local", services); | 103 dns_sd_registry_->DispatchMDnsEvent("_uninteresting._tcp.local", services); |
| 104 dns_sd_registry_->DispatchMDnsEvent(service_type, services); | 104 dns_sd_registry_->DispatchMDnsEvent(service_type, services); |
| 105 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 105 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 106 } | 106 } |
| 107 | 107 |
| 108 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest | 108 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest |
| 109 // always return true without actually running the test. Remove when fixed. | 109 // always return true without actually running the test. Remove when fixed. |
| 110 #if defined(OS_WIN) && !defined(NDEBUG) | 110 #if defined(OS_WIN) && !defined(NDEBUG) |
| 111 #define MAYBE_ForceDiscovery DISABLED_ForceDiscovery | 111 #define MAYBE_ForceDiscovery DISABLED_ForceDiscovery |
| 112 #else | 112 #else |
| 113 #define MAYBE_ForceDiscovery ForceDiscovery | 113 #define MAYBE_ForceDiscovery ForceDiscovery |
| 114 #endif | 114 #endif |
| 115 // Test loading extension, registering an MDNS listener and dispatching events. | 115 // Test loading extension, registering an MDNS listener and dispatching events. |
| 116 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_ForceDiscovery) { | 116 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_ForceDiscovery) { |
| 117 const std::string& service_type = "_googlecast._tcp.local"; | 117 const std::string& service_type = "_googlecast._tcp.local"; |
| 118 SetUpTestDnsSdRegistry(); | 118 SetUpTestDnsSdRegistry(); |
| 119 | 119 |
| 120 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)).Times(1); | 120 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)).Times(1); |
| 121 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) | 121 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) |
| 122 .Times(1); | 122 .Times(1); |
| 123 EXPECT_CALL(*dns_sd_registry_, ForceDiscovery()).Times(1); | 123 EXPECT_CALL(*dns_sd_registry_, ForceDiscovery()).Times(1); |
| 124 EXPECT_CALL(*dns_sd_registry_, | 124 EXPECT_CALL(*dns_sd_registry_, |
| 125 RemoveObserver(A<extensions::DnsSdRegistry::DnsSdObserver*>())) | 125 RemoveObserver(A<DnsSdRegistry::DnsSdObserver*>())) |
| 126 .Times(1); | 126 .Times(1); |
| 127 | 127 |
| 128 EXPECT_TRUE(RunExtensionSubtest("mdns/api", "force_discovery.html")) | 128 EXPECT_TRUE(RunExtensionSubtest("mdns/api", "force_discovery.html")) |
| 129 << message_; | 129 << message_; |
| 130 | 130 |
| 131 extensions::ResultCatcher catcher; | 131 extensions::ResultCatcher catcher; |
| 132 DnsSdRegistry::DnsSdServiceList services; | 132 DnsSdRegistry::DnsSdServiceList services; |
| 133 | 133 |
| 134 extensions::DnsSdService service; | 134 media_router::DnsSdService service; |
| 135 service.service_name = service_type; | 135 service.service_name = service_type; |
| 136 services.push_back(service); | 136 services.push_back(service); |
| 137 | 137 |
| 138 dns_sd_registry_->DispatchMDnsEvent(service_type, services); | 138 dns_sd_registry_->DispatchMDnsEvent(service_type, services); |
| 139 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 139 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 140 } | 140 } |
| 141 | 141 |
| 142 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest | 142 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest |
| 143 // always return true without actually running the test. Remove when fixed. | 143 // always return true without actually running the test. Remove when fixed. |
| 144 #if defined(OS_WIN) && !defined(NDEBUG) | 144 #if defined(OS_WIN) && !defined(NDEBUG) |
| 145 #define MAYBE_RegisterMultipleListeners DISABLED_RegisterMultipleListeners | 145 #define MAYBE_RegisterMultipleListeners DISABLED_RegisterMultipleListeners |
| 146 #else | 146 #else |
| 147 #define MAYBE_RegisterMultipleListeners RegisterMultipleListeners | 147 #define MAYBE_RegisterMultipleListeners RegisterMultipleListeners |
| 148 #endif | 148 #endif |
| 149 // Test loading extension and registering multiple listeners. | 149 // Test loading extension and registering multiple listeners. |
| 150 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterMultipleListeners) { | 150 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterMultipleListeners) { |
| 151 const std::string& service_type = "_googlecast._tcp.local"; | 151 const std::string& service_type = "_googlecast._tcp.local"; |
| 152 const std::string& test_service_type = "_testing._tcp.local"; | 152 const std::string& test_service_type = "_testing._tcp.local"; |
| 153 SetUpTestDnsSdRegistry(); | 153 SetUpTestDnsSdRegistry(); |
| 154 | 154 |
| 155 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)) | 155 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)) |
| 156 .Times(1); | 156 .Times(1); |
| 157 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) | 157 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) |
| 158 .Times(1); | 158 .Times(1); |
| 159 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(test_service_type)) | 159 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(test_service_type)) |
| 160 .Times(1); | 160 .Times(1); |
| 161 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(test_service_type)) | 161 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(test_service_type)) |
| 162 .Times(1); | 162 .Times(1); |
| 163 EXPECT_CALL(*dns_sd_registry_, | 163 EXPECT_CALL(*dns_sd_registry_, |
| 164 RemoveObserver(A<extensions::DnsSdRegistry::DnsSdObserver*>())) | 164 RemoveObserver(A<DnsSdRegistry::DnsSdObserver*>())) |
| 165 .Times(1); | 165 .Times(1); |
| 166 | 166 |
| 167 EXPECT_TRUE(RunExtensionSubtest("mdns/api", | 167 EXPECT_TRUE(RunExtensionSubtest("mdns/api", |
| 168 "register_multiple_listeners.html")) | 168 "register_multiple_listeners.html")) |
| 169 << message_; | 169 << message_; |
| 170 | 170 |
| 171 extensions::ResultCatcher catcher; | 171 extensions::ResultCatcher catcher; |
| 172 DnsSdRegistry::DnsSdServiceList services; | 172 DnsSdRegistry::DnsSdServiceList services; |
| 173 | 173 |
| 174 extensions::DnsSdService service; | 174 media_router::DnsSdService service; |
| 175 service.service_name = service_type; | 175 service.service_name = service_type; |
| 176 services.push_back(service); | 176 services.push_back(service); |
| 177 | 177 |
| 178 dns_sd_registry_->DispatchMDnsEvent(service_type, services); | 178 dns_sd_registry_->DispatchMDnsEvent(service_type, services); |
| 179 dns_sd_registry_->DispatchMDnsEvent(test_service_type, services); | 179 dns_sd_registry_->DispatchMDnsEvent(test_service_type, services); |
| 180 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 180 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 181 } | 181 } |
| 182 | 182 |
| 183 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest | 183 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest |
| 184 // always return true without actually running the test. Remove when fixed. | 184 // always return true without actually running the test. Remove when fixed. |
| 185 #if defined(OS_WIN) && !defined(NDEBUG) | 185 #if defined(OS_WIN) && !defined(NDEBUG) |
| 186 #define MAYBE_RegisterTooManyListeners DISABLED_RegisterTooManyListeners | 186 #define MAYBE_RegisterTooManyListeners DISABLED_RegisterTooManyListeners |
| 187 #else | 187 #else |
| 188 #define MAYBE_RegisterTooManyListeners RegisterTooManyListeners | 188 #define MAYBE_RegisterTooManyListeners RegisterTooManyListeners |
| 189 #endif | 189 #endif |
| 190 // Test loading extension and registering multiple listeners. | 190 // Test loading extension and registering multiple listeners. |
| 191 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterTooManyListeners) { | 191 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_RegisterTooManyListeners) { |
| 192 SetUpTestDnsSdRegistry(); | 192 SetUpTestDnsSdRegistry(); |
| 193 | 193 |
| 194 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(_)).Times(10); | 194 EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(_)).Times(10); |
| 195 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(_)).Times(10); | 195 EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(_)).Times(10); |
| 196 EXPECT_CALL(*dns_sd_registry_, | 196 EXPECT_CALL(*dns_sd_registry_, |
| 197 RemoveObserver(A<extensions::DnsSdRegistry::DnsSdObserver*>())) | 197 RemoveObserver(A<DnsSdRegistry::DnsSdObserver*>())) |
| 198 .Times(1); | 198 .Times(1); |
| 199 | 199 |
| 200 EXPECT_TRUE(RunPlatformAppTest("mdns/api-packaged-apps")) | 200 EXPECT_TRUE(RunPlatformAppTest("mdns/api-packaged-apps")) |
| 201 << message_; | 201 << message_; |
| 202 } | 202 } |
| 203 | 203 |
| 204 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest | 204 // TODO(justinlin): Win Dbg has a workaround that makes RunExtensionSubtest |
| 205 // always return true without actually running the test. Remove when fixed. | 205 // always return true without actually running the test. Remove when fixed. |
| 206 #if defined(OS_WIN) && !defined(NDEBUG) | 206 #if defined(OS_WIN) && !defined(NDEBUG) |
| 207 #define MAYBE_MaxServiceInstancesPerEventConst \ | 207 #define MAYBE_MaxServiceInstancesPerEventConst \ |
| 208 DISABLED_MaxServiceInstancesPerEventConst | 208 DISABLED_MaxServiceInstancesPerEventConst |
| 209 #else | 209 #else |
| 210 #define MAYBE_MaxServiceInstancesPerEventConst MaxServiceInstancesPerEventConst | 210 #define MAYBE_MaxServiceInstancesPerEventConst MaxServiceInstancesPerEventConst |
| 211 #endif | 211 #endif |
| 212 // Test loading extension and registering multiple listeners. | 212 // Test loading extension and registering multiple listeners. |
| 213 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_MaxServiceInstancesPerEventConst) { | 213 IN_PROC_BROWSER_TEST_F(MDnsAPITest, MAYBE_MaxServiceInstancesPerEventConst) { |
| 214 EXPECT_TRUE(RunExtensionSubtest("mdns/api", | 214 EXPECT_TRUE(RunExtensionSubtest("mdns/api", |
| 215 "get_max_service_instances.html")); | 215 "get_max_service_instances.html")); |
| 216 } | 216 } |
| OLD | NEW |