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/glue/favicon_cache.h" | 5 #include "chrome/browser/sync/glue/favicon_cache.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
sdefresne
2014/12/04 17:21:13
Again, unused #include ;-)
nshaik
2014/12/07 09:34:50
Done.
| |
10 #include "chrome/browser/favicon/favicon_service.h" | 10 #include "chrome/browser/favicon/favicon_service.h" |
11 #include "chrome/browser/favicon/favicon_service_factory.h" | 11 #include "chrome/browser/favicon/favicon_service_factory.h" |
12 #include "chrome/browser/history/history_notifications.h" | 12 #include "chrome/browser/history/history_notifications.h" |
13 #include "chrome/browser/history/history_service.h" | |
14 #include "chrome/browser/history/history_service_factory.h" | |
13 #include "components/history/core/browser/history_types.h" | 15 #include "components/history/core/browser/history_types.h" |
14 #include "content/public/browser/notification_details.h" | |
15 #include "content/public/browser/notification_source.h" | |
16 #include "sync/api/time.h" | 16 #include "sync/api/time.h" |
17 #include "sync/protocol/favicon_image_specifics.pb.h" | 17 #include "sync/protocol/favicon_image_specifics.pb.h" |
18 #include "sync/protocol/favicon_tracking_specifics.pb.h" | 18 #include "sync/protocol/favicon_tracking_specifics.pb.h" |
19 #include "sync/protocol/sync.pb.h" | 19 #include "sync/protocol/sync.pb.h" |
20 #include "ui/gfx/favicon_size.h" | 20 #include "ui/gfx/favicon_size.h" |
21 | 21 |
22 namespace browser_sync { | 22 namespace browser_sync { |
23 | 23 |
24 // Synced favicon storage and tracking. | 24 // Synced favicon storage and tracking. |
25 // Note: we don't use the favicon service for storing these because these | 25 // Note: we don't use the favicon service for storing these because these |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
219 return FaviconInfoHasTracking(favicon_info); | 219 return FaviconInfoHasTracking(favicon_info); |
220 NOTREACHED(); | 220 NOTREACHED(); |
221 return false; | 221 return false; |
222 } | 222 } |
223 | 223 |
224 } // namespace | 224 } // namespace |
225 | 225 |
226 FaviconCache::FaviconCache(Profile* profile, int max_sync_favicon_limit) | 226 FaviconCache::FaviconCache(Profile* profile, int max_sync_favicon_limit) |
227 : profile_(profile), | 227 : profile_(profile), |
228 max_sync_favicon_limit_(max_sync_favicon_limit), | 228 max_sync_favicon_limit_(max_sync_favicon_limit), |
229 history_service_observer_(this), | |
229 weak_ptr_factory_(this) { | 230 weak_ptr_factory_(this) { |
230 notification_registrar_.Add(this, | 231 HistoryService* hs = NULL; |
231 chrome::NOTIFICATION_HISTORY_URLS_DELETED, | 232 if (profile_) |
232 content::Source<Profile>(profile_)); | 233 hs = HistoryServiceFactory::GetForProfile(profile_, |
234 Profile::EXPLICIT_ACCESS); | |
235 if (hs) | |
236 history_service_observer_.Add(hs); | |
233 DVLOG(1) << "Setting favicon limit to " << max_sync_favicon_limit; | 237 DVLOG(1) << "Setting favicon limit to " << max_sync_favicon_limit; |
234 } | 238 } |
235 | 239 |
236 FaviconCache::~FaviconCache() {} | 240 FaviconCache::~FaviconCache() {} |
237 | 241 |
238 syncer::SyncMergeResult FaviconCache::MergeDataAndStartSyncing( | 242 syncer::SyncMergeResult FaviconCache::MergeDataAndStartSyncing( |
239 syncer::ModelType type, | 243 syncer::ModelType type, |
240 const syncer::SyncDataList& initial_sync_data, | 244 const syncer::SyncDataList& initial_sync_data, |
241 scoped_ptr<syncer::SyncChangeProcessor> sync_processor, | 245 scoped_ptr<syncer::SyncChangeProcessor> sync_processor, |
242 scoped_ptr<syncer::SyncErrorFactory> error_handler) { | 246 scoped_ptr<syncer::SyncErrorFactory> error_handler) { |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
564 UpdateFaviconVisitTime(icon_url, | 568 UpdateFaviconVisitTime(icon_url, |
565 syncer::ProtoTimeToTime(visit_time_ms)); | 569 syncer::ProtoTimeToTime(visit_time_ms)); |
566 | 570 |
567 UpdateSyncState(icon_url, | 571 UpdateSyncState(icon_url, |
568 syncer::SyncChange::ACTION_ADD, | 572 syncer::SyncChange::ACTION_ADD, |
569 (added_tracking ? | 573 (added_tracking ? |
570 syncer::SyncChange::ACTION_ADD : | 574 syncer::SyncChange::ACTION_ADD : |
571 syncer::SyncChange::ACTION_UPDATE)); | 575 syncer::SyncChange::ACTION_UPDATE)); |
572 } | 576 } |
573 | 577 |
574 void FaviconCache::Observe(int type, | |
575 const content::NotificationSource& source, | |
576 const content::NotificationDetails& details) { | |
577 DCHECK_EQ(type, chrome::NOTIFICATION_HISTORY_URLS_DELETED); | |
578 | |
579 content::Details<history::URLsDeletedDetails> deleted_details(details); | |
580 | |
581 // We only care about actual user (or sync) deletions. | |
582 if (deleted_details->expired) | |
583 return; | |
584 | |
585 if (!deleted_details->all_history) { | |
586 DeleteSyncedFavicons(deleted_details->favicon_urls); | |
587 return; | |
588 } | |
589 | |
590 // All history was cleared: just delete all favicons. | |
591 DVLOG(1) << "History clear detected, deleting all synced favicons."; | |
592 syncer::SyncChangeList image_deletions, tracking_deletions; | |
593 while (!synced_favicons_.empty()) { | |
594 DeleteSyncedFavicon(synced_favicons_.begin(), | |
595 &image_deletions, | |
596 &tracking_deletions); | |
597 } | |
598 | |
599 if (favicon_images_sync_processor_.get()) { | |
600 favicon_images_sync_processor_->ProcessSyncChanges(FROM_HERE, | |
601 image_deletions); | |
602 } | |
603 if (favicon_tracking_sync_processor_.get()) { | |
604 favicon_tracking_sync_processor_->ProcessSyncChanges(FROM_HERE, | |
605 tracking_deletions); | |
606 } | |
607 } | |
608 | |
609 bool FaviconCache::FaviconRecencyFunctor::operator()( | 578 bool FaviconCache::FaviconRecencyFunctor::operator()( |
610 const linked_ptr<SyncedFaviconInfo>& lhs, | 579 const linked_ptr<SyncedFaviconInfo>& lhs, |
611 const linked_ptr<SyncedFaviconInfo>& rhs) const { | 580 const linked_ptr<SyncedFaviconInfo>& rhs) const { |
612 // TODO(zea): incorporate bookmarked status here once we care about it. | 581 // TODO(zea): incorporate bookmarked status here once we care about it. |
613 if (lhs->last_visit_time < rhs->last_visit_time) | 582 if (lhs->last_visit_time < rhs->last_visit_time) |
614 return true; | 583 return true; |
615 else if (lhs->last_visit_time == rhs->last_visit_time) | 584 else if (lhs->last_visit_time == rhs->last_visit_time) |
616 return lhs->favicon_url.spec() < rhs->favicon_url.spec(); | 585 return lhs->favicon_url.spec() < rhs->favicon_url.spec(); |
617 return false; | 586 return false; |
618 } | 587 } |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1058 } | 1027 } |
1059 | 1028 |
1060 size_t FaviconCache::NumFaviconsForTest() const { | 1029 size_t FaviconCache::NumFaviconsForTest() const { |
1061 return synced_favicons_.size(); | 1030 return synced_favicons_.size(); |
1062 } | 1031 } |
1063 | 1032 |
1064 size_t FaviconCache::NumTasksForTest() const { | 1033 size_t FaviconCache::NumTasksForTest() const { |
1065 return page_task_map_.size(); | 1034 return page_task_map_.size(); |
1066 } | 1035 } |
1067 | 1036 |
1037 void FaviconCache::OnURLsDeleted( | |
1038 HistoryService* history_service, | |
1039 const history::URLsDeletedDetails& deleted_details) { | |
1040 // We only care about actual user (or sync) deletions. | |
1041 if (deleted_details.expired) | |
1042 return; | |
1043 | |
1044 if (!deleted_details.all_history) { | |
1045 DeleteSyncedFavicons(deleted_details.favicon_urls); | |
1046 return; | |
1047 } | |
1048 | |
1049 // All history was cleared: just delete all favicons. | |
1050 DVLOG(1) << "History clear detected, deleting all synced favicons."; | |
1051 syncer::SyncChangeList image_deletions, tracking_deletions; | |
1052 while (!synced_favicons_.empty()) { | |
1053 DeleteSyncedFavicon(synced_favicons_.begin(), &image_deletions, | |
1054 &tracking_deletions); | |
1055 } | |
1056 | |
1057 if (favicon_images_sync_processor_.get()) { | |
1058 favicon_images_sync_processor_->ProcessSyncChanges(FROM_HERE, | |
1059 image_deletions); | |
1060 } | |
1061 if (favicon_tracking_sync_processor_.get()) { | |
1062 favicon_tracking_sync_processor_->ProcessSyncChanges(FROM_HERE, | |
1063 tracking_deletions); | |
1064 } | |
1065 } | |
1066 | |
1068 } // namespace browser_sync | 1067 } // namespace browser_sync |
OLD | NEW |