Chromium Code Reviews| Index: extensions/browser/api/vpn_provider/vpn_service.cc |
| diff --git a/extensions/browser/api/vpn_provider/vpn_service.cc b/extensions/browser/api/vpn_provider/vpn_service.cc |
| index 7a51aac70dad68758c332cc4fb1fc6e35abfd96e..54002bce3fe08803b9d2a3ef1b0e530df9d9542d 100644 |
| --- a/extensions/browser/api/vpn_provider/vpn_service.cc |
| +++ b/extensions/browser/api/vpn_provider/vpn_service.cc |
| @@ -25,6 +25,7 @@ |
| #include "chromeos/network/network_state_handler.h" |
| #include "chromeos/network/network_type_pattern.h" |
| #include "crypto/sha2.h" |
| +#include "extensions/browser/app_window/app_window.h" |
|
bartfab (slow)
2015/03/10 13:28:40
Nit: No longer needed.
|
| #include "extensions/browser/event_router.h" |
| #include "extensions/browser/extension_registry.h" |
| #include "third_party/cros_system_api/dbus/service_constants.h" |
| @@ -137,6 +138,7 @@ void VpnService::VpnConfiguration::OnPlatformMessage(uint32_t message) { |
| VpnService::VpnService( |
| content::BrowserContext* browser_context, |
| const std::string& userid_hash, |
| + extensions::AppWindowRegistry* app_window_registry, |
|
bartfab (slow)
2015/03/10 13:28:40
Nit: No longer needed.
|
| extensions::ExtensionRegistry* extension_registry, |
| extensions::EventRouter* event_router, |
| ShillThirdPartyVpnDriverClient* shill_client, |
| @@ -145,6 +147,7 @@ VpnService::VpnService( |
| NetworkStateHandler* network_state_handler) |
| : browser_context_(browser_context), |
| userid_hash_(userid_hash), |
| + app_window_registry_(app_window_registry), |
|
bartfab (slow)
2015/03/10 13:28:40
Nit: No longer needed.
|
| extension_registry_(extension_registry), |
| event_router_(event_router), |
| shill_client_(shill_client), |
| @@ -153,6 +156,7 @@ VpnService::VpnService( |
| network_state_handler_(network_state_handler), |
| active_configuration_(nullptr), |
| weak_factory_(this) { |
| + app_window_registry_->AddObserver(this); |
|
bartfab (slow)
2015/03/10 13:28:40
Nit: No longer needed.
|
| extension_registry_->AddObserver(this); |
| network_state_handler_->AddObserver(this, FROM_HERE); |
| network_configuration_handler_->AddObserver(this); |
| @@ -162,6 +166,7 @@ VpnService::~VpnService() { |
| network_configuration_handler_->RemoveObserver(this); |
| network_state_handler_->RemoveObserver(this, FROM_HERE); |
| extension_registry_->RemoveObserver(this); |
| + app_window_registry_->RemoveObserver(this); |
|
bartfab (slow)
2015/03/10 13:28:40
Nit: No longer needed.
|
| STLDeleteContainerPairSecondPointers(key_to_configuration_map_.begin(), |
| key_to_configuration_map_.end()); |
| } |
| @@ -342,6 +347,9 @@ void VpnService::DestroyConfiguration(const std::string& extension_id, |
| VpnConfiguration* configuration = key_to_configuration_map_[key]; |
| const std::string service_path = configuration->service_path(); |
| + if (active_configuration_ == configuration) { |
| + configuration->OnPlatformMessage(api_vpn::PLATFORM_MESSAGE_DISCONNECTED); |
| + } |
| DestroyConfigurationInternal(configuration); |
| network_configuration_handler_->RemoveConfiguration( |
| @@ -421,6 +429,34 @@ void VpnService::OnExtensionUninstalled( |
| } |
| } |
| +void VpnService::OnExtensionUnloaded( |
| + content::BrowserContext* browser_context, |
| + const extensions::Extension* extension, |
| + extensions::UnloadedExtensionInfo::Reason reason) { |
| + if (browser_context != browser_context_) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + |
| + if (active_configuration_ && |
| + active_configuration_->extension_id() == extension->id()) { |
| + shill_client_->UpdateConnectionState( |
| + active_configuration_->object_path(), |
| + static_cast<uint32_t>(api_vpn::VPN_CONNECTION_STATE_FAILURE), |
| + base::Bind(base::DoNothing), base::Bind(DoNothingFailureCallback)); |
| + } |
| +} |
| + |
| +void VpnService::OnAppWindowRemoved(extensions::AppWindow* app_window) { |
|
bartfab (slow)
2015/03/10 13:28:40
Nit: As discussed offline, we do not need this.
|
| + if (active_configuration_ && |
| + active_configuration_->extension_id() == app_window->extension_id()) { |
| + shill_client_->UpdateConnectionState( |
| + active_configuration_->object_path(), |
| + static_cast<uint32_t>(api_vpn::VPN_CONNECTION_STATE_FAILURE), |
| + base::Bind(base::DoNothing), base::Bind(DoNothingFailureCallback)); |
| + } |
| +} |
| + |
| void VpnService::OnCreateConfigurationSuccess( |
| const VpnService::SuccessCallback& callback, |
| VpnConfiguration* configuration, |