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

Side by Side Diff: chrome/common/extensions/extension.cc

Issue 12494028: Move Requirements out of Extension Class (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Move Requirements from API Created 7 years, 9 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 "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 179
180 const int Extension::kValidWebExtentSchemes = 180 const int Extension::kValidWebExtentSchemes =
181 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS; 181 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS;
182 182
183 const int Extension::kValidHostPermissionSchemes = URLPattern::SCHEME_CHROMEUI | 183 const int Extension::kValidHostPermissionSchemes = URLPattern::SCHEME_CHROMEUI |
184 URLPattern::SCHEME_HTTP | 184 URLPattern::SCHEME_HTTP |
185 URLPattern::SCHEME_HTTPS | 185 URLPattern::SCHEME_HTTPS |
186 URLPattern::SCHEME_FILE | 186 URLPattern::SCHEME_FILE |
187 URLPattern::SCHEME_FTP; 187 URLPattern::SCHEME_FTP;
188 188
189 Extension::Requirements::Requirements()
190 : webgl(false),
191 css3d(false),
192 npapi(false) {
193 }
194
195 Extension::Requirements::~Requirements() {}
196
197 // 189 //
198 // Extension 190 // Extension
199 // 191 //
200 192
201 // static 193 // static
202 scoped_refptr<Extension> Extension::Create(const base::FilePath& path, 194 scoped_refptr<Extension> Extension::Create(const base::FilePath& path,
203 Manifest::Location location, 195 Manifest::Location location,
204 const DictionaryValue& value, 196 const DictionaryValue& value,
205 int flags, 197 int flags,
206 std::string* utf8_error) { 198 std::string* utf8_error) {
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1656 } 1648 }
1657 1649
1658 return true; 1650 return true;
1659 } 1651 }
1660 1652
1661 bool Extension::LoadSharedFeatures(string16* error) { 1653 bool Extension::LoadSharedFeatures(string16* error) {
1662 if (!LoadDescription(error) || 1654 if (!LoadDescription(error) ||
1663 !ManifestHandler::ParseExtension(this, error) || 1655 !ManifestHandler::ParseExtension(this, error) ||
1664 !LoadNaClModules(error) || 1656 !LoadNaClModules(error) ||
1665 !LoadSandboxedPages(error) || 1657 !LoadSandboxedPages(error) ||
1666 !LoadRequirements(error) ||
1667 !LoadKioskEnabled(error) || 1658 !LoadKioskEnabled(error) ||
1668 !LoadOfflineEnabled(error)) 1659 !LoadOfflineEnabled(error))
1669 return false; 1660 return false;
1670 1661
1671 return true; 1662 return true;
1672 } 1663 }
1673 1664
1674 bool Extension::LoadDescription(string16* error) { 1665 bool Extension::LoadDescription(string16* error) {
1675 if (manifest_->HasKey(keys::kDescription) && 1666 if (manifest_->HasKey(keys::kDescription) &&
1676 !manifest_->GetString(keys::kDescription, &description_)) { 1667 !manifest_->GetString(keys::kDescription, &description_)) {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 } else { 1782 } else {
1792 sandboxed_pages_content_security_policy_ = 1783 sandboxed_pages_content_security_policy_ =
1793 kDefaultSandboxedPageContentSecurityPolicy; 1784 kDefaultSandboxedPageContentSecurityPolicy;
1794 CHECK(ContentSecurityPolicyIsSandboxed( 1785 CHECK(ContentSecurityPolicyIsSandboxed(
1795 sandboxed_pages_content_security_policy_, GetType())); 1786 sandboxed_pages_content_security_policy_, GetType()));
1796 } 1787 }
1797 1788
1798 return true; 1789 return true;
1799 } 1790 }
1800 1791
1801 bool Extension::LoadRequirements(string16* error) {
1802 // Before parsing requirements from the manifest, automatically default the
1803 // NPAPI plugin requirement based on whether it includes NPAPI plugins.
1804 const ListValue* list_value = NULL;
1805 requirements_.npapi =
1806 manifest_->GetList(keys::kPlugins, &list_value) && !list_value->empty();
1807
1808 if (!manifest_->HasKey(keys::kRequirements))
1809 return true;
1810
1811 const DictionaryValue* requirements_value = NULL;
1812 if (!manifest_->GetDictionary(keys::kRequirements, &requirements_value)) {
1813 *error = ASCIIToUTF16(errors::kInvalidRequirements);
1814 return false;
1815 }
1816
1817 for (DictionaryValue::Iterator it(*requirements_value); !it.IsAtEnd();
1818 it.Advance()) {
1819 const DictionaryValue* requirement_value;
1820 if (!it.value().GetAsDictionary(&requirement_value)) {
1821 *error = ErrorUtils::FormatErrorMessageUTF16(
1822 errors::kInvalidRequirement, it.key());
1823 return false;
1824 }
1825
1826 if (it.key() == "plugins") {
1827 for (DictionaryValue::Iterator plugin_it(*requirement_value);
1828 !plugin_it.IsAtEnd(); plugin_it.Advance()) {
1829 bool plugin_required = false;
1830 if (!plugin_it.value().GetAsBoolean(&plugin_required)) {
1831 *error = ErrorUtils::FormatErrorMessageUTF16(
1832 errors::kInvalidRequirement, it.key());
1833 return false;
1834 }
1835 if (plugin_it.key() == "npapi") {
1836 requirements_.npapi = plugin_required;
1837 } else {
1838 *error = ErrorUtils::FormatErrorMessageUTF16(
1839 errors::kInvalidRequirement, it.key());
1840 return false;
1841 }
1842 }
1843 } else if (it.key() == "3D") {
1844 const ListValue* features = NULL;
1845 if (!requirement_value->GetListWithoutPathExpansion("features",
1846 &features) ||
1847 !features) {
1848 *error = ErrorUtils::FormatErrorMessageUTF16(
1849 errors::kInvalidRequirement, it.key());
1850 return false;
1851 }
1852
1853 for (base::ListValue::const_iterator feature_it = features->begin();
1854 feature_it != features->end();
1855 ++feature_it) {
1856 std::string feature;
1857 if ((*feature_it)->GetAsString(&feature)) {
1858 if (feature == "webgl") {
1859 requirements_.webgl = true;
1860 } else if (feature == "css3d") {
1861 requirements_.css3d = true;
1862 } else {
1863 *error = ErrorUtils::FormatErrorMessageUTF16(
1864 errors::kInvalidRequirement, it.key());
1865 return false;
1866 }
1867 }
1868 }
1869 } else {
1870 *error = ASCIIToUTF16(errors::kInvalidRequirements);
1871 return false;
1872 }
1873 }
1874 return true;
1875 }
1876
1877 bool Extension::LoadKioskEnabled(string16* error) { 1792 bool Extension::LoadKioskEnabled(string16* error) {
1878 if (!manifest_->HasKey(keys::kKioskEnabled)) 1793 if (!manifest_->HasKey(keys::kKioskEnabled))
1879 return true; 1794 return true;
1880 1795
1881 if (!manifest_->GetBoolean(keys::kKioskEnabled, &kiosk_enabled_)) { 1796 if (!manifest_->GetBoolean(keys::kKioskEnabled, &kiosk_enabled_)) {
1882 *error = ASCIIToUTF16(errors::kInvalidKioskEnabled); 1797 *error = ASCIIToUTF16(errors::kInvalidKioskEnabled);
1883 return false; 1798 return false;
1884 } 1799 }
1885 1800
1886 // All other use cases should be already filtered out by manifest feature 1801 // All other use cases should be already filtered out by manifest feature
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2078 1993
2079 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( 1994 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo(
2080 const Extension* extension, 1995 const Extension* extension,
2081 const PermissionSet* permissions, 1996 const PermissionSet* permissions,
2082 Reason reason) 1997 Reason reason)
2083 : reason(reason), 1998 : reason(reason),
2084 extension(extension), 1999 extension(extension),
2085 permissions(permissions) {} 2000 permissions(permissions) {}
2086 2001
2087 } // namespace extensions 2002 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/manifest_handlers/requirements_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698