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

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

Issue 65123002: Move chrome/common/extensions/background_info.h to src/extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase2 background_info Created 7 years, 1 month 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
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_file_util.h" 5 #include "chrome/common/extensions/extension_file_util.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 16 matching lines...) Expand all
27 #include "chrome/common/extensions/manifest_handlers/icons_handler.h" 27 #include "chrome/common/extensions/manifest_handlers/icons_handler.h"
28 #include "chrome/common/extensions/manifest_handlers/theme_handler.h" 28 #include "chrome/common/extensions/manifest_handlers/theme_handler.h"
29 #include "chrome/common/extensions/message_bundle.h" 29 #include "chrome/common/extensions/message_bundle.h"
30 #include "extensions/common/constants.h" 30 #include "extensions/common/constants.h"
31 #include "extensions/common/extension_resource.h" 31 #include "extensions/common/extension_resource.h"
32 #include "extensions/common/install_warning.h" 32 #include "extensions/common/install_warning.h"
33 #include "extensions/common/manifest.h" 33 #include "extensions/common/manifest.h"
34 #include "extensions/common/manifest_constants.h" 34 #include "extensions/common/manifest_constants.h"
35 #include "extensions/common/manifest_handler.h" 35 #include "extensions/common/manifest_handler.h"
36 #include "grit/generated_resources.h" 36 #include "grit/generated_resources.h"
37 #include "net/base/escape.h"
38 #include "net/base/file_stream.h" 37 #include "net/base/file_stream.h"
39 #include "ui/base/l10n/l10n_util.h" 38 #include "ui/base/l10n/l10n_util.h"
40 39
41 using extensions::Extension; 40 using extensions::Extension;
42 using extensions::ExtensionResource; 41 using extensions::ExtensionResource;
43 using extensions::Manifest; 42 using extensions::Manifest;
44 43
45 namespace errors = extensions::manifest_errors; 44 namespace errors = extensions::manifest_errors;
46 45
47 namespace { 46 namespace {
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 "Cannot load extension with file or directory name %s. " 485 "Cannot load extension with file or directory name %s. "
487 "Filenames starting with \"_\" are reserved for use by the system.", 486 "Filenames starting with \"_\" are reserved for use by the system.",
488 filename.c_str()); 487 filename.c_str());
489 return false; 488 return false;
490 } 489 }
491 } 490 }
492 491
493 return true; 492 return true;
494 } 493 }
495 494
496 base::FilePath ExtensionURLToRelativeFilePath(const GURL& url) {
497 std::string url_path = url.path();
498 if (url_path.empty() || url_path[0] != '/')
499 return base::FilePath();
500
501 // Drop the leading slashes and convert %-encoded UTF8 to regular UTF8.
502 std::string file_path = net::UnescapeURLComponent(url_path,
503 net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS);
504 size_t skip = file_path.find_first_not_of("/\\");
505 if (skip != file_path.npos)
506 file_path = file_path.substr(skip);
507
508 base::FilePath path = base::FilePath::FromUTF8Unsafe(file_path);
509
510 // It's still possible for someone to construct an annoying URL whose path
511 // would still wind up not being considered relative at this point.
512 // For example: chrome-extension://id/c:////foo.html
513 if (path.IsAbsolute())
514 return base::FilePath();
515
516 return path;
517 }
518
519 base::FilePath ExtensionResourceURLToFilePath(const GURL& url,
520 const base::FilePath& root) {
521 std::string host = net::UnescapeURLComponent(url.host(),
522 net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS);
523 if (host.empty())
524 return base::FilePath();
525
526 base::FilePath relative_path = ExtensionURLToRelativeFilePath(url);
527 if (relative_path.empty())
528 return base::FilePath();
529
530 base::FilePath path = root.AppendASCII(host).Append(relative_path);
531 if (!base::PathExists(path))
532 return base::FilePath();
533 path = base::MakeAbsoluteFilePath(path);
534 if (path.empty() || !root.IsParent(path))
535 return base::FilePath();
536 return path;
537 }
538
539 base::FilePath GetInstallTempDir(const base::FilePath& extensions_dir) { 495 base::FilePath GetInstallTempDir(const base::FilePath& extensions_dir) {
540 // We do file IO in this function, but only when the current profile's 496 // We do file IO in this function, but only when the current profile's
541 // Temp directory has never been used before, or in a rare error case. 497 // Temp directory has never been used before, or in a rare error case.
542 // Developers are not likely to see these situations often, so do an 498 // Developers are not likely to see these situations often, so do an
543 // explicit thread check. 499 // explicit thread check.
544 base::ThreadRestrictions::AssertIOAllowed(); 500 base::ThreadRestrictions::AssertIOAllowed();
545 501
546 // Create the temp directory as a sub-directory of the Extensions directory. 502 // Create the temp directory as a sub-directory of the Extensions directory.
547 // This guarantees it is on the same file system as the extension's eventual 503 // This guarantees it is on the same file system as the extension's eventual
548 // install target. 504 // install target.
(...skipping 17 matching lines...) Expand all
566 return base::FilePath(); 522 return base::FilePath();
567 } 523 }
568 return temp_path; 524 return temp_path;
569 } 525 }
570 526
571 void DeleteFile(const base::FilePath& path, bool recursive) { 527 void DeleteFile(const base::FilePath& path, bool recursive) {
572 base::DeleteFile(path, recursive); 528 base::DeleteFile(path, recursive);
573 } 529 }
574 530
575 } // namespace extension_file_util 531 } // namespace extension_file_util
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_file_util.h ('k') | chrome/common/extensions/extension_file_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698