| Index: chrome/browser/sync/glue/typed_url_change_processor.cc
|
| diff --git a/chrome/browser/sync/glue/typed_url_change_processor.cc b/chrome/browser/sync/glue/typed_url_change_processor.cc
|
| index 90804d41f8dfd5ff2c141b5384bd84519594ccb2..51539c91586026de8c63016611ea3c485e3b110a 100644
|
| --- a/chrome/browser/sync/glue/typed_url_change_processor.cc
|
| +++ b/chrome/browser/sync/glue/typed_url_change_processor.cc
|
| @@ -58,6 +58,8 @@ TypedUrlChangeProcessor::TypedUrlChangeProcessor(
|
|
|
| TypedUrlChangeProcessor::~TypedUrlChangeProcessor() {
|
| DCHECK(backend_loop_ == base::MessageLoop::current());
|
| + DCHECK(history_backend_);
|
| + history_backend_->RemoveObserver(this);
|
| }
|
|
|
| void TypedUrlChangeProcessor::Observe(
|
| @@ -77,10 +79,27 @@ void TypedUrlChangeProcessor::Observe(
|
| } else if (type == chrome::NOTIFICATION_HISTORY_URLS_DELETED) {
|
| HandleURLsDeleted(
|
| content::Details<history::URLsDeletedDetails>(details).ptr());
|
| - } else {
|
| - DCHECK_EQ(chrome::NOTIFICATION_HISTORY_URL_VISITED, type);
|
| - HandleURLsVisited(
|
| - content::Details<history::URLVisitedDetails>(details).ptr());
|
| + }
|
| + UMA_HISTOGRAM_PERCENTAGE("Sync.TypedUrlChangeProcessorErrors",
|
| + model_associator_->GetErrorPercentage());
|
| +}
|
| +
|
| +void TypedUrlChangeProcessor::OnURLVisited(
|
| + history::HistoryBackend* history_backend,
|
| + ui::PageTransition transition,
|
| + const history::URLRow& row,
|
| + const history::RedirectList& redirects,
|
| + base::Time visit_time) {
|
| + DCHECK(backend_loop_ == base::MessageLoop::current());
|
| +
|
| + base::AutoLock al(disconnect_lock_);
|
| + if (disconnected_)
|
| + return;
|
| +
|
| + DVLOG(1) << "Observed typed_url change.";
|
| + if (ShouldSyncVisit(row.typed_count(), transition)) {
|
| + syncer::WriteTransaction trans(FROM_HERE, share_handle());
|
| + CreateOrUpdateSyncNode(row, &trans);
|
| }
|
| UMA_HISTOGRAM_PERCENTAGE("Sync.TypedUrlChangeProcessorErrors",
|
| model_associator_->GetErrorPercentage());
|
| @@ -195,21 +214,8 @@ void TypedUrlChangeProcessor::HandleURLsDeleted(
|
| }
|
| }
|
|
|
| -void TypedUrlChangeProcessor::HandleURLsVisited(
|
| - history::URLVisitedDetails* details) {
|
| - if (!ShouldSyncVisit(details))
|
| - return;
|
| -
|
| - syncer::WriteTransaction trans(FROM_HERE, share_handle());
|
| - CreateOrUpdateSyncNode(details->row, &trans);
|
| -}
|
| -
|
| -bool TypedUrlChangeProcessor::ShouldSyncVisit(
|
| - history::URLVisitedDetails* details) {
|
| - int typed_count = details->row.typed_count();
|
| - ui::PageTransition transition =
|
| - ui::PageTransitionStripQualifier(details->transition);
|
| -
|
| +bool TypedUrlChangeProcessor::ShouldSyncVisit(int typed_count,
|
| + ui::PageTransition transition) {
|
| // Just use an ad-hoc criteria to determine whether to ignore this
|
| // notification. For most users, the distribution of visits is roughly a bell
|
| // curve with a long tail - there are lots of URLs with < 5 visits so we want
|
| @@ -217,7 +223,7 @@ bool TypedUrlChangeProcessor::ShouldSyncVisit(
|
| // suggestions. But there are relatively few URLs with > 10 visits, and those
|
| // tend to be more broadly distributed such that there's no need to sync up
|
| // every visit to preserve their relative ordering.
|
| - return (transition == ui::PAGE_TRANSITION_TYPED &&
|
| + return (ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_TYPED) &&
|
| typed_count > 0 &&
|
| (typed_count < kTypedUrlVisitThrottleThreshold ||
|
| (typed_count % kTypedUrlVisitThrottleMultiple) == 0));
|
| @@ -335,6 +341,7 @@ void TypedUrlChangeProcessor::StartImpl() {
|
|
|
| void TypedUrlChangeProcessor::StartObserving() {
|
| DCHECK(backend_loop_ == base::MessageLoop::current());
|
| + DCHECK(history_backend_);
|
| DCHECK(profile_);
|
| notification_registrar_.Add(
|
| this, chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
|
| @@ -342,13 +349,12 @@ void TypedUrlChangeProcessor::StartObserving() {
|
| notification_registrar_.Add(
|
| this, chrome::NOTIFICATION_HISTORY_URLS_DELETED,
|
| content::Source<Profile>(profile_));
|
| - notification_registrar_.Add(
|
| - this, chrome::NOTIFICATION_HISTORY_URL_VISITED,
|
| - content::Source<Profile>(profile_));
|
| + history_backend_->AddObserver(this);
|
| }
|
|
|
| void TypedUrlChangeProcessor::StopObserving() {
|
| DCHECK(backend_loop_ == base::MessageLoop::current());
|
| + DCHECK(history_backend_);
|
| DCHECK(profile_);
|
| notification_registrar_.Remove(
|
| this, chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
|
| @@ -356,9 +362,7 @@ void TypedUrlChangeProcessor::StopObserving() {
|
| notification_registrar_.Remove(
|
| this, chrome::NOTIFICATION_HISTORY_URLS_DELETED,
|
| content::Source<Profile>(profile_));
|
| - notification_registrar_.Remove(
|
| - this, chrome::NOTIFICATION_HISTORY_URL_VISITED,
|
| - content::Source<Profile>(profile_));
|
| + history_backend_->RemoveObserver(this);
|
| }
|
|
|
| } // namespace browser_sync
|
|
|