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

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: 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,
24 std::vector<base::FilePath>* changed_directories) {
23 FileError error = GDataToFileError(status); 25 FileError error = GDataToFileError(status);
24 if (error == FILE_ERROR_NOT_FOUND) 26 if (error == FILE_ERROR_NOT_FOUND)
25 return metadata->RemoveEntry(local_id); 27 return metadata->RemoveEntry(local_id);
26 28
27 if (error != FILE_ERROR_OK) 29 if (error != FILE_ERROR_OK)
28 return error; 30 return error;
29 31
30 ResourceEntry entry; 32 ResourceEntry entry;
31 std::string parent_resource_id; 33 std::string parent_resource_id;
32 if (!ConvertToResourceEntry(*resource_entry, &entry, &parent_resource_id)) 34 if (!ConvertToResourceEntry(*resource_entry, &entry, &parent_resource_id))
33 return FILE_ERROR_NOT_A_FILE; 35 return FILE_ERROR_NOT_A_FILE;
34 36
35 if (entry.deleted()) 37 if (entry.deleted())
36 return metadata->RemoveEntry(local_id); 38 return metadata->RemoveEntry(local_id);
37 39
38 std::string parent_local_id; 40 std::string parent_local_id;
39 error = metadata->GetIdByResourceId(parent_resource_id, &parent_local_id); 41 error = metadata->GetIdByResourceId(parent_resource_id, &parent_local_id);
40 if (error != FILE_ERROR_OK) 42 if (error != FILE_ERROR_OK)
41 return error; 43 return error;
42 44
45 const base::FilePath original_path = metadata->GetFilePath(local_id);
46
43 entry.set_local_id(local_id); 47 entry.set_local_id(local_id);
44 entry.set_parent_local_id(parent_local_id); 48 entry.set_parent_local_id(parent_local_id);
45 49
46 return metadata->RefreshEntry(entry); 50 error = metadata->RefreshEntry(entry);
51 if (error != FILE_ERROR_OK)
52 return error;
53
54 changed_directories->push_back(original_path.DirName());
55 changed_directories->push_back(metadata->GetFilePath(parent_local_id));
56
57 return FILE_ERROR_OK;
47 } 58 }
48 59
49 } // namespace 60 } // namespace
50 61
51 EntryRevertPerformer::EntryRevertPerformer( 62 EntryRevertPerformer::EntryRevertPerformer(
52 base::SequencedTaskRunner* blocking_task_runner, 63 base::SequencedTaskRunner* blocking_task_runner,
64 file_system::OperationObserver* observer,
53 JobScheduler* scheduler, 65 JobScheduler* scheduler,
54 ResourceMetadata* metadata) 66 ResourceMetadata* metadata)
55 : blocking_task_runner_(blocking_task_runner), 67 : blocking_task_runner_(blocking_task_runner),
68 observer_(observer),
56 scheduler_(scheduler), 69 scheduler_(scheduler),
57 metadata_(metadata), 70 metadata_(metadata),
58 weak_ptr_factory_(this) { 71 weak_ptr_factory_(this) {
59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 72 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
60 } 73 }
61 74
62 EntryRevertPerformer::~EntryRevertPerformer() { 75 EntryRevertPerformer::~EntryRevertPerformer() {
63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 76 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
64 } 77 }
65 78
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 base::Bind(&EntryRevertPerformer::RevertEntryAfterGetResourceEntry, 111 base::Bind(&EntryRevertPerformer::RevertEntryAfterGetResourceEntry,
99 weak_ptr_factory_.GetWeakPtr(), callback, entry->local_id())); 112 weak_ptr_factory_.GetWeakPtr(), callback, entry->local_id()));
100 } 113 }
101 114
102 void EntryRevertPerformer::RevertEntryAfterGetResourceEntry( 115 void EntryRevertPerformer::RevertEntryAfterGetResourceEntry(
103 const FileOperationCallback& callback, 116 const FileOperationCallback& callback,
104 const std::string& local_id, 117 const std::string& local_id,
105 google_apis::GDataErrorCode status, 118 google_apis::GDataErrorCode status,
106 scoped_ptr<google_apis::ResourceEntry> resource_entry) { 119 scoped_ptr<google_apis::ResourceEntry> resource_entry) {
107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 120 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
121 DCHECK(!callback.is_null());
108 122
109 // TODO(hashimoto): Notify OnDirectoryChanged event for affected directories. 123 std::vector<base::FilePath>* changed_directories =
kinaba 2013/12/06 07:04:05 Wouldn't it better be std::set? otherwise duplicat
hashimoto 2013/12/06 07:36:20 Done. We should also fix MoveOperation?
kinaba 2013/12/06 07:41:40 Sounds good to do so.
124 new std::vector<base::FilePath>;
110 base::PostTaskAndReplyWithResult( 125 base::PostTaskAndReplyWithResult(
111 blocking_task_runner_.get(), 126 blocking_task_runner_.get(),
112 FROM_HERE, 127 FROM_HERE,
113 base::Bind(&FinishRevert, metadata_, local_id, status, 128 base::Bind(&FinishRevert, metadata_, local_id, status,
114 base::Passed(&resource_entry)), 129 base::Passed(&resource_entry), changed_directories),
115 callback); 130 base::Bind(&EntryRevertPerformer::RevertEntryAfterFinishRevert,
131 weak_ptr_factory_.GetWeakPtr(), callback,
132 base::Owned(changed_directories)));
133 }
134
135 void EntryRevertPerformer::RevertEntryAfterFinishRevert(
136 const FileOperationCallback& callback,
137 const std::vector<base::FilePath>* changed_directories,
138 FileError error) {
139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
140 DCHECK(!callback.is_null());
141
142 for (size_t i = 0; i < changed_directories->size(); ++i)
143 observer_->OnDirectoryChangedByOperation((*changed_directories)[i]);
144
145 callback.Run(error);
116 } 146 }
117 147
118 } // namespace internal 148 } // namespace internal
119 } // namespace drive 149 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698