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

Unified Diff: chrome/browser/chromeos/vpn_provider/pepper_vpn_provider_service_helper.cc

Issue 1307173009: rebased ppapi vpnProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: fix compile Created 5 years, 3 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: chrome/browser/chromeos/vpn_provider/pepper_vpn_provider_service_helper.cc
diff --git a/chrome/browser/chromeos/vpn_provider/pepper_vpn_provider_service_helper.cc b/chrome/browser/chromeos/vpn_provider/pepper_vpn_provider_service_helper.cc
new file mode 100644
index 0000000000000000000000000000000000000000..671d3a0dfca60824abc509589148884ac16f9370
--- /dev/null
+++ b/chrome/browser/chromeos/vpn_provider/pepper_vpn_provider_service_helper.cc
@@ -0,0 +1,348 @@
+// Copyright 2015 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/vpn_provider/pepper_vpn_provider_service_helper.h"
+
+#include <string>
+
+#include "base/memory/singleton.h"
+#include "base/strings/string_util.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_process_host.h"
+#include "extensions/browser/api/vpn_provider/vpn_service.h"
+#include "extensions/browser/api/vpn_provider/vpn_service_factory.h"
+#include "extensions/common/api/vpn_provider.h"
+#include "ppapi/proxy/serialized_structs.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+
+namespace chromeos {
+namespace vpn_provider {
+
+VpnProviderServiceHelper::VpnProviderServiceHelper() : weak_factory_(this) {
+}
+
+VpnProviderServiceHelper::~VpnProviderServiceHelper() {
+}
+
+// static
+VpnProviderServiceHelper* VpnProviderServiceHelper::GetInstance() {
+ return base::Singleton<VpnProviderServiceHelper>::get();
+}
+
+// ---------------- content::BrowserThread::IO Functions ----------------
+void VpnProviderServiceHelper::AddServiceID_IO(
+ const std::string& service_id,
+ base::WeakPtr<content::PepperVpnProviderMessageFilterChromeOS> vpn_provider,
+ int render_process_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ service_to_host_map_[service_id] = vpn_provider;
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::AddServiceID_UI,
+ weak_factory_.GetWeakPtr(), service_id, render_process_id));
+}
+
+void VpnProviderServiceHelper::RemoveServiceID_IO(const std::string& service_id,
+ int render_process_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ service_to_host_map_.erase(service_id);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::RemoveServiceID_UI,
+ weak_factory_.GetWeakPtr(), service_id, render_process_id));
+}
+
+void VpnProviderServiceHelper::OnPlatformMessage_IO(
+ const std::string& service_id,
+ std::string id,
+ PP_VpnProvider_PlatformMessage status,
+ std::string message) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ if (service_to_host_map_.find(service_id) == service_to_host_map_.end()) {
+ return;
+ }
+
+ service_to_host_map_[service_id]->Send_OnPlatformMessage(id, status, message);
+}
+
+void VpnProviderServiceHelper::OnPacketReceived_IO(
+ const std::string& service_id,
+ const std::vector<char>& data) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ if (service_to_host_map_.find(service_id) == service_to_host_map_.end()) {
+ return;
+ }
+
+ service_to_host_map_[service_id]->Send_OnPacketReceived(data);
+}
+
+void VpnProviderServiceHelper::OnConfigurationEvent_IO(
+ const std::string& service_id,
+ const std::string& id,
+ PP_VpnProvider_ConfigMessage message,
+ const std::string& name,
+ const std::string& data) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ if (service_to_host_map_.find(service_id) == service_to_host_map_.end()) {
+ return;
+ }
+
+ service_to_host_map_[service_id]->Send_OnConfigurationEvent(id, message, name,
+ data);
+}
+
+void VpnProviderServiceHelper::OnUIEvent_IO(const std::string& service_id,
+ PP_VpnProvider_UIEvent event,
+ const std::string& id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ if (service_to_host_map_.find(service_id) == service_to_host_map_.end()) {
+ return;
+ }
+
+ service_to_host_map_[service_id]->Send_OnUIEvent(event, id);
+}
+
+// ---------------- content::BrowserThread::UI Functions ----------------
+chromeos::VpnService* VpnProviderServiceHelper::GetVpnService_UI(
+ int render_process_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::RenderProcessHost* render_process_host =
+ content::RenderProcessHost::FromID(render_process_id);
+ chromeos::VpnService* service =
+ chromeos::VpnServiceFactory::GetForBrowserContext(
+ render_process_host->GetBrowserContext());
+
+ return service;
+}
+
+void VpnProviderServiceHelper::AddServiceID_UI(const std::string& service_id,
+ int render_process_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ service->AddPlugin(service_id);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::RemoveServiceID_UI(const std::string& service_id,
+ int render_process_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ service->RemovePlugin(service_id);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::CreateConfig_UI(const std::string& service_id,
+ const std::string& name,
+ int render_process_id,
+ SuccessCallback success,
+ FailureCallback failure) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ service->CreateConfiguration(service_id, service_id, name, success,
+ failure);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::DestroyConfig_UI(const std::string& service_id,
+ const std::string& id,
+ int render_process_id,
+ SuccessCallback success,
+ FailureCallback failure) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ service->DestroyConfiguration(service_id, id, success, failure);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::SetParameters_UI(
+ const std::string& service_id,
+ const ppapi::proxy::SerializedVpnProviderParameters& serialized_params,
+ int render_process_id,
+ StringCallback success,
+ FailureCallback failure) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ base::DictionaryValue dictionary_params;
+ ConvertParams(serialized_params, &dictionary_params);
+ service->SetParameters(service_id, dictionary_params, success, failure);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::SendPacket_UI(const std::string& service_id,
+ const std::vector<char>& data,
+ int render_process_id,
+ SuccessCallback success,
+ FailureCallback failure) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ service->SendPacket(service_id, data, success, failure);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::NotifyConnectionStateChanged_UI(
+ const std::string& service_id,
+ PP_VpnProvider_VpnConnectionState status,
+ int render_process_id,
+ SuccessCallback success,
+ FailureCallback failure) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ chromeos::VpnService* service = GetVpnService_UI(render_process_id);
+ if (service) {
+ service->NotifyConnectionStateChanged(
+ service_id,
+ (extensions::api::vpn_provider::VpnConnectionState)status, success,
+ failure);
+ } else {
+ NOTREACHED();
+ }
+}
+
+void VpnProviderServiceHelper::OnPlatformMessage_UI(
+ const std::string& service_id,
+ std::string id,
+ PP_VpnProvider_PlatformMessage status,
+ std::string message) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::OnPlatformMessage_IO,
+ weak_factory_.GetWeakPtr(), service_id, id, status, message));
+}
+
+void VpnProviderServiceHelper::OnPacketReceived_UI(
+ const std::string& service_id,
+ const std::vector<char>& data) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::OnPacketReceived_IO,
+ weak_factory_.GetWeakPtr(), service_id, data));
+}
+void VpnProviderServiceHelper::OnConfigurationRemoved_UI(
+ const std::string& service_id,
+ const std::string& id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::OnConfigurationEvent_IO,
+ weak_factory_.GetWeakPtr(), service_id, id,
+ PP_VPN_PROVIDER_CONFIG_REMOVED, "", ""));
+}
+
+void VpnProviderServiceHelper::OnConfigurationCreated_UI(
+ const std::string& service_id,
+ const std::string& id,
+ const std::string& name,
+ const std::string& data) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::OnConfigurationEvent_IO,
+ weak_factory_.GetWeakPtr(), service_id, id,
+ PP_VPN_PROVIDER_CONFIG_CREATED, id, data));
+}
+
+void VpnProviderServiceHelper::OnUIEvent_UI(const std::string& service_id,
+ PP_VpnProvider_UIEvent event,
+ const std::string& id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&VpnProviderServiceHelper::OnUIEvent_IO,
+ weak_factory_.GetWeakPtr(), service_id, event, id));
+}
+
+void VpnProviderServiceHelper::ConvertParams(
+ const ppapi::proxy::SerializedVpnProviderParameters& serialized_params,
+ base::DictionaryValue* dictionary_params) {
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kAddressParameterThirdPartyVpn, serialized_params.address);
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kSubnetPrefixParameterThirdPartyVpn, serialized_params.subnet);
+
+ // exclusion_list is mandatory
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kExclusionListParameterThirdPartyVpn,
+ base::JoinString(serialized_params.exclusion_list,
+ std::string(1, shill::kIPDelimiter)));
+
+ // inclusion_list is mandatory
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kInclusionListParameterThirdPartyVpn,
+ base::JoinString(serialized_params.inclusion_list,
+ std::string(1, shill::kIPDelimiter)));
+
+ // mtu is optional
+ if (serialized_params.mtu) {
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kMtuParameterThirdPartyVpn,
+ std::to_string(serialized_params.mtu));
+ }
+
+ // broadcast_address is optional
+ if (!serialized_params.broadcast_address.empty()) {
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kBroadcastAddressParameterThirdPartyVpn,
+ serialized_params.broadcast_address);
+ }
+
+ // domain_search is optional
+ if (serialized_params.domain_search.size()) {
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kDomainSearchParameterThirdPartyVpn,
+ base::JoinString(serialized_params.domain_search,
+ std::string(1, shill::kNonIPDelimiter)));
+ }
+
+ // dns_servers is mandatory
+ dictionary_params->SetStringWithoutPathExpansion(
+ shill::kDnsServersParameterThirdPartyVpn,
+ base::JoinString(serialized_params.dns_servers,
+ std::string(1, shill::kIPDelimiter)));
+}
+
+} // namespace vpn_provider
+} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/vpn_provider/pepper_vpn_provider_service_helper.h ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698