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

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

Issue 2499493004: Communicate ExtensionSettings policy to renderers (Closed)
Patch Set: -Updated unit tests, fixed nits, moved IsRuntimeBlockedHost for safety 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
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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); 773 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2));
763 774
764 permissions_data->ClearTabSpecificPermissions(1); 775 permissions_data->ClearTabSpecificPermissions(1);
765 EXPECT_FALSE(permissions_data->GetTabSpecificPermissionsForTesting(1)); 776 EXPECT_FALSE(permissions_data->GetTabSpecificPermissionsForTesting(1));
766 777
767 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); 778 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0));
768 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); 779 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1));
769 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); 780 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2));
770 } 781 }
771 782
783 TEST_F(ExtensionScriptAndCaptureVisibleTest, PolicyHostRestrictionsSwap) {
784 // Makes sure when an extension gets an individual policy for host
785 // restrictions it overrides the default policy. Also tests transitioning back
786 // to the default policy when an individual policy is removed.
787 URLPattern example_com_pattern =
788 URLPattern(URLPattern::SCHEME_ALL, "*://*.example.com/*");
789 URLPattern test_example_com_pattern =
790 URLPattern(URLPattern::SCHEME_ALL, "*://test.example.com/*");
791 URLPatternSet default_blocked;
792 URLPatternSet default_allowed;
793 default_blocked.AddPattern(example_com_pattern);
794 default_allowed.AddPattern(test_example_com_pattern);
795
796 // Test <all_urls> for regular extensions.
797 scoped_refptr<Extension> extension =
798 LoadManifestStrict("script_and_capture", "extension_regular_all.json");
799 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
800 default_blocked, default_allowed);
801
802 // The default policy applies to all extensions at this point. The extension
803 // should be able to access test.example.com but be blocked from
804 // accessing any other subdomains of example.com or example.com itself.
805 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
806 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
807 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
808
809 URLPatternSet blocked;
810 blocked.AddPattern(test_example_com_pattern);
811 URLPatternSet allowed;
812 extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed);
813
814 // We've applied an individual policy which overrides the default policy.
815 // The only URL that should be blocked is test.example.com.
816 EXPECT_TRUE(Allowed(extension.get(), example_com));
817 EXPECT_TRUE(Allowed(extension.get(), sample_example_com));
818 EXPECT_TRUE(CaptureOnly(extension.get(), test_example_com));
819
820 blocked.AddPattern(example_com_pattern);
821 allowed.AddPattern(test_example_com_pattern);
822 extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed);
823
824 // Adding example.com and all its subdomains to the blocked list and
825 // test.example.com to the whitelist. This is still the individual policy
826 // Since the whitelist overrides a blacklist we expect to allow access to
827 // test.example.com but block access to all other example.com subdomains
828 // (sample.example.com) and example.com itself.
829 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
830 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
831 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
832
833 blocked.ClearPatterns();
834 allowed.ClearPatterns();
835 extension->permissions_data()->SetPolicyHostRestrictions(blocked, allowed);
836
837 // Cleared all URLs from the individual policy, so all URLs should have
838 // access. We want to make sure that a block at the default level doesn't
839 // apply since we're still definining an individual policy.
840 EXPECT_TRUE(Allowed(extension.get(), example_com));
841 EXPECT_TRUE(Allowed(extension.get(), sample_example_com));
842 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
843
844 // Flip back to using default policy for this extension.
845 extension->permissions_data()->SetUsesDefaultHostRestrictions();
846
847 // Make sure the default policy has the same effect as before we defined an
848 // individual policy. Access to test.example.com should be allowed, but all
849 // other subdomains and example.com itself should be blocked.
850 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
851 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
852 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
853 }
854
855 TEST_F(ExtensionScriptAndCaptureVisibleTest, PolicyHostRestrictions) {
856 // Test that host restrictions applied by policy take effect on normal URLs,
857 // iframe urls, different schemes, and components.
858 URLPatternSet default_blocked;
859 URLPatternSet default_allowed;
860 default_blocked.AddPattern(
861 URLPattern(URLPattern::SCHEME_ALL, "https://*.example.com/*"));
862 default_allowed.AddPattern(
863 URLPattern(URLPattern::SCHEME_ALL, "https://test.example.com/*"));
864
865 // In all of these tests, test.example.com should have scripting allowed, with
866 // all other subdomains and example.com itself blocked.
867
868 // Test <all_urls> for regular extensions.
869 scoped_refptr<Extension> extension =
870 LoadManifestStrict("script_and_capture", "extension_regular_all.json");
871 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
872 default_blocked, default_allowed);
873
874 EXPECT_TRUE(Allowed(extension.get(), http_url));
875 EXPECT_TRUE(Allowed(extension.get(), https_url));
876 EXPECT_TRUE(CaptureOnly(extension.get(), example_com));
877 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
878 EXPECT_TRUE(CaptureOnly(extension.get(), sample_example_com));
879 EXPECT_TRUE(CaptureOnly(extension.get(), file_url));
880 EXPECT_TRUE(CaptureOnly(extension.get(), settings_url));
881 EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url));
882 EXPECT_TRUE(CaptureOnly(extension.get(), about_url));
883 EXPECT_TRUE(CaptureOnly(extension.get(), extension_url));
884
885 // Test access to iframed content.
886 GURL within_extension_url = extension->GetResourceURL("page.html");
887 EXPECT_TRUE(AllowedScript(extension.get(), http_url));
888 EXPECT_TRUE(AllowedScript(extension.get(), http_url_with_path));
889 EXPECT_TRUE(BlockedScript(extension.get(), example_com));
890 EXPECT_TRUE(AllowedScript(extension.get(), test_example_com));
891 EXPECT_TRUE(BlockedScript(extension.get(), sample_example_com));
892 EXPECT_TRUE(AllowedScript(extension.get(), https_url));
893 EXPECT_TRUE(BlockedScript(extension.get(), within_extension_url));
894 EXPECT_TRUE(BlockedScript(extension.get(), extension_url));
895
896 // Supress host permission for example.com since its on the blocklist
897 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(example_com));
898 // Allow host permission for test.example.com since its on the whitelist and
899 // blacklist. The whitelist overrides the blacklist.
900 EXPECT_TRUE(
901 extension->permissions_data()->HasHostPermission(test_example_com));
902 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(settings_url));
903 EXPECT_FALSE(extension->permissions_data()->HasHostPermission(about_url));
904 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
905
906 // Test * for scheme, which implies just the http/https schemes.
907 extension =
908 LoadManifestStrict("script_and_capture", "extension_wildcard.json");
909 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
910 default_blocked, default_allowed);
911 EXPECT_TRUE(ScriptOnly(extension.get(), http_url));
912 EXPECT_TRUE(Blocked(extension.get(), example_com));
913 EXPECT_TRUE(ScriptOnly(extension.get(), test_example_com));
914 EXPECT_TRUE(Blocked(extension.get(), sample_example_com));
915 EXPECT_TRUE(ScriptOnly(extension.get(), https_url));
916 EXPECT_TRUE(Blocked(extension.get(), settings_url));
917 EXPECT_TRUE(Blocked(extension.get(), about_url));
918 EXPECT_TRUE(Blocked(extension.get(), file_url));
919 EXPECT_TRUE(Blocked(extension.get(), favicon_url));
920 extension =
921 LoadManifest("script_and_capture", "extension_wildcard_settings.json");
922 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
923 default_blocked, default_allowed);
924 EXPECT_TRUE(Blocked(extension.get(), settings_url));
925
926 // Component extensions with <all_urls> should get everything regardless of
927 // policy.
928 extension = LoadManifest("script_and_capture", "extension_component_all.json",
929 Manifest::COMPONENT, Extension::NO_FLAGS);
930 extension->permissions_data()->SetDefaultPolicyHostRestrictions(
931 default_blocked, default_allowed);
932 EXPECT_TRUE(Allowed(extension.get(), http_url));
933 EXPECT_TRUE(Allowed(extension.get(), https_url));
934 EXPECT_TRUE(Allowed(extension.get(), example_com));
935 EXPECT_TRUE(Allowed(extension.get(), test_example_com));
936 EXPECT_TRUE(Allowed(extension.get(), sample_example_com));
937 EXPECT_TRUE(Allowed(extension.get(), settings_url));
938 EXPECT_TRUE(Allowed(extension.get(), about_url));
939 EXPECT_TRUE(Allowed(extension.get(), favicon_url));
940 EXPECT_TRUE(extension->permissions_data()->HasHostPermission(favicon_url));
941 }
942
772 } // namespace extensions 943 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698