// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/proxy/proxy_config_service_android.h"
#include "net/proxy/proxy_config.h"
namespace net {
void ProxyConfigServiceAndroid::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void ProxyConfigServiceAndroid::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
ProxyConfigService::ConfigAvailability ProxyConfigServiceAndroid::GetLatestProxyConfig(ProxyConfig* config) {
if (!config)
return ProxyConfigService::CONFIG_UNSET;
if (m_proxy.empty()) {
*config = ProxyConfig::CreateDirect();
} else {
config->proxy_rules().ParseFromString(m_proxy);
}
return ProxyConfigService::CONFIG_VALID;
}
void ProxyConfigServiceAndroid::UpdateProxySettings(std::string& proxy,
std::string& exList) {
if (proxy == m_proxy)
return;
m_proxy = proxy;
ProxyConfig config;
config.proxy_rules().ParseFromString(m_proxy);
size_t pos;
while ( (pos = exList.find(',')) != std::string::npos) {
config.proxy_rules().bypass_rules.AddRuleFromString(exList.substr(0, pos));
exList.erase(0, pos + 1);
}
config.proxy_rules().bypass_rules.AddRuleFromString(exList);
FOR_EACH_OBSERVER(Observer, observers_,
OnProxyConfigChanged(config,
ProxyConfigService::CONFIG_VALID));
}
} // namespace net