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

Side by Side Diff: chrome/browser/ui/webui/ntp/android/partner_bookmarks_shim.cc

Issue 10834237: Add the android partner bookmark shim. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved shim to android/ntp and removed the conflicting ID namespace issue. Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "chrome/browser/ui/webui/ntp/android/partner_bookmarks_shim.h"
6
7 #include "base/lazy_instance.h"
8 #include "chrome/browser/bookmarks/bookmark_model.h"
9 #include "content/public/browser/browser_thread.h"
10
11 using base::LazyInstance;
12 using content::BrowserThread;
13
14 namespace {
15
16 static LazyInstance<PartnerBookmarksShim> g_partner_bookmarks_shim_instance =
17 LAZY_INSTANCE_INITIALIZER;
18
19 } // namespace
20
21 PartnerBookmarksShim::PartnerBookmarksShim()
22 : bookmark_model_(NULL),
23 attach_point_(NULL),
24 loaded_(false),
25 observers_(
26 ObserverList<PartnerBookmarksShim::Observer>::NOTIFY_EXISTING_ONLY) {
27 }
28
29 PartnerBookmarksShim::~PartnerBookmarksShim() {
30 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_,
31 ShimBeingDeleted(this));
32 }
33
34 PartnerBookmarksShim* PartnerBookmarksShim::GetInstance() {
35 return g_partner_bookmarks_shim_instance.Pointer();
36 }
37
38 void PartnerBookmarksShim::Reset() {
39 partner_bookmarks_root_.reset();
40 bookmark_model_ = NULL;
41 attach_point_ = NULL;
42 loaded_ = false;
43 observers_.Clear();
44 }
45
46 void PartnerBookmarksShim::AddObserver(
47 PartnerBookmarksShim::Observer* observer) {
48 observers_.AddObserver(observer);
49 }
50
51 void PartnerBookmarksShim::RemoveObserver(
52 PartnerBookmarksShim::Observer* observer) {
53 observers_.RemoveObserver(observer);
54 }
55
56 bool PartnerBookmarksShim::IsPartnerBookmark(const BookmarkNode* node) {
57 DCHECK(IsLoaded());
58 if (!HasPartnerBookmarks())
59 return false;
60 const BookmarkNode* parent = node;
61 while (parent != NULL) {
62 if (parent == GetPartnerBookmarksRoot())
63 return true;
64 parent = parent->parent();
65 }
66 return false;
67 }
68
69 bool PartnerBookmarksShim::IsBookmarkEditable(const BookmarkNode* node) {
70 return !IsPartnerBookmark(node) &&
71 (node->type() == BookmarkNode::FOLDER ||
72 node->type() == BookmarkNode::URL);
73 }
74
75 void PartnerBookmarksShim::AttachTo(
76 BookmarkModel* bookmark_model,
77 const BookmarkNode* attach_point) {
78 if (bookmark_model_ == bookmark_model && attach_point_ == attach_point)
79 return;
80 if (attach_point && (attach_point->type() == BookmarkNode::FOLDER ||
81 attach_point->type() == BookmarkNode::URL)) {
82 DCHECK(false) << "Can not attach partner bookmarks to node of type: "
83 << attach_point->type();
84 return;
85 }
86 DCHECK(!bookmark_model_ || !bookmark_model);
87 DCHECK(!attach_point_ || !attach_point);
88 bookmark_model_ = bookmark_model;
89 attach_point_ = attach_point;
90 }
91
92 const BookmarkNode* PartnerBookmarksShim::GetParentOf(
93 const BookmarkNode* node) const {
94 DCHECK(IsLoaded());
95 DCHECK(node != NULL);
96 if (HasPartnerBookmarks() && node == GetPartnerBookmarksRoot())
97 return get_attach_point();
98 return node->parent();
99 }
100
101 bool PartnerBookmarksShim::IsRootNode(const BookmarkNode* node) const {
102 DCHECK(node != NULL);
103 return node->is_root()
104 && (!HasPartnerBookmarks() || node != GetPartnerBookmarksRoot());
105 }
106
107 const BookmarkNode* PartnerBookmarksShim::GetNodeByID(int64 id,
108 bool is_partner) const {
109 DCHECK(IsLoaded());
110 if (is_partner) {
111 DCHECK(HasPartnerBookmarks());
112 if (!HasPartnerBookmarks())
113 return NULL;
114 return GetNodeByID(GetPartnerBookmarksRoot(), id);
115 }
116 if (bookmark_model_)
117 return bookmark_model_->GetNodeByID(id);
118 return NULL;
119 }
120
121 const BookmarkNode* PartnerBookmarksShim::GetNodeByID(
122 const BookmarkNode* parent, int64 id) const {
123 if (parent->id() == id)
124 return parent;
125 for (int i = 0, child_count = parent->child_count(); i < child_count; ++i) {
126 const BookmarkNode* result = GetNodeByID(parent->GetChild(i), id);
127 if (result)
128 return result;
129 }
130 return NULL;
131 }
132
133 bool PartnerBookmarksShim::IsLoaded() const {
134 return loaded_;
135 }
136
137 bool PartnerBookmarksShim::HasPartnerBookmarks() const {
138 DCHECK(IsLoaded());
139 return partner_bookmarks_root_.get() != NULL;
140 }
141
142 const BookmarkNode* PartnerBookmarksShim::GetPartnerBookmarksRoot() const {
143 DCHECK(HasPartnerBookmarks());
144 return partner_bookmarks_root_.get();
145 }
146
147 void PartnerBookmarksShim::SetPartnerBookmarksRoot(BookmarkNode* root_node) {
148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
149 partner_bookmarks_root_.reset(root_node);
150 loaded_ = true;
151 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_,
152 PartnerShimLoaded(this));
153 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698