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

Side by Side Diff: chrome/browser/chromeos/drive/change_list_loader.cc

Issue 23670006: Use DriveService for proper resource id resolution in ChangeListLoader. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/change_list_loader.h" 5 #include "chrome/browser/chromeos/drive/change_list_loader.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "chrome/browser/chromeos/drive/change_list_loader_observer.h" 13 #include "chrome/browser/chromeos/drive/change_list_loader_observer.h"
14 #include "chrome/browser/chromeos/drive/change_list_processor.h" 14 #include "chrome/browser/chromeos/drive/change_list_processor.h"
15 #include "chrome/browser/chromeos/drive/file_system_util.h" 15 #include "chrome/browser/chromeos/drive/file_system_util.h"
16 #include "chrome/browser/chromeos/drive/job_scheduler.h" 16 #include "chrome/browser/chromeos/drive/job_scheduler.h"
17 #include "chrome/browser/chromeos/drive/logging.h" 17 #include "chrome/browser/chromeos/drive/logging.h"
18 #include "chrome/browser/chromeos/drive/resource_metadata.h" 18 #include "chrome/browser/chromeos/drive/resource_metadata.h"
19 #include "chrome/browser/drive/drive_api_util.h" 19 #include "chrome/browser/drive/drive_api_util.h"
20 #include "chrome/browser/drive/drive_service_interface.h"
20 #include "chrome/browser/google_apis/drive_api_parser.h" 21 #include "chrome/browser/google_apis/drive_api_parser.h"
21 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
22 #include "url/gurl.h" 23 #include "url/gurl.h"
23 24
24 using content::BrowserThread; 25 using content::BrowserThread;
25 26
26 namespace drive { 27 namespace drive {
27 namespace internal { 28 namespace internal {
28 29
29 typedef base::Callback<void(FileError, ScopedVector<ChangeList>)> 30 typedef base::Callback<void(FileError, ScopedVector<ChangeList>)>
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 int64 start_change_id_; 172 int64 start_change_id_;
172 ScopedVector<ChangeList> change_lists_; 173 ScopedVector<ChangeList> change_lists_;
173 base::WeakPtrFactory<DeltaFeedFetcher> weak_ptr_factory_; 174 base::WeakPtrFactory<DeltaFeedFetcher> weak_ptr_factory_;
174 DISALLOW_COPY_AND_ASSIGN(DeltaFeedFetcher); 175 DISALLOW_COPY_AND_ASSIGN(DeltaFeedFetcher);
175 }; 176 };
176 177
177 // Fetches the resource entries in the directory with |directory_resource_id|. 178 // Fetches the resource entries in the directory with |directory_resource_id|.
178 class FastFetchFeedFetcher : public ChangeListLoader::FeedFetcher { 179 class FastFetchFeedFetcher : public ChangeListLoader::FeedFetcher {
179 public: 180 public:
180 FastFetchFeedFetcher(JobScheduler* scheduler, 181 FastFetchFeedFetcher(JobScheduler* scheduler,
182 DriveServiceInterface* drive_service,
181 const std::string& directory_resource_id, 183 const std::string& directory_resource_id,
182 const std::string& root_folder_id) 184 const std::string& root_folder_id)
183 : scheduler_(scheduler), 185 : scheduler_(scheduler),
186 drive_service_(drive_service),
184 directory_resource_id_(directory_resource_id), 187 directory_resource_id_(directory_resource_id),
185 root_folder_id_(root_folder_id), 188 root_folder_id_(root_folder_id),
186 weak_ptr_factory_(this) { 189 weak_ptr_factory_(this) {
187 } 190 }
188 191
189 virtual ~FastFetchFeedFetcher() { 192 virtual ~FastFetchFeedFetcher() {
190 } 193 }
191 194
192 virtual void Run(const FeedFetcherCallback& callback) OVERRIDE { 195 virtual void Run(const FeedFetcherCallback& callback) OVERRIDE {
193 if (util::IsDriveV2ApiEnabled() && root_folder_id_.empty()) { 196 if (util::IsDriveV2ApiEnabled() && root_folder_id_.empty()) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 weak_ptr_factory_.GetWeakPtr(), callback)); 275 weak_ptr_factory_.GetWeakPtr(), callback));
273 return; 276 return;
274 } 277 }
275 278
276 // Note: The fetcher is managed by ChangeListLoader, and the instance 279 // Note: The fetcher is managed by ChangeListLoader, and the instance
277 // will be deleted in the callback. Do not touch the fields after this 280 // will be deleted in the callback. Do not touch the fields after this
278 // invocation. 281 // invocation.
279 callback.Run(FILE_ERROR_OK, change_lists_.Pass()); 282 callback.Run(FILE_ERROR_OK, change_lists_.Pass());
280 } 283 }
281 284
285 // Fixes resource IDs in |change_list| into the format that |drive_service_|
286 // can understand. Note that |change_list| contains IDs in GData WAPI format
287 // since currently we always use WAPI for fast fetch, regardless of the flag.
282 void FixResourceIdInChangeList(ChangeList* change_list) { 288 void FixResourceIdInChangeList(ChangeList* change_list) {
283 std::vector<ResourceEntry>* entries = change_list->mutable_entries(); 289 std::vector<ResourceEntry>* entries = change_list->mutable_entries();
284 for (size_t i = 0; i < entries->size(); ++i) { 290 for (size_t i = 0; i < entries->size(); ++i) {
285 ResourceEntry* entry = &(*entries)[i]; 291 ResourceEntry* entry = &(*entries)[i];
286 if (entry->has_resource_id()) { 292 if (entry->has_resource_id())
287 entry->set_resource_id(UpgradeResourceIdFromGDataWapiToDriveApiV2( 293 entry->set_resource_id(FixResourceId(entry->resource_id()));
288 entry->resource_id()));
289 }
290 294
291 // Currently parent local id is the parent's resource id. 295 // Currently parent local id is the parent's resource id.
292 // It will be replaced by actual local id. (crbug.com/260514). 296 // It will be replaced by actual local id. (crbug.com/260514).
293 if (entry->has_parent_local_id()) { 297 if (entry->has_parent_local_id())
294 entry->set_parent_local_id(UpgradeResourceIdFromGDataWapiToDriveApiV2( 298 entry->set_parent_local_id(FixResourceId(entry->parent_local_id()));
295 entry->parent_local_id()));
296 }
297 } 299 }
298 } 300 }
299 301
300 std::string UpgradeResourceIdFromGDataWapiToDriveApiV2( 302 std::string FixResourceId(const std::string& resource_id) {
301 const std::string& resource_id) {
302 if (resource_id == util::kWapiRootDirectoryResourceId) 303 if (resource_id == util::kWapiRootDirectoryResourceId)
303 return root_folder_id_; 304 return root_folder_id_;
304 return drive::util::CanonicalizeResourceId(resource_id); 305 return drive_service_->CanonicalizeResourceId(resource_id);
305 } 306 }
306 307
307 JobScheduler* scheduler_; 308 JobScheduler* scheduler_;
309 DriveServiceInterface* drive_service_;
308 std::string directory_resource_id_; 310 std::string directory_resource_id_;
309 std::string root_folder_id_; 311 std::string root_folder_id_;
310 ScopedVector<ChangeList> change_lists_; 312 ScopedVector<ChangeList> change_lists_;
311 base::WeakPtrFactory<FastFetchFeedFetcher> weak_ptr_factory_; 313 base::WeakPtrFactory<FastFetchFeedFetcher> weak_ptr_factory_;
312 DISALLOW_COPY_AND_ASSIGN(FastFetchFeedFetcher); 314 DISALLOW_COPY_AND_ASSIGN(FastFetchFeedFetcher);
313 }; 315 };
314 316
315 } // namespace 317 } // namespace
316 318
317 ChangeListLoader::ChangeListLoader( 319 ChangeListLoader::ChangeListLoader(
318 base::SequencedTaskRunner* blocking_task_runner, 320 base::SequencedTaskRunner* blocking_task_runner,
319 ResourceMetadata* resource_metadata, 321 ResourceMetadata* resource_metadata,
320 JobScheduler* scheduler) 322 JobScheduler* scheduler,
323 DriveServiceInterface* drive_service)
321 : blocking_task_runner_(blocking_task_runner), 324 : blocking_task_runner_(blocking_task_runner),
322 resource_metadata_(resource_metadata), 325 resource_metadata_(resource_metadata),
323 scheduler_(scheduler), 326 scheduler_(scheduler),
327 drive_service_(drive_service),
324 last_known_remote_changestamp_(0), 328 last_known_remote_changestamp_(0),
325 loaded_(false), 329 loaded_(false),
326 weak_ptr_factory_(this) { 330 weak_ptr_factory_(this) {
327 } 331 }
328 332
329 ChangeListLoader::~ChangeListLoader() { 333 ChangeListLoader::~ChangeListLoader() {
330 STLDeleteElements(&fast_fetch_feed_fetcher_set_); 334 STLDeleteElements(&fast_fetch_feed_fetcher_set_);
331 } 335 }
332 336
333 bool ChangeListLoader::IsRefreshing() const { 337 bool ChangeListLoader::IsRefreshing() const {
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 &ChangeListLoader 766 &ChangeListLoader
763 ::DoLoadGrandRootDirectoryFromServerAfterGetResourceEntryByPath, 767 ::DoLoadGrandRootDirectoryFromServerAfterGetResourceEntryByPath,
764 weak_ptr_factory_.GetWeakPtr(), 768 weak_ptr_factory_.GetWeakPtr(),
765 directory_fetch_info, 769 directory_fetch_info,
766 callback)); 770 callback));
767 return; 771 return;
768 } 772 }
769 773
770 FastFetchFeedFetcher* fetcher = new FastFetchFeedFetcher( 774 FastFetchFeedFetcher* fetcher = new FastFetchFeedFetcher(
771 scheduler_, 775 scheduler_,
776 drive_service_,
772 directory_fetch_info.resource_id(), 777 directory_fetch_info.resource_id(),
773 root_folder_id_); 778 root_folder_id_);
774 fast_fetch_feed_fetcher_set_.insert(fetcher); 779 fast_fetch_feed_fetcher_set_.insert(fetcher);
775 fetcher->Run( 780 fetcher->Run(
776 base::Bind(&ChangeListLoader::DoLoadDirectoryFromServerAfterLoad, 781 base::Bind(&ChangeListLoader::DoLoadDirectoryFromServerAfterLoad,
777 weak_ptr_factory_.GetWeakPtr(), 782 weak_ptr_factory_.GetWeakPtr(),
778 directory_fetch_info, 783 directory_fetch_info,
779 callback, 784 callback,
780 fetcher)); 785 fetcher));
781 } 786 }
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 FOR_EACH_OBSERVER(ChangeListLoaderObserver, observers_, 973 FOR_EACH_OBSERVER(ChangeListLoaderObserver, observers_,
969 OnDirectoryChanged(*dir_iter)); 974 OnDirectoryChanged(*dir_iter));
970 } 975 }
971 } 976 }
972 977
973 callback.Run(); 978 callback.Run();
974 } 979 }
975 980
976 } // namespace internal 981 } // namespace internal
977 } // namespace drive 982 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/change_list_loader.h ('k') | chrome/browser/chromeos/drive/change_list_loader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698