fake_file_system.cc revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/fake_file_system.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind_helpers.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/file_util.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive.pb.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_errors.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_util.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/resource_entry_conversion.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/google_apis/drive_api_parser.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_wapi_parser.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace drive { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test_util { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using content::BrowserThread; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FakeFileSystem::FakeFileSystem( 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::DriveServiceInterface* drive_service) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : drive_service_(drive_service), 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_(this) { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FakeFileSystem::~FakeFileSystem() { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeFileSystem::InitializeForTesting() { 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return cache_dir_.CreateUniqueTempDir(); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Initialize() { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InitializeForTesting(); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::AddObserver(FileSystemObserver* observer) { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::RemoveObserver(FileSystemObserver* observer) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::CheckForUpdates() { 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByResourceId( 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoWithFilePathCallback& callback) { 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetResourceEntry( 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) resource_id, 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetEntryInfoByResourceIdAfterGetResourceEntry, 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), callback)); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::TransferFileFromRemoteToLocal( 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& remote_src_file_path, 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& local_dest_file_path, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::TransferFileFromLocalToRemote( 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& local_src_file_path, 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& remote_dest_file_path, 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::OpenFile(const base::FilePath& file_path, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const OpenFileCallback& callback) { 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::CloseFile(const base::FilePath& file_path, 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Copy(const base::FilePath& src_file_path, 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& dest_file_path, 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Move(const base::FilePath& src_file_path, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& dest_file_path, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Remove(const base::FilePath& file_path, 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_recursive, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::CreateDirectory( 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& directory_path, 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_exclusive, 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_recursive, 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::CreateFile(const base::FilePath& file_path, 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_exclusive, 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Pin(const base::FilePath& file_path, 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Unpin(const base::FilePath& file_path, 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileByPath(const base::FilePath& file_path, 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileCallback& callback) { 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileByResourceId( 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const DriveClientContext& context, 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileCallback& get_file_callback, 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback) { 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileContentByPath( 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileContentInitializedCallback& initialized_callback, 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback, 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& completion_callback) { 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetEntryInfoByPath( 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path, 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&FakeFileSystem::GetFileContentByPathAfterGetEntryInfo, 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path, initialized_callback, get_content_callback, 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback)); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::UpdateFileByResourceId( 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const DriveClientContext& context, 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByPath( 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoCallback& callback) { 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Now, we only support files under my drive. 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!util::IsUnderDriveMountPoint(file_path)); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (file_path == util::GetDriveMyDriveRootPath()) { 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Specialized for the root entry. 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetAboutResource( 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetEntryInfoByPathAfterGetAboutResource, 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), callback)); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetEntryInfoByPath( 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path.DirName(), 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetEntryInfoByPathAfterGetParentEntryInfo, 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), file_path.BaseName(), callback)); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::ReadDirectoryByPath( 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ReadDirectoryWithSettingCallback& callback) { 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::RefreshDirectory( 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Search(const std::string& search_query, 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& next_feed, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchCallback& callback) { 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::SearchMetadata( 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& query, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int options, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int at_most_num_matches, 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchMetadataCallback& callback) { 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetAvailableSpace( 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetAvailableSpaceCallback& callback) { 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::AddUploadedFile( 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> doc_entry, 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_content_path, 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetMetadata( 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFilesystemMetadataCallback& callback) { 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::MarkCacheFileAsMounted( 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& drive_file_path, 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const OpenFileCallback& callback) { 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::MarkCacheFileAsUnmounted( 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& cache_file_path, 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetCacheEntryByResourceId( 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& md5, 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetCacheEntryCallback& callback) { 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Reload() { 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Implementation of GetFilePath. 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFilePath(const std::string& resource_id, 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFilePathCallback& callback) { 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetAboutResource( 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetFilePathAfterGetAboutResource, 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), resource_id, callback)); 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFilePathAfterGetAboutResource( 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFilePathCallback& callback, 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode error, 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::AboutResource> about_resource) { 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We assume the call always success for test. 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(util::GDataToFileError(error), FILE_ERROR_OK); 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(about_resource); 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetFilePathInternal(about_resource->root_folder_id(), resource_id, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath(), callback); 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFilePathInternal( 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& root_resource_id, 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFilePathCallback& callback) { 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (resource_id == root_resource_id) { 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Reached to the root. Append the drive root path, and run |callback|. 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(util::GetDriveMyDriveRootPath().Append(file_path)); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetResourceEntry( 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) resource_id, 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetFilePathAfterGetResourceEntry, 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root_resource_id, file_path, callback)); 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFilePathAfterGetResourceEntry( 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& root_resource_id, 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& remaining_file_path, 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFilePathCallback& callback, 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode error_in, 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> resource_entry) { 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We assume the call always success for test. 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(util::GDataToFileError(error_in), FILE_ERROR_OK); 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(resource_entry); 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceEntry entry = ConvertToResourceEntry(*resource_entry); 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath file_path = 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath::FromUTF8Unsafe(entry.base_name()).Append( 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) remaining_file_path); 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetFilePathInternal(root_resource_id, entry.parent_resource_id(), 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path, callback); 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Implementation of GetEntryInfoByResourceId. 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByResourceIdAfterGetResourceEntry( 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoWithFilePathCallback& callback, 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode error_in, 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> resource_entry) { 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error = util::GDataToFileError(error_in); 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, base::FilePath(), scoped_ptr<ResourceEntry>()); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(resource_entry); 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry(new ResourceEntry( 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConvertToResourceEntry(*resource_entry))); 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string parent_resource_id = entry->parent_resource_id(); 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetFilePath( 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parent_resource_id, 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetEntryInfoByResourceIdAfterGetFilePath, 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback, error, base::Passed(&entry))); 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByResourceIdAfterGetFilePath( 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoWithFilePathCallback& callback, 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error, 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry, 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& parent_file_path) { 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath file_path = parent_file_path.Append( 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath::FromUTF8Unsafe(entry->base_name())); 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, file_path, entry.Pass()); 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Implementation of GetFileContentByPath. 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileContentByPathAfterGetEntryInfo( 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileContentInitializedCallback& initialized_callback, 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback, 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& completion_callback, 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error, 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry) { 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(error); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(entry); 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We're only interested in a file. 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->file_info().is_directory()) { 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(FILE_ERROR_NOT_A_FILE); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 386b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Fetch the ResourceEntry for its |download_url|. 387b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) drive_service_->GetResourceEntry( 388b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) entry->resource_id(), 389b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::Bind(&FakeFileSystem::GetFileContentByPathAfterGetResourceEntry, 390b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 391b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) file_path, 392b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) initialized_callback, 393b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) get_content_callback, 394b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) completion_callback)); 395b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 396b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 397b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void FakeFileSystem::GetFileContentByPathAfterGetResourceEntry( 398b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const base::FilePath& file_path, 399b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const GetFileContentInitializedCallback& initialized_callback, 400b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback, 401b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const FileOperationCallback& completion_callback, 402b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 403b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> gdata_entry) { 404b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 405b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 406b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FileError error = util::GDataToFileError(gdata_error); 407b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (error != FILE_ERROR_OK) { 408b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) completion_callback.Run(error); 409b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return; 410b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 411b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DCHECK(gdata_entry); 412b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 413b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_ptr<ResourceEntry> entry( 414b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) new ResourceEntry(ConvertToResourceEntry(*gdata_entry))); 415b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath cache_path = 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_dir_.path().AppendASCII(entry->resource_id()); 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (file_util::PathExists(cache_path)) { 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Cache file is found. 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) initialized_callback.Run(FILE_ERROR_OK, entry.Pass(), cache_path, 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Closure()); 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(FILE_ERROR_OK); 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) initialized_callback.Run(FILE_ERROR_OK, entry.Pass(), base::FilePath(), 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&base::DoNothing)); 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->DownloadFile( 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path, 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_path, 431b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(gdata_entry->download_url()), 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&FakeFileSystem::GetFileContentByPathAfterDownloadFile, 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback), 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get_content_callback, 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::ProgressCallback()); 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileContentByPathAfterDownloadFile( 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& completion_callback, 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& temp_file) { 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(util::GDataToFileError(gdata_error)); 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Implementation of GetEntryInfoByPath. 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByPathAfterGetAboutResource( 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoCallback& callback, 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::AboutResource> about_resource) { 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error = util::GDataToFileError(gdata_error); 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(about_resource); 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> root(new ResourceEntry); 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root->mutable_file_info()->set_is_directory(true); 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root->set_resource_id(about_resource->root_folder_id()); 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root->set_title(util::kDriveMyDriveRootDirName); 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, root.Pass()); 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByPathAfterGetParentEntryInfo( 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& base_name, 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoCallback& callback, 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error, 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> parent_entry) { 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(parent_entry); 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetResourceListInDirectory( 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parent_entry->resource_id(), 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &FakeFileSystem::GetEntryInfoByPathAfterGetResourceList, 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), base_name, callback)); 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetEntryInfoByPathAfterGetResourceList( 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& base_name, 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetEntryInfoCallback& callback, 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::ResourceList> resource_list) { 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error = util::GDataToFileError(gdata_error); 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(resource_list); 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ScopedVector<google_apis::ResourceEntry>& entries = 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) resource_list->entries(); 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < entries.size(); ++i) { 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry(new ResourceEntry( 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConvertToResourceEntry(*entries[i]))); 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->base_name() == base_name.AsUTF8Unsafe()) { 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Found the target entry. 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(FILE_ERROR_OK, entry.Pass()); 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(FILE_ERROR_NOT_FOUND, scoped_ptr<ResourceEntry>()); 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace test_util 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace drive 519