Home | History | Annotate | Download | only in net
      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.
      4 
      5 #ifndef CHROME_BROWSER_NET_FIREFOX_PROXY_SETTINGS_H_
      6 #define CHROME_BROWSER_NET_FIREFOX_PROXY_SETTINGS_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 
     13 namespace base {
     14 class FilePath;
     15 }
     16 
     17 namespace net {
     18 class ProxyConfig;
     19 }
     20 
     21 class FirefoxProxySettings {
     22  public:
     23   enum ProxyConfig {
     24     NO_PROXY = 0,    // No proxy are used.
     25     AUTO_DETECT,     // Automatically detected.
     26     SYSTEM,          // Using system proxy settings.
     27     AUTO_FROM_URL,   // Automatically configured from a URL.
     28     MANUAL           // User specified settings.
     29   };
     30 
     31   enum SOCKSVersion {
     32     UNKNONW = 0,
     33     V4,
     34     V5
     35   };
     36 
     37   FirefoxProxySettings();
     38   ~FirefoxProxySettings();
     39 
     40   // Sets |settings| to the proxy settings for the current installed version of
     41   // Firefox and returns true if successful.
     42   // Returns false if Firefox is not installed or if the settings could not be
     43   // retrieved.
     44   static bool GetSettings(FirefoxProxySettings* settings);
     45 
     46   // Resets all the states of this FirefoxProxySettings to no proxy.
     47   void Reset();
     48 
     49   ProxyConfig config_type() const { return config_type_; }
     50 
     51   std::string http_proxy() const { return http_proxy_; }
     52   int http_proxy_port() const { return http_proxy_port_; }
     53 
     54   std::string ssl_proxy() const { return ssl_proxy_; }
     55   int ssl_proxy_port() const { return ssl_proxy_port_; }
     56 
     57   std::string ftp_proxy() const { return ftp_proxy_; }
     58   int ftp_proxy_port() const { return ftp_proxy_port_; }
     59 
     60   std::string gopher_proxy() const { return gopher_proxy_; }
     61   int gopher_proxy_port() const { return gopher_proxy_port_; }
     62 
     63   std::string socks_host() const { return socks_host_; }
     64   int socks_port() const { return socks_port_; }
     65   SOCKSVersion socks_version() const { return socks_version_; }
     66 
     67   std::vector<std::string> proxy_bypass_list() const {
     68     return proxy_bypass_list_;
     69   }
     70 
     71   const std::string& autoconfig_url() const { return autoconfig_url_; }
     72 
     73   // Converts a FirefoxProxySettings object to a net::ProxyConfig.
     74   // On success returns true and fills |config| with the result.
     75   bool ToProxyConfig(net::ProxyConfig* config);
     76 
     77  protected:
     78   // Gets the settings from the passed prefs.js file and returns true if
     79   // successful.
     80   // Protected for tests.
     81   static bool GetSettingsFromFile(const base::FilePath& pref_file,
     82                                   FirefoxProxySettings* settings);
     83 
     84  private:
     85   ProxyConfig config_type_;
     86 
     87   std::string http_proxy_;
     88   int http_proxy_port_;
     89 
     90   std::string ssl_proxy_;
     91   int ssl_proxy_port_;
     92 
     93   std::string ftp_proxy_;
     94   int ftp_proxy_port_;
     95 
     96   std::string gopher_proxy_;
     97   int gopher_proxy_port_;
     98 
     99   std::string socks_host_;
    100   int socks_port_;
    101   SOCKSVersion socks_version_;
    102 
    103   std::vector<std::string> proxy_bypass_list_;
    104 
    105   std::string autoconfig_url_;
    106 
    107   DISALLOW_COPY_AND_ASSIGN(FirefoxProxySettings);
    108 };
    109 
    110 #endif  // CHROME_BROWSER_NET_FIREFOX_PROXY_SETTINGS_H_
    111