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

Side by Side Diff: chrome/browser/extensions/extension_file_browser_private_api.cc

Issue 9004019: Cleanup: Removing FileSystemPathManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 11 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/browser/extensions/extension_file_browser_private_api.h" 5 #include "chrome/browser/extensions/extension_file_browser_private_api.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 29 matching lines...) Expand all
40 #include "content/public/browser/web_contents.h" 40 #include "content/public/browser/web_contents.h"
41 #include "googleurl/src/gurl.h" 41 #include "googleurl/src/gurl.h"
42 #include "grit/generated_resources.h" 42 #include "grit/generated_resources.h"
43 #include "grit/platform_locale_settings.h" 43 #include "grit/platform_locale_settings.h"
44 #include "ui/base/l10n/l10n_util.h" 44 #include "ui/base/l10n/l10n_util.h"
45 #include "webkit/fileapi/file_system_context.h" 45 #include "webkit/fileapi/file_system_context.h"
46 #include "webkit/fileapi/file_system_file_util.h" 46 #include "webkit/fileapi/file_system_file_util.h"
47 #include "webkit/fileapi/file_system_mount_point_provider.h" 47 #include "webkit/fileapi/file_system_mount_point_provider.h"
48 #include "webkit/fileapi/file_system_operation.h" 48 #include "webkit/fileapi/file_system_operation.h"
49 #include "webkit/fileapi/file_system_operation_context.h" 49 #include "webkit/fileapi/file_system_operation_context.h"
50 #include "webkit/fileapi/file_system_path_manager.h"
51 #include "webkit/fileapi/file_system_types.h" 50 #include "webkit/fileapi/file_system_types.h"
52 #include "webkit/fileapi/file_system_util.h" 51 #include "webkit/fileapi/file_system_util.h"
53 52
54 using content::BrowserThread; 53 using content::BrowserThread;
55 using content::WebContents; 54 using content::WebContents;
56 55
57 namespace { 56 namespace {
58 57
59 // Error messages. 58 // Error messages.
60 const char kFileError[] = "File error %d"; 59 const char kFileError[] = "File error %d";
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 return false; 375 return false;
377 376
378 // Make sure that only component extension can access the entire 377 // Make sure that only component extension can access the entire
379 // local file system. 378 // local file system.
380 if (extension_->location() != Extension::COMPONENT) { 379 if (extension_->location() != Extension::COMPONENT) {
381 NOTREACHED() << "Private method access by non-component extension " 380 NOTREACHED() << "Private method access by non-component extension "
382 << extension_->id(); 381 << extension_->id();
383 return false; 382 return false;
384 } 383 }
385 384
386 fileapi::FileSystemPathManager* path_manager =
387 profile_->GetFileSystemContext()->path_manager();
388 fileapi::ExternalFileSystemMountPointProvider* provider = 385 fileapi::ExternalFileSystemMountPointProvider* provider =
389 path_manager->external_provider(); 386 profile_->GetFileSystemContext()->external_provider();
390 if (!provider) 387 if (!provider)
391 return false; 388 return false;
392 389
393 // Grant full access to File API from this component extension. 390 // Grant full access to File API from this component extension.
394 provider->GrantFullAccessToExtension(extension_->id()); 391 provider->GrantFullAccessToExtension(extension_->id());
395 392
396 // Grant R/W file permissions to the renderer hosting component 393 // Grant R/W file permissions to the renderer hosting component
397 // extension for all paths exposed by our local file system provider. 394 // extension for all paths exposed by our local file system provider.
398 std::vector<FilePath> root_dirs = provider->GetRootDirectories(); 395 std::vector<FilePath> root_dirs = provider->GetRootDirectories();
399 for (std::vector<FilePath>::iterator iter = root_dirs.begin(); 396 for (std::vector<FilePath>::iterator iter = root_dirs.begin();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 455
459 void RequestLocalFileSystemFunction::RespondFailedOnUIThread( 456 void RequestLocalFileSystemFunction::RespondFailedOnUIThread(
460 base::PlatformFileError error_code) { 457 base::PlatformFileError error_code) {
461 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 458 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
462 error_ = base::StringPrintf(kFileError, static_cast<int>(error_code)); 459 error_ = base::StringPrintf(kFileError, static_cast<int>(error_code));
463 SendResponse(false); 460 SendResponse(false);
464 } 461 }
465 462
466 bool FileWatchBrowserFunctionBase::GetLocalFilePath( 463 bool FileWatchBrowserFunctionBase::GetLocalFilePath(
467 const GURL& file_url, FilePath* local_path, FilePath* virtual_path) { 464 const GURL& file_url, FilePath* local_path, FilePath* virtual_path) {
468 fileapi::FileSystemPathManager* path_manager =
469 profile_->GetFileSystemContext()->path_manager();
470 GURL file_origin_url; 465 GURL file_origin_url;
471 fileapi::FileSystemType type; 466 fileapi::FileSystemType type;
472 if (!CrackFileSystemURL(file_url, &file_origin_url, &type, 467 if (!CrackFileSystemURL(file_url, &file_origin_url, &type,
473 virtual_path)) { 468 virtual_path)) {
474 return false; 469 return false;
475 } 470 }
476 if (type != fileapi::kFileSystemTypeExternal) 471 if (type != fileapi::kFileSystemTypeExternal)
477 return false; 472 return false;
478 473
479 FilePath root_path = 474 FilePath root_path = profile_->GetFileSystemContext()->external_provider()->
480 path_manager->ValidateFileSystemRootAndGetPathOnFileThread( 475 ValidateFileSystemRootAndGetPathOnFileThread(
481 file_origin_url, 476 file_origin_url,
482 fileapi::kFileSystemTypeExternal, 477 fileapi::kFileSystemTypeExternal,
483 *virtual_path, 478 *virtual_path,
484 false); 479 false);
485 if (root_path == FilePath()) 480 if (root_path == FilePath())
486 return false; 481 return false;
487 482
488 *local_path = root_path.Append(*virtual_path); 483 *local_path = root_path.Append(*virtual_path);
489 return true; 484 return true;
490 } 485 }
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 FilePath virtual_path; 733 FilePath virtual_path;
739 fileapi::FileSystemType type; 734 fileapi::FileSystemType type;
740 if (!CrackFileSystemURL(origin_file_url, &file_origin_url, &type, 735 if (!CrackFileSystemURL(origin_file_url, &file_origin_url, &type,
741 &virtual_path)) { 736 &virtual_path)) {
742 return false; 737 return false;
743 } 738 }
744 739
745 if (type != fileapi::kFileSystemTypeExternal) 740 if (type != fileapi::kFileSystemTypeExternal)
746 return false; 741 return false;
747 742
748 fileapi::FileSystemPathManager* path_manager = 743 fileapi::ExternalFileSystemMountPointProvider* external_provider =
749 profile_->GetFileSystemContext()->path_manager(); 744 profile_->GetFileSystemContext()->external_provider();
750 if (!path_manager->IsAccessAllowed(file_origin_url, 745 if (!external_provider)
751 type, 746 return false;
752 virtual_path)) { 747
748 if (!external_provider->IsAccessAllowed(file_origin_url,
749 type,
750 virtual_path)) {
753 return false; 751 return false;
754 } 752 }
755 753
756 // Make sure this url really being used by the right caller extension. 754 // Make sure this url really being used by the right caller extension.
757 if (source_url_.GetOrigin() != file_origin_url) { 755 if (source_url_.GetOrigin() != file_origin_url) {
758 DidFail(base::PLATFORM_FILE_ERROR_SECURITY); 756 DidFail(base::PLATFORM_FILE_ERROR_SECURITY);
759 return false; 757 return false;
760 } 758 }
761 759
762 FilePath root_path = 760 FilePath root_path =
763 path_manager->ValidateFileSystemRootAndGetPathOnFileThread( 761 external_provider->ValidateFileSystemRootAndGetPathOnFileThread(
764 file_origin_url, 762 file_origin_url,
765 fileapi::kFileSystemTypeExternal, 763 fileapi::kFileSystemTypeExternal,
766 virtual_path, 764 virtual_path,
767 false); // create 765 false); // create
768 FilePath final_file_path = root_path.Append(virtual_path); 766 FilePath final_file_path = root_path.Append(virtual_path);
769 767
770 fileapi::ExternalFileSystemMountPointProvider* external_provider =
771 path_manager->external_provider();
772 if (!external_provider)
773 return false;
774
775 // Check if this file system entry exists first. 768 // Check if this file system entry exists first.
776 base::PlatformFileInfo file_info; 769 base::PlatformFileInfo file_info;
777 770
778 if (!file_util::PathExists(final_file_path) || 771 if (!file_util::PathExists(final_file_path) ||
779 file_util::IsLink(final_file_path) || 772 file_util::IsLink(final_file_path) ||
780 !file_util::GetFileInfo(final_file_path, &file_info)) 773 !file_util::GetFileInfo(final_file_path, &file_info))
781 return false; 774 return false;
782 775
783 // TODO(zelidrag): Let's just prevent all symlinks for now. We don't want a 776 // TODO(zelidrag): Let's just prevent all symlinks for now. We don't want a
784 // USB drive content to point to something in the rest of the file system. 777 // USB drive content to point to something in the rest of the file system.
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 // them to local paths and calls |callback| with the result vector, on the UI 998 // them to local paths and calls |callback| with the result vector, on the UI
1006 // thread. 999 // thread.
1007 void FileBrowserFunction::GetLocalPathsOnFileThread( 1000 void FileBrowserFunction::GetLocalPathsOnFileThread(
1008 const UrlList& file_urls, 1001 const UrlList& file_urls,
1009 GetLocalPathsCallback callback) { 1002 GetLocalPathsCallback callback) {
1010 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 1003 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
1011 FilePathList selected_files; 1004 FilePathList selected_files;
1012 1005
1013 // FilePath(virtual_path) doesn't work on win, so limit this to ChromeOS. 1006 // FilePath(virtual_path) doesn't work on win, so limit this to ChromeOS.
1014 #if defined(OS_CHROMEOS) 1007 #if defined(OS_CHROMEOS)
1008 fileapi::ExternalFileSystemMountPointProvider* provider =
1009 profile_->GetFileSystemContext()->external_provider();
1010 if (!provider) {
1011 LOG(WARNING) << "External provider is not available";
1012 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1013 base::Bind(callback, selected_files));
1014 return;
1015 }
1016
1015 GURL origin_url = source_url().GetOrigin(); 1017 GURL origin_url = source_url().GetOrigin();
1016 fileapi::FileSystemPathManager* path_manager =
1017 profile()->GetFileSystemContext()->path_manager();
1018
1019 size_t len = file_urls.size(); 1018 size_t len = file_urls.size();
1020 selected_files.reserve(len); 1019 selected_files.reserve(len);
1021 for (size_t i = 0; i < len; ++i) { 1020 for (size_t i = 0; i < len; ++i) {
1022 const GURL& file_url = file_urls[i]; 1021 const GURL& file_url = file_urls[i];
1023 GURL file_origin_url; 1022 GURL file_origin_url;
1024 FilePath virtual_path; 1023 FilePath virtual_path;
1025 fileapi::FileSystemType type; 1024 fileapi::FileSystemType type;
1026 if (!CrackFileSystemURL(file_url, &file_origin_url, &type, 1025 if (!CrackFileSystemURL(file_url, &file_origin_url, &type,
1027 &virtual_path)) { 1026 &virtual_path)) {
1028 continue; 1027 continue;
1029 } 1028 }
1030 if (type != fileapi::kFileSystemTypeExternal) { 1029 if (type != fileapi::kFileSystemTypeExternal) {
1031 NOTREACHED(); 1030 NOTREACHED();
1032 continue; 1031 continue;
1033 } 1032 }
1034 FilePath root = path_manager->ValidateFileSystemRootAndGetPathOnFileThread( 1033 FilePath root = provider->ValidateFileSystemRootAndGetPathOnFileThread(
1035 origin_url, 1034 origin_url,
1036 fileapi::kFileSystemTypeExternal, 1035 fileapi::kFileSystemTypeExternal,
1037 FilePath(virtual_path), 1036 FilePath(virtual_path),
1038 false); 1037 false);
1039 if (!root.empty()) { 1038 if (!root.empty()) {
1040 selected_files.push_back(root.Append(virtual_path)); 1039 selected_files.push_back(root.Append(virtual_path));
1041 } else { 1040 } else {
1042 LOG(WARNING) << "GetLocalPathsOnFileThread failed " 1041 LOG(WARNING) << "GetLocalPathsOnFileThread failed "
1043 << file_url.spec(); 1042 << file_url.spec();
1044 } 1043 }
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 SET_STRING(IDS_FILE_BROWSER, ENQUEUE); 1673 SET_STRING(IDS_FILE_BROWSER, ENQUEUE);
1675 #undef SET_STRING 1674 #undef SET_STRING
1676 1675
1677 ChromeURLDataManager::DataSource::SetFontAndTextDirection(dict); 1676 ChromeURLDataManager::DataSource::SetFontAndTextDirection(dict);
1678 1677
1679 dict->SetString("PLAY_MEDIA", 1678 dict->SetString("PLAY_MEDIA",
1680 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAY)); 1679 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAY));
1681 1680
1682 return true; 1681 return true;
1683 } 1682 }
OLDNEW
« no previous file with comments | « chrome/browser/browsing_data_remover_unittest.cc ('k') | chrome/browser/extensions/extension_file_browser_private_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698