OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 // Otherwise, if the new extension has a plugin, it's a privilege increase. | 843 // Otherwise, if the new extension has a plugin, it's a privilege increase. |
844 if (new_extension->plugins().size() > 0) | 844 if (new_extension->plugins().size() > 0) |
845 return true; | 845 return true; |
846 | 846 |
847 // If we are increasing the set of hosts we have access to, it's a privilege | 847 // If we are increasing the set of hosts we have access to, it's a privilege |
848 // increase. | 848 // increase. |
849 if (!old_extension->HasAccessToAllHosts()) { | 849 if (!old_extension->HasAccessToAllHosts()) { |
850 if (new_extension->HasAccessToAllHosts()) | 850 if (new_extension->HasAccessToAllHosts()) |
851 return true; | 851 return true; |
852 | 852 |
853 ExtensionExtent::PatternList old_hosts = | 853 std::set<std::string> old_hosts = |
854 old_extension->GetEffectiveHostPermissions().patterns(); | 854 old_extension->GetEffectiveHostPermissions(); |
855 ExtensionExtent::PatternList new_hosts = | 855 std::set<std::string> new_hosts = |
856 new_extension->GetEffectiveHostPermissions().patterns(); | 856 new_extension->GetEffectiveHostPermissions(); |
857 | 857 |
858 std::set<URLPattern, URLPattern::EffectiveHostCompareFunctor> diff; | 858 std::set<std::string> difference; |
859 std::set_difference(new_hosts.begin(), new_hosts.end(), | 859 std::set_difference(new_hosts.begin(), new_hosts.end(), |
860 old_hosts.begin(), old_hosts.end(), | 860 old_hosts.begin(), old_hosts.end(), |
861 std::insert_iterator<std::set<URLPattern, | 861 std::insert_iterator<std::set<std::string> >( |
862 URLPattern::EffectiveHostCompareFunctor> >(diff, diff.end()), | 862 difference, difference.end())); |
863 URLPattern::EffectiveHostCompare); | 863 if (difference.size() > 0) |
864 if (diff.size() > 0) | |
865 return true; | 864 return true; |
866 } | 865 } |
867 | 866 |
868 if (!old_extension->HasEffectiveBrowsingHistoryPermission() && | 867 if (!old_extension->HasEffectiveBrowsingHistoryPermission() && |
869 new_extension->HasEffectiveBrowsingHistoryPermission()) { | 868 new_extension->HasEffectiveBrowsingHistoryPermission()) { |
870 return true; | 869 return true; |
871 } | 870 } |
872 | 871 |
873 const SimplePermissions& simple_permissions = GetSimplePermissions(); | 872 const SimplePermissions& simple_permissions = GetSimplePermissions(); |
874 for (SimplePermissions::const_iterator iter = simple_permissions.begin(); | 873 for (SimplePermissions::const_iterator iter = simple_permissions.begin(); |
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 | 1671 |
1673 bool Extension::HasHostPermission(const GURL& url) const { | 1672 bool Extension::HasHostPermission(const GURL& url) const { |
1674 for (URLPatternList::const_iterator host = host_permissions_.begin(); | 1673 for (URLPatternList::const_iterator host = host_permissions_.begin(); |
1675 host != host_permissions_.end(); ++host) { | 1674 host != host_permissions_.end(); ++host) { |
1676 if (host->MatchesUrl(url)) | 1675 if (host->MatchesUrl(url)) |
1677 return true; | 1676 return true; |
1678 } | 1677 } |
1679 return false; | 1678 return false; |
1680 } | 1679 } |
1681 | 1680 |
1682 const ExtensionExtent Extension::GetEffectiveHostPermissions() const { | 1681 const std::set<std::string> Extension::GetEffectiveHostPermissions() const { |
1683 ExtensionExtent effective_hosts; | 1682 std::set<std::string> effective_hosts; |
1684 | 1683 |
1685 for (URLPatternList::const_iterator host = host_permissions_.begin(); | 1684 for (URLPatternList::const_iterator host = host_permissions_.begin(); |
1686 host != host_permissions_.end(); ++host) | 1685 host != host_permissions_.end(); ++host) |
1687 effective_hosts.AddPattern(*host); | 1686 effective_hosts.insert(host->host()); |
1688 | 1687 |
1689 for (UserScriptList::const_iterator content_script = content_scripts_.begin(); | 1688 for (UserScriptList::const_iterator content_script = content_scripts_.begin(); |
1690 content_script != content_scripts_.end(); ++content_script) { | 1689 content_script != content_scripts_.end(); ++content_script) { |
1691 UserScript::PatternList::const_iterator pattern = | 1690 UserScript::PatternList::const_iterator pattern = |
1692 content_script->url_patterns().begin(); | 1691 content_script->url_patterns().begin(); |
1693 for (; pattern != content_script->url_patterns().end(); ++pattern) | 1692 for (; pattern != content_script->url_patterns().end(); ++pattern) |
1694 effective_hosts.AddPattern(*pattern); | 1693 effective_hosts.insert(pattern->host()); |
1695 } | 1694 } |
1696 | 1695 |
1697 return effective_hosts; | 1696 return effective_hosts; |
1698 } | 1697 } |
1699 | 1698 |
1700 bool Extension::HasAccessToAllHosts() const { | 1699 bool Extension::HasAccessToAllHosts() const { |
1701 for (URLPatternList::const_iterator host = host_permissions_.begin(); | 1700 for (URLPatternList::const_iterator host = host_permissions_.begin(); |
1702 host != host_permissions_.end(); ++host) { | 1701 host != host_permissions_.end(); ++host) { |
1703 if (host->match_subdomains() && host->host().empty()) | 1702 if (host->match_subdomains() && host->host().empty()) |
1704 return true; | 1703 return true; |
(...skipping 26 matching lines...) Expand all Loading... |
1731 } else { | 1730 } else { |
1732 return false; | 1731 return false; |
1733 } | 1732 } |
1734 } else { | 1733 } else { |
1735 return true; | 1734 return true; |
1736 } | 1735 } |
1737 } | 1736 } |
1738 } | 1737 } |
1739 return false; | 1738 return false; |
1740 } | 1739 } |
OLD | NEW |