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