Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: chrome/common/extensions/permissions/permissions_data_unittest.cc

Issue 2820333003: Revert of Communicate ExtensionSettings policy to renderers (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/extensions/permissions_updater_unittest.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "build/build_config.h" 14 #include "build/build_config.h"
15 #include "chrome/common/extensions/extension_test_util.h" 15 #include "chrome/common/extensions/extension_test_util.h"
16 #include "components/crx_file/id_util.h" 16 #include "components/crx_file/id_util.h"
17 #include "content/public/common/socket_permission_request.h" 17 #include "content/public/common/socket_permission_request.h"
18 #include "extensions/common/constants.h"
19 #include "extensions/common/error_utils.h" 18 #include "extensions/common/error_utils.h"
20 #include "extensions/common/extension.h" 19 #include "extensions/common/extension.h"
21 #include "extensions/common/extension_builder.h" 20 #include "extensions/common/extension_builder.h"
22 #include "extensions/common/manifest.h" 21 #include "extensions/common/manifest.h"
23 #include "extensions/common/manifest_constants.h" 22 #include "extensions/common/manifest_constants.h"
24 #include "extensions/common/permissions/api_permission.h" 23 #include "extensions/common/permissions/api_permission.h"
25 #include "extensions/common/permissions/permission_message_test_util.h" 24 #include "extensions/common/permissions/permission_message_test_util.h"
26 #include "extensions/common/permissions/permission_set.h" 25 #include "extensions/common/permissions/permission_set.h"
27 #include "extensions/common/permissions/permissions_data.h" 26 #include "extensions/common/permissions/permissions_data.h"
28 #include "extensions/common/permissions/socket_permission.h" 27 #include "extensions/common/permissions/socket_permission.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); 217 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
219 EXPECT_TRUE(extension->permissions_data()->HasEffectiveAccessToAllHosts()); 218 EXPECT_TRUE(extension->permissions_data()->HasEffectiveAccessToAllHosts());
220 219
221 // Tab-specific permissions should be included in the effective hosts. 220 // Tab-specific permissions should be included in the effective hosts.
222 GURL tab_url("http://www.example.com/"); 221 GURL tab_url("http://www.example.com/");
223 URLPatternSet new_hosts; 222 URLPatternSet new_hosts;
224 new_hosts.AddOrigin(URLPattern::SCHEME_ALL, tab_url); 223 new_hosts.AddOrigin(URLPattern::SCHEME_ALL, tab_url);
225 extension->permissions_data()->UpdateTabSpecificPermissions( 224 extension->permissions_data()->UpdateTabSpecificPermissions(
226 1, PermissionSet(APIPermissionSet(), ManifestPermissionSet(), new_hosts, 225 1, PermissionSet(APIPermissionSet(), ManifestPermissionSet(), new_hosts,
227 URLPatternSet())); 226 URLPatternSet()));
228 EXPECT_TRUE( 227 EXPECT_TRUE(extension->permissions_data()->GetEffectiveHostPermissions().
229 extension->permissions_data()->GetEffectiveHostPermissions().MatchesURL( 228 MatchesURL(tab_url));
230 tab_url));
231 extension->permissions_data()->ClearTabSpecificPermissions(1); 229 extension->permissions_data()->ClearTabSpecificPermissions(1);
232 EXPECT_FALSE( 230 EXPECT_FALSE(extension->permissions_data()->GetEffectiveHostPermissions().
233 extension->permissions_data()->GetEffectiveHostPermissions().MatchesURL( 231 MatchesURL(tab_url));
234 tab_url));
235 } 232 }
236 233
237 TEST(PermissionsDataTest, SocketPermissions) { 234 TEST(PermissionsDataTest, SocketPermissions) {
238 scoped_refptr<Extension> extension; 235 scoped_refptr<Extension> extension;
239 std::string error; 236 std::string error;
240 237
241 extension = LoadManifest("socket_permissions", "empty.json"); 238 extension = LoadManifest("socket_permissions", "empty.json");
242 EXPECT_FALSE(CheckSocketPermission( 239 EXPECT_FALSE(CheckSocketPermission(extension,
243 extension, SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 240 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80));
244 241
245 extension = LoadManifestUnchecked("socket_permissions", 242 extension = LoadManifestUnchecked("socket_permissions",
246 "socket1.json", 243 "socket1.json",
247 Manifest::INTERNAL, Extension::NO_FLAGS, 244 Manifest::INTERNAL, Extension::NO_FLAGS,
248 &error); 245 &error);
249 EXPECT_TRUE(extension.get() == NULL); 246 EXPECT_TRUE(extension.get() == NULL);
250 std::string expected_error_msg_header = ErrorUtils::FormatErrorMessage( 247 std::string expected_error_msg_header = ErrorUtils::FormatErrorMessage(
251 manifest_errors::kInvalidPermissionWithDetail, 248 manifest_errors::kInvalidPermissionWithDetail,
252 "socket", 249 "socket",
253 "NULL or empty permission list"); 250 "NULL or empty permission list");
254 EXPECT_EQ(expected_error_msg_header, error); 251 EXPECT_EQ(expected_error_msg_header, error);
255 252
256 extension = LoadManifest("socket_permissions", "socket2.json"); 253 extension = LoadManifest("socket_permissions", "socket2.json");
254 EXPECT_TRUE(CheckSocketPermission(extension,
255 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80));
256 EXPECT_FALSE(CheckSocketPermission(
257 extension, SocketPermissionRequest::UDP_BIND, "", 80));
257 EXPECT_TRUE(CheckSocketPermission( 258 EXPECT_TRUE(CheckSocketPermission(
258 extension, SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 259 extension, SocketPermissionRequest::UDP_BIND, "", 8888));
259 EXPECT_FALSE(CheckSocketPermission(
260 extension, SocketPermissionRequest::UDP_BIND, "", 80));
261 EXPECT_TRUE(CheckSocketPermission(
262 extension, SocketPermissionRequest::UDP_BIND, "", 8888));
263 260
264 EXPECT_FALSE(CheckSocketPermission( 261 EXPECT_FALSE(CheckSocketPermission(
265 extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900)); 262 extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900));
266 EXPECT_TRUE(CheckSocketPermission(extension, 263 EXPECT_TRUE(CheckSocketPermission(
267 SocketPermissionRequest::UDP_SEND_TO, 264 extension,
268 "239.255.255.250", 1900)); 265 SocketPermissionRequest::UDP_SEND_TO,
266 "239.255.255.250", 1900));
269 } 267 }
270 268
271 TEST(PermissionsDataTest, IsRestrictedUrl) { 269 TEST(PermissionsDataTest, IsRestrictedUrl) {
272 scoped_refptr<const Extension> extension = 270 scoped_refptr<const Extension> extension =
273 GetExtensionWithHostPermission("normal_extension", 271 GetExtensionWithHostPermission("normal_extension",
274 kAllHostsPermission, 272 kAllHostsPermission,
275 Manifest::INTERNAL); 273 Manifest::INTERNAL);
276 // Chrome urls should be blocked for normal extensions. 274 // Chrome urls should be blocked for normal extensions.
277 CheckRestrictedUrls(extension.get(), true); 275 CheckRestrictedUrls(extension.get(), true);
278 276
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 } 374 }
377 375
378 // Base class for testing the CanAccessPage and CanCaptureVisiblePage 376 // Base class for testing the CanAccessPage and CanCaptureVisiblePage
379 // methods of Extension for extensions with various permissions. 377 // methods of Extension for extensions with various permissions.
380 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { 378 class ExtensionScriptAndCaptureVisibleTest : public testing::Test {
381 protected: 379 protected:
382 ExtensionScriptAndCaptureVisibleTest() 380 ExtensionScriptAndCaptureVisibleTest()
383 : http_url("http://www.google.com"), 381 : http_url("http://www.google.com"),
384 http_url_with_path("http://www.google.com/index.html"), 382 http_url_with_path("http://www.google.com/index.html"),
385 https_url("https://www.google.com"), 383 https_url("https://www.google.com"),
386 example_com("https://example.com"),
387 test_example_com("https://test.example.com"),
388 sample_example_com("https://sample.example.com"),
389 file_url("file:///foo/bar"), 384 file_url("file:///foo/bar"),
390 favicon_url("chrome://favicon/http://www.google.com"), 385 favicon_url("chrome://favicon/http://www.google.com"),
391 extension_url("chrome-extension://" + 386 extension_url("chrome-extension://" +
392 crx_file::id_util::GenerateIdForPath( 387 crx_file::id_util::GenerateIdForPath(
393 base::FilePath(FILE_PATH_LITERAL("foo")))), 388 base::FilePath(FILE_PATH_LITERAL("foo")))),
394 settings_url("chrome://settings"), 389 settings_url("chrome://settings"),
395 about_url("about:flags") { 390 about_url("about:flags") {
396 urls_.insert(http_url); 391 urls_.insert(http_url);
397 urls_.insert(http_url_with_path); 392 urls_.insert(http_url_with_path);
398 urls_.insert(https_url); 393 urls_.insert(https_url);
399 urls_.insert(example_com);
400 urls_.insert(test_example_com);
401 urls_.insert(sample_example_com);
402 urls_.insert(file_url); 394 urls_.insert(file_url);
403 urls_.insert(favicon_url); 395 urls_.insert(favicon_url);
404 urls_.insert(extension_url); 396 urls_.insert(extension_url);
405 urls_.insert(settings_url); 397 urls_.insert(settings_url);
406 urls_.insert(about_url); 398 urls_.insert(about_url);
407 // Ignore the policy delegate for this test. 399 // Ignore the policy delegate for this test.
408 PermissionsData::SetPolicyDelegate(NULL); 400 PermissionsData::SetPolicyDelegate(NULL);
409 } 401 }
410 402
411 bool AllowedScript(const Extension* extension, const GURL& url) { 403 bool AllowedScript(const Extension* extension, const GURL& url) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 result &= Blocked(extension, url, tab_id); 469 result &= Blocked(extension, url, tab_id);
478 } 470 }
479 return result; 471 return result;
480 } 472 }
481 473
482 // URLs that are "safe" to provide scripting and capture visible tab access 474 // URLs that are "safe" to provide scripting and capture visible tab access
483 // to if the permissions allow it. 475 // to if the permissions allow it.
484 const GURL http_url; 476 const GURL http_url;
485 const GURL http_url_with_path; 477 const GURL http_url_with_path;
486 const GURL https_url; 478 const GURL https_url;
487 const GURL example_com;
488 const GURL test_example_com;
489 const GURL sample_example_com;
490 const GURL file_url; 479 const GURL file_url;
491 480
492 // We should allow host permission but not scripting permission for favicon 481 // We should allow host permission but not scripting permission for favicon
493 // urls. 482 // urls.
494 const GURL favicon_url; 483 const GURL favicon_url;
495 484
496 // URLs that regular extensions should never get access to. 485 // URLs that regular extensions should never get access to.
497 const GURL extension_url; 486 const GURL extension_url;
498 const GURL settings_url; 487 const GURL settings_url;
499 const GURL about_url; 488 const GURL about_url;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url)); 585 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url));
597 } 586 }
598 587
599 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { 588 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) {
600 base::CommandLine::ForCurrentProcess()->AppendSwitch( 589 base::CommandLine::ForCurrentProcess()->AppendSwitch(
601 switches::kExtensionsOnChromeURLs); 590 switches::kExtensionsOnChromeURLs);
602 591
603 scoped_refptr<Extension> extension; 592 scoped_refptr<Extension> extension;
604 593
605 // Test <all_urls> for regular extensions. 594 // Test <all_urls> for regular extensions.
606 extension = 595 extension = LoadManifestStrict("script_and_capture",
607 LoadManifestStrict("script_and_capture", "extension_regular_all.json"); 596 "extension_regular_all.json");
608 EXPECT_TRUE(Allowed(extension.get(), http_url)); 597 EXPECT_TRUE(Allowed(extension.get(), http_url));
609 EXPECT_TRUE(Allowed(extension.get(), https_url)); 598 EXPECT_TRUE(Allowed(extension.get(), https_url));
610 EXPECT_TRUE(CaptureOnly(extension.get(), file_url)); 599 EXPECT_TRUE(CaptureOnly(extension.get(), file_url));
611 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url)); 600 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url));
612 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested 601 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested
613 EXPECT_TRUE(CaptureOnly(extension.get(), about_url)); 602 EXPECT_TRUE(CaptureOnly(extension.get(), about_url));
614 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url)); 603 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url));
615 604
616 // Test access to iframed content. 605 // Test access to iframed content.
617 GURL within_extension_url = extension->GetResourceURL("page.html"); 606 GURL within_extension_url = extension->GetResourceURL("page.html");
618 EXPECT_TRUE(AllowedScript(extension.get(), http_url)); 607 EXPECT_TRUE(AllowedScript(extension.get(), http_url));
619 EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path)); 608 EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path));
620 EXPECT_TRUE(AllowedScript(extension.get(), https_url)); 609 EXPECT_TRUE(AllowedScript(extension.get(), https_url));
621 EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url)); 610 EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url));
622 EXPECT_TRUE(BlockedScript(extension.get(), extension_url)); 611 EXPECT_TRUE(BlockedScript(extension.get(), extension_url));
623 612
624 const PermissionsData* permissions_data = extension->permissions_data(); 613 const PermissionsData* permissions_data = extension->permissions_data();
625 EXPECT_FALSE(permissions_data->HasHostPermission(settings_url)); 614 EXPECT_FALSE(permissions_data->HasHostPermission(settings_url));
626 EXPECT_FALSE(permissions_data->HasHostPermission(about_url)); 615 EXPECT_FALSE(permissions_data->HasHostPermission(about_url));
627 EXPECT_TRUE(permissions_data->HasHostPermission(favicon_url)); 616 EXPECT_TRUE(permissions_data->HasHostPermission(favicon_url));
628 617
629 // Test * for scheme, which implies just the http/https schemes. 618 // Test * for scheme, which implies just the http/https schemes.
630 extension = 619 extension = LoadManifestStrict("script_and_capture",
631 LoadManifestStrict("script_and_capture", "extension_wildcard.json"); 620 "extension_wildcard.json");
632 EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); 621 EXPECT_TRUE(ScriptOnly(extension.get(), http_url));
633 EXPECT_TRUE(ScriptOnly(extension.get(), https_url)); 622 EXPECT_TRUE(ScriptOnly(extension.get(), https_url));
634 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 623 EXPECT_TRUE(Blocked(extension.get(), settings_url));
635 EXPECT_TRUE(Blocked(extension.get(), about_url)); 624 EXPECT_TRUE(Blocked(extension.get(), about_url));
636 EXPECT_TRUE(Blocked(extension.get(), file_url)); 625 EXPECT_TRUE(Blocked(extension.get(), file_url));
637 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); 626 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
638 extension = 627 extension =
639 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); 628 LoadManifest("script_and_capture", "extension_wildcard_settings.json");
640 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 629 EXPECT_TRUE(Blocked(extension.get(), settings_url));
641 630
642 // Having chrome://*/ should work for regular extensions with the flag 631 // Having chrome://*/ should work for regular extensions with the flag
643 // enabled. 632 // enabled.
644 std::string error; 633 std::string error;
645 extension = LoadManifestUnchecked("script_and_capture", 634 extension = LoadManifestUnchecked("script_and_capture",
646 "extension_wildcard_chrome.json", 635 "extension_wildcard_chrome.json",
647 Manifest::INTERNAL, Extension::NO_FLAGS, 636 Manifest::INTERNAL, Extension::NO_FLAGS,
648 &error); 637 &error);
649 EXPECT_FALSE(extension.get() == NULL); 638 EXPECT_FALSE(extension.get() == NULL);
650 EXPECT_TRUE(Blocked(extension.get(), http_url)); 639 EXPECT_TRUE(Blocked(extension.get(), http_url));
651 EXPECT_TRUE(Blocked(extension.get(), https_url)); 640 EXPECT_TRUE(Blocked(extension.get(), https_url));
652 EXPECT_TRUE(ScriptOnly(extension.get(), settings_url)); 641 EXPECT_TRUE(ScriptOnly(extension.get(), settings_url));
653 EXPECT_TRUE(Blocked(extension.get(), about_url)); 642 EXPECT_TRUE(Blocked(extension.get(), about_url));
654 EXPECT_TRUE(Blocked(extension.get(), file_url)); 643 EXPECT_TRUE(Blocked(extension.get(), file_url));
655 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url)); 644 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url));
656 645
657 // Having chrome://favicon/* should not give you chrome://* 646 // Having chrome://favicon/* should not give you chrome://*
658 extension = LoadManifestStrict("script_and_capture", 647 extension = LoadManifestStrict("script_and_capture",
659 "extension_chrome_favicon_wildcard.json"); 648 "extension_chrome_favicon_wildcard.json");
660 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 649 EXPECT_TRUE(Blocked(extension.get(), settings_url));
661 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url)); 650 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url));
662 EXPECT_TRUE(Blocked(extension.get(), about_url)); 651 EXPECT_TRUE(Blocked(extension.get(), about_url));
663 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); 652 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
664 653
665 // Having http://favicon should not give you chrome://favicon 654 // Having http://favicon should not give you chrome://favicon
666 extension = 655 extension = LoadManifestStrict("script_and_capture",
667 LoadManifestStrict("script_and_capture", "extension_http_favicon.json"); 656 "extension_http_favicon.json");
668 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 657 EXPECT_TRUE(Blocked(extension.get(), settings_url));
669 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); 658 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
670 659
671 // Component extensions with <all_urls> should get everything. 660 // Component extensions with <all_urls> should get everything.
672 extension = LoadManifest("script_and_capture", "extension_component_all.json", 661 extension = LoadManifest("script_and_capture", "extension_component_all.json",
673 Manifest::COMPONENT, Extension::NO_FLAGS); 662 Manifest::COMPONENT, Extension::NO_FLAGS);
674 EXPECT_TRUE(Allowed(extension.get(), http_url)); 663 EXPECT_TRUE(Allowed(extension.get(), http_url));
675 EXPECT_TRUE(Allowed(extension.get(), https_url)); 664 EXPECT_TRUE(Allowed(extension.get(), https_url));
676 EXPECT_TRUE(Allowed(extension.get(), settings_url)); 665 EXPECT_TRUE(Allowed(extension.get(), settings_url));
677 EXPECT_TRUE(Allowed(extension.get(), about_url)); 666 EXPECT_TRUE(Allowed(extension.get(), about_url));
678 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); 667 EXPECT_TRUE(Allowed(extension.get(), favicon_url));
679 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); 668 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
680 669
681 // Component extensions should only get access to what they ask for. 670 // Component extensions should only get access to what they ask for.
682 extension = 671 extension = LoadManifest("script_and_capture",
683 LoadManifest("script_and_capture", "extension_component_google.json", 672 "extension_component_google.json", Manifest::COMPONENT,
684 Manifest::COMPONENT, Extension::NO_FLAGS); 673 Extension::NO_FLAGS);
685 EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); 674 EXPECT_TRUE(ScriptOnly(extension.get(), http_url));
686 EXPECT_TRUE(Blocked(extension.get(), https_url)); 675 EXPECT_TRUE(Blocked(extension.get(), https_url));
687 EXPECT_TRUE(Blocked(extension.get(), file_url)); 676 EXPECT_TRUE(Blocked(extension.get(), file_url));
688 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 677 EXPECT_TRUE(Blocked(extension.get(), settings_url));
689 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); 678 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
690 EXPECT_TRUE(Blocked(extension.get(), about_url)); 679 EXPECT_TRUE(Blocked(extension.get(), about_url));
691 EXPECT_TRUE(Blocked(extension.get(), extension_url)); 680 EXPECT_TRUE(Blocked(extension.get(), extension_url));
692 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url)); 681 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url));
693 } 682 }
694 683
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 kTabId, &error)) 825 kTabId, &error))
837 << extension->name() << ": " << url; 826 << extension->name() << ": " << url;
838 EXPECT_EQ(PermissionsData::ACCESS_DENIED, 827 EXPECT_EQ(PermissionsData::ACCESS_DENIED,
839 extension->permissions_data()->GetContentScriptAccess( 828 extension->permissions_data()->GetContentScriptAccess(
840 extension, url, kTabId, &error)) 829 extension, url, kTabId, &error))
841 << extension->name() << ": " << url; 830 << extension->name() << ": " << url;
842 } 831 }
843 } 832 }
844 } 833 }
845 834
846 TEST_F(ExtensionScriptAndCaptureVisibleTest, PolicyHostRestrictionsSwap) {
847 // Makes sure when an extension gets an individual policy for host
848 // restrictions it overrides the default policy. Also tests transitioning back
849 // to the default policy when an individual policy is removed.
850 URLPattern example_com_pattern =
851 URLPattern(URLPattern::SCHEME_ALL, "*://*.example.com/*");
852 URLPattern test_example_com_pattern =
853 URLPattern(URLPattern::SCHEME_ALL, "*://test.example.com/*");
854 URLPatternSet default_blocked;
855 URLPatternSet default_allowed;
856 default_blocked.AddPattern(example_com_pattern);
857 default_allowed.AddPattern(test_example_com_pattern);
858
859 // Test <all_urls> for regular extensions.
860 scoped_refptr<Extension> extension =
861 LoadManifestStrict("script_and_capture", "extension_regular_all.json");
862 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
863 default_blocked, default_allowed);
864
865 // The default policy applies to all extensions at this point. The extension
866 // should be able to access test.example.com but be blocked from
867 // accessing any other subdomains of example.com or example.com itself.
868 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
869 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
870 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
871
872 URLPatternSet blocked;
873 blocked.AddPattern(test_example_com_pattern);
874 URLPatternSet allowed;
875 extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed);
876
877 // We've applied an individual policy which overrides the default policy.
878 // The only URL that should be blocked is test.example.com.
879 EXPECT_TRUE(Allowed(extension.get(), example_com));
880 EXPECT_TRUE(Allowed(extension.get(), sample_example_com));
881 EXPECT_TRUE(CaptureOnly(extension.get(), test_example_com));
882
883 blocked.AddPattern(example_com_pattern);
884 allowed.AddPattern(test_example_com_pattern);
885 extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed);
886
887 // Adding example.com and all its subdomains to the blocked list and
888 // test.example.com to the whitelist. This is still the individual policy
889 // Since the whitelist overrides a blacklist we expect to allow access to
890 // test.example.com but block access to all other example.com subdomains
891 // (sample.example.com) and example.com itself.
892 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
893 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
894 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
895
896 blocked.ClearPatterns();
897 allowed.ClearPatterns();
898 extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed);
899
900 // Cleared all URLs from the individual policy, so all URLs should have
901 // access. We want to make sure that a block at the default level doesn't
902 // apply since we're still definining an individual policy.
903 EXPECT_TRUE(Allowed(extension.get(), example_com));
904 EXPECT_TRUE(Allowed(extension.get(), sample_example_com));
905 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
906
907 // Flip back to using default policy for this extension.
908 extension->permissions_data()->SetUsesDefaultHostRestrictions();
909
910 // Make sure the default policy has the same effect as before we defined an
911 // individual policy. Access to test.example.com should be allowed, but all
912 // other subdomains and example.com itself should be blocked.
913 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
914 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
915 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
916 }
917
918 TEST_F(ExtensionScriptAndCaptureVisibleTest, PolicyHostRestrictions) {
919 // Test that host restrictions applied by policy take effect on normal URLs,
920 // iframe urls, different schemes, and components.
921 URLPatternSet default_blocked;
922 URLPatternSet default_allowed;
923 default_blocked.AddPattern(
924 URLPattern(URLPattern::SCHEME_ALL, "https://*.example.com/*"));
925 default_allowed.AddPattern(
926 URLPattern(URLPattern::SCHEME_ALL, "https://test.example.com/*"));
927
928 // In all of these tests, test.example.com should have scripting allowed, with
929 // all other subdomains and example.com itself blocked.
930
931 // Test <all_urls> for regular extensions.
932 scoped_refptr<Extension> extension =
933 LoadManifestStrict("script_and_capture", "extension_regular_all.json");
934 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
935 default_blocked, default_allowed);
936
937 EXPECT_TRUE(Allowed(extension.get(), http_url));
938 EXPECT_TRUE(Allowed(extension.get(), https_url));
939 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
940 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
941 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
942 EXPECT_TRUE(CaptureOnly(extension.get(), file_url));
943 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url));
944 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url));
945 EXPECT_TRUE(CaptureOnly(extension.get(), about_url));
946 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url));
947
948 // Test access to iframed content.
949 GURL within_extension_url = extension->GetResourceURL("page.html");
950 EXPECT_TRUE(AllowedScript(extension.get(), http_url));
951 EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path));
952 EXPECT_TRUE(BlockedScript(extension.get(), example_com));
953 EXPECT_TRUE(AllowedScript(extension.get(), test_example_com));
954 EXPECT_TRUE(BlockedScript(extension.get(), sample_example_com));
955 EXPECT_TRUE(AllowedScript(extension.get(), https_url));
956 EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url));
957 EXPECT_TRUE(BlockedScript(extension.get(), extension_url));
958
959 // Supress host permission for example.com since its on the blocklist
960 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(example_com));
961 // Allow host permission for test.example.com since its on the whitelist and
962 // blacklist. The whitelist overrides the blacklist.
963 EXPECT_TRUE(
964 extension->permissions_data()->HasHostPermission(test_example_com));
965 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url));
966 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(about_url));
967 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
968
969 // Test * for scheme, which implies just the http/https schemes.
970 extension =
971 LoadManifestStrict("script_and_capture", "extension_wildcard.json");
972 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
973 default_blocked, default_allowed);
974 EXPECT_TRUE(ScriptOnly(extension.get(), http_url));
975 EXPECT_TRUE(Blocked(extension.get(), example_com));
976 EXPECT_TRUE(ScriptOnly(extension.get(), test_example_com));
977 EXPECT_TRUE(Blocked(extension.get(), sample_example_com));
978 EXPECT_TRUE(ScriptOnly(extension.get(), https_url));
979 EXPECT_TRUE(Blocked(extension.get(), settings_url));
980 EXPECT_TRUE(Blocked(extension.get(), about_url));
981 EXPECT_TRUE(Blocked(extension.get(), file_url));
982 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
983 extension =
984 LoadManifest("script_and_capture", "extension_wildcard_settings.json");
985 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
986 default_blocked, default_allowed);
987 EXPECT_TRUE(Blocked(extension.get(), settings_url));
988
989 // Component extensions with <all_urls> should get everything regardless of
990 // policy.
991 extension = LoadManifest("script_and_capture", "extension_component_all.json",
992 Manifest::COMPONENT, Extension::NO_FLAGS);
993 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
994 default_blocked, default_allowed);
995 EXPECT_TRUE(Allowed(extension.get(), http_url));
996 EXPECT_TRUE(Allowed(extension.get(), https_url));
997 EXPECT_TRUE(Allowed(extension.get(), example_com));
998 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
999 EXPECT_TRUE(Allowed(extension.get(), sample_example_com));
1000 EXPECT_TRUE(Allowed(extension.get(), settings_url));
1001 EXPECT_TRUE(Allowed(extension.get(), about_url));
1002 EXPECT_TRUE(Allowed(extension.get(), favicon_url));
1003 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
1004 }
1005
1006 } // namespace extensions 835 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/permissions_updater_unittest.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698