Index: chrome/browser/extensions/permissions_updater_unittest.cc |
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc |
index 7b199f74a5c662c0a3a85123779e04b4392576b8..6179b5030b67a75232eeb0fdd29840252f1b5705 100644 |
--- a/chrome/browser/extensions/permissions_updater_unittest.cc |
+++ b/chrome/browser/extensions/permissions_updater_unittest.cc |
@@ -11,10 +11,12 @@ |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_service_test_base.h" |
+#include "chrome/browser/extensions/extension_util.h" |
#include "chrome/browser/extensions/permissions_updater.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/extensions/extension_test_util.h" |
#include "chrome/test/base/testing_profile.h" |
+#include "components/crx_file/id_util.h" |
#include "content/public/browser/notification_observer.h" |
#include "content/public/browser/notification_registrar.h" |
#include "content/public/browser/notification_service.h" |
@@ -36,7 +38,8 @@ namespace { |
scoped_refptr<const Extension> CreateExtensionWithPermissions( |
const std::set<URLPattern>& scriptable_hosts, |
const std::set<URLPattern>& explicit_hosts, |
- Manifest::Location location) { |
+ Manifest::Location location, |
+ const std::string& name) { |
ListBuilder scriptable_host_list; |
for (std::set<URLPattern>::const_iterator pattern = scriptable_hosts.begin(); |
pattern != scriptable_hosts.end(); |
@@ -59,12 +62,13 @@ scoped_refptr<const Extension> CreateExtensionWithPermissions( |
.SetLocation(location) |
.SetManifest( |
DictionaryBuilder() |
- .Set("name", "extension") |
+ .Set("name", name) |
.Set("description", "foo") |
.Set("manifest_version", 2) |
.Set("version", "0.1.2.3") |
.Set("content_scripts", ListBuilder().Append(script.Pass())) |
.Set("permissions", explicit_host_list.Pass())) |
+ .SetID(crx_file::id_util::GenerateId(name)) |
.Build(); |
} |
@@ -300,7 +304,7 @@ TEST_F(PermissionsUpdaterTest, WithholdAllHosts) { |
all_host_patterns, safe_patterns); |
scoped_refptr<const Extension> extension = CreateExtensionWithPermissions( |
- all_patterns, all_patterns, Manifest::INTERNAL); |
+ all_patterns, all_patterns, Manifest::INTERNAL, "a"); |
const PermissionsData* permissions_data = extension->permissions_data(); |
PermissionsUpdater updater(profile_.get()); |
updater.InitializePermissions(extension.get()); |
@@ -359,7 +363,7 @@ TEST_F(PermissionsUpdaterTest, WithholdAllHosts) { |
// Creating a component extension should result in no withheld permissions. |
extension = CreateExtensionWithPermissions( |
- all_patterns, all_patterns, Manifest::COMPONENT); |
+ all_patterns, all_patterns, Manifest::COMPONENT, "b"); |
permissions_data = extension->permissions_data(); |
updater.InitializePermissions(extension.get()); |
EXPECT_TRUE(SetsAreEqual( |
@@ -380,7 +384,7 @@ TEST_F(PermissionsUpdaterTest, WithholdAllHosts) { |
// Without the switch, we shouldn't withhold anything. |
switch_override.reset(); |
extension = CreateExtensionWithPermissions( |
- all_patterns, all_patterns, Manifest::INTERNAL); |
+ all_patterns, all_patterns, Manifest::INTERNAL, "c"); |
permissions_data = extension->permissions_data(); |
updater.InitializePermissions(extension.get()); |
EXPECT_TRUE(SetsAreEqual( |
@@ -399,4 +403,73 @@ TEST_F(PermissionsUpdaterTest, WithholdAllHosts) { |
.empty()); |
} |
+// Tests that withholding all hosts behaves properly with extensions installed |
+// when the switch is turned on and off. |
+TEST_F(PermissionsUpdaterTest, WithholdAllHostsWithTransientSwitch) { |
+ InitializeEmptyExtensionService(); |
+ |
+ URLPattern all_hosts(URLPattern::SCHEME_ALL, "<all_urls>"); |
+ std::set<URLPattern> all_host_patterns; |
+ all_host_patterns.insert(all_hosts); |
+ |
+ scoped_refptr<const Extension> extension_a = CreateExtensionWithPermissions( |
+ all_host_patterns, all_host_patterns, Manifest::INTERNAL, "a"); |
+ PermissionsUpdater updater(profile()); |
+ updater.InitializePermissions(extension_a.get()); |
+ const PermissionsData* permissions_data = extension_a->permissions_data(); |
+ |
+ // Since the extension was created without the switch on, it should default |
+ // to having all urls access. |
+ EXPECT_TRUE(SetsAreEqual( |
+ permissions_data->active_permissions()->scriptable_hosts().patterns(), |
+ all_host_patterns)); |
+ EXPECT_TRUE( |
+ permissions_data->withheld_permissions()->scriptable_hosts().is_empty()); |
+ EXPECT_TRUE(util::AllowedScriptingOnAllUrls(extension_a->id(), profile())); |
+ |
+ // Enable the switch, and re-init permission for the extension. |
+ scoped_ptr<FeatureSwitch::ScopedOverride> switch_override( |
+ new FeatureSwitch::ScopedOverride(FeatureSwitch::scripts_require_action(), |
+ FeatureSwitch::OVERRIDE_ENABLED)); |
+ updater.InitializePermissions(extension_a.get()); |
+ |
+ // Since the extension was installed when the switch was off, it should still |
+ // have the all urls pref. |
+ permissions_data = extension_a->permissions_data(); |
+ EXPECT_TRUE(SetsAreEqual( |
+ permissions_data->active_permissions()->scriptable_hosts().patterns(), |
+ all_host_patterns)); |
+ EXPECT_TRUE( |
+ permissions_data->withheld_permissions()->scriptable_hosts().is_empty()); |
+ EXPECT_TRUE(util::AllowedScriptingOnAllUrls(extension_a->id(), profile())); |
+ |
+ // Load a new extension, which also has all urls. Since the switch is now on, |
+ // the permissions should be withheld. |
+ scoped_refptr<const Extension> extension_b = CreateExtensionWithPermissions( |
+ all_host_patterns, all_host_patterns, Manifest::INTERNAL, "b"); |
+ updater.InitializePermissions(extension_b.get()); |
+ permissions_data = extension_b->permissions_data(); |
+ |
+ EXPECT_TRUE( |
+ permissions_data->active_permissions()->scriptable_hosts().is_empty()); |
+ EXPECT_TRUE(SetsAreEqual( |
+ permissions_data->withheld_permissions()->scriptable_hosts().patterns(), |
+ all_host_patterns)); |
+ EXPECT_FALSE(util::AllowedScriptingOnAllUrls(extension_b->id(), profile())); |
+ |
+ // Disable the switch, and reload the extension. |
+ switch_override.reset(); |
+ updater.InitializePermissions(extension_b.get()); |
+ |
+ // Since the extension was installed with the switch on, it should still be |
+ // restricted with the switch off. |
+ permissions_data = extension_b->permissions_data(); |
+ EXPECT_TRUE( |
+ permissions_data->active_permissions()->scriptable_hosts().is_empty()); |
+ EXPECT_TRUE(SetsAreEqual( |
+ permissions_data->withheld_permissions()->scriptable_hosts().patterns(), |
+ all_host_patterns)); |
+ EXPECT_FALSE(util::AllowedScriptingOnAllUrls(extension_b->id(), profile())); |
+} |
+ |
} // namespace extensions |