OLD | NEW |
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/gdata_wapi_feed_loader.h" | 5 #include "chrome/browser/chromeos/drive/gdata_wapi_feed_loader.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "chrome/browser/chromeos/drive/drive_webapps_registry.h" | 21 #include "chrome/browser/chromeos/drive/drive_webapps_registry.h" |
22 #include "chrome/browser/chromeos/drive/gdata_wapi_feed_loader_observer.h" | 22 #include "chrome/browser/chromeos/drive/gdata_wapi_feed_loader_observer.h" |
23 #include "chrome/browser/chromeos/drive/gdata_wapi_feed_processor.h" | 23 #include "chrome/browser/chromeos/drive/gdata_wapi_feed_processor.h" |
24 #include "chrome/browser/google_apis/drive_api_parser.h" | 24 #include "chrome/browser/google_apis/drive_api_parser.h" |
25 #include "chrome/browser/google_apis/gdata_util.h" | 25 #include "chrome/browser/google_apis/gdata_util.h" |
26 #include "chrome/common/chrome_switches.h" | 26 #include "chrome/common/chrome_switches.h" |
27 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
28 | 28 |
29 using content::BrowserThread; | 29 using content::BrowserThread; |
30 | 30 |
31 namespace gdata { | 31 namespace drive { |
32 | 32 |
33 namespace { | 33 namespace { |
34 | 34 |
35 const FilePath::CharType kAccountMetadataFile[] = | 35 const FilePath::CharType kAccountMetadataFile[] = |
36 FILE_PATH_LITERAL("account_metadata.json"); | 36 FILE_PATH_LITERAL("account_metadata.json"); |
37 const FilePath::CharType kFilesystemProtoFile[] = | 37 const FilePath::CharType kFilesystemProtoFile[] = |
38 FILE_PATH_LITERAL("file_system.pb"); | 38 FILE_PATH_LITERAL("file_system.pb"); |
39 const FilePath::CharType kResourceMetadataDBFile[] = | 39 const FilePath::CharType kResourceMetadataDBFile[] = |
40 FILE_PATH_LITERAL("resource_metadata.db"); | 40 FILE_PATH_LITERAL("resource_metadata.db"); |
41 | 41 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 141 |
142 // Run params->feed_load_callback with |error|. | 142 // Run params->feed_load_callback with |error|. |
143 void RunFeedLoadCallback(scoped_ptr<LoadFeedParams> params, | 143 void RunFeedLoadCallback(scoped_ptr<LoadFeedParams> params, |
144 DriveFileError error) { | 144 DriveFileError error) { |
145 // Need a reference before calling Pass(). | 145 // Need a reference before calling Pass(). |
146 const LoadDocumentFeedCallback& feed_load_callback = | 146 const LoadDocumentFeedCallback& feed_load_callback = |
147 params->feed_load_callback; | 147 params->feed_load_callback; |
148 feed_load_callback.Run(params.Pass(), error); | 148 feed_load_callback.Run(params.Pass(), error); |
149 } | 149 } |
150 | 150 |
151 // Parses a DocumentFeed from |data|. | 151 // Parses a gdata::DocumentFeed from |data|. |
152 void ParseFeedOnBlockingPool( | 152 void ParseFeedOnBlockingPool( |
153 scoped_ptr<base::Value> data, | 153 scoped_ptr<base::Value> data, |
154 scoped_ptr<DocumentFeed>* out_current_feed) { | 154 scoped_ptr<gdata::DocumentFeed>* out_current_feed) { |
155 DCHECK(out_current_feed); | 155 DCHECK(out_current_feed); |
156 out_current_feed->reset(DocumentFeed::ExtractAndParse(*data).release()); | 156 out_current_feed->reset( |
| 157 gdata::DocumentFeed::ExtractAndParse(*data).release()); |
157 } | 158 } |
158 | 159 |
159 } // namespace | 160 } // namespace |
160 | 161 |
161 LoadFeedParams::LoadFeedParams( | 162 LoadFeedParams::LoadFeedParams( |
162 ContentOrigin initial_origin, | 163 ContentOrigin initial_origin, |
163 const LoadDocumentFeedCallback& feed_load_callback) | 164 const LoadDocumentFeedCallback& feed_load_callback) |
164 : initial_origin(initial_origin), | 165 : initial_origin(initial_origin), |
165 start_changestamp(0), | 166 start_changestamp(0), |
166 root_feed_changestamp(0), | 167 root_feed_changestamp(0), |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 weak_ptr_factory_.GetWeakPtr(), | 274 weak_ptr_factory_.GetWeakPtr(), |
274 initial_origin, | 275 initial_origin, |
275 local_changestamp, | 276 local_changestamp, |
276 callback)); | 277 callback)); |
277 } | 278 } |
278 | 279 |
279 void GDataWapiFeedLoader::OnGetAccountMetadata( | 280 void GDataWapiFeedLoader::OnGetAccountMetadata( |
280 ContentOrigin initial_origin, | 281 ContentOrigin initial_origin, |
281 int64 local_changestamp, | 282 int64 local_changestamp, |
282 const FileOperationCallback& callback, | 283 const FileOperationCallback& callback, |
283 GDataErrorCode status, | 284 gdata::GDataErrorCode status, |
284 scoped_ptr<base::Value> feed_data) { | 285 scoped_ptr<base::Value> feed_data) { |
285 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 286 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
286 | 287 |
287 scoped_ptr<LoadFeedParams> params(new LoadFeedParams( | 288 scoped_ptr<LoadFeedParams> params(new LoadFeedParams( |
288 initial_origin, | 289 initial_origin, |
289 base::Bind(&GDataWapiFeedLoader::OnFeedFromServerLoaded, | 290 base::Bind(&GDataWapiFeedLoader::OnFeedFromServerLoaded, |
290 weak_ptr_factory_.GetWeakPtr()))); | 291 weak_ptr_factory_.GetWeakPtr()))); |
291 params->start_changestamp = local_changestamp + 1; | 292 params->start_changestamp = local_changestamp + 1; |
292 params->load_finished_callback = callback; | 293 params->load_finished_callback = callback; |
293 | 294 |
294 DriveFileError error = util::GDataToDriveFileError(status); | 295 DriveFileError error = util::GDataToDriveFileError(status); |
295 if (error != DRIVE_FILE_OK) { | 296 if (error != DRIVE_FILE_OK) { |
296 // Get changes starting from the next changestamp from what we have locally. | 297 // Get changes starting from the next changestamp from what we have locally. |
297 LoadFromServer(params.Pass()); | 298 LoadFromServer(params.Pass()); |
298 return; | 299 return; |
299 } | 300 } |
300 | 301 |
301 scoped_ptr<AccountMetadataFeed> account_metadata; | 302 scoped_ptr<gdata::AccountMetadataFeed> account_metadata; |
302 if (feed_data.get()) { | 303 if (feed_data.get()) { |
303 account_metadata = AccountMetadataFeed::CreateFrom(*feed_data); | 304 account_metadata = gdata::AccountMetadataFeed::CreateFrom(*feed_data); |
304 #ifndef NDEBUG | 305 #ifndef NDEBUG |
305 // Save account metadata feed for analysis. | 306 // Save account metadata feed for analysis. |
306 const FilePath path = | 307 const FilePath path = |
307 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_META).Append( | 308 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_META).Append( |
308 kAccountMetadataFile); | 309 kAccountMetadataFile); |
309 util::PostBlockingPoolSequencedTask( | 310 gdata::util::PostBlockingPoolSequencedTask( |
310 FROM_HERE, | 311 FROM_HERE, |
311 blocking_task_runner_, | 312 blocking_task_runner_, |
312 base::Bind(&SaveFeedOnBlockingPoolForDebugging, | 313 base::Bind(&SaveFeedOnBlockingPoolForDebugging, |
313 path, base::Passed(&feed_data))); | 314 path, base::Passed(&feed_data))); |
314 #endif | 315 #endif |
315 } | 316 } |
316 | 317 |
317 if (!account_metadata.get()) { | 318 if (!account_metadata.get()) { |
318 LoadFromServer(params.Pass()); | 319 LoadFromServer(params.Pass()); |
319 return; | 320 return; |
(...skipping 26 matching lines...) Expand all Loading... |
346 // Load changes from the server. | 347 // Load changes from the server. |
347 params->start_changestamp = local_changestamp > 0 ? local_changestamp + 1 : 0; | 348 params->start_changestamp = local_changestamp > 0 ? local_changestamp + 1 : 0; |
348 params->root_feed_changestamp = account_metadata->largest_changestamp(); | 349 params->root_feed_changestamp = account_metadata->largest_changestamp(); |
349 LoadFromServer(params.Pass()); | 350 LoadFromServer(params.Pass()); |
350 } | 351 } |
351 | 352 |
352 void GDataWapiFeedLoader::OnGetAboutResource( | 353 void GDataWapiFeedLoader::OnGetAboutResource( |
353 ContentOrigin initial_origin, | 354 ContentOrigin initial_origin, |
354 int64 local_changestamp, | 355 int64 local_changestamp, |
355 const FileOperationCallback& callback, | 356 const FileOperationCallback& callback, |
356 GDataErrorCode status, | 357 gdata::GDataErrorCode status, |
357 scoped_ptr<base::Value> feed_data) { | 358 scoped_ptr<base::Value> feed_data) { |
358 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
359 | 360 |
360 scoped_ptr<LoadFeedParams> params(new LoadFeedParams( | 361 scoped_ptr<LoadFeedParams> params(new LoadFeedParams( |
361 initial_origin, | 362 initial_origin, |
362 base::Bind(&GDataWapiFeedLoader::OnFeedFromServerLoaded, | 363 base::Bind(&GDataWapiFeedLoader::OnFeedFromServerLoaded, |
363 weak_ptr_factory_.GetWeakPtr()))); | 364 weak_ptr_factory_.GetWeakPtr()))); |
364 params->load_finished_callback = callback; | 365 params->load_finished_callback = callback; |
365 | 366 |
366 DriveFileError error = util::GDataToDriveFileError(status); | 367 DriveFileError error = util::GDataToDriveFileError(status); |
367 if (error != DRIVE_FILE_OK) { | 368 if (error != DRIVE_FILE_OK) { |
368 // Get changes starting from the next changestamp from what we have locally. | 369 // Get changes starting from the next changestamp from what we have locally. |
369 LoadFromServer(params.Pass()); | 370 LoadFromServer(params.Pass()); |
370 return; | 371 return; |
371 } | 372 } |
372 | 373 |
373 scoped_ptr<AboutResource> about_resource; | 374 scoped_ptr<gdata::AboutResource> about_resource; |
374 if (feed_data.get()) | 375 if (feed_data.get()) |
375 about_resource = AboutResource::CreateFrom(*feed_data); | 376 about_resource = gdata::AboutResource::CreateFrom(*feed_data); |
376 | 377 |
377 if (!about_resource.get()) { | 378 if (!about_resource.get()) { |
378 LoadFromServer(params.Pass()); | 379 LoadFromServer(params.Pass()); |
379 return; | 380 return; |
380 } | 381 } |
381 | 382 |
382 bool changes_detected = true; | 383 bool changes_detected = true; |
383 int64 largest_changestamp = about_resource->largest_change_id(); | 384 int64 largest_changestamp = about_resource->largest_change_id(); |
384 resource_metadata_->InitializeRootEntry(about_resource->root_folder_id()); | 385 resource_metadata_->InitializeRootEntry(about_resource->root_folder_id()); |
385 | 386 |
(...skipping 18 matching lines...) Expand all Loading... |
404 return; | 405 return; |
405 } | 406 } |
406 | 407 |
407 // Load changes from the server. | 408 // Load changes from the server. |
408 params->start_changestamp = local_changestamp > 0 ? local_changestamp + 1 : 0; | 409 params->start_changestamp = local_changestamp > 0 ? local_changestamp + 1 : 0; |
409 params->root_feed_changestamp = largest_changestamp; | 410 params->root_feed_changestamp = largest_changestamp; |
410 LoadFromServer(params.Pass()); | 411 LoadFromServer(params.Pass()); |
411 } | 412 } |
412 | 413 |
413 void GDataWapiFeedLoader::OnGetApplicationList( | 414 void GDataWapiFeedLoader::OnGetApplicationList( |
414 GDataErrorCode status, | 415 gdata::GDataErrorCode status, |
415 scoped_ptr<base::Value> json) { | 416 scoped_ptr<base::Value> json) { |
416 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 417 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
417 | 418 |
418 DriveFileError error = util::GDataToDriveFileError(status); | 419 DriveFileError error = util::GDataToDriveFileError(status); |
419 if (error != DRIVE_FILE_OK) | 420 if (error != DRIVE_FILE_OK) |
420 return; | 421 return; |
421 | 422 |
422 if (json.get()) { | 423 if (json.get()) { |
423 scoped_ptr<AppList> applist(AppList::CreateFrom(*json)); | 424 scoped_ptr<gdata::AppList> applist(gdata::AppList::CreateFrom(*json)); |
424 if (applist.get()) { | 425 if (applist.get()) { |
425 VLOG(1) << "applist get success"; | 426 VLOG(1) << "applist get success"; |
426 webapps_registry_->UpdateFromApplicationList(*applist.get()); | 427 webapps_registry_->UpdateFromApplicationList(*applist.get()); |
427 } | 428 } |
428 } | 429 } |
429 } | 430 } |
430 | 431 |
431 void GDataWapiFeedLoader::LoadFromServer(scoped_ptr<LoadFeedParams> params) { | 432 void GDataWapiFeedLoader::LoadFromServer(scoped_ptr<LoadFeedParams> params) { |
432 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 433 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
433 | 434 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 params->load_finished_callback.Run(DRIVE_FILE_OK); | 512 params->load_finished_callback.Run(DRIVE_FILE_OK); |
512 | 513 |
513 FOR_EACH_OBSERVER(GDataWapiFeedLoaderObserver, | 514 FOR_EACH_OBSERVER(GDataWapiFeedLoaderObserver, |
514 observers_, | 515 observers_, |
515 OnFeedFromServerLoaded()); | 516 OnFeedFromServerLoaded()); |
516 } | 517 } |
517 | 518 |
518 void GDataWapiFeedLoader::OnGetDocuments( | 519 void GDataWapiFeedLoader::OnGetDocuments( |
519 scoped_ptr<LoadFeedParams> params, | 520 scoped_ptr<LoadFeedParams> params, |
520 base::TimeTicks start_time, | 521 base::TimeTicks start_time, |
521 GDataErrorCode status, | 522 gdata::GDataErrorCode status, |
522 scoped_ptr<base::Value> data) { | 523 scoped_ptr<base::Value> data) { |
523 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 524 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
524 | 525 |
525 if (params->feed_list.empty()) { | 526 if (params->feed_list.empty()) { |
526 UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", | 527 UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", |
527 base::TimeTicks::Now() - start_time); | 528 base::TimeTicks::Now() - start_time); |
528 } | 529 } |
529 | 530 |
530 DriveFileError error = util::GDataToDriveFileError(status); | 531 DriveFileError error = util::GDataToDriveFileError(status); |
531 if (error == DRIVE_FILE_OK && | 532 if (error == DRIVE_FILE_OK && |
532 (!data.get() || data->GetType() != Value::TYPE_DICTIONARY)) { | 533 (!data.get() || data->GetType() != Value::TYPE_DICTIONARY)) { |
533 error = DRIVE_FILE_ERROR_FAILED; | 534 error = DRIVE_FILE_ERROR_FAILED; |
534 } | 535 } |
535 | 536 |
536 if (error != DRIVE_FILE_OK) { | 537 if (error != DRIVE_FILE_OK) { |
537 resource_metadata_->set_origin(params->initial_origin); | 538 resource_metadata_->set_origin(params->initial_origin); |
538 RunFeedLoadCallback(params.Pass(), error); | 539 RunFeedLoadCallback(params.Pass(), error); |
539 return; | 540 return; |
540 } | 541 } |
541 | 542 |
542 scoped_ptr<DocumentFeed>* current_feed = new scoped_ptr<DocumentFeed>; | 543 scoped_ptr<gdata::DocumentFeed>* current_feed = |
543 util::PostBlockingPoolSequencedTaskAndReply( | 544 new scoped_ptr<gdata::DocumentFeed>; |
| 545 gdata::util::PostBlockingPoolSequencedTaskAndReply( |
544 FROM_HERE, | 546 FROM_HERE, |
545 blocking_task_runner_, | 547 blocking_task_runner_, |
546 base::Bind(&ParseFeedOnBlockingPool, | 548 base::Bind(&ParseFeedOnBlockingPool, |
547 base::Passed(&data), | 549 base::Passed(&data), |
548 current_feed), | 550 current_feed), |
549 base::Bind(&GDataWapiFeedLoader::OnParseFeed, | 551 base::Bind(&GDataWapiFeedLoader::OnParseFeed, |
550 weak_ptr_factory_.GetWeakPtr(), | 552 weak_ptr_factory_.GetWeakPtr(), |
551 base::Passed(¶ms), | 553 base::Passed(¶ms), |
552 start_time, | 554 start_time, |
553 base::Owned(current_feed))); | 555 base::Owned(current_feed))); |
554 } | 556 } |
555 | 557 |
556 void GDataWapiFeedLoader::OnParseFeed(scoped_ptr<LoadFeedParams> params, | 558 void GDataWapiFeedLoader::OnParseFeed( |
557 base::TimeTicks start_time, | 559 scoped_ptr<LoadFeedParams> params, |
558 scoped_ptr<DocumentFeed>* current_feed) { | 560 base::TimeTicks start_time, |
| 561 scoped_ptr<gdata::DocumentFeed>* current_feed) { |
559 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 562 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
560 DCHECK(current_feed); | 563 DCHECK(current_feed); |
561 | 564 |
562 if (!current_feed->get()) { | 565 if (!current_feed->get()) { |
563 RunFeedLoadCallback(params.Pass(), DRIVE_FILE_ERROR_FAILED); | 566 RunFeedLoadCallback(params.Pass(), DRIVE_FILE_ERROR_FAILED); |
564 return; | 567 return; |
565 } | 568 } |
566 | 569 |
567 GURL next_feed_url; | 570 GURL next_feed_url; |
568 const bool has_next_feed_url = | 571 const bool has_next_feed_url = |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 UMA_HISTOGRAM_TIMES("Drive.EntireFeedLoadTime", | 624 UMA_HISTOGRAM_TIMES("Drive.EntireFeedLoadTime", |
622 base::TimeTicks::Now() - start_time); | 625 base::TimeTicks::Now() - start_time); |
623 | 626 |
624 // Run the callback so the client can process the retrieved feeds. | 627 // Run the callback so the client can process the retrieved feeds. |
625 RunFeedLoadCallback(params.Pass(), DRIVE_FILE_OK); | 628 RunFeedLoadCallback(params.Pass(), DRIVE_FILE_OK); |
626 } | 629 } |
627 | 630 |
628 void GDataWapiFeedLoader::OnGetChangelist( | 631 void GDataWapiFeedLoader::OnGetChangelist( |
629 scoped_ptr<LoadFeedParams> params, | 632 scoped_ptr<LoadFeedParams> params, |
630 base::TimeTicks start_time, | 633 base::TimeTicks start_time, |
631 GDataErrorCode status, | 634 gdata::GDataErrorCode status, |
632 scoped_ptr<base::Value> data) { | 635 scoped_ptr<base::Value> data) { |
633 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 636 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
634 | 637 |
635 if (params->feed_list.empty()) { | 638 if (params->feed_list.empty()) { |
636 UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", | 639 UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", |
637 base::TimeTicks::Now() - start_time); | 640 base::TimeTicks::Now() - start_time); |
638 } | 641 } |
639 | 642 |
640 DriveFileError error = util::GDataToDriveFileError(status); | 643 DriveFileError error = util::GDataToDriveFileError(status); |
641 if (error == DRIVE_FILE_OK && | 644 if (error == DRIVE_FILE_OK && |
642 (!data.get() || data->GetType() != Value::TYPE_DICTIONARY)) { | 645 (!data.get() || data->GetType() != Value::TYPE_DICTIONARY)) { |
643 error = DRIVE_FILE_ERROR_FAILED; | 646 error = DRIVE_FILE_ERROR_FAILED; |
644 } | 647 } |
645 | 648 |
646 if (error != DRIVE_FILE_OK) { | 649 if (error != DRIVE_FILE_OK) { |
647 resource_metadata_->set_origin(params->initial_origin); | 650 resource_metadata_->set_origin(params->initial_origin); |
648 RunFeedLoadCallback(params.Pass(), error); | 651 RunFeedLoadCallback(params.Pass(), error); |
649 return; | 652 return; |
650 } | 653 } |
651 | 654 |
652 GURL next_feed_url; | 655 GURL next_feed_url; |
653 scoped_ptr<ChangeList> current_feed(ChangeList::CreateFrom(*data)); | 656 scoped_ptr<gdata::ChangeList> current_feed( |
| 657 gdata::ChangeList::CreateFrom(*data)); |
654 if (!current_feed.get()) { | 658 if (!current_feed.get()) { |
655 RunFeedLoadCallback(params.Pass(), DRIVE_FILE_ERROR_FAILED); | 659 RunFeedLoadCallback(params.Pass(), DRIVE_FILE_ERROR_FAILED); |
656 return; | 660 return; |
657 } | 661 } |
658 const bool has_next_feed = !current_feed->next_page_token().empty(); | 662 const bool has_next_feed = !current_feed->next_page_token().empty(); |
659 | 663 |
660 #ifndef NDEBUG | 664 #ifndef NDEBUG |
661 // Save initial root feed for analysis. | 665 // Save initial root feed for analysis. |
662 std::string file_name = | 666 std::string file_name = |
663 base::StringPrintf("DEBUG_changelist_%" PRId64 ".json", | 667 base::StringPrintf("DEBUG_changelist_%" PRId64 ".json", |
664 params->start_changestamp); | 668 params->start_changestamp); |
665 util::PostBlockingPoolSequencedTask( | 669 gdata::util::PostBlockingPoolSequencedTask( |
666 FROM_HERE, | 670 FROM_HERE, |
667 blocking_task_runner_, | 671 blocking_task_runner_, |
668 base::Bind(&SaveFeedOnBlockingPoolForDebugging, | 672 base::Bind(&SaveFeedOnBlockingPoolForDebugging, |
669 cache_->GetCacheDirectoryPath( | 673 cache_->GetCacheDirectoryPath( |
670 DriveCache::CACHE_TYPE_META).Append(file_name), | 674 DriveCache::CACHE_TYPE_META).Append(file_name), |
671 base::Passed(&data))); | 675 base::Passed(&data))); |
672 #endif | 676 #endif |
673 | 677 |
674 // Add the current feed to the list of collected feeds for this directory. | 678 // Add the current feed to the list of collected feeds for this directory. |
675 scoped_ptr<DocumentFeed> feed = | 679 scoped_ptr<gdata::DocumentFeed> feed = |
676 DocumentFeed::CreateFromChangeList(*current_feed); | 680 gdata::DocumentFeed::CreateFromChangeList(*current_feed); |
677 params->feed_list.push_back(feed.release()); | 681 params->feed_list.push_back(feed.release()); |
678 | 682 |
679 // Compute and notify the number of entries fetched so far. | 683 // Compute and notify the number of entries fetched so far. |
680 int num_accumulated_entries = 0; | 684 int num_accumulated_entries = 0; |
681 for (size_t i = 0; i < params->feed_list.size(); ++i) | 685 for (size_t i = 0; i < params->feed_list.size(); ++i) |
682 num_accumulated_entries += params->feed_list[i]->entries().size(); | 686 num_accumulated_entries += params->feed_list[i]->entries().size(); |
683 | 687 |
684 // Check if we need to collect more data to complete the directory list. | 688 // Check if we need to collect more data to complete the directory list. |
685 if (has_next_feed) { | 689 if (has_next_feed) { |
686 // Post an UI update event to make the UI smoother. | 690 // Post an UI update event to make the UI smoother. |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
869 if (UseLevelDB()) { | 873 if (UseLevelDB()) { |
870 resource_metadata_->SaveToDB(); | 874 resource_metadata_->SaveToDB(); |
871 } else { | 875 } else { |
872 const FilePath path = | 876 const FilePath path = |
873 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_META).Append( | 877 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_META).Append( |
874 kFilesystemProtoFile); | 878 kFilesystemProtoFile); |
875 scoped_ptr<std::string> serialized_proto(new std::string()); | 879 scoped_ptr<std::string> serialized_proto(new std::string()); |
876 resource_metadata_->SerializeToString(serialized_proto.get()); | 880 resource_metadata_->SerializeToString(serialized_proto.get()); |
877 resource_metadata_->set_last_serialized(base::Time::Now()); | 881 resource_metadata_->set_last_serialized(base::Time::Now()); |
878 resource_metadata_->set_serialized_size(serialized_proto->size()); | 882 resource_metadata_->set_serialized_size(serialized_proto->size()); |
879 util::PostBlockingPoolSequencedTask( | 883 gdata::util::PostBlockingPoolSequencedTask( |
880 FROM_HERE, | 884 FROM_HERE, |
881 blocking_task_runner_, | 885 blocking_task_runner_, |
882 base::Bind(&SaveProtoOnBlockingPool, path, | 886 base::Bind(&SaveProtoOnBlockingPool, path, |
883 base::Passed(serialized_proto.Pass()))); | 887 base::Passed(serialized_proto.Pass()))); |
884 } | 888 } |
885 } | 889 } |
886 | 890 |
887 DriveFileError GDataWapiFeedLoader::UpdateFromFeed( | 891 DriveFileError GDataWapiFeedLoader::UpdateFromFeed( |
888 const ScopedVector<DocumentFeed>& feed_list, | 892 const ScopedVector<gdata::DocumentFeed>& feed_list, |
889 int64 start_changestamp, | 893 int64 start_changestamp, |
890 int64 root_feed_changestamp) { | 894 int64 root_feed_changestamp) { |
891 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 895 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
892 DVLOG(1) << "Updating directory with a feed"; | 896 DVLOG(1) << "Updating directory with a feed"; |
893 | 897 |
894 std::set<FilePath> changed_dirs; | 898 std::set<FilePath> changed_dirs; |
895 | 899 |
896 GDataWapiFeedProcessor feed_processor(resource_metadata_); | 900 GDataWapiFeedProcessor feed_processor(resource_metadata_); |
897 const DriveFileError error = feed_processor.ApplyFeeds( | 901 const DriveFileError error = feed_processor.ApplyFeeds( |
898 feed_list, | 902 feed_list, |
899 start_changestamp, | 903 start_changestamp, |
900 root_feed_changestamp, | 904 root_feed_changestamp, |
901 &changed_dirs); | 905 &changed_dirs); |
902 | 906 |
903 // Don't send directory content change notification while performing | 907 // Don't send directory content change notification while performing |
904 // the initial content retrieval. | 908 // the initial content retrieval. |
905 const bool should_notify_directory_changed = (start_changestamp != 0); | 909 const bool should_notify_directory_changed = (start_changestamp != 0); |
906 if (should_notify_directory_changed) { | 910 if (should_notify_directory_changed) { |
907 for (std::set<FilePath>::iterator dir_iter = changed_dirs.begin(); | 911 for (std::set<FilePath>::iterator dir_iter = changed_dirs.begin(); |
908 dir_iter != changed_dirs.end(); ++dir_iter) { | 912 dir_iter != changed_dirs.end(); ++dir_iter) { |
909 FOR_EACH_OBSERVER(GDataWapiFeedLoaderObserver, observers_, | 913 FOR_EACH_OBSERVER(GDataWapiFeedLoaderObserver, observers_, |
910 OnDirectoryChanged(*dir_iter)); | 914 OnDirectoryChanged(*dir_iter)); |
911 } | 915 } |
912 } | 916 } |
913 | 917 |
914 return error; | 918 return error; |
915 } | 919 } |
916 | 920 |
917 } // namespace gdata | 921 } // namespace drive |
OLD | NEW |