Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/common/extensions/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/json/json_file_value_serializer.h" | 10 #include "base/json/json_file_value_serializer.h" |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 608 #endif | 608 #endif |
| 609 } | 609 } |
| 610 | 610 |
| 611 TEST(ExtensionTest, WantsFileAccess) { | 611 TEST(ExtensionTest, WantsFileAccess) { |
| 612 scoped_refptr<Extension> extension; | 612 scoped_refptr<Extension> extension; |
| 613 GURL file_url("file:///etc/passwd"); | 613 GURL file_url("file:///etc/passwd"); |
| 614 | 614 |
| 615 // <all_urls> permission | 615 // <all_urls> permission |
| 616 extension = LoadManifest("permissions", "permissions_all_urls.json"); | 616 extension = LoadManifest("permissions", "permissions_all_urls.json"); |
| 617 EXPECT_TRUE(extension->wants_file_access()); | 617 EXPECT_TRUE(extension->wants_file_access()); |
| 618 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); | 618 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
| 619 extension = LoadManifest( | 619 extension = LoadManifest( |
| 620 "permissions", "permissions_all_urls.json", Extension::ALLOW_FILE_ACCESS); | 620 "permissions", "permissions_all_urls.json", Extension::ALLOW_FILE_ACCESS); |
| 621 EXPECT_TRUE(extension->wants_file_access()); | 621 EXPECT_TRUE(extension->wants_file_access()); |
| 622 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); | 622 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
| 623 | 623 |
| 624 // file:///* permission | 624 // file:///* permission |
| 625 extension = LoadManifest("permissions", "permissions_file_scheme.json"); | 625 extension = LoadManifest("permissions", "permissions_file_scheme.json"); |
| 626 EXPECT_TRUE(extension->wants_file_access()); | 626 EXPECT_TRUE(extension->wants_file_access()); |
| 627 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); | 627 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
| 628 extension = LoadManifest("permissions", "permissions_file_scheme.json", | 628 extension = LoadManifest("permissions", "permissions_file_scheme.json", |
| 629 Extension::ALLOW_FILE_ACCESS); | 629 Extension::ALLOW_FILE_ACCESS); |
| 630 EXPECT_TRUE(extension->wants_file_access()); | 630 EXPECT_TRUE(extension->wants_file_access()); |
| 631 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); | 631 EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
| 632 | 632 |
| 633 // http://* permission | 633 // http://* permission |
| 634 extension = LoadManifest("permissions", "permissions_http_scheme.json"); | 634 extension = LoadManifest("permissions", "permissions_http_scheme.json"); |
| 635 EXPECT_FALSE(extension->wants_file_access()); | 635 EXPECT_FALSE(extension->wants_file_access()); |
| 636 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); | 636 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
| 637 extension = LoadManifest("permissions", "permissions_http_scheme.json", | 637 extension = LoadManifest("permissions", "permissions_http_scheme.json", |
| 638 Extension::ALLOW_FILE_ACCESS); | 638 Extension::ALLOW_FILE_ACCESS); |
| 639 EXPECT_FALSE(extension->wants_file_access()); | 639 EXPECT_FALSE(extension->wants_file_access()); |
| 640 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); | 640 EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
| 641 | 641 |
| 642 // <all_urls> content script match | 642 // <all_urls> content script match |
| 643 extension = LoadManifest("permissions", "content_script_all_urls.json"); | 643 extension = LoadManifest("permissions", "content_script_all_urls.json"); |
| 644 EXPECT_TRUE(extension->wants_file_access()); | 644 EXPECT_TRUE(extension->wants_file_access()); |
| 645 EXPECT_FALSE(extension->CanExecuteScriptOnPage( | 645 EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
| 646 file_url, &extension->content_scripts()[0], NULL)); | 646 file_url, -1, &extension->content_scripts()[0], NULL)); |
| 647 extension = LoadManifest("permissions", "content_script_all_urls.json", | 647 extension = LoadManifest("permissions", "content_script_all_urls.json", |
| 648 Extension::ALLOW_FILE_ACCESS); | 648 Extension::ALLOW_FILE_ACCESS); |
| 649 EXPECT_TRUE(extension->wants_file_access()); | 649 EXPECT_TRUE(extension->wants_file_access()); |
| 650 EXPECT_TRUE(extension->CanExecuteScriptOnPage( | 650 EXPECT_TRUE(extension->CanExecuteScriptOnPage( |
| 651 file_url, &extension->content_scripts()[0], NULL)); | 651 file_url, -1, &extension->content_scripts()[0], NULL)); |
| 652 | 652 |
| 653 // file:///* content script match | 653 // file:///* content script match |
| 654 extension = LoadManifest("permissions", "content_script_file_scheme.json"); | 654 extension = LoadManifest("permissions", "content_script_file_scheme.json"); |
| 655 EXPECT_TRUE(extension->wants_file_access()); | 655 EXPECT_TRUE(extension->wants_file_access()); |
| 656 EXPECT_FALSE(extension->CanExecuteScriptOnPage( | 656 EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
| 657 file_url, &extension->content_scripts()[0], NULL)); | 657 file_url, -1, &extension->content_scripts()[0], NULL)); |
| 658 extension = LoadManifest("permissions", "content_script_file_scheme.json", | 658 extension = LoadManifest("permissions", "content_script_file_scheme.json", |
| 659 Extension::ALLOW_FILE_ACCESS); | 659 Extension::ALLOW_FILE_ACCESS); |
| 660 EXPECT_TRUE(extension->wants_file_access()); | 660 EXPECT_TRUE(extension->wants_file_access()); |
| 661 EXPECT_TRUE(extension->CanExecuteScriptOnPage( | 661 EXPECT_TRUE(extension->CanExecuteScriptOnPage( |
| 662 file_url, &extension->content_scripts()[0], NULL)); | 662 file_url, -1, &extension->content_scripts()[0], NULL)); |
| 663 | 663 |
| 664 // http://* content script match | 664 // http://* content script match |
| 665 extension = LoadManifest("permissions", "content_script_http_scheme.json"); | 665 extension = LoadManifest("permissions", "content_script_http_scheme.json"); |
| 666 EXPECT_FALSE(extension->wants_file_access()); | 666 EXPECT_FALSE(extension->wants_file_access()); |
| 667 EXPECT_FALSE(extension->CanExecuteScriptOnPage( | 667 EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
| 668 file_url, &extension->content_scripts()[0], NULL)); | 668 file_url, -1, &extension->content_scripts()[0], NULL)); |
| 669 extension = LoadManifest("permissions", "content_script_http_scheme.json", | 669 extension = LoadManifest("permissions", "content_script_http_scheme.json", |
| 670 Extension::ALLOW_FILE_ACCESS); | 670 Extension::ALLOW_FILE_ACCESS); |
| 671 EXPECT_FALSE(extension->wants_file_access()); | 671 EXPECT_FALSE(extension->wants_file_access()); |
| 672 EXPECT_FALSE(extension->CanExecuteScriptOnPage( | 672 EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
| 673 file_url, &extension->content_scripts()[0], NULL)); | 673 file_url, -1, &extension->content_scripts()[0], NULL)); |
| 674 } | 674 } |
| 675 | 675 |
| 676 TEST(ExtensionTest, ExtraFlags) { | 676 TEST(ExtensionTest, ExtraFlags) { |
| 677 scoped_refptr<Extension> extension; | 677 scoped_refptr<Extension> extension; |
| 678 extension = LoadManifest("app", "manifest.json", Extension::FROM_WEBSTORE); | 678 extension = LoadManifest("app", "manifest.json", Extension::FROM_WEBSTORE); |
| 679 EXPECT_TRUE(extension->from_webstore()); | 679 EXPECT_TRUE(extension->from_webstore()); |
| 680 | 680 |
| 681 extension = LoadManifest("app", "manifest.json", Extension::FROM_BOOKMARK); | 681 extension = LoadManifest("app", "manifest.json", Extension::FROM_BOOKMARK); |
| 682 EXPECT_TRUE(extension->from_bookmark()); | 682 EXPECT_TRUE(extension->from_bookmark()); |
| 683 | 683 |
| 684 extension = LoadManifest("app", "manifest.json", Extension::NO_FLAGS); | 684 extension = LoadManifest("app", "manifest.json", Extension::NO_FLAGS); |
| 685 EXPECT_FALSE(extension->from_bookmark()); | 685 EXPECT_FALSE(extension->from_bookmark()); |
| 686 EXPECT_FALSE(extension->from_webstore()); | 686 EXPECT_FALSE(extension->from_webstore()); |
| 687 } | 687 } |
| 688 | 688 |
| 689 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage | 689 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage |
| 690 // methods of Extension for extensions with various permissions. | 690 // methods of Extension for extensions with various permissions. |
| 691 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { | 691 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
| 692 public: | 692 protected: |
| 693 ExtensionScriptAndCaptureVisibleTest() { | 693 ExtensionScriptAndCaptureVisibleTest() |
| 694 PathService::Get(chrome::DIR_TEST_DATA, &dirpath_); | 694 : http_url_("http://www.google.com"), |
| 695 http_url_with_path_("http://www.google.com/index.html"), | |
| 696 https_url_("https://www.google.com"), | |
| 697 file_url_("file:///foo/bar"), | |
| 698 favicon_url_("chrome://favicon/http://www.google.com"), | |
| 699 extension_url_("chrome-extension://" + | |
| 700 Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("foo")))), | |
| 701 settings_url_("chrome://settings"), | |
| 702 about_url_("about:flags") { | |
| 703 urls_.insert(http_url_); | |
| 704 urls_.insert(http_url_with_path_); | |
| 705 urls_.insert(https_url_); | |
| 706 urls_.insert(file_url_); | |
| 707 urls_.insert(favicon_url_); | |
| 708 urls_.insert(extension_url_); | |
| 709 urls_.insert(settings_url_); | |
| 710 urls_.insert(about_url_); | |
| 695 } | 711 } |
| 696 | 712 |
| 697 bool Allowed(const Extension* extension, const GURL& url) { | 713 bool Allowed(const Extension* extension, const GURL& url) { |
| 698 return (extension->CanExecuteScriptOnPage(url, NULL, NULL) && | 714 return Allowed(extension, url, -1); |
| 699 extension->CanCaptureVisiblePage(url, NULL)); | 715 } |
| 716 | |
| 717 bool Allowed(const Extension* extension, const GURL& url, int tab_id) { | |
| 718 return (extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) && | |
| 719 extension->CanCaptureVisiblePage(url, tab_id, NULL)); | |
| 700 } | 720 } |
| 701 | 721 |
| 702 bool CaptureOnly(const Extension* extension, const GURL& url) { | 722 bool CaptureOnly(const Extension* extension, const GURL& url) { |
| 703 return !extension->CanExecuteScriptOnPage(url, NULL, NULL) && | 723 return CaptureOnly(extension, url, -1); |
| 704 extension->CanCaptureVisiblePage(url, NULL); | 724 } |
| 725 | |
| 726 bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) { | |
| 727 return !extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) && | |
| 728 extension->CanCaptureVisiblePage(url, tab_id, NULL); | |
| 705 } | 729 } |
| 706 | 730 |
| 707 bool Blocked(const Extension* extension, const GURL& url) { | 731 bool Blocked(const Extension* extension, const GURL& url) { |
| 708 return !(extension->CanExecuteScriptOnPage(url, NULL, NULL) || | 732 return Blocked(extension, url, -1); |
| 709 extension->CanCaptureVisiblePage(url, NULL)); | |
| 710 } | 733 } |
| 711 | 734 |
| 712 protected: | 735 bool Blocked(const Extension* extension, const GURL& url, int tab_id) { |
| 713 FilePath dirpath_; | 736 return !(extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) || |
| 737 extension->CanCaptureVisiblePage(url, tab_id, NULL)); | |
| 738 } | |
| 739 | |
| 740 bool AllowedExclusivelyOnTab( | |
| 741 const Extension* extension, | |
| 742 const std::set<GURL>& allowed_urls, | |
| 743 int tab_id) { | |
| 744 bool result = true; | |
| 745 for (std::set<GURL>::iterator it = urls_.begin(); it != urls_.end(); ++it) { | |
| 746 const GURL& url = *it; | |
| 747 if (allowed_urls.count(url)) | |
| 748 result &= Allowed(extension, url, tab_id); | |
| 749 else | |
| 750 result &= Blocked(extension, url, tab_id); | |
| 751 } | |
| 752 return result; | |
| 753 } | |
| 754 | |
| 755 const GURL& http_url() { return http_url_; } | |
| 756 const GURL& http_url_with_path() { return http_url_with_path_; } | |
| 757 const GURL& https_url() { return https_url_; } | |
| 758 const GURL& file_url() { return file_url_; } | |
| 759 const GURL& favicon_url() { return favicon_url_; } | |
| 760 const GURL& extension_url() { return extension_url_; } | |
| 761 const GURL& settings_url() { return settings_url_; } | |
| 762 const GURL& about_url() { return about_url_; } | |
| 763 | |
| 764 const std::set<GURL> urls() { return urls_; } | |
| 765 | |
| 766 private: | |
| 767 // URLs that are "safe" to provide scripting and capture visible tab access | |
| 768 // to if the permissions allow it. | |
| 769 GURL http_url_; | |
| 770 GURL http_url_with_path_; | |
| 771 GURL https_url_; | |
| 772 GURL file_url_; | |
| 773 | |
| 774 // We should allow host permission but not scripting permission for favicon | |
| 775 // urls. | |
| 776 GURL favicon_url_; | |
| 777 | |
| 778 // URLs that regular extensions should never get access to. | |
| 779 GURL extension_url_; | |
| 780 GURL settings_url_; | |
| 781 GURL about_url_; | |
| 782 | |
| 783 // The set of all URLs above. | |
| 784 std::set<GURL> urls_; | |
| 714 }; | 785 }; |
| 715 | 786 |
| 716 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { | 787 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { |
| 717 scoped_refptr<Extension> extension; | 788 scoped_refptr<Extension> extension; |
| 718 // URLs that are "safe" to provide scripting and capture visible tab access | |
| 719 // to if the permissions allow it. | |
| 720 GURL http_url("http://www.google.com"); | |
| 721 GURL https_url("https://www.google.com"); | |
| 722 GURL file_url("file:///foo/bar"); | |
| 723 | 789 |
| 724 // We should allow host permission but not scripting permission for favicon | |
| 725 // urls. | |
| 726 GURL favicon_url("chrome://favicon/http://www.google.com"); | |
| 727 | |
| 728 std::string dummy_id = | |
| 729 Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("whatever"))); | |
| 730 | |
| 731 // URLs that regular extensions should never get access to. | |
| 732 GURL extension_url("chrome-extension://" + dummy_id); | |
| 733 GURL settings_url("chrome://settings"); | |
| 734 GURL about_url("about:flags"); | |
| 735 | 790 |
| 736 // Test <all_urls> for regular extensions. | 791 // Test <all_urls> for regular extensions. |
| 737 extension = LoadManifestStrict("script_and_capture", | 792 extension = LoadManifestStrict("script_and_capture", |
| 738 "extension_regular_all.json"); | 793 "extension_regular_all.json"); |
| 739 EXPECT_TRUE(Allowed(extension, http_url)); | 794 EXPECT_TRUE(Allowed(extension, http_url())); |
| 740 EXPECT_TRUE(Allowed(extension, https_url)); | 795 EXPECT_TRUE(Allowed(extension, https_url())); |
| 741 EXPECT_TRUE(Blocked(extension, file_url)); | 796 EXPECT_TRUE(Blocked(extension, file_url())); |
| 742 EXPECT_TRUE(Blocked(extension, settings_url)); | 797 EXPECT_TRUE(Blocked(extension, settings_url())); |
| 743 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); | 798 EXPECT_TRUE(CaptureOnly(extension, favicon_url())); |
| 744 EXPECT_TRUE(Blocked(extension, about_url)); | 799 EXPECT_TRUE(Blocked(extension, about_url())); |
| 745 EXPECT_TRUE(Blocked(extension, extension_url)); | 800 EXPECT_TRUE(Blocked(extension, extension_url())); |
| 746 | 801 |
| 747 EXPECT_FALSE(extension->HasHostPermission(settings_url)); | 802 EXPECT_FALSE(extension->HasHostPermission(settings_url())); |
| 748 EXPECT_FALSE(extension->HasHostPermission(about_url)); | 803 EXPECT_FALSE(extension->HasHostPermission(about_url())); |
| 749 EXPECT_TRUE(extension->HasHostPermission(favicon_url)); | 804 EXPECT_TRUE(extension->HasHostPermission(favicon_url())); |
| 750 | 805 |
| 751 // Test * for scheme, which implies just the http/https schemes. | 806 // Test * for scheme, which implies just the http/https schemes. |
| 752 extension = LoadManifestStrict("script_and_capture", | 807 extension = LoadManifestStrict("script_and_capture", |
| 753 "extension_wildcard.json"); | 808 "extension_wildcard.json"); |
| 754 EXPECT_TRUE(Allowed(extension, http_url)); | 809 EXPECT_TRUE(Allowed(extension, http_url())); |
| 755 EXPECT_TRUE(Allowed(extension, https_url)); | 810 EXPECT_TRUE(Allowed(extension, https_url())); |
| 756 EXPECT_TRUE(Blocked(extension, settings_url)); | 811 EXPECT_TRUE(Blocked(extension, settings_url())); |
| 757 EXPECT_TRUE(Blocked(extension, about_url)); | 812 EXPECT_TRUE(Blocked(extension, about_url())); |
| 758 EXPECT_TRUE(Blocked(extension, file_url)); | 813 EXPECT_TRUE(Blocked(extension, file_url())); |
| 759 EXPECT_TRUE(Blocked(extension, favicon_url)); | 814 EXPECT_TRUE(Blocked(extension, favicon_url())); |
| 760 extension = LoadManifest("script_and_capture", | 815 extension = LoadManifest("script_and_capture", |
| 761 "extension_wildcard_settings.json"); | 816 "extension_wildcard_settings.json"); |
| 762 EXPECT_TRUE(Blocked(extension, settings_url)); | 817 EXPECT_TRUE(Blocked(extension, settings_url())); |
| 763 | 818 |
| 764 // Having chrome://*/ should not work for regular extensions. Note that | 819 // Having chrome://*/ should not work for regular extensions. Note that |
| 765 // for favicon access, we require the explicit pattern chrome://favicon/*. | 820 // for favicon access, we require the explicit pattern chrome://favicon/*. |
| 766 std::string error; | 821 std::string error; |
| 767 extension = LoadManifestUnchecked("script_and_capture", | 822 extension = LoadManifestUnchecked("script_and_capture", |
| 768 "extension_wildcard_chrome.json", | 823 "extension_wildcard_chrome.json", |
| 769 Extension::INTERNAL, Extension::NO_FLAGS, | 824 Extension::INTERNAL, Extension::NO_FLAGS, |
| 770 &error); | 825 &error); |
| 771 EXPECT_TRUE(extension == NULL); | 826 EXPECT_TRUE(extension == NULL); |
| 772 EXPECT_EQ(ExtensionErrorUtils::FormatErrorMessage( | 827 EXPECT_EQ(ExtensionErrorUtils::FormatErrorMessage( |
| 773 errors::kInvalidPermissionScheme, base::IntToString(1)), error); | 828 errors::kInvalidPermissionScheme, base::IntToString(1)), error); |
| 774 | 829 |
| 775 // Having chrome://favicon/* should not give you chrome://* | 830 // Having chrome://favicon/* should not give you chrome://* |
| 776 extension = LoadManifestStrict("script_and_capture", | 831 extension = LoadManifestStrict("script_and_capture", |
| 777 "extension_chrome_favicon_wildcard.json"); | 832 "extension_chrome_favicon_wildcard.json"); |
| 778 EXPECT_TRUE(Blocked(extension, settings_url)); | 833 EXPECT_TRUE(Blocked(extension, settings_url())); |
| 779 EXPECT_TRUE(CaptureOnly(extension, favicon_url)); | 834 EXPECT_TRUE(CaptureOnly(extension, favicon_url())); |
| 780 EXPECT_TRUE(Blocked(extension, about_url)); | 835 EXPECT_TRUE(Blocked(extension, about_url())); |
| 781 EXPECT_TRUE(extension->HasHostPermission(favicon_url)); | 836 EXPECT_TRUE(extension->HasHostPermission(favicon_url())); |
| 782 | 837 |
| 783 // Having http://favicon should not give you chrome://favicon | 838 // Having http://favicon should not give you chrome://favicon |
| 784 extension = LoadManifestStrict("script_and_capture", | 839 extension = LoadManifestStrict("script_and_capture", |
| 785 "extension_http_favicon.json"); | 840 "extension_http_favicon.json"); |
| 786 EXPECT_TRUE(Blocked(extension, settings_url)); | 841 EXPECT_TRUE(Blocked(extension, settings_url())); |
| 787 EXPECT_TRUE(Blocked(extension, favicon_url)); | 842 EXPECT_TRUE(Blocked(extension, favicon_url())); |
| 788 | 843 |
| 789 // Component extensions with <all_urls> should get everything. | 844 // Component extensions with <all_urls> should get everything. |
| 790 extension = LoadManifest("script_and_capture", "extension_component_all.json", | 845 extension = LoadManifest("script_and_capture", "extension_component_all.json", |
| 791 Extension::COMPONENT, Extension::NO_FLAGS); | 846 Extension::COMPONENT, Extension::NO_FLAGS); |
| 792 EXPECT_TRUE(Allowed(extension, http_url)); | 847 EXPECT_TRUE(Allowed(extension, http_url())); |
| 793 EXPECT_TRUE(Allowed(extension, https_url)); | 848 EXPECT_TRUE(Allowed(extension, https_url())); |
| 794 EXPECT_TRUE(Allowed(extension, settings_url)); | 849 EXPECT_TRUE(Allowed(extension, settings_url())); |
| 795 EXPECT_TRUE(Allowed(extension, about_url)); | 850 EXPECT_TRUE(Allowed(extension, about_url())); |
| 796 EXPECT_TRUE(Allowed(extension, favicon_url)); | 851 EXPECT_TRUE(Allowed(extension, favicon_url())); |
| 797 EXPECT_TRUE(extension->HasHostPermission(favicon_url)); | 852 EXPECT_TRUE(extension->HasHostPermission(favicon_url())); |
| 798 | 853 |
| 799 // Component extensions should only get access to what they ask for. | 854 // Component extensions should only get access to what they ask for. |
| 800 extension = LoadManifest("script_and_capture", | 855 extension = LoadManifest("script_and_capture", |
| 801 "extension_component_google.json", Extension::COMPONENT, | 856 "extension_component_google.json", Extension::COMPONENT, |
| 802 Extension::NO_FLAGS); | 857 Extension::NO_FLAGS); |
| 803 EXPECT_TRUE(Allowed(extension, http_url)); | 858 EXPECT_TRUE(Allowed(extension, http_url())); |
| 804 EXPECT_TRUE(Blocked(extension, https_url)); | 859 EXPECT_TRUE(Blocked(extension, https_url())); |
| 805 EXPECT_TRUE(Blocked(extension, file_url)); | 860 EXPECT_TRUE(Blocked(extension, file_url())); |
| 806 EXPECT_TRUE(Blocked(extension, settings_url)); | 861 EXPECT_TRUE(Blocked(extension, settings_url())); |
| 807 EXPECT_TRUE(Blocked(extension, favicon_url)); | 862 EXPECT_TRUE(Blocked(extension, favicon_url())); |
| 808 EXPECT_TRUE(Blocked(extension, about_url)); | 863 EXPECT_TRUE(Blocked(extension, about_url())); |
| 809 EXPECT_TRUE(Blocked(extension, extension_url)); | 864 EXPECT_TRUE(Blocked(extension, extension_url())); |
| 810 EXPECT_FALSE(extension->HasHostPermission(settings_url)); | 865 EXPECT_FALSE(extension->HasHostPermission(settings_url())); |
|
not at google - send to devlin
2012/06/06 07:38:40
Looking at the damage I made here, I should revert
| |
| 866 } | |
| 867 | |
| 868 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { | |
| 869 scoped_refptr<Extension> extension = | |
| 870 LoadManifestStrict("script_and_capture", "tab_specific.json"); | |
| 871 | |
| 872 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0)); | |
| 873 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1)); | |
| 874 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(2)); | |
| 875 | |
| 876 std::set<GURL> no_urls; | |
| 877 | |
| 878 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | |
| 879 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | |
| 880 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | |
| 881 | |
| 882 URLPatternSet allowed_hosts; | |
| 883 allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | |
| 884 http_url().spec())); | |
| 885 std::set<GURL> allowed_urls; | |
| 886 allowed_urls.insert(http_url()); | |
| 887 // http_url_with_path() will also be allowed, because Extension should be | |
| 888 // considering the security origin of the URL not the URL itself, and | |
| 889 // http_url() is in allowed_hosts. | |
| 890 allowed_urls.insert(http_url_with_path()); | |
| 891 | |
| 892 extension->SetTabSpecificHostPermissions(0, allowed_hosts); | |
| 893 EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0)); | |
| 894 | |
| 895 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); | |
| 896 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | |
| 897 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | |
| 898 | |
| 899 extension->ClearTabSpecificHostPermissions(0); | |
| 900 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0)); | |
| 901 | |
| 902 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | |
| 903 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | |
| 904 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | |
| 905 | |
| 906 std::set<GURL> more_allowed_urls = allowed_urls; | |
| 907 more_allowed_urls.insert(https_url()); | |
| 908 URLPatternSet more_allowed_hosts = allowed_hosts; | |
| 909 more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, | |
| 910 https_url().spec())); | |
| 911 | |
| 912 extension->SetTabSpecificHostPermissions(0, allowed_hosts); | |
| 913 EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0)); | |
| 914 extension->SetTabSpecificHostPermissions(1, more_allowed_hosts); | |
| 915 EXPECT_EQ(more_allowed_hosts, *extension->GetTabSpecificHostPermissions(1)); | |
| 916 | |
| 917 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0)); | |
| 918 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); | |
| 919 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | |
| 920 | |
| 921 extension->ClearTabSpecificHostPermissions(0); | |
| 922 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0)); | |
| 923 | |
| 924 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | |
| 925 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1)); | |
| 926 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | |
| 927 | |
| 928 extension->ClearTabSpecificHostPermissions(1); | |
| 929 EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1)); | |
| 930 | |
| 931 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0)); | |
| 932 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1)); | |
| 933 EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2)); | |
| 934 } | |
| 935 | |
| 936 TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecificActiveHostPermissions) { | |
| 937 // - no active permissions. | |
| 938 // - no tab specific permissions | |
| 939 // - changing active permissions. | |
| 940 // - changing tab specific permissions. | |
| 941 // - lots of tab specific permissions (test merge algorithm). | |
| 811 } | 942 } |
| 812 | 943 |
| 813 TEST(ExtensionTest, GenerateId) { | 944 TEST(ExtensionTest, GenerateId) { |
| 814 std::string result; | 945 std::string result; |
| 815 EXPECT_TRUE(Extension::GenerateId("", &result)); | 946 EXPECT_TRUE(Extension::GenerateId("", &result)); |
| 816 | 947 |
| 817 EXPECT_TRUE(Extension::GenerateId("test", &result)); | 948 EXPECT_TRUE(Extension::GenerateId("test", &result)); |
| 818 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); | 949 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); |
| 819 | 950 |
| 820 EXPECT_TRUE(Extension::GenerateId("_", &result)); | 951 EXPECT_TRUE(Extension::GenerateId("_", &result)); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 968 } | 1099 } |
| 969 | 1100 |
| 970 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { | 1101 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { |
| 971 scoped_refptr<Extension> extension( | 1102 scoped_refptr<Extension> extension( |
| 972 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), | 1103 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), |
| 973 Extension::INTERNAL, 2, FilePath())); | 1104 Extension::INTERNAL, 2, FilePath())); |
| 974 if (extension) | 1105 if (extension) |
| 975 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); | 1106 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); |
| 976 } | 1107 } |
| 977 #endif // !defined(OS_CHROMEOS) | 1108 #endif // !defined(OS_CHROMEOS) |
| OLD | NEW |