Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Unified Diff: chrome/browser/ui/webui/chromeos/network_ui.cc

Issue 890663003: Use chrome.networkingPrivate in chrome://network (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/chromeos/network_config_message_handler.cc ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/chromeos/network_ui.cc
diff --git a/chrome/browser/ui/webui/chromeos/network_ui.cc b/chrome/browser/ui/webui/chromeos/network_ui.cc
index 7c1b4825c43c1e6059fc15e1e271e44a2e9e7524..883cf95a47bf71d127fa3f2befc617749ec48e0c 100644
--- a/chrome/browser/ui/webui/chromeos/network_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/network_ui.cc
@@ -6,21 +6,141 @@
#include <string>
+#include "base/memory/weak_ptr.h"
#include "base/values.h"
-#include "chrome/browser/ui/webui/chromeos/network_config_message_handler.h"
+#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
+#include "chromeos/device_event_log.h"
+#include "chromeos/network/device_state.h"
+#include "chromeos/network/network_configuration_handler.h"
+#include "chromeos/network/network_state.h"
+#include "chromeos/network/network_state_handler.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
+#include "content/public/browser/web_ui_message_handler.h"
#include "grit/browser_resources.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
namespace chromeos {
+namespace {
+
+bool GetServicePathFromGuid(const std::string& guid,
+ std::string* service_path) {
+ const NetworkState* network =
+ NetworkHandler::Get()->network_state_handler()->GetNetworkStateFromGuid(
+ guid);
+ if (!network)
+ return false;
+ *service_path = network->path();
+ return true;
+}
+
+void SetDeviceProperties(base::DictionaryValue* dictionary) {
+ std::string device;
+ dictionary->GetStringWithoutPathExpansion(shill::kDeviceProperty, &device);
+ const DeviceState* device_state =
+ NetworkHandler::Get()->network_state_handler()->GetDeviceState(device);
+ if (!device_state)
+ return;
+
+ scoped_ptr<base::DictionaryValue> device_dictionary(
+ device_state->properties().DeepCopy());
+
+ if (!device_state->ip_configs().empty()) {
+ // Convert IPConfig dictionary to a ListValue.
+ scoped_ptr<base::ListValue> ip_configs(new base::ListValue);
+ for (base::DictionaryValue::Iterator iter(device_state->ip_configs());
+ !iter.IsAtEnd(); iter.Advance()) {
+ ip_configs->Append(iter.value().DeepCopy());
+ }
+ device_dictionary->SetWithoutPathExpansion(shill::kIPConfigsProperty,
+ ip_configs.release());
+ }
+ if (!device_dictionary->empty())
+ dictionary->Set(shill::kDeviceProperty, device_dictionary.release());
+}
+
+class NetworkConfigMessageHandler : public content::WebUIMessageHandler {
+ public:
+ NetworkConfigMessageHandler() : weak_ptr_factory_(this) {}
+ ~NetworkConfigMessageHandler() override {}
+
+ // WebUIMessageHandler implementation.
+ void RegisterMessages() override {
+ web_ui()->RegisterMessageCallback(
+ "getShillProperties",
+ base::Bind(&NetworkConfigMessageHandler::GetShillProperties,
+ base::Unretained(this)));
+ }
+
+ private:
+ void GetShillProperties(const base::ListValue* arg_list) {
+ std::string guid;
+ if (!arg_list->GetString(0, &guid)) {
+ NOTREACHED();
+ ErrorCallback(guid, "Missing GUID in arg list", nullptr);
+ return;
+ }
+ std::string service_path;
+ if (!GetServicePathFromGuid(guid, &service_path)) {
+ ErrorCallback(guid, "Error.InvalidNetworkGuid", nullptr);
+ return;
+ }
+ NetworkHandler::Get()->network_configuration_handler()->GetProperties(
+ service_path,
+ base::Bind(&NetworkConfigMessageHandler::GetShillPropertiesSuccess,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&NetworkConfigMessageHandler::ErrorCallback,
+ weak_ptr_factory_.GetWeakPtr(), guid));
+ }
+
+ void GetShillPropertiesSuccess(
+ const std::string& service_path,
+ const base::DictionaryValue& dictionary) const {
+ scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy());
+
+ // Set the 'ServicePath' property for debugging.
+ dictionary_copy->SetStringWithoutPathExpansion("ServicePath", service_path);
+ // Set the device properties for debugging.
+ SetDeviceProperties(dictionary_copy.get());
+
+ base::ListValue return_arg_list;
+ return_arg_list.Append(dictionary_copy.release());
+ web_ui()->CallJavascriptFunction("NetworkUI.getShillPropertiesResult",
+ return_arg_list);
+ }
+
+ void ErrorCallback(
+ const std::string& guid,
+ const std::string& error_name,
+ scoped_ptr<base::DictionaryValue> unused_error_data) const {
pneubeck (no reviews) 2015/02/06 08:55:19 nit: unused_error_data -> /* error_data */
+ NET_LOG(ERROR) << "Shill Error: " << error_name << " guid=" << guid;
+ base::ListValue return_arg_list;
+ scoped_ptr<base::DictionaryValue> dictionary;
+ dictionary->SetStringWithoutPathExpansion(shill::kGuidProperty, guid);
+ dictionary->SetStringWithoutPathExpansion("ShillError", error_name);
+ return_arg_list.Append(dictionary.release());
+ web_ui()->CallJavascriptFunction("NetworkUI.getShillPropertiesResult",
+ return_arg_list);
+ }
+
+ base::WeakPtrFactory<NetworkConfigMessageHandler> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(NetworkConfigMessageHandler);
+};
+
+} // namespace
+
NetworkUI::NetworkUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
web_ui->AddMessageHandler(new NetworkConfigMessageHandler());
+ // Enable extension API calls in the WebUI.
+ extensions::TabHelper::CreateForWebContents(web_ui->GetWebContents());
+
content::WebUIDataSource* html =
content::WebUIDataSource::Create(chrome::kChromeUINetworkHost);
@@ -43,7 +163,6 @@ NetworkUI::NetworkUI(content::WebUI* web_ui)
IDS_NETWORK_UI_FAVORITE_NETWORKS);
html->SetJsonPath("strings.js");
- html->AddResourcePath("network_config.js", IDR_NETWORK_CONFIG_JS);
html->AddResourcePath("network_ui.css", IDR_NETWORK_UI_CSS);
html->AddResourcePath("network_ui.js", IDR_NETWORK_UI_JS);
html->SetDefaultResource(IDR_NETWORK_UI_HTML);
« no previous file with comments | « chrome/browser/ui/webui/chromeos/network_config_message_handler.cc ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698