1// Copyright (c) 2012 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_BOOKMARK_DATA_TYPE_CONTROLLER_H__
6#define CHROME_BROWSER_SYNC_GLUE_BOOKMARK_DATA_TYPE_CONTROLLER_H__
7
8#include <string>
9
10#include "base/compiler_specific.h"
11#include "chrome/browser/sync/glue/frontend_data_type_controller.h"
12#include "components/bookmarks/browser/base_bookmark_model_observer.h"
13#include "content/public/browser/notification_observer.h"
14#include "content/public/browser/notification_registrar.h"
15
16namespace browser_sync {
17
18// A class that manages the startup and shutdown of bookmark sync.
19class BookmarkDataTypeController : public FrontendDataTypeController,
20                                   public content::NotificationObserver,
21                                   public BaseBookmarkModelObserver {
22 public:
23  BookmarkDataTypeController(ProfileSyncComponentsFactory* profile_sync_factory,
24                             Profile* profile,
25                             ProfileSyncService* sync_service);
26
27  // FrontendDataTypeController interface.
28  virtual syncer::ModelType type() const OVERRIDE;
29
30  // content::NotificationObserver interface.
31  virtual void Observe(int type,
32                       const content::NotificationSource& source,
33                       const content::NotificationDetails& details) OVERRIDE;
34
35 private:
36  virtual ~BookmarkDataTypeController();
37
38  // FrontendDataTypeController interface.
39  virtual bool StartModels() OVERRIDE;
40  virtual void CleanUpState() OVERRIDE;
41  virtual void CreateSyncComponents() OVERRIDE;
42
43  // BaseBookmarkModelObserver interface.
44  virtual void BookmarkModelChanged() OVERRIDE;
45  virtual void BookmarkModelLoaded(BookmarkModel* model,
46                                   bool ids_reassigned) OVERRIDE;
47  virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
48
49  // Helper that returns true iff both the bookmark model and the history
50  // service have finished loading.
51  bool DependentsLoaded();
52
53  content::NotificationRegistrar registrar_;
54
55  BookmarkModel* bookmark_model_;
56
57  // Have we installed ourselves as a BookmarkModel observer?
58  bool installed_bookmark_observer_;
59
60  DISALLOW_COPY_AND_ASSIGN(BookmarkDataTypeController);
61};
62
63}  // namespace browser_sync
64
65#endif  // CHROME_BROWSER_SYNC_GLUE_BOOKMARK_DATA_TYPE_CONTROLLER_H__
66