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

Unified Diff: chrome/browser/chromeos/extensions/file_browser_private_api.cc

Issue 10391103: [File Manager] Add/remove Google Drive folder in the open File Manager when Drive enabled/disabled … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/extensions/file_browser_private_api.cc
diff --git a/chrome/browser/chromeos/extensions/file_browser_private_api.cc b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
index c8008a0addce58a1c7544c00fd0b39cdedaba98a..f4645da9a6af18b8c58b0152f7190f14483de7d5 100644
--- a/chrome/browser/chromeos/extensions/file_browser_private_api.cc
+++ b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
@@ -179,6 +179,55 @@ void GrantFilePermissionsToHost(content::RenderViewHost* host,
host->GetProcess()->GetID(), path, permissions);
}
+void AddGDataMountPoint(
+ Profile* profile,
+ const std::string& extension_id,
+ content::RenderViewHost* render_view_host) {
+ fileapi::ExternalFileSystemMountPointProvider* provider =
+ BrowserContext::GetFileSystemContext(profile)->external_provider();
+ const FilePath mount_point = gdata::util::GetGDataMountPointPath();
+ if (!render_view_host || !render_view_host->GetProcess())
+ return;
+ if (!provider || provider->HasMountPoint(mount_point))
+ return;
+
+ // Grant R/W permissions to gdata 'folder'. File API layer still
+ // expects this to be satisfied.
+ GrantFilePermissionsToHost(render_view_host,
+ mount_point,
+ file_handler_util::GetReadWritePermissions());
+
+ // Grant R/W permission for tmp and pinned cache folder.
+ gdata::GDataSystemService* system_service =
+ gdata::GDataSystemServiceFactory::GetForProfile(profile);
+ // |system_service| is NULL if incognito window / guest login.
+ if (!system_service || !system_service->file_system())
+ return;
+ gdata::GDataFileSystem* gdata_file_system = system_service->file_system();
+
+ // We check permissions for raw cache file paths only for read-only
+ // operations (when fileEntry.file() is called), so read only permissions
+ // should be sufficient for all cache paths. For the rest of supported
+ // operations the file access check is done for drive/ paths.
+ GrantFilePermissionsToHost(render_view_host,
+ gdata_file_system->GetCacheDirectoryPath(
+ gdata::GDataRootDirectory::CACHE_TYPE_TMP),
+ file_handler_util::GetReadOnlyPermissions());
+ GrantFilePermissionsToHost(
+ render_view_host,
+ gdata_file_system->GetCacheDirectoryPath(
+ gdata::GDataRootDirectory::CACHE_TYPE_PERSISTENT),
+ file_handler_util::GetReadOnlyPermissions());
+
+ provider->AddRemoteMountPoint(
+ mount_point,
+ new gdata::GDataFileSystemProxy(gdata_file_system));
+
+ FilePath mount_point_virtual;
+ if (provider->GetVirtualPath(mount_point, &mount_point_virtual))
+ provider->GrantFileAccessToExtension(extension_id, mount_point_virtual);
+}
+
// Given a file url, find the virtual FilePath associated with it.
FilePath GetVirtualPathFromURL(const GURL& file_url) {
FilePath virtual_path;
@@ -328,7 +377,7 @@ void RequestLocalFileSystemFunction::RespondSuccessOnUIThread(
// manager. The actual mount event will be sent to UI only when we perform
// proper authentication.
if (gdata::util::IsGDataAvailable(profile_))
- AddGDataMountPoint();
+ AddGDataMountPoint(profile_, extension_id(), render_view_host());
result_.reset(new DictionaryValue());
DictionaryValue* dict = reinterpret_cast<DictionaryValue*>(result_.get());
dict->SetString("name", name);
@@ -337,52 +386,6 @@ void RequestLocalFileSystemFunction::RespondSuccessOnUIThread(
SendResponse(true);
}
-void RequestLocalFileSystemFunction::AddGDataMountPoint() {
- fileapi::ExternalFileSystemMountPointProvider* provider =
- BrowserContext::GetFileSystemContext(profile_)->external_provider();
- const FilePath mount_point = gdata::util::GetGDataMountPointPath();
- if (!render_view_host() || !render_view_host()->GetProcess())
- return;
- if (!provider || provider->HasMountPoint(mount_point))
- return;
-
- // Grant R/W permissions to gdata 'folder'. File API layer still
- // expects this to be satisfied.
- GrantFilePermissionsToHost(render_view_host(),
- mount_point,
- file_handler_util::GetReadWritePermissions());
-
- // Grant R/W permission for tmp and pinned cache folder.
- gdata::GDataSystemService* system_service =
- gdata::GDataSystemServiceFactory::GetForProfile(profile_);
- // |system_service| is NULL if incognito window / guest login.
- if (!system_service || !system_service->file_system())
- return;
- gdata::GDataFileSystem* gdata_file_system = system_service->file_system();
-
- // We check permissions for raw cache file paths only for read-only
- // operations (when fileEntry.file() is called), so read only permissions
- // should be sufficient for all cache paths. For the rest of supported
- // operations the file access check is done for drive/ paths.
- GrantFilePermissionsToHost(render_view_host(),
- gdata_file_system->GetCacheDirectoryPath(
- gdata::GDataRootDirectory::CACHE_TYPE_TMP),
- file_handler_util::GetReadOnlyPermissions());
- GrantFilePermissionsToHost(
- render_view_host(),
- gdata_file_system->GetCacheDirectoryPath(
- gdata::GDataRootDirectory::CACHE_TYPE_PERSISTENT),
- file_handler_util::GetReadOnlyPermissions());
-
- provider->AddRemoteMountPoint(
- mount_point,
- new gdata::GDataFileSystemProxy(gdata_file_system));
-
- FilePath mount_point_virtual;
- if (provider->GetVirtualPath(mount_point, &mount_point_virtual))
- provider->GrantFileAccessToExtension(extension_id(), mount_point_virtual);
-}
-
void RequestLocalFileSystemFunction::RespondFailedOnUIThread(
base::PlatformFileError error_code) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -2031,6 +2034,13 @@ bool GetGDataPreferencesFunction::RunImpl() {
const PrefService* service = profile_->GetPrefs();
+ bool driveEnabled = gdata::util::IsGDataAvailable(profile_);
+
+ if (driveEnabled)
+ AddGDataMountPoint(profile_, extension_id(), render_view_host());
+
+ value->SetBoolean("driveEnabled", driveEnabled);
+
value->SetBoolean("cellularDisabled",
service->GetBoolean(prefs::kDisableGDataOverCellular));

Powered by Google App Engine
This is Rietveld 408576698