| 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/change_list_processor.h" | 5 #include "chrome/browser/chromeos/drive/change_list_processor.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "chrome/browser/chromeos/drive/drive.pb.h" | 10 #include "chrome/browser/chromeos/drive/drive.pb.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 } else if (about_resource.get()) { | 105 } else if (about_resource.get()) { |
| 106 largest_changestamp_ = about_resource->largest_change_id(); | 106 largest_changestamp_ = about_resource->largest_change_id(); |
| 107 | 107 |
| 108 DVLOG(1) << "Root folder ID is " << about_resource->root_folder_id(); | 108 DVLOG(1) << "Root folder ID is " << about_resource->root_folder_id(); |
| 109 DCHECK(!about_resource->root_folder_id().empty()); | 109 DCHECK(!about_resource->root_folder_id().empty()); |
| 110 } else { | 110 } else { |
| 111 // A full update without AboutResouce will have no effective changestamp. | 111 // A full update without AboutResouce will have no effective changestamp. |
| 112 NOTREACHED(); | 112 NOTREACHED(); |
| 113 } | 113 } |
| 114 | 114 |
| 115 // TODO(haruki): Add pseudo tree structure for "drive"/root" and "drive/other" | |
| 116 // when we start using those namespaces. The root folder ID is necessary for | |
| 117 // full feed update. | |
| 118 ApplyEntryProtoMap(is_delta_feed); | 115 ApplyEntryProtoMap(is_delta_feed); |
| 119 | 116 |
| 120 // Shouldn't record histograms when processing delta feeds. | 117 // Shouldn't record histograms when processing delta feeds. |
| 121 if (!is_delta_feed) | 118 if (!is_delta_feed) |
| 122 uma_stats.UpdateFileCountUmaHistograms(); | 119 uma_stats.UpdateFileCountUmaHistograms(); |
| 123 } | 120 } |
| 124 | 121 |
| 125 void ChangeListProcessor::ApplyEntryProtoMap(bool is_delta_feed) { | 122 void ChangeListProcessor::ApplyEntryProtoMap(bool is_delta_feed) { |
| 126 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 123 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 127 | 124 |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 // Iterate over |entries| with pop_back() to avoid redundant memory usage, | 374 // Iterate over |entries| with pop_back() to avoid redundant memory usage, |
| 378 // there is no need to have duplicated copies of DriveEntryProto in | 375 // there is no need to have duplicated copies of DriveEntryProto in |
| 379 // |entries| and |entry_proto_map_| at the same time. | 376 // |entries| and |entry_proto_map_| at the same time. |
| 380 std::vector<DriveEntryProto>* entries = change_list->mutable_entries(); | 377 std::vector<DriveEntryProto>* entries = change_list->mutable_entries(); |
| 381 for (; !entries->empty(); entries->pop_back()) { | 378 for (; !entries->empty(); entries->pop_back()) { |
| 382 const DriveEntryProto& entry_proto = entries->back(); | 379 const DriveEntryProto& entry_proto = entries->back(); |
| 383 // Some document entries don't map into files (i.e. sites). | 380 // Some document entries don't map into files (i.e. sites). |
| 384 if (entry_proto.resource_id().empty()) | 381 if (entry_proto.resource_id().empty()) |
| 385 continue; | 382 continue; |
| 386 | 383 |
| 387 // TODO(haruki): Apply mapping from an empty parent to special dummy | |
| 388 // directory here or in ConvertResourceEntryToDriveEntryProto. See | |
| 389 // http://crbug.com/174233 http://crbug.com/171207. Until we implement it, | |
| 390 // ChangeListProcessor ignores such "no parent" entries. | |
| 391 // Please note that this will cause a temporal issue when | |
| 392 // - The user unselect all the parent using drive.google.com UI. | |
| 393 // ChangeListProcessor just ignores the incoming changes and keeps stale | |
| 394 // metadata. We need to work on this ASAP to reduce confusion. | |
| 395 if (entry_proto.parent_resource_id().empty()) { | |
| 396 continue; | |
| 397 } | |
| 398 | |
| 399 // Count the number of files. | 384 // Count the number of files. |
| 400 if (uma_stats && !entry_proto.file_info().is_directory()) { | 385 if (uma_stats && !entry_proto.file_info().is_directory()) { |
| 401 uma_stats->IncrementNumFiles( | 386 uma_stats->IncrementNumFiles( |
| 402 entry_proto.file_specific_info().is_hosted_document()); | 387 entry_proto.file_specific_info().is_hosted_document()); |
| 403 } | 388 } |
| 389 // TODO(haruki): Metric for the num of the entries in "other" directory. |
| 404 | 390 |
| 405 std::pair<DriveEntryProtoMap::iterator, bool> ret = entry_proto_map_. | 391 std::pair<DriveEntryProtoMap::iterator, bool> ret = entry_proto_map_. |
| 406 insert(std::make_pair(entry_proto.resource_id(), entry_proto)); | 392 insert(std::make_pair(entry_proto.resource_id(), entry_proto)); |
| 407 DCHECK(ret.second); | 393 DCHECK(ret.second); |
| 408 if (!ret.second) | 394 if (!ret.second) |
| 409 LOG(WARNING) << "Found duplicate file " << entry_proto.base_name(); | 395 LOG(WARNING) << "Found duplicate file " << entry_proto.base_name(); |
| 410 } | 396 } |
| 411 } | 397 } |
| 412 } | 398 } |
| 413 | 399 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 477 | 463 |
| 478 entry_proto_map_.clear(); | 464 entry_proto_map_.clear(); |
| 479 changed_dirs_.clear(); | 465 changed_dirs_.clear(); |
| 480 root_upload_url_ = GURL(); | 466 root_upload_url_ = GURL(); |
| 481 largest_changestamp_ = 0; | 467 largest_changestamp_ = 0; |
| 482 on_complete_callback_.Reset(); | 468 on_complete_callback_.Reset(); |
| 483 } | 469 } |
| 484 | 470 |
| 485 } // namespace drive | 471 } // namespace drive |
| OLD | NEW |