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

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

Issue 2833843004: Reland: Communicate ExtensionSettings policy to renderers (Closed)
Patch Set: Removed unused URLPatternSet parameters in ExtensionMsg_PermissionSetStruct which was causing MSAN … 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"
18 #include "extensions/common/error_utils.h" 19 #include "extensions/common/error_utils.h"
19 #include "extensions/common/extension.h" 20 #include "extensions/common/extension.h"
20 #include "extensions/common/extension_builder.h" 21 #include "extensions/common/extension_builder.h"
21 #include "extensions/common/manifest.h" 22 #include "extensions/common/manifest.h"
22 #include "extensions/common/manifest_constants.h" 23 #include "extensions/common/manifest_constants.h"
23 #include "extensions/common/permissions/api_permission.h" 24 #include "extensions/common/permissions/api_permission.h"
24 #include "extensions/common/permissions/permission_message_test_util.h" 25 #include "extensions/common/permissions/permission_message_test_util.h"
25 #include "extensions/common/permissions/permission_set.h" 26 #include "extensions/common/permissions/permission_set.h"
26 #include "extensions/common/permissions/permissions_data.h" 27 #include "extensions/common/permissions/permissions_data.h"
27 #include "extensions/common/permissions/socket_permission.h" 28 #include "extensions/common/permissions/socket_permission.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com"))); 218 EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
218 EXPECT_TRUE(extension->permissions_data()->HasEffectiveAccessToAllHosts()); 219 EXPECT_TRUE(extension->permissions_data()->HasEffectiveAccessToAllHosts());
219 220
220 // Tab-specific permissions should be included in the effective hosts. 221 // Tab-specific permissions should be included in the effective hosts.
221 GURL tab_url("http://www.example.com/"); 222 GURL tab_url("http://www.example.com/");
222 URLPatternSet new_hosts; 223 URLPatternSet new_hosts;
223 new_hosts.AddOrigin(URLPattern::SCHEME_ALL, tab_url); 224 new_hosts.AddOrigin(URLPattern::SCHEME_ALL, tab_url);
224 extension->permissions_data()->UpdateTabSpecificPermissions( 225 extension->permissions_data()->UpdateTabSpecificPermissions(
225 1, PermissionSet(APIPermissionSet(), ManifestPermissionSet(), new_hosts, 226 1, PermissionSet(APIPermissionSet(), ManifestPermissionSet(), new_hosts,
226 URLPatternSet())); 227 URLPatternSet()));
227 EXPECT_TRUE(extension->permissions_data()->GetEffectiveHostPermissions(). 228 EXPECT_TRUE(
228 MatchesURL(tab_url)); 229 extension->permissions_data()->GetEffectiveHostPermissions().MatchesURL(
230 tab_url));
229 extension->permissions_data()->ClearTabSpecificPermissions(1); 231 extension->permissions_data()->ClearTabSpecificPermissions(1);
230 EXPECT_FALSE(extension->permissions_data()->GetEffectiveHostPermissions(). 232 EXPECT_FALSE(
231 MatchesURL(tab_url)); 233 extension->permissions_data()->GetEffectiveHostPermissions().MatchesURL(
234 tab_url));
232 } 235 }
233 236
234 TEST(PermissionsDataTest, SocketPermissions) { 237 TEST(PermissionsDataTest, SocketPermissions) {
235 scoped_refptr<Extension> extension; 238 scoped_refptr<Extension> extension;
236 std::string error; 239 std::string error;
237 240
238 extension = LoadManifest("socket_permissions", "empty.json"); 241 extension = LoadManifest("socket_permissions", "empty.json");
239 EXPECT_FALSE(CheckSocketPermission(extension, 242 EXPECT_FALSE(CheckSocketPermission(
240 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 243 extension, SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80));
241 244
242 extension = LoadManifestUnchecked("socket_permissions", 245 extension = LoadManifestUnchecked("socket_permissions",
243 "socket1.json", 246 "socket1.json",
244 Manifest::INTERNAL, Extension::NO_FLAGS, 247 Manifest::INTERNAL, Extension::NO_FLAGS,
245 &error); 248 &error);
246 EXPECT_TRUE(extension.get() == NULL); 249 EXPECT_TRUE(extension.get() == NULL);
247 std::string expected_error_msg_header = ErrorUtils::FormatErrorMessage( 250 std::string expected_error_msg_header = ErrorUtils::FormatErrorMessage(
248 manifest_errors::kInvalidPermissionWithDetail, 251 manifest_errors::kInvalidPermissionWithDetail,
249 "socket", 252 "socket",
250 "NULL or empty permission list"); 253 "NULL or empty permission list");
251 EXPECT_EQ(expected_error_msg_header, error); 254 EXPECT_EQ(expected_error_msg_header, error);
252 255
253 extension = LoadManifest("socket_permissions", "socket2.json"); 256 extension = LoadManifest("socket_permissions", "socket2.json");
254 EXPECT_TRUE(CheckSocketPermission(extension, 257 EXPECT_TRUE(CheckSocketPermission(
255 SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 258 extension, SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80));
256 EXPECT_FALSE(CheckSocketPermission( 259 EXPECT_FALSE(CheckSocketPermission(
257 extension, SocketPermissionRequest::UDP_BIND, "", 80)); 260 extension, SocketPermissionRequest::UDP_BIND, "", 80));
258 EXPECT_TRUE(CheckSocketPermission( 261 EXPECT_TRUE(CheckSocketPermission(
259 extension, SocketPermissionRequest::UDP_BIND, "", 8888)); 262 extension, SocketPermissionRequest::UDP_BIND, "", 8888));
260 263
261 EXPECT_FALSE(CheckSocketPermission( 264 EXPECT_FALSE(CheckSocketPermission(
262 extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900)); 265 extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900));
263 EXPECT_TRUE(CheckSocketPermission( 266 EXPECT_TRUE(CheckSocketPermission(extension,
264 extension, 267 SocketPermissionRequest::UDP_SEND_TO,
265 SocketPermissionRequest::UDP_SEND_TO, 268 "239.255.255.250", 1900));
266 "239.255.255.250", 1900));
267 } 269 }
268 270
269 TEST(PermissionsDataTest, IsRestrictedUrl) { 271 TEST(PermissionsDataTest, IsRestrictedUrl) {
270 scoped_refptr<const Extension> extension = 272 scoped_refptr<const Extension> extension =
271 GetExtensionWithHostPermission("normal_extension", 273 GetExtensionWithHostPermission("normal_extension",
272 kAllHostsPermission, 274 kAllHostsPermission,
273 Manifest::INTERNAL); 275 Manifest::INTERNAL);
274 // Chrome urls should be blocked for normal extensions. 276 // Chrome urls should be blocked for normal extensions.
275 CheckRestrictedUrls(extension.get(), true); 277 CheckRestrictedUrls(extension.get(), true);
276 278
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 } 376 }
375 377
376 // Base class for testing the CanAccessPage and CanCaptureVisiblePage 378 // Base class for testing the CanAccessPage and CanCaptureVisiblePage
377 // methods of Extension for extensions with various permissions. 379 // methods of Extension for extensions with various permissions.
378 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { 380 class ExtensionScriptAndCaptureVisibleTest : public testing::Test {
379 protected: 381 protected:
380 ExtensionScriptAndCaptureVisibleTest() 382 ExtensionScriptAndCaptureVisibleTest()
381 : http_url("http://www.google.com"), 383 : http_url("http://www.google.com"),
382 http_url_with_path("http://www.google.com/index.html"), 384 http_url_with_path("http://www.google.com/index.html"),
383 https_url("https://www.google.com"), 385 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"),
384 file_url("file:///foo/bar"), 389 file_url("file:///foo/bar"),
385 favicon_url("chrome://favicon/http://www.google.com"), 390 favicon_url("chrome://favicon/http://www.google.com"),
386 extension_url("chrome-extension://" + 391 extension_url("chrome-extension://" +
387 crx_file::id_util::GenerateIdForPath( 392 crx_file::id_util::GenerateIdForPath(
388 base::FilePath(FILE_PATH_LITERAL("foo")))), 393 base::FilePath(FILE_PATH_LITERAL("foo")))),
389 settings_url("chrome://settings"), 394 settings_url("chrome://settings"),
390 about_url("about:flags") { 395 about_url("about:flags") {
391 urls_.insert(http_url); 396 urls_.insert(http_url);
392 urls_.insert(http_url_with_path); 397 urls_.insert(http_url_with_path);
393 urls_.insert(https_url); 398 urls_.insert(https_url);
399 urls_.insert(example_com);
400 urls_.insert(test_example_com);
401 urls_.insert(sample_example_com);
394 urls_.insert(file_url); 402 urls_.insert(file_url);
395 urls_.insert(favicon_url); 403 urls_.insert(favicon_url);
396 urls_.insert(extension_url); 404 urls_.insert(extension_url);
397 urls_.insert(settings_url); 405 urls_.insert(settings_url);
398 urls_.insert(about_url); 406 urls_.insert(about_url);
399 // Ignore the policy delegate for this test. 407 // Ignore the policy delegate for this test.
400 PermissionsData::SetPolicyDelegate(NULL); 408 PermissionsData::SetPolicyDelegate(NULL);
401 } 409 }
402 410
403 bool AllowedScript(const Extension* extension, const GURL& url) { 411 bool AllowedScript(const Extension* extension, const GURL& url) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 result &= Blocked(extension, url, tab_id); 477 result &= Blocked(extension, url, tab_id);
470 } 478 }
471 return result; 479 return result;
472 } 480 }
473 481
474 // URLs that are "safe" to provide scripting and capture visible tab access 482 // URLs that are "safe" to provide scripting and capture visible tab access
475 // to if the permissions allow it. 483 // to if the permissions allow it.
476 const GURL http_url; 484 const GURL http_url;
477 const GURL http_url_with_path; 485 const GURL http_url_with_path;
478 const GURL https_url; 486 const GURL https_url;
487 const GURL example_com;
488 const GURL test_example_com;
489 const GURL sample_example_com;
479 const GURL file_url; 490 const GURL file_url;
480 491
481 // We should allow host permission but not scripting permission for favicon 492 // We should allow host permission but not scripting permission for favicon
482 // urls. 493 // urls.
483 const GURL favicon_url; 494 const GURL favicon_url;
484 495
485 // URLs that regular extensions should never get access to. 496 // URLs that regular extensions should never get access to.
486 const GURL extension_url; 497 const GURL extension_url;
487 const GURL settings_url; 498 const GURL settings_url;
488 const GURL about_url; 499 const GURL about_url;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url)); 596 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url));
586 } 597 }
587 598
588 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { 599 TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) {
589 base::CommandLine::ForCurrentProcess()->AppendSwitch( 600 base::CommandLine::ForCurrentProcess()->AppendSwitch(
590 switches::kExtensionsOnChromeURLs); 601 switches::kExtensionsOnChromeURLs);
591 602
592 scoped_refptr<Extension> extension; 603 scoped_refptr<Extension> extension;
593 604
594 // Test <all_urls> for regular extensions. 605 // Test <all_urls> for regular extensions.
595 extension = LoadManifestStrict("script_and_capture", 606 extension =
596 "extension_regular_all.json"); 607 LoadManifestStrict("script_and_capture", "extension_regular_all.json");
597 EXPECT_TRUE(Allowed(extension.get(), http_url)); 608 EXPECT_TRUE(Allowed(extension.get(), http_url));
598 EXPECT_TRUE(Allowed(extension.get(), https_url)); 609 EXPECT_TRUE(Allowed(extension.get(), https_url));
599 EXPECT_TRUE(CaptureOnly(extension.get(), file_url)); 610 EXPECT_TRUE(CaptureOnly(extension.get(), file_url));
600 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url)); 611 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url));
601 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested 612 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); // chrome:// requested
602 EXPECT_TRUE(CaptureOnly(extension.get(), about_url)); 613 EXPECT_TRUE(CaptureOnly(extension.get(), about_url));
603 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url)); 614 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url));
604 615
605 // Test access to iframed content. 616 // Test access to iframed content.
606 GURL within_extension_url = extension->GetResourceURL("page.html"); 617 GURL within_extension_url = extension->GetResourceURL("page.html");
607 EXPECT_TRUE(AllowedScript(extension.get(), http_url)); 618 EXPECT_TRUE(AllowedScript(extension.get(), http_url));
608 EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path)); 619 EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path));
609 EXPECT_TRUE(AllowedScript(extension.get(), https_url)); 620 EXPECT_TRUE(AllowedScript(extension.get(), https_url));
610 EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url)); 621 EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url));
611 EXPECT_TRUE(BlockedScript(extension.get(), extension_url)); 622 EXPECT_TRUE(BlockedScript(extension.get(), extension_url));
612 623
613 const PermissionsData* permissions_data = extension->permissions_data(); 624 const PermissionsData* permissions_data = extension->permissions_data();
614 EXPECT_FALSE(permissions_data->HasHostPermission(settings_url)); 625 EXPECT_FALSE(permissions_data->HasHostPermission(settings_url));
615 EXPECT_FALSE(permissions_data->HasHostPermission(about_url)); 626 EXPECT_FALSE(permissions_data->HasHostPermission(about_url));
616 EXPECT_TRUE(permissions_data->HasHostPermission(favicon_url)); 627 EXPECT_TRUE(permissions_data->HasHostPermission(favicon_url));
617 628
618 // Test * for scheme, which implies just the http/https schemes. 629 // Test * for scheme, which implies just the http/https schemes.
619 extension = LoadManifestStrict("script_and_capture", 630 extension =
620 "extension_wildcard.json"); 631 LoadManifestStrict("script_and_capture", "extension_wildcard.json");
621 EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); 632 EXPECT_TRUE(ScriptOnly(extension.get(), http_url));
622 EXPECT_TRUE(ScriptOnly(extension.get(), https_url)); 633 EXPECT_TRUE(ScriptOnly(extension.get(), https_url));
623 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 634 EXPECT_TRUE(Blocked(extension.get(), settings_url));
624 EXPECT_TRUE(Blocked(extension.get(), about_url)); 635 EXPECT_TRUE(Blocked(extension.get(), about_url));
625 EXPECT_TRUE(Blocked(extension.get(), file_url)); 636 EXPECT_TRUE(Blocked(extension.get(), file_url));
626 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); 637 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
627 extension = 638 extension =
628 LoadManifest("script_and_capture", "extension_wildcard_settings.json"); 639 LoadManifest("script_and_capture", "extension_wildcard_settings.json");
629 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 640 EXPECT_TRUE(Blocked(extension.get(), settings_url));
630 641
631 // Having chrome://*/ should work for regular extensions with the flag 642 // Having chrome://*/ should work for regular extensions with the flag
632 // enabled. 643 // enabled.
633 std::string error; 644 std::string error;
634 extension = LoadManifestUnchecked("script_and_capture", 645 extension = LoadManifestUnchecked("script_and_capture",
635 "extension_wildcard_chrome.json", 646 "extension_wildcard_chrome.json",
636 Manifest::INTERNAL, Extension::NO_FLAGS, 647 Manifest::INTERNAL, Extension::NO_FLAGS,
637 &error); 648 &error);
638 EXPECT_FALSE(extension.get() == NULL); 649 EXPECT_FALSE(extension.get() == NULL);
639 EXPECT_TRUE(Blocked(extension.get(), http_url)); 650 EXPECT_TRUE(Blocked(extension.get(), http_url));
640 EXPECT_TRUE(Blocked(extension.get(), https_url)); 651 EXPECT_TRUE(Blocked(extension.get(), https_url));
641 EXPECT_TRUE(ScriptOnly(extension.get(), settings_url)); 652 EXPECT_TRUE(ScriptOnly(extension.get(), settings_url));
642 EXPECT_TRUE(Blocked(extension.get(), about_url)); 653 EXPECT_TRUE(Blocked(extension.get(), about_url));
643 EXPECT_TRUE(Blocked(extension.get(), file_url)); 654 EXPECT_TRUE(Blocked(extension.get(), file_url));
644 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url)); 655 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url));
645 656
646 // Having chrome://favicon/* should not give you chrome://* 657 // Having chrome://favicon/* should not give you chrome://*
647 extension = LoadManifestStrict("script_and_capture", 658 extension = LoadManifestStrict("script_and_capture",
648 "extension_chrome_favicon_wildcard.json"); 659 "extension_chrome_favicon_wildcard.json");
649 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 660 EXPECT_TRUE(Blocked(extension.get(), settings_url));
650 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url)); 661 EXPECT_TRUE(ScriptOnly(extension.get(), favicon_url));
651 EXPECT_TRUE(Blocked(extension.get(), about_url)); 662 EXPECT_TRUE(Blocked(extension.get(), about_url));
652 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); 663 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
653 664
654 // Having http://favicon should not give you chrome://favicon 665 // Having http://favicon should not give you chrome://favicon
655 extension = LoadManifestStrict("script_and_capture", 666 extension =
656 "extension_http_favicon.json"); 667 LoadManifestStrict("script_and_capture", "extension_http_favicon.json");
657 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 668 EXPECT_TRUE(Blocked(extension.get(), settings_url));
658 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); 669 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
659 670
660 // Component extensions with <all_urls> should get everything. 671 // Component extensions with <all_urls> should get everything.
661 extension = LoadManifest("script_and_capture", "extension_component_all.json", 672 extension = LoadManifest("script_and_capture", "extension_component_all.json",
662 Manifest::COMPONENT, Extension::NO_FLAGS); 673 Manifest::COMPONENT, Extension::NO_FLAGS);
663 EXPECT_TRUE(Allowed(extension.get(), http_url)); 674 EXPECT_TRUE(Allowed(extension.get(), http_url));
664 EXPECT_TRUE(Allowed(extension.get(), https_url)); 675 EXPECT_TRUE(Allowed(extension.get(), https_url));
665 EXPECT_TRUE(Allowed(extension.get(), settings_url)); 676 EXPECT_TRUE(Allowed(extension.get(), settings_url));
666 EXPECT_TRUE(Allowed(extension.get(), about_url)); 677 EXPECT_TRUE(Allowed(extension.get(), about_url));
667 EXPECT_TRUE(Allowed(extension.get(), favicon_url)); 678 EXPECT_TRUE(Allowed(extension.get(), favicon_url));
668 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url)); 679 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
669 680
670 // Component extensions should only get access to what they ask for. 681 // Component extensions should only get access to what they ask for.
671 extension = LoadManifest("script_and_capture", 682 extension =
672 "extension_component_google.json", Manifest::COMPONENT, 683 LoadManifest("script_and_capture", "extension_component_google.json",
673 Extension::NO_FLAGS); 684 Manifest::COMPONENT, Extension::NO_FLAGS);
674 EXPECT_TRUE(ScriptOnly(extension.get(), http_url)); 685 EXPECT_TRUE(ScriptOnly(extension.get(), http_url));
675 EXPECT_TRUE(Blocked(extension.get(), https_url)); 686 EXPECT_TRUE(Blocked(extension.get(), https_url));
676 EXPECT_TRUE(Blocked(extension.get(), file_url)); 687 EXPECT_TRUE(Blocked(extension.get(), file_url));
677 EXPECT_TRUE(Blocked(extension.get(), settings_url)); 688 EXPECT_TRUE(Blocked(extension.get(), settings_url));
678 EXPECT_TRUE(Blocked(extension.get(), favicon_url)); 689 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
679 EXPECT_TRUE(Blocked(extension.get(), about_url)); 690 EXPECT_TRUE(Blocked(extension.get(), about_url));
680 EXPECT_TRUE(Blocked(extension.get(), extension_url)); 691 EXPECT_TRUE(Blocked(extension.get(), extension_url));
681 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url)); 692 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url));
682 } 693 }
683 694
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 kTabId, &error)) 836 kTabId, &error))
826 << extension->name() << ": " << url; 837 << extension->name() << ": " << url;
827 EXPECT_EQ(PermissionsData::ACCESS_DENIED, 838 EXPECT_EQ(PermissionsData::ACCESS_DENIED,
828 extension->permissions_data()->GetContentScriptAccess( 839 extension->permissions_data()->GetContentScriptAccess(
829 extension, url, kTabId, &error)) 840 extension, url, kTabId, &error))
830 << extension->name() << ": " << url; 841 << extension->name() << ": " << url;
831 } 842 }
832 } 843 }
833 } 844 }
834 845
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
835 } // namespace extensions 1006 } // 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