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

Unified Diff: extensions/browser/api/networking_private/networking_private_chromeos.cc

Issue 1283613005: Add networkingPrivate.getThirdPartyVpnProviderList (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_515987_cr_network_list
Patch Set: Rebase Created 5 years, 4 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
Index: extensions/browser/api/networking_private/networking_private_chromeos.cc
diff --git a/extensions/browser/api/networking_private/networking_private_chromeos.cc b/extensions/browser/api/networking_private/networking_private_chromeos.cc
index 006d09ea7861335bde50aaefe21a9190c647909c..75b73f411b8319a012e2a1fd570559099e6fffec 100644
--- a/extensions/browser/api/networking_private/networking_private_chromeos.cc
+++ b/extensions/browser/api/networking_private/networking_private_chromeos.cc
@@ -26,7 +26,12 @@
#include "components/onc/onc_constants.h"
#include "content/public/browser/browser_context.h"
#include "extensions/browser/api/networking_private/networking_private_api.h"
+#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extensions_browser_client.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/extension_set.h"
+#include "extensions/common/permissions/api_permission.h"
+#include "extensions/common/permissions/permissions_data.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
using chromeos::DeviceState;
@@ -123,14 +128,6 @@ void AppendDeviceState(
device_state_list->push_back(properties.Pass());
}
-void NetworkHandlerDictionaryCallback(
- const NetworkingPrivateDelegate::DictionaryCallback& callback,
- const std::string& service_path,
- const base::DictionaryValue& dictionary) {
- scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy());
- callback.Run(dictionary_copy.Pass());
-}
-
void NetworkHandlerFailureCallback(
const NetworkingPrivateDelegate::FailureCallback& callback,
const std::string& error_name,
@@ -156,6 +153,20 @@ void RequirePinSuccess(
base::Bind(&NetworkHandlerFailureCallback, failure_callback));
}
+// Returns the string corresponding to |key|. If the property is a managed
+// dictionary, returns the active value. If the property does not exist or
+// has no active value, returns an empty string.
+std::string GetStringFromDictionary(const base::DictionaryValue& dictionary,
+ const std::string& key) {
+ std::string result;
+ if (!dictionary.GetString(key, &result)) {
+ const base::DictionaryValue* managed = nullptr;
+ if (dictionary.GetDictionary(key, &managed))
+ managed->GetString(::onc::kAugmentationActiveSetting, &result);
+ }
+ return result;
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -184,7 +195,8 @@ void NetworkingPrivateChromeOS::GetProperties(
GetManagedConfigurationHandler()->GetProperties(
service_path,
- base::Bind(&NetworkHandlerDictionaryCallback, success_callback),
+ base::Bind(&NetworkingPrivateChromeOS::GetPropertiesCallback,
+ weak_ptr_factory_.GetWeakPtr(), success_callback),
base::Bind(&NetworkHandlerFailureCallback, failure_callback));
}
@@ -206,10 +218,54 @@ void NetworkingPrivateChromeOS::GetManagedProperties(
GetManagedConfigurationHandler()->GetManagedProperties(
user_id_hash, service_path,
- base::Bind(&NetworkHandlerDictionaryCallback, success_callback),
+ base::Bind(&NetworkingPrivateChromeOS::GetPropertiesCallback,
+ weak_ptr_factory_.GetWeakPtr(), success_callback),
base::Bind(&NetworkHandlerFailureCallback, failure_callback));
}
+void NetworkingPrivateChromeOS::GetPropertiesCallback(
+ const NetworkingPrivateDelegate::DictionaryCallback& callback,
+ const std::string& service_path,
+ const base::DictionaryValue& dictionary) {
+ scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy());
+
+ std::string type =
+ GetStringFromDictionary(dictionary, ::onc::network_config::kType);
+
+ if (type == ::onc::network_config::kVPN)
+ AppendThirdPartyProviderName(dictionary_copy.get());
+
+ callback.Run(dictionary_copy.Pass());
+}
+
+// Populate ThirdPartyVPN.kName with the provider name for third-party VPNs.
+void NetworkingPrivateChromeOS::AppendThirdPartyProviderName(
+ base::DictionaryValue* dictionary) {
+ base::DictionaryValue* vpn_dict = nullptr;
+ if (!dictionary->GetDictionary(::onc::network_config::kVPN, &vpn_dict))
+ return;
+ if (GetStringFromDictionary(*vpn_dict, ::onc::vpn::kType) !=
+ ::onc::vpn::kThirdPartyVpn)
+ return;
+ base::DictionaryValue* third_party_vpn = nullptr;
+ if (!vpn_dict->GetDictionary(::onc::vpn::kThirdPartyVpn, &third_party_vpn))
+ return;
+
+ std::string extension_id = GetStringFromDictionary(
+ *third_party_vpn, ::onc::third_party_vpn::kExtensionID);
+ const ExtensionSet& extensions =
+ ExtensionRegistry::Get(browser_context_)->enabled_extensions();
+ for (const auto& extension : extensions) {
+ if (extension->permissions_data()->HasAPIPermission(
+ APIPermission::kVpnProvider) &&
+ extension->id() == extension_id) {
+ third_party_vpn->SetStringWithoutPathExpansion(
+ ::onc::third_party_vpn::kName, extension->name());
+ break;
+ }
+ }
+}
+
void NetworkingPrivateChromeOS::GetState(
const std::string& guid,
const DictionaryCallback& success_callback,
@@ -293,7 +349,7 @@ void NetworkingPrivateChromeOS::GetNetworks(
chromeos::onc::NetworkTypePatternFromOncType(network_type);
scoped_ptr<base::ListValue> network_properties_list =
chromeos::network_util::TranslateNetworkListToONC(
- pattern, configured_only, visible_only, limit, false /* debugging */);
+ pattern, configured_only, visible_only, limit);
success_callback.Run(network_properties_list.Pass());
}
@@ -566,4 +622,29 @@ bool NetworkingPrivateChromeOS::RequestScan() {
return true;
}
+scoped_ptr<base::ListValue>
+NetworkingPrivateChromeOS::GetThirdPartyVpnProviderList() {
+ scoped_ptr<ThirdPartyVPNPropertyList> vpn_provider_list(
+ new ThirdPartyVPNPropertyList);
+ const ExtensionSet& extensions =
+ ExtensionRegistry::Get(browser_context_)->enabled_extensions();
+ for (const auto& extension : extensions) {
+ if (!extension->permissions_data()->HasAPIPermission(
+ APIPermission::kVpnProvider)) {
+ continue;
+ }
+ linked_ptr<private_api::ThirdPartyVPNProperties> provider(
+ new private_api::ThirdPartyVPNProperties);
+ provider->extension_id = extension->id();
+ provider->name.reset(new std::string(extension->name()));
pneubeck (no reviews) 2015/08/13 12:58:37 why not using https://developer.chrome.com/extens
+ vpn_provider_list->push_back(provider);
+ }
+
+ scoped_ptr<base::ListValue> vpn_provider_list_value(new base::ListValue);
+ for (const auto& provider : *vpn_provider_list)
+ vpn_provider_list_value->Append(provider->ToValue().release());
+
+ return vpn_provider_list_value.Pass();
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698