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

Side by Side Diff: chrome/browser/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: Remove unnecessary conditional. 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/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 const int64 PartnerBookmarksShim::kPartnerBookmarkIdBits = 0x7FFF0000;
22
23 PartnerBookmarksShim* PartnerBookmarksShim::GetInstance() {
24 return g_partner_bookmarks_shim_instance.Pointer();
25 }
26
27 PartnerBookmarksShim::PartnerBookmarksShim()
28 : bookmark_model_(NULL),
29 attach_point_(NULL),
30 loaded_(false),
31 observers_(
32 ObserverList<PartnerBookmarksShim::Observer>::NOTIFY_EXISTING_ONLY) {
33 }
34
35 PartnerBookmarksShim::~PartnerBookmarksShim() {
36 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_,
37 ShimBeingDeleted(this));
38 }
39
40 void PartnerBookmarksShim::Reset() {
41 partner_bookmarks_root_.reset();
42 bookmark_model_ = NULL;
43 attach_point_ = NULL;
44 loaded_ = false;
45 observers_.Clear();
46 }
47
48 void PartnerBookmarksShim::AddObserver(
49 PartnerBookmarksShim::Observer* observer) {
50 observers_.AddObserver(observer);
51 }
52
53 void PartnerBookmarksShim::RemoveObserver(
54 PartnerBookmarksShim::Observer* observer) {
55 observers_.RemoveObserver(observer);
56 }
57
58 bool PartnerBookmarksShim::IsPartnerBookmarkId(int64 id) {
59 return (id & kPartnerBookmarkIdBits) == kPartnerBookmarkIdBits;
60 }
61
62 bool PartnerBookmarksShim::IsBookmarkEditable(const BookmarkNode* node) {
63 return !IsPartnerBookmarkId(node->id()) &&
64 (node->type() == BookmarkNode::FOLDER ||
65 node->type() == BookmarkNode::URL);
66 }
67
68 void PartnerBookmarksShim::AttachTo(
69 BookmarkModel* bookmark_model,
70 const BookmarkNode* attach_point) {
71 if (bookmark_model_ == bookmark_model && attach_point_ == attach_point)
72 return;
73 DCHECK(!bookmark_model_ || !bookmark_model);
74 DCHECK(!attach_point_ || !attach_point);
75 bookmark_model_ = bookmark_model;
76 attach_point_ = attach_point;
sky 2012/08/09 15:48:19 Is it possible for someone to delete this bookmark
Ted C 2012/08/09 16:47:01 Really the only use case we should support is to a
77 }
78
79 const BookmarkNode* PartnerBookmarksShim::GetParentOf(
80 const BookmarkNode* node) const {
81 DCHECK(IsLoaded());
82 DCHECK(node != NULL);
83 const BookmarkNode* parent = node->parent();
84 if (HasPartnerBookmarks() && GetPartnerBookmarksRoot()->id() == node->id())
85 parent = GetAttachPoint();
86 return parent;
87 }
88
89 bool PartnerBookmarksShim::IsRootNode(const BookmarkNode* node) const {
90 DCHECK(node != NULL);
91 return node->is_root() && !IsPartnerBookmarkId(node->id());
92 }
93
94 const BookmarkNode* PartnerBookmarksShim::GetNodeByID(int64 id) const {
95 DCHECK(IsLoaded());
96 if (HasPartnerBookmarks() && IsPartnerBookmarkId(id))
97 return GetNodeByID(GetPartnerBookmarksRoot(), id);
98 if (bookmark_model_)
99 return bookmark_model_->GetNodeByID(id);
100 return NULL;
101 }
102
103 const BookmarkNode* PartnerBookmarksShim::GetNodeByID(
104 const BookmarkNode* parent, int64 id) const {
105 if (parent->id() == id)
106 return parent;
107 if (IsLoaded() && HasPartnerBookmarks() &&
108 IsPartnerBookmarkId(id) && !IsPartnerBookmarkId(parent->id())) {
109 DCHECK(parent == attach_point_);
110 parent = GetPartnerBookmarksRoot();
111 }
112 for (int i= 0, child_count = parent->child_count(); i < child_count; ++i) {
sky 2012/08/09 15:48:19 'i=' -> 'i ='
Ted C 2012/08/09 16:47:01 Done.
113 const BookmarkNode* result = GetNodeByID(parent->GetChild(i), id);
114 if (result)
115 return result;
116 }
117 return NULL;
118 }
119
120 bool PartnerBookmarksShim::IsLoaded() const {
121 return loaded_;
122 }
123
124 bool PartnerBookmarksShim::HasPartnerBookmarks() const {
125 DCHECK(IsLoaded());
126 return partner_bookmarks_root_.get() != NULL;
127 }
128
129 const BookmarkNode* PartnerBookmarksShim::GetPartnerBookmarksRoot() const {
130 DCHECK(HasPartnerBookmarks());
131 return partner_bookmarks_root_.get();
132 }
133
134 void PartnerBookmarksShim::SetPartnerBookmarksRoot(BookmarkNode* root_node) {
135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
136 partner_bookmarks_root_.reset(root_node);
137 loaded_ = true;
138 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_,
139 PartnerShimLoaded(this));
140 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698