Index: chrome/common/extensions/extension_unittest.cc |
diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc |
index e3d2d4f984f3b5f78f83f6dd396f3a8917acff83..7248cacac01c3bf608cc876a8a1f9587a2d188a6 100644 |
--- a/chrome/common/extensions/extension_unittest.cc |
+++ b/chrome/common/extensions/extension_unittest.cc |
@@ -777,7 +777,8 @@ TEST(ExtensionTest, MimeTypeSniffing) { |
} |
static scoped_refptr<Extension> LoadManifest(const std::string& dir, |
- const std::string& test_file) { |
+ const std::string& test_file, |
+ int extra_flags) { |
FilePath path; |
PathService::Get(chrome::DIR_TEST_DATA, &path); |
path = path.AppendASCII("extensions") |
@@ -795,11 +796,16 @@ static scoped_refptr<Extension> LoadManifest(const std::string& dir, |
scoped_refptr<Extension> extension = Extension::Create( |
path.DirName(), Extension::INVALID, |
*static_cast<DictionaryValue*>(result.get()), |
- Extension::STRICT_ERROR_CHECKS, &error); |
+ Extension::STRICT_ERROR_CHECKS | extra_flags, &error); |
EXPECT_TRUE(extension) << error; |
return extension; |
} |
+static scoped_refptr<Extension> LoadManifest(const std::string& dir, |
+ const std::string& test_file) { |
+ return LoadManifest(dir, test_file, Extension::NO_FLAGS); |
+} |
+ |
TEST(ExtensionTest, EffectiveHostPermissions) { |
scoped_refptr<Extension> extension; |
ExtensionExtent hosts; |
@@ -1165,6 +1171,71 @@ TEST(ExtensionTest, GetHostPermissionMessages_ManyHosts) { |
UTF16ToUTF8(warnings[0])); |
} |
+TEST(ExtensionTest, WantsFileAccess) { |
+ scoped_refptr<Extension> extension; |
+ GURL file_url("file:///etc/passwd"); |
+ |
+ // <all_urls> permission |
+ extension = LoadManifest("permissions", "permissions_all_urls.json"); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ extension = LoadManifest( |
+ "permissions", "permissions_all_urls.json", Extension::ALLOW_FILE_ACCESS); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ |
+ // file:///* permission |
+ extension = LoadManifest("permissions", "permissions_file_scheme.json"); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ extension = LoadManifest("permissions", "permissions_file_scheme.json", |
+ Extension::ALLOW_FILE_ACCESS); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ |
+ // http://* permission |
+ extension = LoadManifest("permissions", "permissions_http_scheme.json"); |
+ EXPECT_FALSE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ extension = LoadManifest("permissions", "permissions_http_scheme.json", |
+ Extension::ALLOW_FILE_ACCESS); |
+ EXPECT_FALSE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ |
+ // <all_urls> content script match |
+ extension = LoadManifest("permissions", "content_script_all_urls.json"); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
+ file_url, &extension->content_scripts()[0], NULL)); |
+ extension = LoadManifest("permissions", "content_script_all_urls.json", |
+ Extension::ALLOW_FILE_ACCESS); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_TRUE(extension->CanExecuteScriptOnPage( |
+ file_url, &extension->content_scripts()[0], NULL)); |
+ |
+ // file:///* content script match |
+ extension = LoadManifest("permissions", "content_script_file_scheme.json"); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
+ file_url, &extension->content_scripts()[0], NULL)); |
+ extension = LoadManifest("permissions", "content_script_file_scheme.json", |
+ Extension::ALLOW_FILE_ACCESS); |
+ EXPECT_TRUE(extension->wants_file_access()); |
+ EXPECT_TRUE(extension->CanExecuteScriptOnPage( |
+ file_url, &extension->content_scripts()[0], NULL)); |
+ |
+ // http://* content script match |
+ extension = LoadManifest("permissions", "content_script_http_scheme.json"); |
+ EXPECT_FALSE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
+ file_url, &extension->content_scripts()[0], NULL)); |
+ extension = LoadManifest("permissions", "content_script_http_scheme.json", |
+ Extension::ALLOW_FILE_ACCESS); |
+ EXPECT_FALSE(extension->wants_file_access()); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
+ file_url, &extension->content_scripts()[0], NULL)); |
+} |
+ |
TEST(ExtensionTest, GetDistinctHostsForDisplay) { |
std::vector<std::string> expected; |
expected.push_back("www.foo.com"); |