firewall_manager_win.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
1// Copyright 2014 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. 4 5#include "chrome/installer/util/firewall_manager_win.h" 6 7#include "base/files/file_path.h" 8#include "base/strings/string16.h" 9#include "chrome/installer/util/advanced_firewall_manager_win.h" 10#include "chrome/installer/util/browser_distribution.h" 11#include "chrome/installer/util/legacy_firewall_manager_win.h" 12 13namespace installer { 14 15namespace { 16 17class FirewallManagerAdvancedImpl : public FirewallManager { 18 public: 19 FirewallManagerAdvancedImpl() {} 20 virtual ~FirewallManagerAdvancedImpl() {} 21 22 bool Init(const base::string16& app_name, const base::FilePath& app_path) { 23 return manager_.Init(app_name, app_path); 24 } 25 26 // FirewallManager methods. 27 virtual bool CanUseLocalPorts() OVERRIDE { 28 return !manager_.IsFirewallEnabled() || manager_.HasAnyRule(); 29 }; 30 31 virtual bool AddFirewallRules() OVERRIDE { 32 // Nothing yet. 33 return true; 34 } 35 36 virtual void RemoveFirewallRules() OVERRIDE { 37 manager_.DeleteAllRules(); 38 } 39 40 private: 41 AdvancedFirewallManager manager_; 42 DISALLOW_COPY_AND_ASSIGN(FirewallManagerAdvancedImpl); 43}; 44 45class FirewallManagerLegacyImpl : public FirewallManager { 46 public: 47 FirewallManagerLegacyImpl() {} 48 virtual ~FirewallManagerLegacyImpl() {} 49 50 bool Init(const base::string16& app_name, const base::FilePath& app_path) { 51 return manager_.Init(app_name, app_path); 52 } 53 54 // FirewallManager methods. 55 virtual bool CanUseLocalPorts() OVERRIDE { 56 return !manager_.IsFirewallEnabled() || 57 manager_.GetAllowIncomingConnection(NULL); 58 }; 59 60 virtual bool AddFirewallRules() OVERRIDE { 61 // Nothing yet. 62 return true; 63 } 64 65 virtual void RemoveFirewallRules() OVERRIDE { 66 manager_.DeleteRule(); 67 } 68 69 private: 70 LegacyFirewallManager manager_; 71 DISALLOW_COPY_AND_ASSIGN(FirewallManagerLegacyImpl); 72}; 73 74} // namespace 75 76FirewallManager::~FirewallManager() {} 77 78// static 79scoped_ptr<FirewallManager> FirewallManager::Create( 80 BrowserDistribution* dist, 81 const base::FilePath& chrome_path) { 82 // First try to connect to "Windows Firewall with Advanced Security" (Vista+). 83 scoped_ptr<FirewallManagerAdvancedImpl> manager( 84 new FirewallManagerAdvancedImpl()); 85 if (manager->Init(dist->GetDisplayName(), chrome_path)) 86 return manager.PassAs<FirewallManager>(); 87 88 // Next try to connect to "Windows Firewall for Windows XP with SP2". 89 scoped_ptr<FirewallManagerLegacyImpl> legacy_manager( 90 new FirewallManagerLegacyImpl()); 91 if (legacy_manager->Init(dist->GetDisplayName(), chrome_path)) 92 return legacy_manager.PassAs<FirewallManager>(); 93 94 return scoped_ptr<FirewallManager>(); 95} 96 97FirewallManager::FirewallManager() { 98} 99 100} // namespace installer 101