Index: chrome/browser/chromeos/net/proxy_config_handler.cc |
diff --git a/chrome/browser/chromeos/net/proxy_config_handler.cc b/chrome/browser/chromeos/net/proxy_config_handler.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b1d2f1e6cb84404ed7be18743ca610711a1e587c |
--- /dev/null |
+++ b/chrome/browser/chromeos/net/proxy_config_handler.cc |
@@ -0,0 +1,79 @@ |
+// Copyright (c) 2013 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 "chrome/browser/chromeos/net/proxy_config_handler.h" |
+ |
+#include "base/bind.h" |
+#include "base/json/json_writer.h" |
+#include "base/logging.h" |
+#include "base/values.h" |
+#include "chrome/browser/prefs/proxy_config_dictionary.h" |
+#include "chromeos/dbus/dbus_thread_manager.h" |
+#include "chromeos/dbus/shill_service_client.h" |
+#include "chromeos/network/network_handler_callbacks.h" |
+#include "chromeos/network/network_state.h" |
+#include "chromeos/network/network_state_handler.h" |
+#include "dbus/object_path.h" |
+#include "third_party/cros_system_api/dbus/service_constants.h" |
+ |
+namespace chromeos { |
+ |
+namespace { |
+ |
+void LogError(const std::string& network, |
+ const std::string& error_name, |
+ const std::string& error_message) { |
+ network_handler::ShillErrorCallbackFunction( |
+ network, |
+ network_handler::ErrorCallback(), |
+ "Could not clear or set ProxyConfig", |
+ error_message); |
+} |
+ |
+} // namespace |
+ |
+namespace proxy_config { |
+ |
+scoped_ptr<ProxyConfigDictionary> GetProxyConfigForNetwork( |
+ const NetworkState& network) { |
+ const base::DictionaryValue& value = network.proxy_config(); |
+ if (value.empty()) |
+ return scoped_ptr<ProxyConfigDictionary>(); |
+ return make_scoped_ptr(new ProxyConfigDictionary(&value)); |
+} |
+ |
+void SetProxyConfigForNetwork(const ProxyConfigDictionary& proxy_config, |
+ const NetworkState& network) { |
+ chromeos::ShillServiceClient* shill_service_client = |
+ DBusThreadManager::Get()->GetShillServiceClient(); |
+ |
+ ProxyPrefs::ProxyMode mode; |
+ if (!proxy_config.GetMode(&mode) || mode == ProxyPrefs::MODE_DIRECT) { |
+ // TODO(pneubeck): Consider removing this legacy code. Return empty string |
+ // for direct mode for portal check to work correctly. |
+ shill_service_client->ClearProperty( |
+ dbus::ObjectPath(network.path()), |
+ flimflam::kProxyConfigProperty, |
+ base::Bind(&base::DoNothing), |
+ base::Bind(&LogError, network.path())); |
+ } else { |
+ std::string proxy_config_str; |
+ base::JSONWriter::Write(&proxy_config.GetDictionary(), &proxy_config_str); |
+ shill_service_client->SetProperty( |
+ dbus::ObjectPath(network.path()), |
+ flimflam::kProxyConfigProperty, |
+ base::StringValue(proxy_config_str), |
+ base::Bind(&base::DoNothing), |
+ base::Bind(&LogError, network.path())); |
+ } |
+ |
+ if (NetworkHandler::IsInitialized()) { |
+ NetworkHandler::Get()->network_state_handler()-> |
+ RequestUpdateForNetwork(network.path()); |
+ } |
+} |
+ |
+} // namespace proxy_config |
+ |
+} // namespace chromeos |