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

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

Issue 10833014: Coverity fixlet. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Uploaded after rebasing. Created 8 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc ('k') | no next file » | 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) 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 <ostream> 7 #include <ostream>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 << " should not contain a port. Removing it."; 365 << " should not contain a port. Removing it.";
366 366
367 GURL::Replacements remove_port; 367 GURL::Replacements remove_port;
368 remove_port.ClearPort(); 368 remove_port.ClearPort();
369 new_url = new_url.ReplaceComponents(remove_port); 369 new_url = new_url.ReplaceComponents(remove_port);
370 } 370 }
371 371
372 launch_web_url_ = new_url.spec(); 372 launch_web_url_ = new_url.spec();
373 373
374 URLPattern pattern(kValidWebExtentSchemes); 374 URLPattern pattern(kValidWebExtentSchemes);
375 pattern.Parse(new_url.spec()); 375 URLPattern::ParseResult result = pattern.Parse(new_url.spec());
376 DCHECK_EQ(result, URLPattern::PARSE_SUCCESS);
376 pattern.SetPath(pattern.path() + '*'); 377 pattern.SetPath(pattern.path() + '*');
377 extent_.AddPattern(pattern); 378 extent_.AddPattern(pattern);
378 } 379 }
379 } 380 }
380 381
381 FilePath Extension::MaybeNormalizePath(const FilePath& path) { 382 FilePath Extension::MaybeNormalizePath(const FilePath& path) {
382 #if defined(OS_WIN) 383 #if defined(OS_WIN)
383 // Normalize any drive letter to upper-case. We do this for consistency with 384 // Normalize any drive letter to upper-case. We do this for consistency with
384 // net_utils::FilePathToFileURL(), which does the same thing, to make string 385 // net_utils::FilePathToFileURL(), which does the same thing, to make string
385 // comparisons simpler. 386 // comparisons simpler.
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1603 return false; 1604 return false;
1604 } 1605 }
1605 for (size_t i = 0; i < list_value->GetSize(); ++i) { 1606 for (size_t i = 0; i < list_value->GetSize(); ++i) {
1606 std::string relative_path; 1607 std::string relative_path;
1607 if (!list_value->GetString(i, &relative_path)) { 1608 if (!list_value->GetString(i, &relative_path)) {
1608 *error = ExtensionErrorUtils::FormatErrorMessageUTF16( 1609 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
1609 errors::kInvalidWebAccessibleResource, base::IntToString(i)); 1610 errors::kInvalidWebAccessibleResource, base::IntToString(i));
1610 return false; 1611 return false;
1611 } 1612 }
1612 URLPattern pattern(URLPattern::SCHEME_EXTENSION); 1613 URLPattern pattern(URLPattern::SCHEME_EXTENSION);
1613 pattern.Parse(extension_url_.spec()); 1614 if (pattern.Parse(extension_url_.spec()) != URLPattern::PARSE_SUCCESS) {
1615 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
1616 errors::kInvalidURLPatternError, extension_url_.spec());
1617 return false;
1618 }
1614 while (relative_path[0] == '/') 1619 while (relative_path[0] == '/')
1615 relative_path = relative_path.substr(1, relative_path.length() - 1); 1620 relative_path = relative_path.substr(1, relative_path.length() - 1);
1616 pattern.SetPath(pattern.path() + relative_path); 1621 pattern.SetPath(pattern.path() + relative_path);
1617 web_accessible_resources_.AddPattern(pattern); 1622 web_accessible_resources_.AddPattern(pattern);
1618 } 1623 }
1619 1624
1620 return true; 1625 return true;
1621 } 1626 }
1622 1627
1623 bool Extension::LoadSandboxedPages(string16* error) { 1628 bool Extension::LoadSandboxedPages(string16* error) {
1624 if (!manifest_->HasPath(keys::kSandboxedPages)) 1629 if (!manifest_->HasPath(keys::kSandboxedPages))
1625 return true; 1630 return true;
1626 1631
1627 ListValue* list_value = NULL; 1632 ListValue* list_value = NULL;
1628 if (!manifest_->GetList(keys::kSandboxedPages, &list_value)) { 1633 if (!manifest_->GetList(keys::kSandboxedPages, &list_value)) {
1629 *error = ASCIIToUTF16(errors::kInvalidSandboxedPagesList); 1634 *error = ASCIIToUTF16(errors::kInvalidSandboxedPagesList);
1630 return false; 1635 return false;
1631 } 1636 }
1632 for (size_t i = 0; i < list_value->GetSize(); ++i) { 1637 for (size_t i = 0; i < list_value->GetSize(); ++i) {
1633 std::string relative_path; 1638 std::string relative_path;
1634 if (!list_value->GetString(i, &relative_path)) { 1639 if (!list_value->GetString(i, &relative_path)) {
1635 *error = ExtensionErrorUtils::FormatErrorMessageUTF16( 1640 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
1636 errors::kInvalidSandboxedPage, base::IntToString(i)); 1641 errors::kInvalidSandboxedPage, base::IntToString(i));
1637 return false; 1642 return false;
1638 } 1643 }
1639 URLPattern pattern(URLPattern::SCHEME_EXTENSION); 1644 URLPattern pattern(URLPattern::SCHEME_EXTENSION);
1640 pattern.Parse(extension_url_.spec()); 1645 if (pattern.Parse(extension_url_.spec()) != URLPattern::PARSE_SUCCESS) {
1646 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
1647 errors::kInvalidURLPatternError, extension_url_.spec());
1648 return false;
1649 }
1641 while (relative_path[0] == '/') 1650 while (relative_path[0] == '/')
1642 relative_path = relative_path.substr(1, relative_path.length() - 1); 1651 relative_path = relative_path.substr(1, relative_path.length() - 1);
1643 pattern.SetPath(pattern.path() + relative_path); 1652 pattern.SetPath(pattern.path() + relative_path);
1644 sandboxed_pages_.AddPattern(pattern); 1653 sandboxed_pages_.AddPattern(pattern);
1645 } 1654 }
1646 1655
1647 if (manifest_->HasPath(keys::kSandboxedPagesCSP)) { 1656 if (manifest_->HasPath(keys::kSandboxedPagesCSP)) {
1648 if (!manifest_->GetString( 1657 if (!manifest_->GetString(
1649 keys::kSandboxedPagesCSP, &sandboxed_pages_content_security_policy_)) { 1658 keys::kSandboxedPagesCSP, &sandboxed_pages_content_security_policy_)) {
1650 *error = ASCIIToUTF16(errors::kInvalidSandboxedPagesCSP); 1659 *error = ASCIIToUTF16(errors::kInvalidSandboxedPagesCSP);
(...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after
2551 !overrides->GetStringWithoutPathExpansion(*iter, &val)) { 2560 !overrides->GetStringWithoutPathExpansion(*iter, &val)) {
2552 *error = ASCIIToUTF16(errors::kInvalidChromeURLOverrides); 2561 *error = ASCIIToUTF16(errors::kInvalidChromeURLOverrides);
2553 return false; 2562 return false;
2554 } 2563 }
2555 // Replace the entry with a fully qualified chrome-extension:// URL. 2564 // Replace the entry with a fully qualified chrome-extension:// URL.
2556 chrome_url_overrides_[page] = GetResourceURL(val); 2565 chrome_url_overrides_[page] = GetResourceURL(val);
2557 2566
2558 // For component extensions, add override URL to extent patterns. 2567 // For component extensions, add override URL to extent patterns.
2559 if (is_packaged_app() && location() == COMPONENT) { 2568 if (is_packaged_app() && location() == COMPONENT) {
2560 URLPattern pattern(URLPattern::SCHEME_CHROMEUI); 2569 URLPattern pattern(URLPattern::SCHEME_CHROMEUI);
2561 pattern.Parse(base::StringPrintf(kOverrideExtentUrlPatternFormat, 2570 std::string url = base::StringPrintf(kOverrideExtentUrlPatternFormat,
2562 page.c_str())); 2571 page.c_str());
2572 if (pattern.Parse(url) != URLPattern::PARSE_SUCCESS) {
2573 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
2574 errors::kInvalidURLPatternError, url);
2575 return false;
2576 }
2563 extent_.AddPattern(pattern); 2577 extent_.AddPattern(pattern);
2564 } 2578 }
2565 } 2579 }
2566 2580
2567 // An extension may override at most one page. 2581 // An extension may override at most one page.
2568 if (overrides->size() > 1) { 2582 if (overrides->size() > 1) {
2569 *error = ASCIIToUTF16(errors::kMultipleOverrides); 2583 *error = ASCIIToUTF16(errors::kMultipleOverrides);
2570 return false; 2584 return false;
2571 } 2585 }
2572 2586
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
3085 return false; 3099 return false;
3086 3100
3087 // Validate minimum Chrome version. We don't need to store this, since the 3101 // Validate minimum Chrome version. We don't need to store this, since the
3088 // extension is not valid if it is incorrect 3102 // extension is not valid if it is incorrect
3089 if (!CheckMinimumChromeVersion(error)) 3103 if (!CheckMinimumChromeVersion(error))
3090 return false; 3104 return false;
3091 3105
3092 if (!LoadRequiredFeatures(error)) 3106 if (!LoadRequiredFeatures(error))
3093 return false; 3107 return false;
3094 3108
3095 // We don't ned to validate because InitExtensionID already did that. 3109 // We don't need to validate because InitExtensionID already did that.
3096 manifest_->GetString(keys::kPublicKey, &public_key_); 3110 manifest_->GetString(keys::kPublicKey, &public_key_);
3097 3111
3098 extension_url_ = Extension::GetBaseURLFromExtensionId(id()); 3112 extension_url_ = Extension::GetBaseURLFromExtensionId(id());
3099 3113
3100 // Load App settings. LoadExtent at least has to be done before 3114 // Load App settings. LoadExtent at least has to be done before
3101 // ParsePermissions(), because the valid permissions depend on what type of 3115 // ParsePermissions(), because the valid permissions depend on what type of
3102 // package this is. 3116 // package this is.
3103 if (is_app() && !LoadAppFeatures(error)) 3117 if (is_app() && !LoadAppFeatures(error))
3104 return false; 3118 return false;
3105 3119
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
3870 3884
3871 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( 3885 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo(
3872 const Extension* extension, 3886 const Extension* extension,
3873 const PermissionSet* permissions, 3887 const PermissionSet* permissions,
3874 Reason reason) 3888 Reason reason)
3875 : reason(reason), 3889 : reason(reason),
3876 extension(extension), 3890 extension(extension),
3877 permissions(permissions) {} 3891 permissions(permissions) {}
3878 3892
3879 } // namespace extensions 3893 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698