Skip to content

Commit

Permalink
Destroy configurations created by VPN extension on disable
Browse files Browse the repository at this point in the history
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}
  • Loading branch information
kaliamoorthi authored and Commit bot committed Mar 24, 2015
1 parent 6c6edea commit b92b69a
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 9 deletions.
51 changes: 51 additions & 0 deletions chrome/browser/extensions/api/vpn_provider/vpn_provider_apitest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
27 changes: 18 additions & 9 deletions extensions/browser/api/vpn_provider/vpn_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand All @@ -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,
Expand All @@ -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(
Expand Down
4 changes: 4 additions & 0 deletions extensions/browser/api/vpn_provider/vpn_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit b92b69a

Please sign in to comment.