Chromium Code Reviews| 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 59eb0756af96e44b24388505a3ba8d080c8257ad..c50f8a67d65b24577631edcd45e715d30cb819a6 100644 |
| --- a/components/history/core/browser/typed_url_sync_bridge.h |
| +++ b/components/history/core/browser/typed_url_sync_bridge.h |
| @@ -5,15 +5,13 @@ |
| #ifndef COMPONENTS_HISTORY_CORE_BROWSER_TYPED_URL_SYNC_BRIDGE_H_ |
| #define COMPONENTS_HISTORY_CORE_BROWSER_TYPED_URL_SYNC_BRIDGE_H_ |
| +#include "base/scoped_observer.h" |
| #include "components/history/core/browser/history_backend_observer.h" |
| +#include "components/history/core/browser/typed_url_sync_metadata_database.h" |
| #include "components/sync/model/metadata_change_list.h" |
| #include "components/sync/model/model_type_sync_bridge.h" |
| #include "components/sync/model/sync_error.h" |
| -namespace syncer { |
| -class SyncMetadataStore; |
| -} |
| - |
| namespace history { |
| class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge, |
| @@ -22,7 +20,7 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge, |
| // |sync_metadata_store| is owned by |history_backend|, and must outlive |
| // TypedURLSyncBridge. |
| TypedURLSyncBridge(HistoryBackend* history_backend, |
| - syncer::SyncMetadataStore* sync_metadata_store, |
| + TypedURLSyncMetadataDatabase* sync_metadata_store, |
| const ChangeProcessorFactory& change_processor_factory); |
| ~TypedURLSyncBridge() override; |
| @@ -54,19 +52,65 @@ class TypedURLSyncBridge : public syncer::ModelTypeSyncBridge, |
| const history::URLRows& deleted_rows, |
| const std::set<GURL>& favicon_urls) override; |
| + // Returns the percentage of DB accesses that have resulted in an error. |
| + int GetErrorPercentage() const; |
| + |
| + // Return true if this function successfully converts the passed URL |
| + // information to a TypedUrlSpecifics structure for writing to the sync DB. |
| + static bool WriteToTypedUrlSpecifics(const URLRow& url, |
| + const VisitVector& visits, |
| + sync_pb::TypedUrlSpecifics* specifics) |
| + WARN_UNUSED_RESULT; |
| + |
| private: |
| + friend class TypedURLSyncBridgeTest; |
| + |
| + // Synchronously load sync metadata from the TypedURLSyncMetadataDatabase and |
| + // pass it to the processor so that it can start tracking changes. |
| + void LoadMetadata(); |
| + |
| + // Helper function that clears our error counters (used to reset stats after |
| + // merge so we can track merge errors separately). |
| + void ClearErrorStats(); |
| + |
| + // 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 |
| + // integrity (duplicate visits, visit timestamps that don't match the |
| + // last_visit timestamp, huge data sets that exhaust memory when fetched, |
| + // expired visits that are not deleted by |ExpireHistoryBackend|, etc) by |
| + // modifying the passed |url| object and |visits| vector. |
|
brettw
2017/06/05 17:31:15
Can this document the ordering of the resulting vi
Gang Wu
2017/06/05 20:04:14
Done.
|
| + // Returns false in two cases. |
| + // 1. we could not fetch the visits for the passed URL, DB error. |
| + // 2. No visits for the passed url, or all the visits are expired. |
| + bool FixupURLAndGetVisits(URLRow* url, VisitVector* visits); |
| + |
| + // Create an EntityData by URL |row| and its visits |visits|. |
| + std::unique_ptr<syncer::EntityData> CreateEntityData( |
| + const URLRow& row, |
| + const VisitVector& visits); |
| + |
| // A non-owning pointer to the backend, which we're syncing local changes from |
| // and sync changes to. |
| HistoryBackend* const history_backend_; |
| // A non-owning pointer to the database, which is for storing typed urls sync |
| // metadata and state. |
| - syncer::SyncMetadataStore* const sync_metadata_store_; |
| + TypedURLSyncMetadataDatabase* const sync_metadata_database_; |
| + |
| + // Statistics for the purposes of tracking the percentage of DB accesses that |
| + // fail for each client via UMA. |
| + int num_db_accesses_; |
| + int num_db_errors_; |
| // Since HistoryBackend use SequencedTaskRunner, so should use SequenceChecker |
| // here. |
| base::SequenceChecker sequence_checker_; |
| + // Tracks observed history backend, for receiving updates from history |
| + // backend. |
| + ScopedObserver<history::HistoryBackend, history::HistoryBackendObserver> |
| + history_backend_observer_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(TypedURLSyncBridge); |
| }; |