101ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
201ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
301ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen// found in the LICENSE file.
401ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
501ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen#include "net/proxy/proxy_config_service_android.h"
601ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
701ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen#include "net/proxy/proxy_config.h"
801ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
901ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsennamespace net {
1001ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
1101ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsenvoid ProxyConfigServiceAndroid::AddObserver(Observer* observer) {
1201ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  observers_.AddObserver(observer);
1301ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen}
1401ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
1501ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsenvoid ProxyConfigServiceAndroid::RemoveObserver(Observer* observer) {
1601ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  observers_.RemoveObserver(observer);
1701ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen}
1801ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
19a628b56b8b7c7f9a8730b0e43c6e04fcf3619b7eKristian MonsenProxyConfigService::ConfigAvailability ProxyConfigServiceAndroid::GetLatestProxyConfig(ProxyConfig* config) {
2001ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  if (!config)
21a628b56b8b7c7f9a8730b0e43c6e04fcf3619b7eKristian Monsen    return ProxyConfigService::CONFIG_UNSET;
2201ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
2301ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  if (m_proxy.empty()) {
2401ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen    *config = ProxyConfig::CreateDirect();
2501ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  } else {
2601ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen    config->proxy_rules().ParseFromString(m_proxy);
2701ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  }
28a628b56b8b7c7f9a8730b0e43c6e04fcf3619b7eKristian Monsen  return ProxyConfigService::CONFIG_VALID;
2901ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen}
3001ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
31eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsenvoid ProxyConfigServiceAndroid::UpdateProxySettings(std::string& proxy,
32eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen                                                    std::string& exList) {
3301ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  if (proxy == m_proxy)
3401ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen    return;
3501ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
3601ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  m_proxy = proxy;
3701ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  ProxyConfig config;
3801ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen  config.proxy_rules().ParseFromString(m_proxy);
39eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen
40eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen  size_t pos;
41eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen  while ( (pos = exList.find(',')) != std::string::npos) {
42eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen    config.proxy_rules().bypass_rules.AddRuleFromString(exList.substr(0, pos));
43eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen    exList.erase(0, pos + 1);
44eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen  }
45eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen  config.proxy_rules().bypass_rules.AddRuleFromString(exList);
46eae0084084f68c82733e5d9d4dea8e14eba66cc9Kristian Monsen
47a628b56b8b7c7f9a8730b0e43c6e04fcf3619b7eKristian Monsen  FOR_EACH_OBSERVER(Observer, observers_,
48a628b56b8b7c7f9a8730b0e43c6e04fcf3619b7eKristian Monsen                    OnProxyConfigChanged(config,
49a628b56b8b7c7f9a8730b0e43c6e04fcf3619b7eKristian Monsen                                         ProxyConfigService::CONFIG_VALID));
5001ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen}
5101ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen
5201ba86dc3bae37426ebafbdd93640dc50c45e3e0Kristian Monsen} // namespace net
53