summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaliamoorthi <kaliamoorthi@chromium.org>2015-03-24 06:03:01 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-24 13:03:49 +0000
commitb92b69ac6bbae38ad5af4a969d6f189349f399ce (patch)
treefeeb81c71079eb34e51eea5eb2a396a6c2eea8e0
parent6c6edea62387e69a5b9fd77fe6b3d0cc84fbad20 (diff)
downloadchromium_src-b92b69ac6bbae38ad5af4a969d6f189349f399ce.zip
chromium_src-b92b69ac6bbae38ad5af4a969d6f189349f399ce.tar.gz
chromium_src-b92b69ac6bbae38ad5af4a969d6f189349f399ce.tar.bz2
Destroy configurations created by VPN extension on disable
The CL destroys VPN configurations created by an extension when the extension is disabled. BUG=468477 Review URL: https://codereview.chromium.org/1028213002 Cr-Commit-Position: refs/heads/master@{#321984}
-rw-r--r--chrome/browser/extensions/api/vpn_provider/vpn_provider_apitest.cc51
-rw-r--r--extensions/browser/api/vpn_provider/vpn_service.cc27
-rw-r--r--extensions/browser/api/vpn_provider/vpn_service.h4
3 files changed, 73 insertions, 9 deletions
diff --git a/chrome/browser/extensions/api/vpn_provider/vpn_provider_apitest.cc b/chrome/browser/extensions/api/vpn_provider/vpn_provider_apitest.cc
index 017df6b..1ffe99e 100644
--- a/chrome/browser/extensions/api/vpn_provider/vpn_provider_apitest.cc
+++ b/chrome/browser/extensions/api/vpn_provider/vpn_provider_apitest.cc
@@ -418,4 +418,55 @@ IN_PROC_BROWSER_TEST_F(VpnProviderApiTest, CreateUninstall) {
->GetService(service_path, &profile_path, &properties));
}
+IN_PROC_BROWSER_TEST_F(VpnProviderApiTest, CreateDisable) {
+ LoadVpnExtension();
+ AddNetworkProfileForUser();
+ EXPECT_TRUE(RunExtensionTest("createConfigSuccess"));
+ EXPECT_TRUE(DoesConfigExist(kTestConfig));
+
+ const std::string service_path = GetSingleServicePath();
+ std::string profile_path;
+ base::DictionaryValue properties;
+ EXPECT_TRUE(DBusThreadManager::Get()
+ ->GetShillProfileClient()
+ ->GetTestInterface()
+ ->GetService(service_path, &profile_path, &properties));
+
+ ExtensionService* extension_service =
+ extensions::ExtensionSystem::Get(profile())->extension_service();
+ extension_service->DisableExtension(extension_id_,
+ extensions::Extension::DISABLE_NONE);
+ content::RunAllPendingInMessageLoop();
+ EXPECT_FALSE(DoesConfigExist(kTestConfig));
+ EXPECT_FALSE(DBusThreadManager::Get()
+ ->GetShillProfileClient()
+ ->GetTestInterface()
+ ->GetService(service_path, &profile_path, &properties));
+}
+
+IN_PROC_BROWSER_TEST_F(VpnProviderApiTest, CreateBlacklist) {
+ LoadVpnExtension();
+ AddNetworkProfileForUser();
+ EXPECT_TRUE(RunExtensionTest("createConfigSuccess"));
+ EXPECT_TRUE(DoesConfigExist(kTestConfig));
+
+ const std::string service_path = GetSingleServicePath();
+ std::string profile_path;
+ base::DictionaryValue properties;
+ EXPECT_TRUE(DBusThreadManager::Get()
+ ->GetShillProfileClient()
+ ->GetTestInterface()
+ ->GetService(service_path, &profile_path, &properties));
+
+ ExtensionService* extension_service =
+ extensions::ExtensionSystem::Get(profile())->extension_service();
+ extension_service->BlacklistExtensionForTest(extension_id_);
+ content::RunAllPendingInMessageLoop();
+ EXPECT_FALSE(DoesConfigExist(kTestConfig));
+ EXPECT_FALSE(DBusThreadManager::Get()
+ ->GetShillProfileClient()
+ ->GetTestInterface()
+ ->GetService(service_path, &profile_path, &properties));
+}
+
} // namespace chromeos
diff --git a/extensions/browser/api/vpn_provider/vpn_service.cc b/extensions/browser/api/vpn_provider/vpn_service.cc
index 1e94b18..608d254 100644
--- a/extensions/browser/api/vpn_provider/vpn_service.cc
+++ b/extensions/browser/api/vpn_provider/vpn_service.cc
@@ -431,15 +431,8 @@ bool VpnService::VerifyConfigIsConnectedForTesting(
return DoesActiveConfigurationExistAndIsAccessAuthorized(extension_id);
}
-void VpnService::OnExtensionUninstalled(
- content::BrowserContext* browser_context,
- const extensions::Extension* extension,
- extensions::UninstallReason reason) {
- if (browser_context != browser_context_) {
- NOTREACHED();
- return;
- }
-
+void VpnService::DestroyConfigurationsForExtension(
+ const extensions::Extension* extension) {
std::vector<VpnConfiguration*> to_be_destroyed;
for (const auto& iter : key_to_configuration_map_) {
if (iter.second->extension_id() == extension->id()) {
@@ -455,6 +448,18 @@ void VpnService::OnExtensionUninstalled(
}
}
+void VpnService::OnExtensionUninstalled(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UninstallReason reason) {
+ if (browser_context != browser_context_) {
+ NOTREACHED();
+ return;
+ }
+
+ DestroyConfigurationsForExtension(extension);
+}
+
void VpnService::OnExtensionUnloaded(
content::BrowserContext* browser_context,
const extensions::Extension* extension,
@@ -471,6 +476,10 @@ void VpnService::OnExtensionUnloaded(
static_cast<uint32_t>(api_vpn::VPN_CONNECTION_STATE_FAILURE),
base::Bind(base::DoNothing), base::Bind(DoNothingFailureCallback));
}
+ if (reason == extensions::UnloadedExtensionInfo::REASON_DISABLE ||
+ reason == extensions::UnloadedExtensionInfo::REASON_BLACKLIST) {
+ DestroyConfigurationsForExtension(extension);
+ }
}
void VpnService::OnCreateConfigurationSuccess(
diff --git a/extensions/browser/api/vpn_provider/vpn_service.h b/extensions/browser/api/vpn_provider/vpn_service.h
index 25e9317..72c6240 100644
--- a/extensions/browser/api/vpn_provider/vpn_service.h
+++ b/extensions/browser/api/vpn_provider/vpn_service.h
@@ -215,6 +215,10 @@ class VpnService : public KeyedService,
const std::string& event_name,
scoped_ptr<base::ListValue> event_args);
+ // Destroy configurations belonging to the extension.
+ void DestroyConfigurationsForExtension(
+ const extensions::Extension* extension);
+
// Set the active configuration.
void SetActiveConfiguration(VpnConfiguration* configuration);