| OLD | NEW |
| 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/sync_file_system/drive_backend_v1/remote_change_handler
.h" | 5 #include "chrome/browser/sync_file_system/drive_backend_v1/remote_change_handler
.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "webkit/common/fileapi/file_system_util.h" | 8 #include "storage/common/fileapi/file_system_util.h" |
| 9 | 9 |
| 10 namespace sync_file_system { | 10 namespace sync_file_system { |
| 11 | 11 |
| 12 RemoteChangeHandler::ChangeQueueItem::ChangeQueueItem() | 12 RemoteChangeHandler::ChangeQueueItem::ChangeQueueItem() |
| 13 : changestamp(0) {} | 13 : changestamp(0) {} |
| 14 | 14 |
| 15 RemoteChangeHandler::ChangeQueueItem::ChangeQueueItem( | 15 RemoteChangeHandler::ChangeQueueItem::ChangeQueueItem( |
| 16 int64 changestamp, | 16 int64 changestamp, |
| 17 const fileapi::FileSystemURL& url) | 17 const storage::FileSystemURL& url) |
| 18 : changestamp(changestamp), url(url) {} | 18 : changestamp(changestamp), url(url) { |
| 19 } |
| 19 | 20 |
| 20 bool RemoteChangeHandler::ChangeQueueComparator::operator()( | 21 bool RemoteChangeHandler::ChangeQueueComparator::operator()( |
| 21 const ChangeQueueItem& left, | 22 const ChangeQueueItem& left, |
| 22 const ChangeQueueItem& right) { | 23 const ChangeQueueItem& right) { |
| 23 if (left.changestamp != right.changestamp) | 24 if (left.changestamp != right.changestamp) |
| 24 return left.changestamp < right.changestamp; | 25 return left.changestamp < right.changestamp; |
| 25 return fileapi::FileSystemURL::Comparator()(left.url, right.url); | 26 return storage::FileSystemURL::Comparator()(left.url, right.url); |
| 26 } | 27 } |
| 27 | 28 |
| 28 RemoteChangeHandler::RemoteChange::RemoteChange() | 29 RemoteChangeHandler::RemoteChange::RemoteChange() |
| 29 : changestamp(0), | 30 : changestamp(0), |
| 30 change(FileChange::FILE_CHANGE_ADD_OR_UPDATE, SYNC_FILE_TYPE_UNKNOWN) {} | 31 change(FileChange::FILE_CHANGE_ADD_OR_UPDATE, SYNC_FILE_TYPE_UNKNOWN) {} |
| 31 | 32 |
| 32 RemoteChangeHandler::RemoteChange::RemoteChange( | 33 RemoteChangeHandler::RemoteChange::RemoteChange( |
| 33 int64 changestamp, | 34 int64 changestamp, |
| 34 const std::string& resource_id, | 35 const std::string& resource_id, |
| 35 const std::string& md5_checksum, | 36 const std::string& md5_checksum, |
| 36 const base::Time& updated_time, | 37 const base::Time& updated_time, |
| 37 const fileapi::FileSystemURL& url, | 38 const storage::FileSystemURL& url, |
| 38 const FileChange& change) | 39 const FileChange& change) |
| 39 : changestamp(changestamp), | 40 : changestamp(changestamp), |
| 40 resource_id(resource_id), | 41 resource_id(resource_id), |
| 41 md5_checksum(md5_checksum), | 42 md5_checksum(md5_checksum), |
| 42 updated_time(updated_time), | 43 updated_time(updated_time), |
| 43 url(url), | 44 url(url), |
| 44 change(change) {} | 45 change(change) { |
| 46 } |
| 45 | 47 |
| 46 RemoteChangeHandler::RemoteChange::~RemoteChange() {} | 48 RemoteChangeHandler::RemoteChange::~RemoteChange() {} |
| 47 | 49 |
| 48 bool RemoteChangeHandler::RemoteChangeComparator::operator()( | 50 bool RemoteChangeHandler::RemoteChangeComparator::operator()( |
| 49 const RemoteChange& left, | 51 const RemoteChange& left, |
| 50 const RemoteChange& right) { | 52 const RemoteChange& right) { |
| 51 // This should return true if |right| has higher priority than |left|. | 53 // This should return true if |right| has higher priority than |left|. |
| 52 // Smaller changestamps have higher priorities (i.e. need to be processed | 54 // Smaller changestamps have higher priorities (i.e. need to be processed |
| 53 // earlier). | 55 // earlier). |
| 54 if (left.changestamp != right.changestamp) | 56 if (left.changestamp != right.changestamp) |
| 55 return left.changestamp > right.changestamp; | 57 return left.changestamp > right.changestamp; |
| 56 return false; | 58 return false; |
| 57 } | 59 } |
| 58 | 60 |
| 59 RemoteChangeHandler::RemoteChangeHandler() {} | 61 RemoteChangeHandler::RemoteChangeHandler() {} |
| 60 | 62 |
| 61 RemoteChangeHandler::~RemoteChangeHandler() {} | 63 RemoteChangeHandler::~RemoteChangeHandler() {} |
| 62 | 64 |
| 63 bool RemoteChangeHandler::GetChange(RemoteChange* remote_change) { | 65 bool RemoteChangeHandler::GetChange(RemoteChange* remote_change) { |
| 64 const fileapi::FileSystemURL& url = changes_.begin()->url; | 66 const storage::FileSystemURL& url = changes_.begin()->url; |
| 65 const base::FilePath::StringType& normalized_path = | 67 const base::FilePath::StringType& normalized_path = |
| 66 fileapi::VirtualPath::GetNormalizedFilePath(url.path()); | 68 storage::VirtualPath::GetNormalizedFilePath(url.path()); |
| 67 DCHECK(ContainsKey(origin_to_changes_map_, url.origin())); | 69 DCHECK(ContainsKey(origin_to_changes_map_, url.origin())); |
| 68 PathToChangeMap* path_to_change = &origin_to_changes_map_[url.origin()]; | 70 PathToChangeMap* path_to_change = &origin_to_changes_map_[url.origin()]; |
| 69 DCHECK(ContainsKey(*path_to_change, normalized_path)); | 71 DCHECK(ContainsKey(*path_to_change, normalized_path)); |
| 70 *remote_change = (*path_to_change)[normalized_path].remote_change; | 72 *remote_change = (*path_to_change)[normalized_path].remote_change; |
| 71 return true; | 73 return true; |
| 72 } | 74 } |
| 73 | 75 |
| 74 bool RemoteChangeHandler::GetChangeForURL( | 76 bool RemoteChangeHandler::GetChangeForURL(const storage::FileSystemURL& url, |
| 75 const fileapi::FileSystemURL& url, | 77 RemoteChange* remote_change) { |
| 76 RemoteChange* remote_change) { | |
| 77 OriginToChangesMap::iterator found_origin = | 78 OriginToChangesMap::iterator found_origin = |
| 78 origin_to_changes_map_.find(url.origin()); | 79 origin_to_changes_map_.find(url.origin()); |
| 79 if (found_origin == origin_to_changes_map_.end()) | 80 if (found_origin == origin_to_changes_map_.end()) |
| 80 return false; | 81 return false; |
| 81 | 82 |
| 82 PathToChangeMap* path_to_change = &found_origin->second; | 83 PathToChangeMap* path_to_change = &found_origin->second; |
| 83 PathToChangeMap::iterator found_change = path_to_change->find( | 84 PathToChangeMap::iterator found_change = path_to_change->find( |
| 84 fileapi::VirtualPath::GetNormalizedFilePath(url.path())); | 85 storage::VirtualPath::GetNormalizedFilePath(url.path())); |
| 85 if (found_change == path_to_change->end()) | 86 if (found_change == path_to_change->end()) |
| 86 return false; | 87 return false; |
| 87 | 88 |
| 88 *remote_change = found_change->second.remote_change; | 89 *remote_change = found_change->second.remote_change; |
| 89 return true; | 90 return true; |
| 90 } | 91 } |
| 91 | 92 |
| 92 void RemoteChangeHandler::AppendChange(const RemoteChange& remote_change) { | 93 void RemoteChangeHandler::AppendChange(const RemoteChange& remote_change) { |
| 93 base::FilePath::StringType normalized_path = | 94 base::FilePath::StringType normalized_path = |
| 94 fileapi::VirtualPath::GetNormalizedFilePath(remote_change.url.path()); | 95 storage::VirtualPath::GetNormalizedFilePath(remote_change.url.path()); |
| 95 | 96 |
| 96 PathToChangeMap* path_to_change = | 97 PathToChangeMap* path_to_change = |
| 97 &origin_to_changes_map_[remote_change.url.origin()]; | 98 &origin_to_changes_map_[remote_change.url.origin()]; |
| 98 PathToChangeMap::iterator found = path_to_change->find(normalized_path); | 99 PathToChangeMap::iterator found = path_to_change->find(normalized_path); |
| 99 | 100 |
| 100 // Remove an existing change for |remote_change.url.path()|. | 101 // Remove an existing change for |remote_change.url.path()|. |
| 101 if (found != path_to_change->end()) | 102 if (found != path_to_change->end()) |
| 102 changes_.erase(found->second.position_in_queue); | 103 changes_.erase(found->second.position_in_queue); |
| 103 | 104 |
| 104 std::pair<PendingChangeQueue::iterator, bool> inserted_to_queue = | 105 std::pair<PendingChangeQueue::iterator, bool> inserted_to_queue = |
| 105 changes_.insert(ChangeQueueItem(remote_change.changestamp, | 106 changes_.insert(ChangeQueueItem(remote_change.changestamp, |
| 106 remote_change.url)); | 107 remote_change.url)); |
| 107 DCHECK(inserted_to_queue.second); | 108 DCHECK(inserted_to_queue.second); |
| 108 | 109 |
| 109 (*path_to_change)[normalized_path] = | 110 (*path_to_change)[normalized_path] = |
| 110 ChangeMapItem(remote_change, inserted_to_queue.first); | 111 ChangeMapItem(remote_change, inserted_to_queue.first); |
| 111 } | 112 } |
| 112 | 113 |
| 113 bool RemoteChangeHandler::RemoveChangeForURL( | 114 bool RemoteChangeHandler::RemoveChangeForURL( |
| 114 const fileapi::FileSystemURL& url) { | 115 const storage::FileSystemURL& url) { |
| 115 OriginToChangesMap::iterator found_origin = | 116 OriginToChangesMap::iterator found_origin = |
| 116 origin_to_changes_map_.find(url.origin()); | 117 origin_to_changes_map_.find(url.origin()); |
| 117 if (found_origin == origin_to_changes_map_.end()) | 118 if (found_origin == origin_to_changes_map_.end()) |
| 118 return false; | 119 return false; |
| 119 | 120 |
| 120 PathToChangeMap* path_to_change = &found_origin->second; | 121 PathToChangeMap* path_to_change = &found_origin->second; |
| 121 PathToChangeMap::iterator found_change = path_to_change->find( | 122 PathToChangeMap::iterator found_change = path_to_change->find( |
| 122 fileapi::VirtualPath::GetNormalizedFilePath(url.path())); | 123 storage::VirtualPath::GetNormalizedFilePath(url.path())); |
| 123 if (found_change == path_to_change->end()) | 124 if (found_change == path_to_change->end()) |
| 124 return false; | 125 return false; |
| 125 | 126 |
| 126 changes_.erase(found_change->second.position_in_queue); | 127 changes_.erase(found_change->second.position_in_queue); |
| 127 path_to_change->erase(found_change); | 128 path_to_change->erase(found_change); |
| 128 if (path_to_change->empty()) | 129 if (path_to_change->empty()) |
| 129 origin_to_changes_map_.erase(found_origin); | 130 origin_to_changes_map_.erase(found_origin); |
| 130 return true; | 131 return true; |
| 131 } | 132 } |
| 132 | 133 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 148 | 149 |
| 149 RemoteChangeHandler::ChangeMapItem::ChangeMapItem( | 150 RemoteChangeHandler::ChangeMapItem::ChangeMapItem( |
| 150 const RemoteChange& remote_change, | 151 const RemoteChange& remote_change, |
| 151 PendingChangeQueue::iterator position_in_queue) | 152 PendingChangeQueue::iterator position_in_queue) |
| 152 : remote_change(remote_change), | 153 : remote_change(remote_change), |
| 153 position_in_queue(position_in_queue) {} | 154 position_in_queue(position_in_queue) {} |
| 154 | 155 |
| 155 RemoteChangeHandler::ChangeMapItem::~ChangeMapItem() {} | 156 RemoteChangeHandler::ChangeMapItem::~ChangeMapItem() {} |
| 156 | 157 |
| 157 } // namespace sync_file_system | 158 } // namespace sync_file_system |
| OLD | NEW |