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

Unified Diff: components/history/core/browser/typed_url_sync_bridge.h

Issue 2961723003: [USS] Implement ApplySyncChanges and OnURLVisited/Modified/Deleted. (Closed)
Patch Set: handle nullptr case in bridge Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: components/history/core/browser/typed_url_sync_bridge.h
diff --git a/components/history/core/browser/typed_url_sync_bridge.h b/components/history/core/browser/typed_url_sync_bridge.h
index 13a8bbd9bc542c06a0f4c68fa0f0dca6485f5844..01f25ee19b32a5f38cfec8cd67178e20796f0e6b 100644
--- a/components/history/core/browser/typed_url_sync_bridge.h
+++ b/components/history/core/browser/typed_url_sync_bridge.h
@@ -40,17 +40,17 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
bool SupportsGetStorageKey() const override;
// history::HistoryBackendObserver:
- void OnURLVisited(history::HistoryBackend* history_backend,
+ void OnURLVisited(HistoryBackend* history_backend,
ui::PageTransition transition,
- const history::URLRow& row,
- const history::RedirectList& redirects,
+ const URLRow& row,
+ const RedirectList& redirects,
base::Time visit_time) override;
- void OnURLsModified(history::HistoryBackend* history_backend,
- const history::URLRows& changed_urls) override;
- void OnURLsDeleted(history::HistoryBackend* history_backend,
+ void OnURLsModified(HistoryBackend* history_backend,
+ const URLRows& changed_urls) override;
+ void OnURLsDeleted(HistoryBackend* history_backend,
bool all_history,
bool expired,
- const history::URLRows& deleted_rows,
+ const URLRows& deleted_rows,
const std::set<GURL>& favicon_urls) override;
// Must be called after creation and before any operations.
@@ -97,15 +97,25 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
// should be written to the history DB for this URL. Deletions are not
// written to the DB - each client is left to age out visits on their own.
static MergeResult MergeUrls(const sync_pb::TypedUrlSpecifics& typed_url,
- const history::URLRow& url,
- history::VisitVector* visits,
- history::URLRow* new_url,
- std::vector<history::VisitInfo>* new_visits);
+ const URLRow& url,
+ VisitVector* visits,
+ URLRow* new_url,
+ std::vector<VisitInfo>* new_visits);
+
+ // Diffs the set of visits between the history DB and the sync DB, using the
+ // sync DB as the canonical copy. Result is the set of |new_visits| and
+ // |removed_visits| that can be applied to the history DB to make it match
+ // the sync DB version. |removed_visits| can be null if the caller does not
+ // care about which visits to remove.
+ static void DiffVisits(const VisitVector& history_visits,
+ const sync_pb::TypedUrlSpecifics& sync_specifics,
+ std::vector<VisitInfo>* new_visits,
+ VisitVector* removed_visits);
// Fills |new_url| with formatted data from |typed_url|.
static void UpdateURLRowFromTypedUrlSpecifics(
const sync_pb::TypedUrlSpecifics& typed_url,
- history::URLRow* new_url);
+ URLRow* new_url);
// Synchronously load sync metadata from the TypedURLSyncMetadataDatabase and
// pass it to the processor so that it can start tracking changes.
@@ -118,20 +128,38 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
// Compares |server_typed_url| from the server against local history to decide
// how to merge any existing data, and updates appropriate data containers to
// write to server and backend.
- void UpdateUrlFromServer(const sync_pb::TypedUrlSpecifics& server_typed_url,
- TypedURLMap* local_typed_urls,
- URLVisitVectorMap* visit_vectors,
- history::URLRows* new_synced_urls,
- TypedURLVisitVector* new_synced_visits,
- history::URLRows* updated_synced_urls);
+ void MergeURLWithSync(const sync_pb::TypedUrlSpecifics& server_typed_url,
+ TypedURLMap* local_typed_urls,
+ URLVisitVectorMap* visit_vectors,
+ URLRows* new_synced_urls,
+ TypedURLVisitVector* new_synced_visits,
+ URLRows* updated_synced_urls);
+
+ // Given a typed URL in the sync DB, looks for an existing entry in the
+ // local history DB and generates a list of visits to add to the
+ // history DB to bring it up to date (avoiding duplicates).
+ // Updates the passed |visits_to_add| and |visits_to_remove| vectors with the
+ // visits to add to/remove from the history DB, and adds a new entry to either
+ // |updated_urls| or |new_urls| depending on whether the URL already existed
+ // in the history DB.
+ void UpdateFromSync(const sync_pb::TypedUrlSpecifics& typed_url,
+ TypedURLVisitVector* visits_to_add,
+ VisitVector* visits_to_remove,
+ URLRows* updated_urls,
+ URLRows* new_urls);
+
+ // Utility routine that either updates an existing sync node or creates a
+ // new one for the passed |typed_url| if one does not already exist.
+ void UpdateSyncFromLocal(URLRow typed_url,
+ syncer::MetadataChangeList* metadata_change_list);
// Writes new typed url data from sync server to history backend.
base::Optional<syncer::ModelError> WriteToHistoryBackend(
- const history::URLRows* new_urls,
- const history::URLRows* updated_urls,
+ const URLRows* new_urls,
+ const URLRows* updated_urls,
const std::vector<GURL>* deleted_urls,
const TypedURLVisitVector* new_visits,
- const history::VisitVector* deleted_visits);
+ const VisitVector* deleted_visits);
// Given a TypedUrlSpecifics object, removes all visits that are older than
// the current expiration time. Note that this can result in having no visits
@@ -145,7 +173,13 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
// Helper function that determines if we should ignore a URL for the purposes
// of sync, based on the visits the URL had.
- bool ShouldIgnoreVisits(const history::VisitVector& visits);
+ bool ShouldIgnoreVisits(const VisitVector& visits);
+
+ // Returns true if the caller should sync as a result of the passed visit
+ // notification. We use this to throttle the number of sync changes we send
+ // to the server so we don't hit the server for every
+ // single typed URL visit.
+ bool ShouldSyncVisit(int typed_count, ui::PageTransition transition);
// Fetches visits from the history DB corresponding to the passed URL. This
// function compensates for the fact that the history DB has rather poor data
@@ -173,6 +207,12 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
// Get URLID from HistoryBackend, and return URLID as storage key.
std::string GetStorageKeyInternal(const std::string& url);
+ // Send local typed url to processor().
+ void SendTypedURLToProcessor(
+ const URLRow& row,
+ const VisitVector& visits,
+ syncer::MetadataChangeList* metadata_change_list);
+
// A non-owning pointer to the backend, which we're syncing local changes from
// and sync changes to.
HistoryBackend* const history_backend_;
@@ -192,7 +232,7 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge,
// Tracks observed history backend, for receiving updates from history
// backend.
- ScopedObserver<history::HistoryBackend, history::HistoryBackendObserver>
+ ScopedObserver<HistoryBackend, HistoryBackendObserver>
history_backend_observer_;
DISALLOW_COPY_AND_ASSIGN(TypedURLSyncBridge);
« no previous file with comments | « components/history/core/browser/history_backend.cc ('k') | components/history/core/browser/typed_url_sync_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698