1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_GLUE_EXTENSION_MODEL_ASSOCIATOR_H_
6#define CHROME_BROWSER_SYNC_GLUE_EXTENSION_MODEL_ASSOCIATOR_H_
7#pragma once
8
9#include "base/basictypes.h"
10#include "chrome/browser/sync/glue/extension_sync_traits.h"
11#include "chrome/browser/sync/glue/model_associator.h"
12#include "chrome/browser/sync/syncable/model_type.h"
13
14class ExtensionServiceInterface;
15
16namespace sync_api {
17struct UserShare;
18}  // namespace sync_api
19
20namespace browser_sync {
21
22// Contains all logic for associating the Chrome extensions model and
23// the sync extensions model.
24class ExtensionModelAssociator : public AssociatorInterface {
25 public:
26  // Does not take ownership of sync_service.
27  ExtensionModelAssociator(const ExtensionSyncTraits& traits,
28                           ExtensionServiceInterface* extension_service,
29                           sync_api::UserShare* user_share);
30  virtual ~ExtensionModelAssociator();
31
32  // Used by profile_sync_test_util.h.
33  static syncable::ModelType model_type() { return syncable::EXTENSIONS; }
34
35  // AssociatorInterface implementation.
36  virtual bool AssociateModels();
37  virtual bool DisassociateModels();
38  virtual bool SyncModelHasUserCreatedNodes(bool* has_nodes);
39  virtual void AbortAssociation() {
40    // No implementation needed, this associator runs on the main
41    // thread.
42  }
43  virtual bool CryptoReadyIfNecessary();
44 private:
45  const ExtensionSyncTraits traits_;
46  ExtensionServiceInterface* const extension_service_;
47  sync_api::UserShare* const user_share_;
48
49  DISALLOW_COPY_AND_ASSIGN(ExtensionModelAssociator);
50};
51
52}  // namespace browser_sync
53
54#endif  // CHROME_BROWSER_SYNC_GLUE_EXTENSION_MODEL_ASSOCIATOR_H_
55