Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: chrome/browser/chromeos/drive/sync/entry_revert_performer.cc

Issue 102133008: drive: Call OnDirectoryChanged from EntryRevertPerformer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/drive/sync/entry_revert_performer.h" 5 #include "chrome/browser/chromeos/drive/sync/entry_revert_performer.h"
6 6
7 #include "chrome/browser/chromeos/drive/drive.pb.h" 7 #include "chrome/browser/chromeos/drive/drive.pb.h"
8 #include "chrome/browser/chromeos/drive/file_system/operation_observer.h"
8 #include "chrome/browser/chromeos/drive/job_scheduler.h" 9 #include "chrome/browser/chromeos/drive/job_scheduler.h"
9 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h" 10 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
10 #include "chrome/browser/chromeos/drive/resource_metadata.h" 11 #include "chrome/browser/chromeos/drive/resource_metadata.h"
11 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
12 13
13 using content::BrowserThread; 14 using content::BrowserThread;
14 15
15 namespace drive { 16 namespace drive {
16 namespace internal { 17 namespace internal {
17 namespace { 18 namespace {
18 19
19 FileError FinishRevert(ResourceMetadata* metadata, 20 FileError FinishRevert(ResourceMetadata* metadata,
20 const std::string& local_id, 21 const std::string& local_id,
21 google_apis::GDataErrorCode status, 22 google_apis::GDataErrorCode status,
22 scoped_ptr<google_apis::ResourceEntry> resource_entry) { 23 scoped_ptr<google_apis::ResourceEntry> resource_entry,
23 FileError error = GDataToFileError(status); 24 std::set<base::FilePath>* changed_directories) {
24 if (error == FILE_ERROR_NOT_FOUND)
25 return metadata->RemoveEntry(local_id);
26
27 if (error != FILE_ERROR_OK)
28 return error;
29
30 ResourceEntry entry; 25 ResourceEntry entry;
31 std::string parent_resource_id; 26 std::string parent_resource_id;
32 if (!ConvertToResourceEntry(*resource_entry, &entry, &parent_resource_id)) 27 FileError error = GDataToFileError(status);
33 return FILE_ERROR_NOT_A_FILE; 28 switch (error) {
29 case FILE_ERROR_OK:
30 if (!ConvertToResourceEntry(*resource_entry, &entry, &parent_resource_id))
31 return FILE_ERROR_NOT_A_FILE;
32 break;
34 33
35 if (entry.deleted()) 34 case FILE_ERROR_NOT_FOUND:
36 return metadata->RemoveEntry(local_id); 35 entry.set_deleted(true);
36 break;
37 37
38 std::string parent_local_id; 38 default:
39 error = metadata->GetIdByResourceId(parent_resource_id, &parent_local_id); 39 return error;
40 if (error != FILE_ERROR_OK) 40 }
41 return error;
42 41
43 entry.set_local_id(local_id); 42 const base::FilePath original_path = metadata->GetFilePath(local_id);
44 entry.set_parent_local_id(parent_local_id);
45 43
46 return metadata->RefreshEntry(entry); 44 if (entry.deleted()) {
45 error = metadata->RemoveEntry(local_id);
46 if (error != FILE_ERROR_OK)
47 return error;
48
49 changed_directories->insert(original_path.DirName());
50 } else {
51 std::string parent_local_id;
52 error = metadata->GetIdByResourceId(parent_resource_id, &parent_local_id);
53 if (error != FILE_ERROR_OK)
54 return error;
55
56 entry.set_local_id(local_id);
57 entry.set_parent_local_id(parent_local_id);
58 error = metadata->RefreshEntry(entry);
59 if (error != FILE_ERROR_OK)
60 return error;
61
62 changed_directories->insert(metadata->GetFilePath(entry.parent_local_id()));
63 changed_directories->insert(original_path.DirName());
64 }
65 return FILE_ERROR_OK;
47 } 66 }
48 67
49 } // namespace 68 } // namespace
50 69
51 EntryRevertPerformer::EntryRevertPerformer( 70 EntryRevertPerformer::EntryRevertPerformer(
52 base::SequencedTaskRunner* blocking_task_runner, 71 base::SequencedTaskRunner* blocking_task_runner,
72 file_system::OperationObserver* observer,
53 JobScheduler* scheduler, 73 JobScheduler* scheduler,
54 ResourceMetadata* metadata) 74 ResourceMetadata* metadata)
55 : blocking_task_runner_(blocking_task_runner), 75 : blocking_task_runner_(blocking_task_runner),
76 observer_(observer),
56 scheduler_(scheduler), 77 scheduler_(scheduler),
57 metadata_(metadata), 78 metadata_(metadata),
58 weak_ptr_factory_(this) { 79 weak_ptr_factory_(this) {
59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 80 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
60 } 81 }
61 82
62 EntryRevertPerformer::~EntryRevertPerformer() { 83 EntryRevertPerformer::~EntryRevertPerformer() {
63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
64 } 85 }
65 86
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 base::Bind(&EntryRevertPerformer::RevertEntryAfterGetResourceEntry, 119 base::Bind(&EntryRevertPerformer::RevertEntryAfterGetResourceEntry,
99 weak_ptr_factory_.GetWeakPtr(), callback, entry->local_id())); 120 weak_ptr_factory_.GetWeakPtr(), callback, entry->local_id()));
100 } 121 }
101 122
102 void EntryRevertPerformer::RevertEntryAfterGetResourceEntry( 123 void EntryRevertPerformer::RevertEntryAfterGetResourceEntry(
103 const FileOperationCallback& callback, 124 const FileOperationCallback& callback,
104 const std::string& local_id, 125 const std::string& local_id,
105 google_apis::GDataErrorCode status, 126 google_apis::GDataErrorCode status,
106 scoped_ptr<google_apis::ResourceEntry> resource_entry) { 127 scoped_ptr<google_apis::ResourceEntry> resource_entry) {
107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 128 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
129 DCHECK(!callback.is_null());
108 130
109 // TODO(hashimoto): Notify OnDirectoryChanged event for affected directories. 131 std::set<base::FilePath>* changed_directories = new std::set<base::FilePath>;
110 base::PostTaskAndReplyWithResult( 132 base::PostTaskAndReplyWithResult(
111 blocking_task_runner_.get(), 133 blocking_task_runner_.get(),
112 FROM_HERE, 134 FROM_HERE,
113 base::Bind(&FinishRevert, metadata_, local_id, status, 135 base::Bind(&FinishRevert, metadata_, local_id, status,
114 base::Passed(&resource_entry)), 136 base::Passed(&resource_entry), changed_directories),
115 callback); 137 base::Bind(&EntryRevertPerformer::RevertEntryAfterFinishRevert,
138 weak_ptr_factory_.GetWeakPtr(), callback,
139 base::Owned(changed_directories)));
140 }
141
142 void EntryRevertPerformer::RevertEntryAfterFinishRevert(
143 const FileOperationCallback& callback,
144 const std::set<base::FilePath>* changed_directories,
145 FileError error) {
146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
147 DCHECK(!callback.is_null());
148
149 for (std::set<base::FilePath>::const_iterator it =
150 changed_directories->begin(); it != changed_directories->end(); ++it)
151 observer_->OnDirectoryChangedByOperation(*it);
152
153 callback.Run(error);
116 } 154 }
117 155
118 } // namespace internal 156 } // namespace internal
119 } // namespace drive 157 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698