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

Side by Side Diff: chrome/browser/chromeos/extensions/file_browser_private_api.cc

Issue 9836086: Added logic that will return the result of the first chunk of root feed and continue fetching the r… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: crash fix Created 8 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 | Annotate | Revision Log
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/browser/chromeos/extensions/file_browser_private_api.h" 5 #include "chrome/browser/chromeos/extensions/file_browser_private_api.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 } 170 }
171 171
172 mount_info->SetString("mountCondition", 172 mount_info->SetString("mountCondition",
173 DiskMountManager::MountConditionToString( 173 DiskMountManager::MountConditionToString(
174 mount_point_info.mount_condition)); 174 mount_point_info.mount_condition));
175 175
176 return mount_info; 176 return mount_info;
177 } 177 }
178 #endif // defined(OS_CHROMEOS) 178 #endif // defined(OS_CHROMEOS)
179 179
180
181 // Gives the extension renderer |host| file |permissions| for the given |path|.
182 void GrantFilePermissionsToHost(content::RenderViewHost* host,
183 const FilePath& path,
184 int permissions) {
185 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile(
186 host->GetProcess()->GetID(), path, permissions);
187 }
188
180 // Given a file url, find the virtual FilePath associated with it. 189 // Given a file url, find the virtual FilePath associated with it.
181 FilePath GetVirtualPathFromURL(const GURL& file_url) { 190 FilePath GetVirtualPathFromURL(const GURL& file_url) {
182 FilePath virtual_path; 191 FilePath virtual_path;
183 fileapi::FileSystemType type = fileapi::kFileSystemTypeUnknown; 192 fileapi::FileSystemType type = fileapi::kFileSystemTypeUnknown;
184 GURL file_origin_url; 193 GURL file_origin_url;
185 if (!CrackFileSystemURL(file_url, &file_origin_url, &type, &virtual_path) || 194 if (!CrackFileSystemURL(file_url, &file_origin_url, &type, &virtual_path) ||
186 type != fileapi::kFileSystemTypeExternal) { 195 type != fileapi::kFileSystemTypeExternal) {
187 NOTREACHED(); 196 NOTREACHED();
188 return FilePath(); 197 return FilePath();
189 } 198 }
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 this, 460 this,
452 source_url_, 461 source_url_,
453 render_view_host()->GetProcess()->GetID())); 462 render_view_host()->GetProcess()->GetID()));
454 // Will finish asynchronously. 463 // Will finish asynchronously.
455 return true; 464 return true;
456 } 465 }
457 466
458 void RequestLocalFileSystemFunction::RespondSuccessOnUIThread( 467 void RequestLocalFileSystemFunction::RespondSuccessOnUIThread(
459 const std::string& name, const GURL& root_path) { 468 const std::string& name, const GURL& root_path) {
460 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 469 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
470 // Add gdata mount point immediately when we kick of first instance of file
471 // manager. The actual mount event will be sent to UI only when we perform
472 // proper authentication.
473 AddGDataMountPoint();
461 result_.reset(new DictionaryValue()); 474 result_.reset(new DictionaryValue());
462 DictionaryValue* dict = reinterpret_cast<DictionaryValue*>(result_.get()); 475 DictionaryValue* dict = reinterpret_cast<DictionaryValue*>(result_.get());
463 dict->SetString("name", name); 476 dict->SetString("name", name);
464 dict->SetString("path", root_path.spec()); 477 dict->SetString("path", root_path.spec());
465 dict->SetInteger("error", base::PLATFORM_FILE_OK); 478 dict->SetInteger("error", base::PLATFORM_FILE_OK);
466 SendResponse(true); 479 SendResponse(true);
467 } 480 }
468 481
482 void RequestLocalFileSystemFunction::AddGDataMountPoint() {
483 fileapi::ExternalFileSystemMountPointProvider* provider =
484 BrowserContext::GetFileSystemContext(profile_)->external_provider();
485 const FilePath mount_point = gdata::util::GetGDataMountPointPath();
486 if (!provider || provider->HasMountPoint(mount_point))
487 return;
488
489 // Grant R/W permissions to gdata 'folder'. File API layer still
490 // expects this to be satisfied.
491 GrantFilePermissionsToHost(render_view_host(),
492 mount_point,
493 file_handler_util::GetReadWritePermissions());
494
495 // Grant R/W permission for tmp and pinned cache folder.
496 gdata::GDataSystemService* system_service =
497 gdata::GDataSystemServiceFactory::GetForProfile(profile_);
498 DCHECK(system_service);
499 gdata::GDataFileSystem* gdata_file_system = system_service->file_system();
500
501 // We check permissions for raw cache file paths only for read-only
502 // operations (when fileEntry.file() is called), so read only permissions
503 // should be sufficient for all cache paths. For the rest of supported
504 // operations the file access check is done for gdata/ paths.
505 GrantFilePermissionsToHost(render_view_host(),
506 gdata_file_system->GetGDataCacheTmpDirectory(),
507 file_handler_util::GetReadOnlyPermissions());
508 GrantFilePermissionsToHost(
509 render_view_host(),
510 gdata_file_system->GetGDataCachePersistentDirectory(),
511 file_handler_util::GetReadOnlyPermissions());
512
513 provider->AddRemoteMountPoint(
514 mount_point,
515 new gdata::GDataFileSystemProxy(gdata_file_system));
516
517 FilePath mount_point_virtual;
518 if (provider->GetVirtualPath(mount_point, &mount_point_virtual))
519 provider->GrantFileAccessToExtension(extension_id(), mount_point_virtual);
520 }
521
469 void RequestLocalFileSystemFunction::RespondFailedOnUIThread( 522 void RequestLocalFileSystemFunction::RespondFailedOnUIThread(
470 base::PlatformFileError error_code) { 523 base::PlatformFileError error_code) {
471 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 524 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
472 error_ = base::StringPrintf(kFileError, static_cast<int>(error_code)); 525 error_ = base::StringPrintf(kFileError, static_cast<int>(error_code));
473 SendResponse(false); 526 SendResponse(false);
474 } 527 }
475 528
476 bool FileWatchBrowserFunctionBase::GetLocalFilePath( 529 bool FileWatchBrowserFunctionBase::GetLocalFilePath(
477 const GURL& file_url, FilePath* local_path, FilePath* virtual_path) { 530 const GURL& file_url, FilePath* local_path, FilePath* virtual_path) {
478 GURL file_origin_url; 531 GURL file_origin_url;
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 this, 1064 this,
1012 mount_type_str)); 1065 mount_type_str));
1013 break; 1066 break;
1014 } 1067 }
1015 } 1068 }
1016 #endif // defined(OS_CHROMEOS) 1069 #endif // defined(OS_CHROMEOS)
1017 1070
1018 return true; 1071 return true;
1019 } 1072 }
1020 1073
1021 void AddMountFunction::GrantFilePermissionsToHost(const FilePath& path,
1022 int permissions) {
1023 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile(
1024 render_view_host()->GetProcess()->GetID(), path, permissions);
1025 }
1026
1027 void AddMountFunction::AddGDataMountPoint() {
1028 fileapi::ExternalFileSystemMountPointProvider* provider =
1029 BrowserContext::GetFileSystemContext(profile_)->external_provider();
1030 const FilePath mount_point = gdata::util::GetGDataMountPointPath();
1031 if (!provider || provider->HasMountPoint(mount_point))
1032 return;
1033
1034 // Grant R/W permissions to gdata 'folder'. File API layer still
1035 // expects this to be satisfied.
1036 GrantFilePermissionsToHost(mount_point,
1037 file_handler_util::GetReadWritePermissions());
1038
1039 // Grant R/W permission for tmp and pinned cache folder.
1040 gdata::GDataSystemService* system_service =
1041 gdata::GDataSystemServiceFactory::GetForProfile(profile_);
1042 DCHECK(system_service);
1043 gdata::GDataFileSystem* gdata_file_system = system_service->file_system();
1044
1045 // We check permissions for raw cache file paths only for read-only
1046 // operations (when fileEntry.file() is called), so read only permissions
1047 // should be sufficient for all cache paths. For the rest of supported
1048 // operations the file access check is done for gdata/ paths.
1049 GrantFilePermissionsToHost(gdata_file_system->GetGDataCacheTmpDirectory(),
1050 file_handler_util::GetReadOnlyPermissions());
1051 GrantFilePermissionsToHost(
1052 gdata_file_system->GetGDataCachePersistentDirectory(),
1053 file_handler_util::GetReadOnlyPermissions());
1054
1055 provider->AddRemoteMountPoint(
1056 mount_point,
1057 new gdata::GDataFileSystemProxy(gdata_file_system));
1058
1059 FilePath mount_point_virtual;
1060 if (provider->GetVirtualPath(mount_point, &mount_point_virtual))
1061 provider->GrantFileAccessToExtension(extension_id(), mount_point_virtual);
1062 }
1063
1064 void AddMountFunction::RaiseGDataMountEvent(gdata::GDataErrorCode error) { 1074 void AddMountFunction::RaiseGDataMountEvent(gdata::GDataErrorCode error) {
1065 chromeos::MountError error_code = error == gdata::HTTP_SUCCESS ? 1075 chromeos::MountError error_code = error == gdata::HTTP_SUCCESS ?
1066 chromeos::MOUNT_ERROR_NONE : chromeos::MOUNT_ERROR_NOT_AUTHENTICATED; 1076 chromeos::MOUNT_ERROR_NONE : chromeos::MOUNT_ERROR_NOT_AUTHENTICATED;
1067 DiskMountManager::MountPointInfo mount_info( 1077 DiskMountManager::MountPointInfo mount_info(
1068 gdata::util::GetGDataMountPointPathAsString(), 1078 gdata::util::GetGDataMountPointPathAsString(),
1069 gdata::util::GetGDataMountPointPathAsString(), 1079 gdata::util::GetGDataMountPointPathAsString(),
1070 chromeos::MOUNT_TYPE_GDATA, 1080 chromeos::MOUNT_TYPE_GDATA,
1071 chromeos::disks::MOUNT_CONDITION_NONE); 1081 chromeos::disks::MOUNT_CONDITION_NONE);
1072 // Raise mount event 1082 // Raise mount event
1073 FileBrowserEventRouterFactory::GetForProfile(profile_)-> 1083 FileBrowserEventRouterFactory::GetForProfile(profile_)->
1074 MountCompleted(DiskMountManager::MOUNTING, error_code, mount_info); 1084 MountCompleted(DiskMountManager::MOUNTING, error_code, mount_info);
1075 } 1085 }
1076 1086
1077 void AddMountFunction::OnGDataAuthentication(gdata::GDataErrorCode error, 1087 void AddMountFunction::OnGDataAuthentication(gdata::GDataErrorCode error,
1078 const std::string& token) { 1088 const std::string& token) {
1079 if (error == gdata::HTTP_SUCCESS)
1080 AddGDataMountPoint();
1081
1082 RaiseGDataMountEvent(error); 1089 RaiseGDataMountEvent(error);
1083 SendResponse(true); 1090 SendResponse(true);
1084 } 1091 }
1085 1092
1086 void AddMountFunction::GetLocalPathsResponseOnUIThread( 1093 void AddMountFunction::GetLocalPathsResponseOnUIThread(
1087 const std::string& mount_type_str, 1094 const std::string& mount_type_str,
1088 const SelectedFileInfoList& files) { 1095 const SelectedFileInfoList& files) {
1089 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1096 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1090 1097
1091 if (!files.size()) { 1098 if (!files.size()) {
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 SET_STRING(IDS_FILE_BROWSER, TAR_GZIP_ARCHIVE_FILE_TYPE); 1554 SET_STRING(IDS_FILE_BROWSER, TAR_GZIP_ARCHIVE_FILE_TYPE);
1548 SET_STRING(IDS_FILE_BROWSER, PLAIN_TEXT_FILE_TYPE); 1555 SET_STRING(IDS_FILE_BROWSER, PLAIN_TEXT_FILE_TYPE);
1549 SET_STRING(IDS_FILE_BROWSER, PDF_DOCUMENT_FILE_TYPE); 1556 SET_STRING(IDS_FILE_BROWSER, PDF_DOCUMENT_FILE_TYPE);
1550 SET_STRING(IDS_FILE_BROWSER, WORD_DOCUMENT_FILE_TYPE); 1557 SET_STRING(IDS_FILE_BROWSER, WORD_DOCUMENT_FILE_TYPE);
1551 SET_STRING(IDS_FILE_BROWSER, POWERPOINT_PRESENTATION_FILE_TYPE); 1558 SET_STRING(IDS_FILE_BROWSER, POWERPOINT_PRESENTATION_FILE_TYPE);
1552 SET_STRING(IDS_FILE_BROWSER, EXCEL_FILE_TYPE); 1559 SET_STRING(IDS_FILE_BROWSER, EXCEL_FILE_TYPE);
1553 1560
1554 SET_STRING(IDS_FILE_BROWSER, GDOC_DOCUMENT_FILE_TYPE); 1561 SET_STRING(IDS_FILE_BROWSER, GDOC_DOCUMENT_FILE_TYPE);
1555 SET_STRING(IDS_FILE_BROWSER, GSHEET_DOCUMENT_FILE_TYPE); 1562 SET_STRING(IDS_FILE_BROWSER, GSHEET_DOCUMENT_FILE_TYPE);
1556 SET_STRING(IDS_FILE_BROWSER, GSLIDES_DOCUMENT_FILE_TYPE); 1563 SET_STRING(IDS_FILE_BROWSER, GSLIDES_DOCUMENT_FILE_TYPE);
1557 SET_STRING(IDS_FILE_BROWSER, GSLIDES_DOCUMENT_FILE_TYPE); 1564 SET_STRING(IDS_FILE_BROWSER, GDRAW_DOCUMENT_FILE_TYPE);
1558 SET_STRING(IDS_FILE_BROWSER, GTABLE_DOCUMENT_FILE_TYPE); 1565 SET_STRING(IDS_FILE_BROWSER, GTABLE_DOCUMENT_FILE_TYPE);
1559 1566
1567
1560 SET_STRING(IDS_FILE_BROWSER, AUDIO_PLAYER_TITLE); 1568 SET_STRING(IDS_FILE_BROWSER, AUDIO_PLAYER_TITLE);
1561 #undef SET_STRING 1569 #undef SET_STRING
1562 1570
1563 dict->SetString("PDF_VIEW_ENABLED", 1571 dict->SetString("PDF_VIEW_ENABLED",
1564 file_manager_util::ShouldBeOpenedWithPdfPlugin(".pdf") ? 1572 file_manager_util::ShouldBeOpenedWithPdfPlugin(".pdf") ?
1565 "true" : "false"); 1573 "true" : "false");
1566 1574
1567 ChromeURLDataManager::DataSource::SetFontAndTextDirection(dict); 1575 ChromeURLDataManager::DataSource::SetFontAndTextDirection(dict);
1568 1576
1569 if (!profile_->GetPrefs()->GetBoolean(prefs::kDisableGData)) 1577 if (!profile_->GetPrefs()->GetBoolean(prefs::kDisableGData))
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 local_source_file, 1942 local_source_file,
1935 remote_destination_file, 1943 remote_destination_file,
1936 base::Bind(&TransferFileFunction::OnTransferCompleted, 1944 base::Bind(&TransferFileFunction::OnTransferCompleted,
1937 this)); 1945 this));
1938 } 1946 }
1939 1947
1940 void TransferFileFunction::OnTransferCompleted( 1948 void TransferFileFunction::OnTransferCompleted(
1941 base::PlatformFileError error) { 1949 base::PlatformFileError error) {
1942 SendResponse(error == base::PLATFORM_FILE_OK); 1950 SendResponse(error == base::PLATFORM_FILE_OK);
1943 } 1951 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698