Index: chrome/browser/sync/glue/autofill_profile_model_associator.h |
=================================================================== |
--- chrome/browser/sync/glue/autofill_profile_model_associator.h (revision 99989) |
+++ chrome/browser/sync/glue/autofill_profile_model_associator.h (working copy) |
@@ -1,199 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_BROWSER_SYNC_GLUE_AUTOFILL_PROFILE_MODEL_ASSOCIATOR_H_ |
-#define CHROME_BROWSER_SYNC_GLUE_AUTOFILL_PROFILE_MODEL_ASSOCIATOR_H_ |
-#pragma once |
- |
-#include <map> |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/synchronization/lock.h" |
-#include "chrome/browser/autofill/personal_data_manager.h" |
-#include "chrome/browser/sync/glue/model_associator.h" |
-#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" |
-#include "chrome/browser/webdata/autofill_entry.h" |
- |
-class AutofillProfile; |
- |
-class ProfileSyncService; |
-class WebDatabase; |
- |
-namespace sync_api { |
-class ReadNode; |
-class WriteTransaction; |
-} // namespace sync_api |
- |
-namespace browser_sync { |
- |
-extern const char kAutofillProfileTag[]; |
- |
-class AutofillChangeProcessor; |
-class UnrecoverableErrorHandler; |
- |
-// Contains all model association related logic: |
-// * Algorithm to associate autofill model and sync model. |
-// We do not check if we have local data before this run; we always |
-// merge and sync. |
-class AutofillProfileModelAssociator |
- : public PerDataTypeAssociatorInterface<std::string, std::string> { |
- public: |
- AutofillProfileModelAssociator(ProfileSyncService* sync_service, |
- WebDatabase* web_database, |
- PersonalDataManager* data_manager); |
- virtual ~AutofillProfileModelAssociator(); |
- |
- // A convenience wrapper of a bunch of state we pass around while |
- // associating models, and send to the WebDatabase for persistence. |
- // We do this so we hold the write lock for only a small period. |
- // When storing the web db we are out of the write lock. |
- struct DataBundle; |
- |
- static syncable::ModelType model_type() { return syncable::AUTOFILL_PROFILE; } |
- |
- // PerDataTypeAssociatorInterface implementation. |
- // |
- // Iterates through the sync model looking for matched pairs of items. |
- virtual bool AssociateModels(SyncError* error); |
- |
- // Clears all associations. |
- virtual bool DisassociateModels(SyncError* error); |
- |
- // TODO(lipalani) Bug 64111. |
- // The has_nodes out param is true if the sync model has nodes other |
- // than the permanent tagged nodes. |
- virtual bool SyncModelHasUserCreatedNodes(bool* has_nodes); |
- |
- // See ModelAssociator interface. |
- virtual void AbortAssociation(); |
- |
- // See ModelAssociator interface. |
- virtual bool CryptoReadyIfNecessary(); |
- |
- virtual const std::string* GetChromeNodeFromSyncId(int64 sync_id); |
- |
- virtual bool InitSyncNodeFromChromeId(const std::string& node_id, |
- sync_api::BaseNode* sync_node); |
- |
- // Returns the sync id for the given autofill name, or sync_api::kInvalidId |
- // if the autofill name is not associated to any sync id. |
- virtual int64 GetSyncIdFromChromeId(const std::string& node_id); |
- |
- // Associates the given autofill name with the given sync id. |
- virtual void Associate(const std::string* node, int64 sync_id); |
- |
- // Remove the association that corresponds to the given sync id. |
- virtual void Disassociate(int64 sync_id); |
- |
- // TODO(lipalani) Bug 64111. Returns whether a node with the |
- // given permanent tag was found and update |
- // |sync_id| with that node's id. No current use. To Implement |
- // only for completeness. |
- virtual bool GetSyncIdForTaggedNode(const std::string& tag, int64* sync_id); |
- |
- static bool OverwriteProfileWithServerData( |
- AutofillProfile* merge_into, |
- const sync_pb::AutofillProfileSpecifics& specifics); |
- |
- protected: |
- AutofillProfileModelAssociator(); |
- bool TraverseAndAssociateChromeAutofillProfiles( |
- sync_api::WriteTransaction* write_trans, |
- const sync_api::ReadNode& autofill_root, |
- const std::vector<AutofillProfile*>& all_profiles_from_db, |
- std::set<std::string>* current_profiles, |
- std::vector<AutofillProfile*>* updated_profiles, |
- std::vector<AutofillProfile*>* new_profiles, |
- std::vector<std::string>* profiles_to_delete); |
- |
- // Helper to insert an AutofillProfile into the WebDatabase (e.g. in response |
- // to encountering a sync node that doesn't exist yet locally). |
- virtual void AddNativeProfileIfNeeded( |
- const sync_pb::AutofillProfileSpecifics& profile, |
- DataBundle* bundle, |
- const sync_api::ReadNode& node); |
- |
- // Helper to insert a sync node for the given AutofillProfile (e.g. in |
- // response to encountering a native profile that doesn't exist yet in the |
- // cloud). |
- virtual bool MakeNewAutofillProfileSyncNodeIfNeeded( |
- sync_api::WriteTransaction* trans, |
- const sync_api::BaseNode& autofill_root, |
- const AutofillProfile& profile, |
- std::vector<AutofillProfile*>* new_profiles, |
- std::set<std::string>* current_profiles, |
- std::vector<std::string>* profiles_to_delete); |
- |
- // Once the above traversals are complete, we traverse the sync model to |
- // associate all remaining nodes. |
- bool TraverseAndAssociateAllSyncNodes( |
- sync_api::WriteTransaction* write_trans, |
- const sync_api::ReadNode& autofill_root, |
- DataBundle* bundle); |
- |
- private: |
- typedef std::map<std::string, int64> AutofillToSyncIdMap; |
- typedef std::map<int64, std::string> SyncIdToAutofillMap; |
- |
- // A convenience wrapper of a bunch of state we pass around while associating |
- // models, and send to the WebDatabase for persistence. |
- // struct DataBundle; |
- |
- // Helper to query WebDatabase for the current autofill state. |
- bool LoadAutofillData(std::vector<AutofillProfile*>* profiles); |
- |
- static bool MergeField(FormGroup* f, |
- AutofillFieldType t, |
- const std::string& specifics_field); |
- |
- // Helper to persist any changes that occured during model association to |
- // the WebDatabase. |
- bool SaveChangesToWebData(const DataBundle& bundle); |
- |
- // Called at various points in model association to determine if the |
- // user requested an abort. |
- bool IsAbortPending(); |
- |
- int64 FindSyncNodeWithProfile(sync_api::WriteTransaction* trans, |
- const sync_api::BaseNode& autofill_root, |
- const AutofillProfile& profile, |
- std::set<std::string>* current_profiles); |
- |
- ProfileSyncService* sync_service_; |
- WebDatabase* web_database_; |
- PersonalDataManager* personal_data_; |
- int64 autofill_node_id_; |
- |
- AutofillToSyncIdMap id_map_; |
- SyncIdToAutofillMap id_map_inverse_; |
- |
- // Abort association pending flag and lock. If this is set to true |
- // (via the AbortAssociation method), return from the |
- // AssociateModels method as soon as possible. |
- base::Lock abort_association_pending_lock_; |
- bool abort_association_pending_; |
- |
- int number_of_profiles_created_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AutofillProfileModelAssociator); |
-}; |
- |
-struct AutofillProfileModelAssociator::DataBundle { |
- DataBundle(); |
- ~DataBundle(); |
- |
- std::set<std::string> current_profiles; |
- std::vector<std::string> profiles_to_delete; |
- std::vector<AutofillProfile*> updated_profiles; |
- std::vector<AutofillProfile*> new_profiles; // We own these pointers. |
-}; |
- |
-} // namespace browser_sync |
- |
-#endif // CHROME_BROWSER_SYNC_GLUE_AUTOFILL_PROFILE_MODEL_ASSOCIATOR_H_ |
- |