| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
| 9 #include "base/string16.h" | 9 #include "base/string16.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 bool CheckSocketPermission( | 36 bool CheckSocketPermission( |
| 37 scoped_refptr<Extension> extension, | 37 scoped_refptr<Extension> extension, |
| 38 SocketPermissionRequest::OperationType type, | 38 SocketPermissionRequest::OperationType type, |
| 39 const char* host, | 39 const char* host, |
| 40 int port) { | 40 int port) { |
| 41 SocketPermission::CheckParam param(type, host, port); | 41 SocketPermission::CheckParam param(type, host, port); |
| 42 return PermissionsData::CheckAPIPermissionWithParam( | 42 return PermissionsData::CheckAPIPermissionWithParam( |
| 43 extension, APIPermission::kSocket, ¶m); | 43 extension.get(), APIPermission::kSocket, ¶m); |
| 44 } | 44 } |
| 45 | 45 |
| 46 } // namespace | 46 } // namespace |
| 47 | 47 |
| 48 TEST(ExtensionPermissionsTest, EffectiveHostPermissions) { | 48 TEST(ExtensionPermissionsTest, EffectiveHostPermissions) { |
| 49 scoped_refptr<Extension> extension; | 49 scoped_refptr<Extension> extension; |
| 50 URLPatternSet hosts; | 50 URLPatternSet hosts; |
| 51 | 51 |
| 52 extension = LoadManifest("effective_host_permissions", "empty.json"); | 52 extension = LoadManifest("effective_host_permissions", "empty.json"); |
| 53 EXPECT_EQ( | 53 EXPECT_EQ(0u, |
| 54 0u, | 54 PermissionsData::GetEffectiveHostPermissions(extension.get()) |
| 55 PermissionsData::GetEffectiveHostPermissions( | 55 .patterns().size()); |
| 56 extension).patterns().size()); | |
| 57 EXPECT_FALSE(hosts.MatchesURL(GURL("http://www.google.com"))); | 56 EXPECT_FALSE(hosts.MatchesURL(GURL("http://www.google.com"))); |
| 58 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 57 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 59 | 58 |
| 60 extension = LoadManifest("effective_host_permissions", "one_host.json"); | 59 extension = LoadManifest("effective_host_permissions", "one_host.json"); |
| 61 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 60 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 62 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); | 61 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); |
| 63 EXPECT_FALSE(hosts.MatchesURL(GURL("https://www.google.com"))); | 62 EXPECT_FALSE(hosts.MatchesURL(GURL("https://www.google.com"))); |
| 64 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 63 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 65 | 64 |
| 66 extension = LoadManifest("effective_host_permissions", | 65 extension = LoadManifest("effective_host_permissions", |
| 67 "one_host_wildcard.json"); | 66 "one_host_wildcard.json"); |
| 68 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 67 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 69 EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com"))); | 68 EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com"))); |
| 70 EXPECT_TRUE(hosts.MatchesURL(GURL("http://foo.google.com"))); | 69 EXPECT_TRUE(hosts.MatchesURL(GURL("http://foo.google.com"))); |
| 71 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 70 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 72 | 71 |
| 73 extension = LoadManifest("effective_host_permissions", "two_hosts.json"); | 72 extension = LoadManifest("effective_host_permissions", "two_hosts.json"); |
| 74 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 73 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 75 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); | 74 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); |
| 76 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.reddit.com"))); | 75 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.reddit.com"))); |
| 77 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 76 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 78 | 77 |
| 79 extension = LoadManifest("effective_host_permissions", | 78 extension = LoadManifest("effective_host_permissions", |
| 80 "https_not_considered.json"); | 79 "https_not_considered.json"); |
| 81 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 80 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 82 EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com"))); | 81 EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com"))); |
| 83 EXPECT_TRUE(hosts.MatchesURL(GURL("https://google.com"))); | 82 EXPECT_TRUE(hosts.MatchesURL(GURL("https://google.com"))); |
| 84 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 83 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 85 | 84 |
| 86 extension = LoadManifest("effective_host_permissions", | 85 extension = LoadManifest("effective_host_permissions", |
| 87 "two_content_scripts.json"); | 86 "two_content_scripts.json"); |
| 88 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 87 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 89 EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com"))); | 88 EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com"))); |
| 90 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.reddit.com"))); | 89 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.reddit.com"))); |
| 91 EXPECT_TRUE(extension->GetActivePermissions()->HasEffectiveAccessToURL( | 90 EXPECT_TRUE(extension->GetActivePermissions()->HasEffectiveAccessToURL( |
| 92 GURL("http://www.reddit.com"))); | 91 GURL("http://www.reddit.com"))); |
| 93 EXPECT_TRUE(hosts.MatchesURL(GURL("http://news.ycombinator.com"))); | 92 EXPECT_TRUE(hosts.MatchesURL(GURL("http://news.ycombinator.com"))); |
| 94 EXPECT_TRUE(extension->GetActivePermissions()->HasEffectiveAccessToURL( | 93 EXPECT_TRUE(extension->GetActivePermissions()->HasEffectiveAccessToURL( |
| 95 GURL("http://news.ycombinator.com"))); | 94 GURL("http://news.ycombinator.com"))); |
| 96 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 95 EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 97 | 96 |
| 98 extension = LoadManifest("effective_host_permissions", "all_hosts.json"); | 97 extension = LoadManifest("effective_host_permissions", "all_hosts.json"); |
| 99 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 98 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 100 EXPECT_TRUE(hosts.MatchesURL(GURL("http://test/"))); | 99 EXPECT_TRUE(hosts.MatchesURL(GURL("http://test/"))); |
| 101 EXPECT_FALSE(hosts.MatchesURL(GURL("https://test/"))); | 100 EXPECT_FALSE(hosts.MatchesURL(GURL("https://test/"))); |
| 102 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); | 101 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); |
| 103 EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 102 EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 104 | 103 |
| 105 extension = LoadManifest("effective_host_permissions", "all_hosts2.json"); | 104 extension = LoadManifest("effective_host_permissions", "all_hosts2.json"); |
| 106 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 105 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 107 EXPECT_TRUE(hosts.MatchesURL(GURL("http://test/"))); | 106 EXPECT_TRUE(hosts.MatchesURL(GURL("http://test/"))); |
| 108 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); | 107 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); |
| 109 EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 108 EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 110 | 109 |
| 111 extension = LoadManifest("effective_host_permissions", "all_hosts3.json"); | 110 extension = LoadManifest("effective_host_permissions", "all_hosts3.json"); |
| 112 hosts = PermissionsData::GetEffectiveHostPermissions(extension); | 111 hosts = PermissionsData::GetEffectiveHostPermissions(extension.get()); |
| 113 EXPECT_FALSE(hosts.MatchesURL(GURL("http://test/"))); | 112 EXPECT_FALSE(hosts.MatchesURL(GURL("http://test/"))); |
| 114 EXPECT_TRUE(hosts.MatchesURL(GURL("https://test/"))); | 113 EXPECT_TRUE(hosts.MatchesURL(GURL("https://test/"))); |
| 115 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); | 114 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); |
| 116 EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension)); | 115 EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get())); |
| 117 } | 116 } |
| 118 | 117 |
| 119 TEST(ExtensionPermissionsTest, SocketPermissions) { | 118 TEST(ExtensionPermissionsTest, SocketPermissions) { |
| 120 // Set feature current channel to appropriate value. | 119 // Set feature current channel to appropriate value. |
| 121 Feature::ScopedCurrentChannel scoped_channel( | 120 Feature::ScopedCurrentChannel scoped_channel( |
| 122 chrome::VersionInfo::CHANNEL_DEV); | 121 chrome::VersionInfo::CHANNEL_DEV); |
| 123 scoped_refptr<Extension> extension; | 122 scoped_refptr<Extension> extension; |
| 124 std::string error; | 123 std::string error; |
| 125 | 124 |
| 126 extension = LoadManifest("socket_permissions", "empty.json"); | 125 extension = LoadManifest("socket_permissions", "empty.json"); |
| 127 EXPECT_FALSE(CheckSocketPermission(extension, | 126 EXPECT_FALSE(CheckSocketPermission(extension, |
| 128 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); | 127 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); |
| 129 | 128 |
| 130 extension = LoadManifestUnchecked("socket_permissions", | 129 extension = LoadManifestUnchecked("socket_permissions", |
| 131 "socket1.json", | 130 "socket1.json", |
| 132 Manifest::INTERNAL, Extension::NO_FLAGS, | 131 Manifest::INTERNAL, Extension::NO_FLAGS, |
| 133 &error); | 132 &error); |
| 134 EXPECT_TRUE(extension == NULL); | 133 EXPECT_TRUE(extension.get() == NULL); |
| 135 ASSERT_EQ(ErrorUtils::FormatErrorMessage( | 134 ASSERT_EQ(ErrorUtils::FormatErrorMessage( |
| 136 extension_manifest_errors::kInvalidPermission, "socket"), error); | 135 extension_manifest_errors::kInvalidPermission, "socket"), |
| 136 error); |
| 137 | 137 |
| 138 extension = LoadManifest("socket_permissions", "socket2.json"); | 138 extension = LoadManifest("socket_permissions", "socket2.json"); |
| 139 EXPECT_TRUE(CheckSocketPermission(extension, | 139 EXPECT_TRUE(CheckSocketPermission(extension, |
| 140 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); | 140 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); |
| 141 EXPECT_FALSE(CheckSocketPermission( | 141 EXPECT_FALSE(CheckSocketPermission( |
| 142 extension, SocketPermissionRequest::UDP_BIND, "", 80)); | 142 extension, SocketPermissionRequest::UDP_BIND, "", 80)); |
| 143 EXPECT_TRUE(CheckSocketPermission( | 143 EXPECT_TRUE(CheckSocketPermission( |
| 144 extension, SocketPermissionRequest::UDP_BIND, "", 8888)); | 144 extension, SocketPermissionRequest::UDP_BIND, "", 8888)); |
| 145 | 145 |
| 146 EXPECT_FALSE(CheckSocketPermission( | 146 EXPECT_FALSE(CheckSocketPermission( |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 EXPECT_EQ(kTests[i].expect_success, | 195 EXPECT_EQ(kTests[i].expect_success, |
| 196 extension->HasAPIPermission(kTests[i].permission_name)) | 196 extension->HasAPIPermission(kTests[i].permission_name)) |
| 197 << "Permission being tested: " << kTests[i].permission_name; | 197 << "Permission being tested: " << kTests[i].permission_name; |
| 198 } | 198 } |
| 199 } | 199 } |
| 200 | 200 |
| 201 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyAPIPermissions) { | 201 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyAPIPermissions) { |
| 202 scoped_refptr<Extension> extension; | 202 scoped_refptr<Extension> extension; |
| 203 extension = LoadManifest("permissions", "many-apis.json"); | 203 extension = LoadManifest("permissions", "many-apis.json"); |
| 204 std::vector<string16> warnings = | 204 std::vector<string16> warnings = |
| 205 PermissionsData::GetPermissionMessageStrings(extension); | 205 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 206 ASSERT_EQ(6u, warnings.size()); | 206 ASSERT_EQ(6u, warnings.size()); |
| 207 EXPECT_EQ("Access your data on api.flickr.com", | 207 EXPECT_EQ("Access your data on api.flickr.com", |
| 208 UTF16ToUTF8(warnings[0])); | 208 UTF16ToUTF8(warnings[0])); |
| 209 EXPECT_EQ("Read and modify your bookmarks", UTF16ToUTF8(warnings[1])); | 209 EXPECT_EQ("Read and modify your bookmarks", UTF16ToUTF8(warnings[1])); |
| 210 EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[2])); | 210 EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[2])); |
| 211 EXPECT_EQ("Read and modify your browsing history", UTF16ToUTF8(warnings[3])); | 211 EXPECT_EQ("Read and modify your browsing history", UTF16ToUTF8(warnings[3])); |
| 212 EXPECT_EQ("Access your tabs and browsing activity", UTF16ToUTF8(warnings[4])); | 212 EXPECT_EQ("Access your tabs and browsing activity", UTF16ToUTF8(warnings[4])); |
| 213 EXPECT_EQ("Manage your apps, extensions, and themes", | 213 EXPECT_EQ("Manage your apps, extensions, and themes", |
| 214 UTF16ToUTF8(warnings[5])); | 214 UTF16ToUTF8(warnings[5])); |
| 215 } | 215 } |
| 216 | 216 |
| 217 TEST(ExtensionPermissionsTest, GetPermissionMessages_LocationApiPermission) { | 217 TEST(ExtensionPermissionsTest, GetPermissionMessages_LocationApiPermission) { |
| 218 scoped_refptr<Extension> extension; | 218 scoped_refptr<Extension> extension; |
| 219 extension = LoadManifest("permissions", | 219 extension = LoadManifest("permissions", |
| 220 "location-api.json", | 220 "location-api.json", |
| 221 Manifest::COMPONENT, | 221 Manifest::COMPONENT, |
| 222 Extension::NO_FLAGS); | 222 Extension::NO_FLAGS); |
| 223 std::vector<string16> warnings = | 223 std::vector<string16> warnings = |
| 224 PermissionsData::GetPermissionMessageStrings(extension); | 224 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 225 ASSERT_EQ(1u, warnings.size()); | 225 ASSERT_EQ(1u, warnings.size()); |
| 226 EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[0])); | 226 EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[0])); |
| 227 } | 227 } |
| 228 | 228 |
| 229 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyHosts) { | 229 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyHosts) { |
| 230 scoped_refptr<Extension> extension; | 230 scoped_refptr<Extension> extension; |
| 231 extension = LoadManifest("permissions", "many-hosts.json"); | 231 extension = LoadManifest("permissions", "many-hosts.json"); |
| 232 std::vector<string16> warnings = | 232 std::vector<string16> warnings = |
| 233 PermissionsData::GetPermissionMessageStrings(extension); | 233 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 234 ASSERT_EQ(1u, warnings.size()); | 234 ASSERT_EQ(1u, warnings.size()); |
| 235 EXPECT_EQ("Access your data on encrypted.google.com and www.google.com", | 235 EXPECT_EQ("Access your data on encrypted.google.com and www.google.com", |
| 236 UTF16ToUTF8(warnings[0])); | 236 UTF16ToUTF8(warnings[0])); |
| 237 } | 237 } |
| 238 | 238 |
| 239 TEST(ExtensionPermissionsTest, GetPermissionMessages_Plugins) { | 239 TEST(ExtensionPermissionsTest, GetPermissionMessages_Plugins) { |
| 240 scoped_refptr<Extension> extension; | 240 scoped_refptr<Extension> extension; |
| 241 extension = LoadManifest("permissions", "plugins.json"); | 241 extension = LoadManifest("permissions", "plugins.json"); |
| 242 std::vector<string16> warnings = | 242 std::vector<string16> warnings = |
| 243 PermissionsData::GetPermissionMessageStrings(extension); | 243 PermissionsData::GetPermissionMessageStrings(extension.get()); |
| 244 // We don't parse the plugins key on Chrome OS, so it should not ask for any | 244 // We don't parse the plugins key on Chrome OS, so it should not ask for any |
| 245 // permissions. | 245 // permissions. |
| 246 #if defined(OS_CHROMEOS) | 246 #if defined(OS_CHROMEOS) |
| 247 ASSERT_EQ(0u, warnings.size()); | 247 ASSERT_EQ(0u, warnings.size()); |
| 248 #else | 248 #else |
| 249 ASSERT_EQ(1u, warnings.size()); | 249 ASSERT_EQ(1u, warnings.size()); |
| 250 EXPECT_EQ("Access all data on your computer and the websites you visit", | 250 EXPECT_EQ("Access all data on your computer and the websites you visit", |
| 251 UTF16ToUTF8(warnings[0])); | 251 UTF16ToUTF8(warnings[0])); |
| 252 #endif | 252 #endif |
| 253 } | 253 } |
| 254 | 254 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 private: | 357 private: |
| 358 // The set of all URLs above. | 358 // The set of all URLs above. |
| 359 std::set<GURL> urls_; | 359 std::set<GURL> urls_; |
| 360 }; | 360 }; |
| 361 | 361 |
| 362 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { | 362 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { |
| 363 // Test <all_urls> for regular extensions. | 363 // Test <all_urls> for regular extensions. |
| 364 scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture", | 364 scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture", |
| 365 "extension_regular_all.json"); | 365 "extension_regular_all.json"); |
| 366 | 366 |
| 367 EXPECT_TRUE(Allowed(extension, http_url)); | 367 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 368 EXPECT_TRUE(Allowed(extension, https_url)); | 368 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| 369 EXPECT_TRUE(Blocked(extension, file_url)); | 369 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 370 EXPECT_TRUE(Blocked(extension, settings_url)); | 370 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 371 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); | 371 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url)); |
| 372 EXPECT_TRUE(Blocked(extension, about_url)); | 372 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 373 EXPECT_TRUE(Blocked(extension, extension_url)); | 373 EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
| 374 | 374 |
| 375 // Test access to iframed content. | 375 // Test access to iframed content. |
| 376 GURL within_extension_url = extension->GetResourceURL("page.html"); | 376 GURL within_extension_url = extension->GetResourceURL("page.html"); |
| 377 EXPECT_TRUE(AllowedScript(extension, http_url, http_url_with_path)); | 377 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path)); |
| 378 EXPECT_TRUE(AllowedScript(extension, https_url, http_url_with_path)); | 378 EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path)); |
| 379 EXPECT_TRUE(AllowedScript(extension, http_url, within_extension_url)); | 379 EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url)); |
| 380 EXPECT_TRUE(AllowedScript(extension, https_url, within_extension_url)); | 380 EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url)); |
| 381 EXPECT_TRUE(BlockedScript(extension, http_url, extension_url)); | 381 EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url)); |
| 382 EXPECT_TRUE(BlockedScript(extension, https_url, extension_url)); | 382 EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url)); |
| 383 | 383 |
| 384 EXPECT_FALSE(PermissionsData::HasHostPermission(extension, settings_url)); | 384 EXPECT_FALSE( |
| 385 EXPECT_FALSE(PermissionsData::HasHostPermission(extension, about_url)); | 385 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
| 386 EXPECT_TRUE(PermissionsData::HasHostPermission(extension, favicon_url)); | 386 EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url)); |
| 387 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
| 387 | 388 |
| 388 // Test * for scheme, which implies just the http/https schemes. | 389 // Test * for scheme, which implies just the http/https schemes. |
| 389 extension = LoadManifestStrict("script_and_capture", | 390 extension = LoadManifestStrict("script_and_capture", |
| 390 "extension_wildcard.json"); | 391 "extension_wildcard.json"); |
| 391 EXPECT_TRUE(Allowed(extension, http_url)); | 392 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 392 EXPECT_TRUE(Allowed(extension, https_url)); | 393 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| 393 EXPECT_TRUE(Blocked(extension, settings_url)); | 394 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 394 EXPECT_TRUE(Blocked(extension, about_url)); | 395 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 395 EXPECT_TRUE(Blocked(extension, file_url)); | 396 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 396 EXPECT_TRUE(Blocked(extension, favicon_url)); | 397 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| 397 extension = LoadManifest("script_and_capture", | 398 extension = |
| 398 "extension_wildcard_settings.json"); | 399 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); |
| 399 EXPECT_TRUE(Blocked(extension, settings_url)); | 400 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 400 | 401 |
| 401 // Having chrome://*/ should not work for regular extensions. Note that | 402 // Having chrome://*/ should not work for regular extensions. Note that |
| 402 // for favicon access, we require the explicit pattern chrome://favicon/*. | 403 // for favicon access, we require the explicit pattern chrome://favicon/*. |
| 403 std::string error; | 404 std::string error; |
| 404 extension = LoadManifestUnchecked("script_and_capture", | 405 extension = LoadManifestUnchecked("script_and_capture", |
| 405 "extension_wildcard_chrome.json", | 406 "extension_wildcard_chrome.json", |
| 406 Manifest::INTERNAL, Extension::NO_FLAGS, | 407 Manifest::INTERNAL, Extension::NO_FLAGS, |
| 407 &error); | 408 &error); |
| 408 EXPECT_TRUE(extension == NULL); | 409 EXPECT_TRUE(extension.get() == NULL); |
| 409 EXPECT_EQ( | 410 EXPECT_EQ( |
| 410 ErrorUtils::FormatErrorMessage( | 411 ErrorUtils::FormatErrorMessage( |
| 411 extension_manifest_errors::kInvalidPermissionScheme, | 412 extension_manifest_errors::kInvalidPermissionScheme, "chrome://*/"), |
| 412 "chrome://*/"), | |
| 413 error); | 413 error); |
| 414 | 414 |
| 415 // Having chrome://favicon/* should not give you chrome://* | 415 // Having chrome://favicon/* should not give you chrome://* |
| 416 extension = LoadManifestStrict("script_and_capture", | 416 extension = LoadManifestStrict("script_and_capture", |
| 417 "extension_chrome_favicon_wildcard.json"); | 417 "extension_chrome_favicon_wildcard.json"); |
| 418 EXPECT_TRUE(Blocked(extension, settings_url)); | 418 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 419 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); | 419 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url)); |
| 420 EXPECT_TRUE(Blocked(extension, about_url)); | 420 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 421 EXPECT_TRUE(PermissionsData::HasHostPermission(extension, favicon_url)); | 421 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
| 422 | 422 |
| 423 // Having http://favicon should not give you chrome://favicon | 423 // Having http://favicon should not give you chrome://favicon |
| 424 extension = LoadManifestStrict("script_and_capture", | 424 extension = LoadManifestStrict("script_and_capture", |
| 425 "extension_http_favicon.json"); | 425 "extension_http_favicon.json"); |
| 426 EXPECT_TRUE(Blocked(extension, settings_url)); | 426 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 427 EXPECT_TRUE(Blocked(extension, favicon_url)); | 427 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| 428 | 428 |
| 429 // Component extensions with <all_urls> should get everything. | 429 // Component extensions with <all_urls> should get everything. |
| 430 extension = LoadManifest("script_and_capture", "extension_component_all.json", | 430 extension = LoadManifest("script_and_capture", "extension_component_all.json", |
| 431 Manifest::COMPONENT, Extension::NO_FLAGS); | 431 Manifest::COMPONENT, Extension::NO_FLAGS); |
| 432 EXPECT_TRUE(Allowed(extension, http_url)); | 432 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 433 EXPECT_TRUE(Allowed(extension, https_url)); | 433 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| 434 EXPECT_TRUE(Allowed(extension, settings_url)); | 434 EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
| 435 EXPECT_TRUE(Allowed(extension, about_url)); | 435 EXPECT_TRUE(Allowed(extension.get(), about_url)); |
| 436 EXPECT_TRUE(Allowed(extension, favicon_url)); | 436 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); |
| 437 EXPECT_TRUE(PermissionsData::HasHostPermission(extension, favicon_url)); | 437 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
| 438 | 438 |
| 439 // Component extensions should only get access to what they ask for. | 439 // Component extensions should only get access to what they ask for. |
| 440 extension = LoadManifest("script_and_capture", | 440 extension = LoadManifest("script_and_capture", |
| 441 "extension_component_google.json", Manifest::COMPONENT, | 441 "extension_component_google.json", Manifest::COMPONENT, |
| 442 Extension::NO_FLAGS); | 442 Extension::NO_FLAGS); |
| 443 EXPECT_TRUE(Allowed(extension, http_url)); | 443 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 444 EXPECT_TRUE(Blocked(extension, https_url)); | 444 EXPECT_TRUE(Blocked(extension.get(), https_url)); |
| 445 EXPECT_TRUE(Blocked(extension, file_url)); | 445 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 446 EXPECT_TRUE(Blocked(extension, settings_url)); | 446 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 447 EXPECT_TRUE(Blocked(extension, favicon_url)); | 447 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| 448 EXPECT_TRUE(Blocked(extension, about_url)); | 448 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 449 EXPECT_TRUE(Blocked(extension, extension_url)); | 449 EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
| 450 EXPECT_FALSE(PermissionsData::HasHostPermission(extension, settings_url)); | 450 EXPECT_FALSE( |
| 451 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
| 451 } | 452 } |
| 452 | 453 |
| 453 | |
| 454 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { | 454 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
| 455 CommandLine::ForCurrentProcess()->AppendSwitch( | 455 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 456 switches::kExtensionsOnChromeURLs); | 456 switches::kExtensionsOnChromeURLs); |
| 457 | 457 |
| 458 scoped_refptr<Extension> extension; | 458 scoped_refptr<Extension> extension; |
| 459 | 459 |
| 460 // Test <all_urls> for regular extensions. | 460 // Test <all_urls> for regular extensions. |
| 461 extension = LoadManifestStrict("script_and_capture", | 461 extension = LoadManifestStrict("script_and_capture", |
| 462 "extension_regular_all.json"); | 462 "extension_regular_all.json"); |
| 463 EXPECT_TRUE(Allowed(extension, http_url)); | 463 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 464 EXPECT_TRUE(Allowed(extension, https_url)); | 464 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| 465 EXPECT_TRUE(Blocked(extension, file_url)); | 465 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 466 EXPECT_TRUE(Blocked(extension, settings_url)); | 466 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 467 EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested | 467 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested |
| 468 EXPECT_TRUE(Blocked(extension, about_url)); | 468 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 469 EXPECT_TRUE(Blocked(extension, extension_url)); | 469 EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
| 470 | 470 |
| 471 // Test access to iframed content. | 471 // Test access to iframed content. |
| 472 GURL within_extension_url = extension->GetResourceURL("page.html"); | 472 GURL within_extension_url = extension->GetResourceURL("page.html"); |
| 473 EXPECT_TRUE(AllowedScript(extension, http_url, http_url_with_path)); | 473 EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path)); |
| 474 EXPECT_TRUE(AllowedScript(extension, https_url, http_url_with_path)); | 474 EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path)); |
| 475 EXPECT_TRUE(AllowedScript(extension, http_url, within_extension_url)); | 475 EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url)); |
| 476 EXPECT_TRUE(AllowedScript(extension, https_url, within_extension_url)); | 476 EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url)); |
| 477 EXPECT_TRUE(BlockedScript(extension, http_url, extension_url)); | 477 EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url)); |
| 478 EXPECT_TRUE(BlockedScript(extension, https_url, extension_url)); | 478 EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url)); |
| 479 | 479 |
| 480 EXPECT_FALSE(PermissionsData::HasHostPermission(extension, settings_url)); | 480 EXPECT_FALSE( |
| 481 EXPECT_FALSE(PermissionsData::HasHostPermission(extension, about_url)); | 481 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
| 482 EXPECT_TRUE(PermissionsData::HasHostPermission(extension, favicon_url)); | 482 EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url)); |
| 483 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
| 483 | 484 |
| 484 // Test * for scheme, which implies just the http/https schemes. | 485 // Test * for scheme, which implies just the http/https schemes. |
| 485 extension = LoadManifestStrict("script_and_capture", | 486 extension = LoadManifestStrict("script_and_capture", |
| 486 "extension_wildcard.json"); | 487 "extension_wildcard.json"); |
| 487 EXPECT_TRUE(Allowed(extension, http_url)); | 488 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 488 EXPECT_TRUE(Allowed(extension, https_url)); | 489 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| 489 EXPECT_TRUE(Blocked(extension, settings_url)); | 490 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 490 EXPECT_TRUE(Blocked(extension, about_url)); | 491 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 491 EXPECT_TRUE(Blocked(extension, file_url)); | 492 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 492 EXPECT_TRUE(Blocked(extension, favicon_url)); | 493 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| 493 extension = LoadManifest("script_and_capture", | 494 extension = |
| 494 "extension_wildcard_settings.json"); | 495 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); |
| 495 EXPECT_TRUE(Blocked(extension, settings_url)); | 496 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 496 | 497 |
| 497 // Having chrome://*/ should work for regular extensions with the flag | 498 // Having chrome://*/ should work for regular extensions with the flag |
| 498 // enabled. | 499 // enabled. |
| 499 std::string error; | 500 std::string error; |
| 500 extension = LoadManifestUnchecked("script_and_capture", | 501 extension = LoadManifestUnchecked("script_and_capture", |
| 501 "extension_wildcard_chrome.json", | 502 "extension_wildcard_chrome.json", |
| 502 Manifest::INTERNAL, Extension::NO_FLAGS, | 503 Manifest::INTERNAL, Extension::NO_FLAGS, |
| 503 &error); | 504 &error); |
| 504 EXPECT_FALSE(extension == NULL); | 505 EXPECT_FALSE(extension.get() == NULL); |
| 505 EXPECT_TRUE(Blocked(extension, http_url)); | 506 EXPECT_TRUE(Blocked(extension.get(), http_url)); |
| 506 EXPECT_TRUE(Blocked(extension, https_url)); | 507 EXPECT_TRUE(Blocked(extension.get(), https_url)); |
| 507 EXPECT_TRUE(Allowed(extension, settings_url)); | 508 EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
| 508 EXPECT_TRUE(Blocked(extension, about_url)); | 509 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 509 EXPECT_TRUE(Blocked(extension, file_url)); | 510 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 510 EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested | 511 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested |
| 511 | 512 |
| 512 // Having chrome://favicon/* should not give you chrome://* | 513 // Having chrome://favicon/* should not give you chrome://* |
| 513 extension = LoadManifestStrict("script_and_capture", | 514 extension = LoadManifestStrict("script_and_capture", |
| 514 "extension_chrome_favicon_wildcard.json"); | 515 "extension_chrome_favicon_wildcard.json"); |
| 515 EXPECT_TRUE(Blocked(extension, settings_url)); | 516 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 516 EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested | 517 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested |
| 517 EXPECT_TRUE(Blocked(extension, about_url)); | 518 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 518 EXPECT_TRUE(PermissionsData::HasHostPermission(extension, favicon_url)); | 519 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
| 519 | 520 |
| 520 // Having http://favicon should not give you chrome://favicon | 521 // Having http://favicon should not give you chrome://favicon |
| 521 extension = LoadManifestStrict("script_and_capture", | 522 extension = LoadManifestStrict("script_and_capture", |
| 522 "extension_http_favicon.json"); | 523 "extension_http_favicon.json"); |
| 523 EXPECT_TRUE(Blocked(extension, settings_url)); | 524 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 524 EXPECT_TRUE(Blocked(extension, favicon_url)); | 525 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| 525 | 526 |
| 526 // Component extensions with <all_urls> should get everything. | 527 // Component extensions with <all_urls> should get everything. |
| 527 extension = LoadManifest("script_and_capture", "extension_component_all.json", | 528 extension = LoadManifest("script_and_capture", "extension_component_all.json", |
| 528 Manifest::COMPONENT, Extension::NO_FLAGS); | 529 Manifest::COMPONENT, Extension::NO_FLAGS); |
| 529 EXPECT_TRUE(Allowed(extension, http_url)); | 530 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 530 EXPECT_TRUE(Allowed(extension, https_url)); | 531 EXPECT_TRUE(Allowed(extension.get(), https_url)); |
| 531 EXPECT_TRUE(Allowed(extension, settings_url)); | 532 EXPECT_TRUE(Allowed(extension.get(), settings_url)); |
| 532 EXPECT_TRUE(Allowed(extension, about_url)); | 533 EXPECT_TRUE(Allowed(extension.get(), about_url)); |
| 533 EXPECT_TRUE(Allowed(extension, favicon_url)); | 534 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); |
| 534 EXPECT_TRUE(PermissionsData::HasHostPermission(extension, favicon_url)); | 535 EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url)); |
| 535 | 536 |
| 536 // Component extensions should only get access to what they ask for. | 537 // Component extensions should only get access to what they ask for. |
| 537 extension = LoadManifest("script_and_capture", | 538 extension = LoadManifest("script_and_capture", |
| 538 "extension_component_google.json", Manifest::COMPONENT, | 539 "extension_component_google.json", Manifest::COMPONENT, |
| 539 Extension::NO_FLAGS); | 540 Extension::NO_FLAGS); |
| 540 EXPECT_TRUE(Allowed(extension, http_url)); | 541 EXPECT_TRUE(Allowed(extension.get(), http_url)); |
| 541 EXPECT_TRUE(Blocked(extension, https_url)); | 542 EXPECT_TRUE(Blocked(extension.get(), https_url)); |
| 542 EXPECT_TRUE(Blocked(extension, file_url)); | 543 EXPECT_TRUE(Blocked(extension.get(), file_url)); |
| 543 EXPECT_TRUE(Blocked(extension, settings_url)); | 544 EXPECT_TRUE(Blocked(extension.get(), settings_url)); |
| 544 EXPECT_TRUE(Blocked(extension, favicon_url)); | 545 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); |
| 545 EXPECT_TRUE(Blocked(extension, about_url)); | 546 EXPECT_TRUE(Blocked(extension.get(), about_url)); |
| 546 EXPECT_TRUE(Blocked(extension, extension_url)); | 547 EXPECT_TRUE(Blocked(extension.get(), extension_url)); |
| 547 EXPECT_FALSE(PermissionsData::HasHostPermission(extension, settings_url)); | 548 EXPECT_FALSE( |
| 549 PermissionsData::HasHostPermission(extension.get(), settings_url)); |
| 548 } | 550 } |
| 549 | 551 |
| 550 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { | 552 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { |
| 551 scoped_refptr<Extension> extension = | 553 scoped_refptr<Extension> extension = |
| 552 LoadManifestStrict("script_and_capture", "tab_specific.json"); | 554 LoadManifestStrict("script_and_capture", "tab_specific.json"); |
| 553 | 555 |
| 554 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension, 0).get()); | 556 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
| 555 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension, 1).get()); | 557 .get()); |
| 556 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension, 2).get()); | 558 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) |
| 559 .get()); |
| 560 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 2) |
| 561 .get()); |
| 557 | 562 |
| 558 std::set<GURL> no_urls; | 563 std::set<GURL> no_urls; |
| 559 | 564 |
| 560 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 565 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
| 561 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 566 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
| 562 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 567 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 563 | 568 |
| 564 URLPatternSet allowed_hosts; | 569 URLPatternSet allowed_hosts; |
| 565 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | 570 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, |
| 566 http_url.spec())); | 571 http_url.spec())); |
| 567 std::set<GURL> allowed_urls; | 572 std::set<GURL> allowed_urls; |
| 568 allowed_urls.insert(http_url); | 573 allowed_urls.insert(http_url); |
| 569 // http_url_with_path() will also be allowed, because Extension should be | 574 // http_url_with_path() will also be allowed, because Extension should be |
| 570 // considering the security origin of the URL not the URL itself, and | 575 // considering the security origin of the URL not the URL itself, and |
| 571 // http_url is in allowed_hosts. | 576 // http_url is in allowed_hosts. |
| 572 allowed_urls.insert(http_url_with_path); | 577 allowed_urls.insert(http_url_with_path); |
| 573 | 578 |
| 574 { | 579 { |
| 575 scoped_refptr<PermissionSet> permissions( | 580 scoped_refptr<PermissionSet> permissions( |
| 576 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); | 581 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); |
| 577 PermissionsData::UpdateTabSpecificPermissions(extension, 0, permissions); | 582 PermissionsData::UpdateTabSpecificPermissions( |
| 583 extension.get(), 0, permissions); |
| 578 EXPECT_EQ(permissions->explicit_hosts(), | 584 EXPECT_EQ(permissions->explicit_hosts(), |
| 579 PermissionsData::GetTabSpecificPermissions( | 585 PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
| 580 extension, 0)->explicit_hosts()); | 586 ->explicit_hosts()); |
| 581 } | 587 } |
| 582 | 588 |
| 583 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); | 589 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), allowed_urls, 0)); |
| 584 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 590 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
| 585 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 591 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 586 | 592 |
| 587 PermissionsData::ClearTabSpecificPermissions(extension, 0); | 593 PermissionsData::ClearTabSpecificPermissions(extension.get(), 0); |
| 588 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension, 0).get()); | 594 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
| 595 .get()); |
| 589 | 596 |
| 590 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 597 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
| 591 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 598 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
| 592 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 599 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 593 | 600 |
| 594 std::set<GURL> more_allowed_urls = allowed_urls; | 601 std::set<GURL> more_allowed_urls = allowed_urls; |
| 595 more_allowed_urls.insert(https_url); | 602 more_allowed_urls.insert(https_url); |
| 596 URLPatternSet more_allowed_hosts = allowed_hosts; | 603 URLPatternSet more_allowed_hosts = allowed_hosts; |
| 597 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | 604 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, |
| 598 https_url.spec())); | 605 https_url.spec())); |
| 599 | 606 |
| 600 { | 607 { |
| 601 scoped_refptr<PermissionSet> permissions( | 608 scoped_refptr<PermissionSet> permissions( |
| 602 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); | 609 new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet())); |
| 603 PermissionsData::UpdateTabSpecificPermissions(extension, 0, permissions); | 610 PermissionsData::UpdateTabSpecificPermissions( |
| 611 extension.get(), 0, permissions); |
| 604 EXPECT_EQ(permissions->explicit_hosts(), | 612 EXPECT_EQ(permissions->explicit_hosts(), |
| 605 PermissionsData::GetTabSpecificPermissions( | 613 PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
| 606 extension, 0)->explicit_hosts()); | 614 ->explicit_hosts()); |
| 607 | 615 |
| 608 permissions = new PermissionSet(APIPermissionSet(), | 616 permissions = new PermissionSet(APIPermissionSet(), |
| 609 more_allowed_hosts, | 617 more_allowed_hosts, |
| 610 URLPatternSet()); | 618 URLPatternSet()); |
| 611 PermissionsData::UpdateTabSpecificPermissions(extension, 1, permissions); | 619 PermissionsData::UpdateTabSpecificPermissions( |
| 620 extension.get(), 1, permissions); |
| 612 EXPECT_EQ(permissions->explicit_hosts(), | 621 EXPECT_EQ(permissions->explicit_hosts(), |
| 613 PermissionsData::GetTabSpecificPermissions( | 622 PermissionsData::GetTabSpecificPermissions(extension.get(), 1) |
| 614 extension, 1)->explicit_hosts()); | 623 ->explicit_hosts()); |
| 615 } | 624 } |
| 616 | 625 |
| 617 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); | 626 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), allowed_urls, 0)); |
| 618 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); | 627 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1)); |
| 619 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 628 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 620 | 629 |
| 621 PermissionsData::ClearTabSpecificPermissions(extension, 0); | 630 PermissionsData::ClearTabSpecificPermissions(extension.get(), 0); |
| 622 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension, 0).get()); | 631 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0) |
| 632 .get()); |
| 623 | 633 |
| 624 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 634 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
| 625 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); | 635 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1)); |
| 626 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 636 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 627 | 637 |
| 628 PermissionsData::ClearTabSpecificPermissions(extension, 1); | 638 PermissionsData::ClearTabSpecificPermissions(extension.get(), 1); |
| 629 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension, 1).get()); | 639 EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1) |
| 640 .get()); |
| 630 | 641 |
| 631 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | 642 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
| 632 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | 643 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
| 633 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | 644 EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 634 } | 645 } |
| 635 | 646 |
| 636 } // namespace extensions | 647 } // namespace extensions |
| OLD | NEW |