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" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/drive_service_interface.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/google_apis/drive_api_parser.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_wapi_parser.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace drive { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test_util { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using content::BrowserThread; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochFakeFileSystem::FakeFileSystem(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::TransferFileFromRemoteToLocal( 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& remote_src_file_path, 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& local_dest_file_path, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::TransferFileFromLocalToRemote( 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& local_src_file_path, 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& remote_dest_file_path, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::OpenFile(const base::FilePath& file_path, 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OpenMode open_mode, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const OpenFileCallback& callback) { 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Copy(const base::FilePath& src_file_path, 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& 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::Move(const base::FilePath& src_file_path, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& dest_file_path, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Remove(const base::FilePath& file_path, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_recursive, 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::CreateDirectory( 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& directory_path, 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_exclusive, 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_recursive, 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::CreateFile(const base::FilePath& file_path, 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_exclusive, 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void FakeFileSystem::TouchFile(const base::FilePath& file_path, 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Time& last_access_time, 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Time& last_modified_time, 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const FileOperationCallback& callback) { 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid FakeFileSystem::TruncateFile(const base::FilePath& file_path, 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 length, 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FileOperationCallback& callback) { 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Pin(const base::FilePath& file_path, 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Unpin(const base::FilePath& file_path, 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileByPath(const base::FilePath& file_path, 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileCallback& callback) { 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochvoid FakeFileSystem::GetFileByPathForSaving(const base::FilePath& file_path, 1384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const GetFileCallback& callback) { 1394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 1414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileContentByPath( 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileContentInitializedCallback& initialized_callback, 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback, 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& completion_callback) { 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 149a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetResourceEntryByPath( 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path, 151a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::Bind(&FakeFileSystem::GetFileContentByPathAfterGetResourceEntry, 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch initialized_callback, get_content_callback, 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback)); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void FakeFileSystem::GetResourceEntryByPath( 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GetResourceEntryCallback& callback) { 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Now, we only support files under my drive. 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!util::IsUnderDriveMountPoint(file_path)); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (file_path == util::GetDriveMyDriveRootPath()) { 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Specialized for the root entry. 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetAboutResource( 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 169a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) &FakeFileSystem::GetResourceEntryByPathAfterGetAboutResource, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), callback)); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetResourceEntryByPath( 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) file_path.DirName(), 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 177a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) &FakeFileSystem::GetResourceEntryByPathAfterGetParentEntryInfo, 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), file_path.BaseName(), callback)); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::ReadDirectoryByPath( 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& file_path, 183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ReadDirectoryCallback& callback) { 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Search(const std::string& search_query, 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const GURL& next_url, 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchCallback& callback) { 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::SearchMetadata( 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& query, 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int options, 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int at_most_num_matches, 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchMetadataCallback& callback) { 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetAvailableSpace( 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetAvailableSpaceCallback& callback) { 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid FakeFileSystem::GetShareUrl( 207bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const base::FilePath& file_path, 208bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const GURL& embed_origin, 209bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const GetShareUrlCallback& callback) { 210bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 211bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 212bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetMetadata( 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFilesystemMetadataCallback& callback) { 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::MarkCacheFileAsMounted( 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& drive_file_path, 220a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const MarkMountedCallback& callback) { 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::MarkCacheFileAsUnmounted( 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& cache_file_path, 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& callback) { 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetCacheEntryByResourceId( 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& resource_id, 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetCacheEntryCallback& callback) { 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::Reload() { 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Implementation of GetFileContentByPath. 240a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void FakeFileSystem::GetFileContentByPathAfterGetResourceEntry( 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GetFileContentInitializedCallback& initialized_callback, 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback, 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& completion_callback, 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error, 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry) { 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(error); 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(entry); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We're only interested in a file. 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->file_info().is_directory()) { 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(FILE_ERROR_NOT_A_FILE); 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 260a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Fetch google_apis::ResourceEntry for its |download_url|. 261b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) drive_service_->GetResourceEntry( 262b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) entry->resource_id(), 263a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::Bind( 264a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) &FakeFileSystem::GetFileContentByPathAfterGetWapiResourceEntry, 265a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 266a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) initialized_callback, 267a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) get_content_callback, 268a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) completion_callback)); 269b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 270b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 271a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void FakeFileSystem::GetFileContentByPathAfterGetWapiResourceEntry( 272b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const GetFileContentInitializedCallback& initialized_callback, 273b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const google_apis::GetContentCallback& get_content_callback, 274b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const FileOperationCallback& completion_callback, 275b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 276b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> gdata_entry) { 277b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 278b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 279a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) FileError error = GDataToFileError(gdata_error); 280b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (error != FILE_ERROR_OK) { 281b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) completion_callback.Run(error); 282b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return; 283b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 284b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DCHECK(gdata_entry); 285b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 286558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_ptr<ResourceEntry> entry(new ResourceEntry); 287558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool converted = ConvertToResourceEntry(*gdata_entry, entry.get()); 288558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DCHECK(converted); 289b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath cache_path = 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_dir_.path().AppendASCII(entry->resource_id()); 2927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (base::PathExists(cache_path)) { 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Cache file is found. 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) initialized_callback.Run(FILE_ERROR_OK, entry.Pass(), cache_path, 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Closure()); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback.Run(FILE_ERROR_OK); 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) initialized_callback.Run(FILE_ERROR_OK, entry.Pass(), base::FilePath(), 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&base::DoNothing)); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->DownloadFile( 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cache_path, 304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gdata_entry->resource_id(), 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&FakeFileSystem::GetFileContentByPathAfterDownloadFile, 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_callback), 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get_content_callback, 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::ProgressCallback()); 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeFileSystem::GetFileContentByPathAfterDownloadFile( 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const FileOperationCallback& completion_callback, 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& temp_file) { 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 317a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) completion_callback.Run(GDataToFileError(gdata_error)); 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 320a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)// Implementation of GetResourceEntryByPath. 321a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void FakeFileSystem::GetResourceEntryByPathAfterGetAboutResource( 322a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GetResourceEntryCallback& callback, 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::AboutResource> about_resource) { 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 327a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) FileError error = GDataToFileError(gdata_error); 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(about_resource); 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> root(new ResourceEntry); 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root->mutable_file_info()->set_is_directory(true); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root->set_resource_id(about_resource->root_folder_id()); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root->set_title(util::kDriveMyDriveRootDirName); 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, root.Pass()); 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 341a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void FakeFileSystem::GetResourceEntryByPathAfterGetParentEntryInfo( 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& base_name, 343a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GetResourceEntryCallback& callback, 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error, 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> parent_entry) { 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(parent_entry); 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive_service_->GetResourceListInDirectory( 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parent_entry->resource_id(), 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind( 357a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) &FakeFileSystem::GetResourceEntryByPathAfterGetResourceList, 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), base_name, callback)); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 361a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void FakeFileSystem::GetResourceEntryByPathAfterGetResourceList( 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& base_name, 363a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const GetResourceEntryCallback& callback, 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::GDataErrorCode gdata_error, 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<google_apis::ResourceList> resource_list) { 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 368a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) FileError error = GDataToFileError(gdata_error); 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (error != FILE_ERROR_OK) { 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(error, scoped_ptr<ResourceEntry>()); 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(resource_list); 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ScopedVector<google_apis::ResourceEntry>& entries = 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) resource_list->entries(); 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < entries.size(); ++i) { 378558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_ptr<ResourceEntry> entry(new ResourceEntry); 379558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch bool converted = ConvertToResourceEntry(*entries[i], entry.get()); 380558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DCHECK(converted); 381558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->base_name() == base_name.AsUTF8Unsafe()) { 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Found the target entry. 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(FILE_ERROR_OK, entry.Pass()); 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.Run(FILE_ERROR_NOT_FOUND, scoped_ptr<ResourceEntry>()); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace test_util 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace drive 394