| Index: chrome/browser/chromeos/file_system_provider/mount_path_util.cc
|
| diff --git a/chrome/browser/chromeos/file_system_provider/mount_path_util.cc b/chrome/browser/chromeos/file_system_provider/mount_path_util.cc
|
| index c535bdb4fa286b1ed9111eb84ccedaa84c9c5655..ed7016d4223c922af0049e98349bc76cf1e42956 100644
|
| --- a/chrome/browser/chromeos/file_system_provider/mount_path_util.cc
|
| +++ b/chrome/browser/chromeos/file_system_provider/mount_path_util.cc
|
| @@ -4,11 +4,18 @@
|
|
|
| #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
|
|
|
| -#include "base/files/file_path.h"
|
| +#include <vector>
|
| +
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
|
| +#include "chrome/browser/chromeos/file_system_provider/service.h"
|
| #include "chrome/browser/chromeos/login/user.h"
|
| #include "chrome/browser/chromeos/login/user_manager.h"
|
| +#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/profiles/profile_manager.h"
|
|
|
| namespace chromeos {
|
| namespace file_system_provider {
|
| @@ -22,9 +29,9 @@ const base::FilePath::CharType kProvidedMountPointRoot[] =
|
|
|
| } // namespace
|
|
|
| -base::FilePath GetMountPointPath(Profile* profile,
|
| - std::string extension_id,
|
| - int file_system_id) {
|
| +base::FilePath GetMountPath(Profile* profile,
|
| + std::string extension_id,
|
| + int file_system_id) {
|
| chromeos::User* const user =
|
| chromeos::UserManager::IsInitialized()
|
| ? chromeos::UserManager::Get()->GetUserByProfile(
|
| @@ -35,6 +42,57 @@ base::FilePath GetMountPointPath(Profile* profile,
|
| extension_id + "-" + base::IntToString(file_system_id) + user_suffix);
|
| }
|
|
|
| +FileSystemURLParser::FileSystemURLParser(const fileapi::FileSystemURL& url)
|
| + : url_(url), file_system_(NULL) {
|
| +}
|
| +
|
| +FileSystemURLParser::~FileSystemURLParser() {
|
| +}
|
| +
|
| +bool FileSystemURLParser::Parse() {
|
| + if (url_.type() != fileapi::kFileSystemTypeProvided)
|
| + return false;
|
| +
|
| + // First, find the service handling the mount point of the URL.
|
| + 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] ||
|
| + chromeos::ProfileHelper::IsSigninProfile(original_profile)) {
|
| + continue;
|
| + }
|
| +
|
| + Service* service = Service::Get(original_profile);
|
| + if (!service)
|
| + continue;
|
| +
|
| + ProvidedFileSystemInterface* file_system =
|
| + service->GetProvidedFileSystem(url_.filesystem_id());
|
| + if (!file_system)
|
| + continue;
|
| +
|
| + // Strip the mount point name from the virtual path, to extract the file
|
| + // path within the provided file system.
|
| + file_system_ = file_system;
|
| + std::vector<base::FilePath::StringType> components;
|
| + url_.virtual_path().GetComponents(&components);
|
| + DCHECK_LT(0u, components.size());
|
| + file_path_ = base::FilePath();
|
| + for (size_t i = 1; i < components.size(); ++i) {
|
| + // TODO(mtomasz): This could be optimized, to avoid unnecessary copies.
|
| + file_path_ = file_path_.Append(components[i]);
|
| + }
|
| +
|
| + return true;
|
| + }
|
| +
|
| + // Nothing has been found.
|
| + return false;
|
| +}
|
| +
|
| } // namespace util
|
| } // namespace file_system_provider
|
| } // namespace chromeos
|
|
|