1a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#ifndef CHROME_BROWSER_NET_FIREFOX_PROXY_SETTINGS_H_
6a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#define CHROME_BROWSER_NET_FIREFOX_PROXY_SETTINGS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfig;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FirefoxProxySettings {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum ProxyConfig {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NO_PROXY = 0,    // No proxy are used.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AUTO_DETECT,     // Automatically detected.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SYSTEM,          // Using system proxy settings.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AUTO_FROM_URL,   // Automatically configured from a URL.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MANUAL           // User specified settings.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum SOCKSVersion {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UNKNONW = 0,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    V4,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    V5
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FirefoxProxySettings();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FirefoxProxySettings();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets |settings| to the proxy settings for the current installed version of
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Firefox and returns true if successful.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns false if Firefox is not installed or if the settings could not be
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // retrieved.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool GetSettings(FirefoxProxySettings* settings);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resets all the states of this FirefoxProxySettings to no proxy.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Reset();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfig config_type() const { return config_type_; }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string http_proxy() const { return http_proxy_; }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int http_proxy_port() const { return http_proxy_port_; }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ssl_proxy() const { return ssl_proxy_; }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ssl_proxy_port() const { return ssl_proxy_port_; }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ftp_proxy() const { return ftp_proxy_; }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ftp_proxy_port() const { return ftp_proxy_port_; }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string gopher_proxy() const { return gopher_proxy_; }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int gopher_proxy_port() const { return gopher_proxy_port_; }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string socks_host() const { return socks_host_; }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int socks_port() const { return socks_port_; }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOCKSVersion socks_version() const { return socks_version_; }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<std::string> proxy_bypass_list() const {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return proxy_bypass_list_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const std::string& autoconfig_url() const { return autoconfig_url_; }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Converts a FirefoxProxySettings object to a net::ProxyConfig.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // On success returns true and fills |config| with the result.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ToProxyConfig(net::ProxyConfig* config);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the settings from the passed prefs.js file and returns true if
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // successful.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Protected for tests.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool GetSettingsFromFile(const base::FilePath& pref_file,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  FirefoxProxySettings* settings);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProxyConfig config_type_;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string http_proxy_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int http_proxy_port_;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ssl_proxy_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ssl_proxy_port_;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ftp_proxy_;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ftp_proxy_port_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string gopher_proxy_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int gopher_proxy_port_;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string socks_host_;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int socks_port_;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOCKSVersion socks_version_;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<std::string> proxy_bypass_list_;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string autoconfig_url_;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FirefoxProxySettings);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
110a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#endif  // CHROME_BROWSER_NET_FIREFOX_PROXY_SETTINGS_H_
111