| Index: chrome/browser/local_discovery/service_discovery_shared_client.cc
|
| diff --git a/chrome/browser/local_discovery/service_discovery_shared_client.cc b/chrome/browser/local_discovery/service_discovery_shared_client.cc
|
| index a18481216c5f4c719c78edf680dc4beffcc52627..2ffbc09e335599ab6eb25bb27869db0b3d5aaf22 100644
|
| --- a/chrome/browser/local_discovery/service_discovery_shared_client.cc
|
| +++ b/chrome/browser/local_discovery/service_discovery_shared_client.cc
|
| @@ -6,14 +6,44 @@
|
|
|
| #include "content/public/browser/browser_thread.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include "base/files/file_path.h"
|
| +#include "base/metrics/histogram.h"
|
| +#include "base/path_service.h"
|
| +#include "chrome/browser/local_discovery/service_discovery_client_utility.h"
|
| +#include "chrome/installer/util/browser_distribution.h"
|
| +#include "chrome/installer/util/firewall_manager_win.h"
|
| +#endif // OS_WIN
|
| +
|
| #if defined(OS_MACOSX)
|
| #include "chrome/browser/local_discovery/service_discovery_client_mac_factory.h"
|
| #endif
|
|
|
| #if defined(ENABLE_MDNS)
|
| -#include "chrome/browser/local_discovery/service_discovery_client_utility.h"
|
| +#include "chrome/browser/local_discovery/service_discovery_client_mdns.h"
|
| #endif // ENABLE_MDNS
|
|
|
| +namespace {
|
| +
|
| +#if defined(OS_WIN)
|
| +bool IsFirewallReady() {
|
| + base::FilePath exe_path;
|
| + if (PathService::Get(base::FILE_EXE, &exe_path))
|
| + return false;
|
| + scoped_ptr<installer::FirewallManager> manager =
|
| + installer::FirewallManager::Create(BrowserDistribution::GetDistribution(),
|
| + exe_path);
|
| + if (!manager)
|
| + return false;
|
| + bool is_ready = manager->CanUseLocalPorts();
|
| + UMA_HISTOGRAM_BOOLEAN("LocalDiscovery.IsFirewallReady", is_ready);
|
| + return is_ready;
|
| +}
|
| +#endif // OS_WIN
|
| +
|
| +} // namespace
|
| +
|
| +
|
| namespace local_discovery {
|
|
|
| using content::BrowserThread;
|
| @@ -44,7 +74,16 @@ scoped_refptr<ServiceDiscoverySharedClient>
|
| #if defined(OS_MACOSX)
|
| return ServiceDiscoveryClientMacFactory::CreateInstance();
|
| #else
|
| - return new ServiceDiscoveryClientUtility();
|
| +
|
| +#if defined(OS_WIN)
|
| + static bool is_firewall_ready = IsFirewallReady();
|
| + if (!is_firewall_ready) {
|
| + // TODO(vitalybuka): Remove after we find what to do with firewall for
|
| + // user-level installs. crbug.com/366408
|
| + return new ServiceDiscoveryClientUtility();
|
| + }
|
| +#endif // OS_WIN
|
| + return new ServiceDiscoveryClientMdns();
|
| #endif
|
| }
|
|
|
|
|