Index: chrome/browser/chromeos/drive/file_system_util.cc |
diff --git a/chrome/browser/chromeos/drive/file_system_util.cc b/chrome/browser/chromeos/drive/file_system_util.cc |
index 4c9739f527126119ade0140a4e9f44610c6f571b..f43b190de8a5b72c32ca0d4317a76d0701010a8e 100644 |
--- a/chrome/browser/chromeos/drive/file_system_util.cc |
+++ b/chrome/browser/chromeos/drive/file_system_util.cc |
@@ -27,6 +27,7 @@ |
#include "chrome/browser/chromeos/drive/file_system_interface.h" |
#include "chrome/browser/chromeos/drive/job_list.h" |
#include "chrome/browser/chromeos/drive/write_on_cache_file.h" |
+#include "chrome/browser/chromeos/profiles/profile_helper.h" |
#include "chrome/browser/chromeos/profiles/profile_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/profiles/profile_manager.h" |
@@ -47,8 +48,10 @@ namespace util { |
namespace { |
-const base::FilePath::CharType kDriveMountPointPath[] = |
- FILE_PATH_LITERAL("/special/drive"); |
+const base::FilePath::CharType kSpecialMountPointRoot[] = |
+ FILE_PATH_LITERAL("/special"); |
+ |
+const char kDriveMountPointNameBase[] = "drive"; |
const base::FilePath::CharType kDriveMyDriveRootPath[] = |
FILE_PATH_LITERAL("drive/root"); |
@@ -124,11 +127,11 @@ const base::FilePath& GetDriveMyDriveRootPath() { |
return drive_root_path; |
} |
-const base::FilePath& GetDriveMountPointPath(Profile* profile) { |
- // TODO(kinaba): assign different path for each different profile. |
- CR_DEFINE_STATIC_LOCAL(base::FilePath, drive_mount_path, |
- (kDriveMountPointPath)); |
- return drive_mount_path; |
+base::FilePath GetDriveMountPointPath(Profile* profile) { |
+ const std::string id = "-" + |
+ chromeos::ProfileHelper::GetUserIdHashFromProfile(profile); |
+ return base::FilePath(kSpecialMountPointRoot).AppendASCII( |
+ net::EscapePath(kDriveMountPointNameBase + id)); |
} |
FileSystemInterface* GetFileSystemByProfile(Profile* profile) { |
@@ -218,6 +221,22 @@ base::FilePath ExtractDrivePath(const base::FilePath& path) { |
return drive_path; |
} |
+Profile* ExtractProfileFromPath(const base::FilePath& path) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ const std::vector<Profile*>& profiles = |
+ g_browser_process->profile_manager()->GetLoadedProfiles(); |
+ for (size_t i = 0; i < profiles.size(); ++i) { |
+ Profile* original_profile = profiles[i]->GetOriginalProfile(); |
+ if (original_profile == profiles[i]) { |
+ const base::FilePath base = GetDriveMountPointPath(original_profile); |
+ if (base == path || base.IsParent(path)) |
+ return original_profile; |
+ } |
+ } |
+ return NULL; |
+} |
+ |
base::FilePath ExtractDrivePathFromFileSystemUrl( |
const fileapi::FileSystemURL& url) { |
if (!url.is_valid() || url.type() != fileapi::kFileSystemTypeDrive) |