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

Side by Side Diff: chrome/browser/bookmarks/chrome_bookmark_client.cc

Issue 769153007: Managed bookmarks for supervised users (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: string change Created 5 years, 11 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/bookmarks/chrome_bookmark_client.h" 5 #include "chrome/browser/bookmarks/chrome_bookmark_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 25 matching lines...) Expand all
36 if (bitmap_result.is_valid()) { 36 if (bitmap_result.is_valid()) {
37 result.image = gfx::Image::CreateFrom1xPNGBytes( 37 result.image = gfx::Image::CreateFrom1xPNGBytes(
38 bitmap_result.bitmap_data->front(), bitmap_result.bitmap_data->size()); 38 bitmap_result.bitmap_data->front(), bitmap_result.bitmap_data->size());
39 result.icon_url = bitmap_result.icon_url; 39 result.icon_url = bitmap_result.icon_url;
40 callback.Run(result); 40 callback.Run(result);
41 return; 41 return;
42 } 42 }
43 callback.Run(result); 43 callback.Run(result);
44 } 44 }
45 45
46 bool IsDescendantOf(const BookmarkNode* node, const BookmarkNode* root) {
47 return node && node->HasAncestor(root);
48 }
49
50 // Returns true if any node in |list| is a descendant of |root|.
51 bool HasDescendantsOf(const std::vector<const BookmarkNode*>& list,
52 const BookmarkNode* root) {
53 for (size_t i = 0; i < list.size(); ++i) {
54 if (IsDescendantOf(list[i], root))
55 return true;
56 }
57 return false;
58 }
59
60 void LoadInitialContents(BookmarkPermanentNode* node,
61 base::ListValue* initial_bookmarks,
62 int64* next_node_id) {
63 // Load the initial contents of the |node| now, and assign it an unused ID.
64 int64 id = *next_node_id;
65 node->set_id(id);
66 *next_node_id = policy::ManagedBookmarksTracker::LoadInitial(
67 node, initial_bookmarks, id + 1);
68 node->set_visible(!node->empty());
69 }
70
46 } // namespace 71 } // namespace
47 72
48 ChromeBookmarkClient::ChromeBookmarkClient(Profile* profile) 73 ChromeBookmarkClient::ChromeBookmarkClient(Profile* profile)
49 : profile_(profile), 74 : profile_(profile),
50 history_service_(NULL), 75 history_service_(NULL),
51 model_(NULL), 76 model_(NULL),
52 managed_node_(NULL) { 77 managed_node_(NULL),
78 supervised_node_(NULL) {
53 } 79 }
54 80
55 ChromeBookmarkClient::~ChromeBookmarkClient() { 81 ChromeBookmarkClient::~ChromeBookmarkClient() {
56 } 82 }
57 83
58 void ChromeBookmarkClient::Init(BookmarkModel* model) { 84 void ChromeBookmarkClient::Init(BookmarkModel* model) {
59 DCHECK(model); 85 DCHECK(model);
60 DCHECK(!model_); 86 DCHECK(!model_);
61 model_ = model; 87 model_ = model;
62 model_->AddObserver(this); 88 model_->AddObserver(this);
63 89
64 managed_bookmarks_tracker_.reset(new policy::ManagedBookmarksTracker( 90 managed_bookmarks_tracker_.reset(new policy::ManagedBookmarksTracker(
65 model_, 91 model_,
66 profile_->GetPrefs(), 92 profile_->GetPrefs(),
93 false,
67 base::Bind(&ChromeBookmarkClient::GetManagedBookmarksDomain, 94 base::Bind(&ChromeBookmarkClient::GetManagedBookmarksDomain,
68 base::Unretained(this)))); 95 base::Unretained(this))));
96 supervised_bookmarks_tracker_.reset(new policy::ManagedBookmarksTracker(
97 model_,
98 profile_->GetPrefs(),
99 true,
100 base::Callback<std::string()>()));
69 } 101 }
70 102
71 void ChromeBookmarkClient::Shutdown() { 103 void ChromeBookmarkClient::Shutdown() {
72 favicon_changed_subscription_.reset(); 104 favicon_changed_subscription_.reset();
73 if (model_) { 105 if (model_) {
74 model_->RemoveObserver(this); 106 model_->RemoveObserver(this);
75 model_ = NULL; 107 model_ = NULL;
76 } 108 }
77 BookmarkClient::Shutdown(); 109 BookmarkClient::Shutdown();
78 } 110 }
79 111
80 bool ChromeBookmarkClient::IsDescendantOfManagedNode(const BookmarkNode* node) { 112 bool ChromeBookmarkClient::IsDescendantOfManagedNode(const BookmarkNode* node) {
81 return node && node->HasAncestor(managed_node_); 113 return IsDescendantOf(node, managed_node_);
82 } 114 }
83 115
84 bool ChromeBookmarkClient::HasDescendantsOfManagedNode( 116 bool ChromeBookmarkClient::HasDescendantsOfManagedNode(
85 const std::vector<const BookmarkNode*>& list) { 117 const std::vector<const BookmarkNode*>& list) {
86 for (size_t i = 0; i < list.size(); ++i) { 118 return HasDescendantsOf(list, managed_node_);
87 if (IsDescendantOfManagedNode(list[i])) 119 }
88 return true; 120
89 } 121 bool ChromeBookmarkClient::IsDescendantOfSupervisedNode(
90 return false; 122 const BookmarkNode* node) {
123 return IsDescendantOf(node, supervised_node_);
124 }
125
126 bool ChromeBookmarkClient::HasDescendantsOfSupervisedNode(
127 const std::vector<const BookmarkNode*>& list) {
128 return HasDescendantsOf(list, supervised_node_);
129 }
130
131 bool ChromeBookmarkClient::IsDescendantOfManagedOrSupervisedNode(
132 const BookmarkNode* node) {
133 return IsDescendantOfManagedNode(node) || IsDescendantOfSupervisedNode(node);
134 }
135
136 bool ChromeBookmarkClient::HasDescendantsOfManagedOrSupervisedNode(
137 const std::vector<const BookmarkNode*>& list) {
138 return HasDescendantsOfManagedNode(list) ||
139 HasDescendantsOfSupervisedNode(list);
91 } 140 }
92 141
93 bool ChromeBookmarkClient::PreferTouchIcon() { 142 bool ChromeBookmarkClient::PreferTouchIcon() {
94 #if !defined(OS_IOS) 143 #if !defined(OS_IOS)
95 return false; 144 return false;
96 #else 145 #else
97 return true; 146 return true;
98 #endif 147 #endif
99 } 148 }
100 149
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 NodeTypedCountPair pair(*i, typed_count); 192 NodeTypedCountPair pair(*i, typed_count);
144 node_typed_count_pairs->push_back(pair); 193 node_typed_count_pairs->push_back(pair);
145 } 194 }
146 } 195 }
147 196
148 bool ChromeBookmarkClient::IsPermanentNodeVisible( 197 bool ChromeBookmarkClient::IsPermanentNodeVisible(
149 const BookmarkPermanentNode* node) { 198 const BookmarkPermanentNode* node) {
150 DCHECK(node->type() == BookmarkNode::BOOKMARK_BAR || 199 DCHECK(node->type() == BookmarkNode::BOOKMARK_BAR ||
151 node->type() == BookmarkNode::OTHER_NODE || 200 node->type() == BookmarkNode::OTHER_NODE ||
152 node->type() == BookmarkNode::MOBILE || 201 node->type() == BookmarkNode::MOBILE ||
153 node == managed_node_); 202 node == managed_node_ ||
154 if (node == managed_node_) 203 node == supervised_node_);
204 if (node == managed_node_ || node == supervised_node_)
155 return false; 205 return false;
156 #if !defined(OS_IOS) 206 #if !defined(OS_IOS)
157 return node->type() != BookmarkNode::MOBILE; 207 return node->type() != BookmarkNode::MOBILE;
158 #else 208 #else
159 return node->type() == BookmarkNode::MOBILE; 209 return node->type() == BookmarkNode::MOBILE;
160 #endif 210 #endif
161 } 211 }
162 212
163 void ChromeBookmarkClient::RecordAction(const base::UserMetricsAction& action) { 213 void ChromeBookmarkClient::RecordAction(const base::UserMetricsAction& action) {
164 content::RecordAction(action); 214 content::RecordAction(action);
165 } 215 }
166 216
167 bookmarks::LoadExtraCallback ChromeBookmarkClient::GetLoadExtraNodesCallback() { 217 bookmarks::LoadExtraCallback ChromeBookmarkClient::GetLoadExtraNodesCallback() {
168 // Create the managed_node now; it will be populated in the LoadExtraNodes 218 // Create the managed_node_ and supervised_node_ now; they will be populated
169 // callback. 219 // in the LoadExtraNodes callback.
170 // The ownership of managed_node_ is in limbo until LoadExtraNodes runs, 220 // The ownership of managed_node_ and supervised_node_ is in limbo until
171 // so we leave it in the care of the closure meanwhile. 221 // LoadExtraNodes runs, so we leave them in the care of the closure meanwhile.
172 scoped_ptr<BookmarkPermanentNode> managed(new BookmarkPermanentNode(0)); 222 scoped_ptr<BookmarkPermanentNode> managed(new BookmarkPermanentNode(0));
173 managed_node_ = managed.get(); 223 managed_node_ = managed.get();
224 scoped_ptr<BookmarkPermanentNode> supervised(new BookmarkPermanentNode(1));
225 supervised_node_ = supervised.get();
174 226
175 return base::Bind( 227 return base::Bind(
176 &ChromeBookmarkClient::LoadExtraNodes, 228 &ChromeBookmarkClient::LoadExtraNodes,
177 base::Passed(&managed), 229 base::Passed(&managed),
178 base::Passed(managed_bookmarks_tracker_->GetInitialManagedBookmarks())); 230 base::Passed(managed_bookmarks_tracker_->GetInitialManagedBookmarks()),
231 base::Passed(&supervised),
232 base::Passed(
233 supervised_bookmarks_tracker_->GetInitialManagedBookmarks()));
179 } 234 }
180 235
181 bool ChromeBookmarkClient::CanSetPermanentNodeTitle( 236 bool ChromeBookmarkClient::CanSetPermanentNodeTitle(
182 const BookmarkNode* permanent_node) { 237 const BookmarkNode* permanent_node) {
183 // The |managed_node_| can have its title updated if the user signs in or 238 // The |managed_node_| can have its title updated if the user signs in or
184 // out. 239 // out, since the name of the managed domain can appear in it. The
185 return !IsDescendantOfManagedNode(permanent_node) || 240 // |supervised_node_| has a fixed title which can never be updated.
241 return !IsDescendantOfManagedOrSupervisedNode(permanent_node) ||
186 permanent_node == managed_node_; 242 permanent_node == managed_node_;
187 } 243 }
188 244
189 bool ChromeBookmarkClient::CanSyncNode(const BookmarkNode* node) { 245 bool ChromeBookmarkClient::CanSyncNode(const BookmarkNode* node) {
190 return !IsDescendantOfManagedNode(node); 246 return !IsDescendantOfManagedOrSupervisedNode(node);
191 } 247 }
192 248
193 bool ChromeBookmarkClient::CanBeEditedByUser(const BookmarkNode* node) { 249 bool ChromeBookmarkClient::CanBeEditedByUser(const BookmarkNode* node) {
194 return !IsDescendantOfManagedNode(node); 250 return !IsDescendantOfManagedOrSupervisedNode(node);
195 } 251 }
196 252
197 void ChromeBookmarkClient::SetHistoryService(HistoryService* history_service) { 253 void ChromeBookmarkClient::SetHistoryService(HistoryService* history_service) {
198 DCHECK(history_service); 254 DCHECK(history_service);
199 history_service_ = history_service; 255 history_service_ = history_service;
200 favicon_changed_subscription_ = history_service_->AddFaviconChangedCallback( 256 favicon_changed_subscription_ = history_service_->AddFaviconChangedCallback(
201 base::Bind(&BookmarkModel::OnFaviconChanged, base::Unretained(model_))); 257 base::Bind(&BookmarkModel::OnFaviconChanged, base::Unretained(model_)));
202 } 258 }
203 259
204 void ChromeBookmarkClient::BookmarkModelChanged() { 260 void ChromeBookmarkClient::BookmarkModelChanged() {
(...skipping 11 matching lines...) Expand all
216 272
217 void ChromeBookmarkClient::BookmarkAllUserNodesRemoved( 273 void ChromeBookmarkClient::BookmarkAllUserNodesRemoved(
218 BookmarkModel* model, 274 BookmarkModel* model,
219 const std::set<GURL>& removed_urls) { 275 const std::set<GURL>& removed_urls) {
220 if (history_service_) 276 if (history_service_)
221 history_service_->URLsNoLongerBookmarked(removed_urls); 277 history_service_->URLsNoLongerBookmarked(removed_urls);
222 } 278 }
223 279
224 void ChromeBookmarkClient::BookmarkModelLoaded(BookmarkModel* model, 280 void ChromeBookmarkClient::BookmarkModelLoaded(BookmarkModel* model,
225 bool ids_reassigned) { 281 bool ids_reassigned) {
226 // Start tracking the managed bookmarks. This will detect any changes that 282 // Start tracking the managed and supervised bookmarks. This will detect any
227 // may have occurred while the initial managed bookmarks were being loaded 283 // changes that may have occurred while the initial managed and supervised
228 // on the background. 284 // bookmarks were being loaded on the background.
229 managed_bookmarks_tracker_->Init(managed_node_); 285 managed_bookmarks_tracker_->Init(managed_node_);
286 supervised_bookmarks_tracker_->Init(supervised_node_);
230 } 287 }
231 288
232 // static 289 // static
233 bookmarks::BookmarkPermanentNodeList ChromeBookmarkClient::LoadExtraNodes( 290 bookmarks::BookmarkPermanentNodeList ChromeBookmarkClient::LoadExtraNodes(
234 scoped_ptr<BookmarkPermanentNode> managed_node, 291 scoped_ptr<BookmarkPermanentNode> managed_node,
235 scoped_ptr<base::ListValue> initial_managed_bookmarks, 292 scoped_ptr<base::ListValue> initial_managed_bookmarks,
293 scoped_ptr<BookmarkPermanentNode> supervised_node,
294 scoped_ptr<base::ListValue> initial_supervised_bookmarks,
236 int64* next_node_id) { 295 int64* next_node_id) {
237 // Load the initial contents of the |managed_node| now, and assign it an 296 LoadInitialContents(
238 // unused ID. 297 managed_node.get(), initial_managed_bookmarks.get(), next_node_id);
239 int64 managed_id = *next_node_id; 298 managed_node->SetTitle(l10n_util::GetStringUTF16(
240 managed_node->set_id(managed_id); 299 IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME));
241 *next_node_id = policy::ManagedBookmarksTracker::LoadInitial( 300
242 managed_node.get(), initial_managed_bookmarks.get(), managed_id + 1); 301 LoadInitialContents(
243 managed_node->set_visible(!managed_node->empty()); 302 supervised_node.get(), initial_supervised_bookmarks.get(), next_node_id);
244 managed_node->SetTitle( 303 supervised_node->SetTitle(l10n_util::GetStringUTF16(
245 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME)); 304 IDS_BOOKMARK_BAR_SUPERVISED_FOLDER_DEFAULT_NAME));
246 305
247 bookmarks::BookmarkPermanentNodeList extra_nodes; 306 bookmarks::BookmarkPermanentNodeList extra_nodes;
248 // Ownership of the managed node passed to the caller. 307 // Ownership of the managed and supervised nodes passed to the caller.
249 extra_nodes.push_back(managed_node.release()); 308 extra_nodes.push_back(managed_node.release());
309 extra_nodes.push_back(supervised_node.release());
250 310
251 return extra_nodes.Pass(); 311 return extra_nodes.Pass();
252 } 312 }
253 313
254 std::string ChromeBookmarkClient::GetManagedBookmarksDomain() { 314 std::string ChromeBookmarkClient::GetManagedBookmarksDomain() {
255 policy::ProfilePolicyConnector* connector = 315 policy::ProfilePolicyConnector* connector =
256 policy::ProfilePolicyConnectorFactory::GetForProfile(profile_); 316 policy::ProfilePolicyConnectorFactory::GetForProfile(profile_);
257 if (connector->IsPolicyFromCloudPolicy(policy::key::kManagedBookmarks)) 317 if (connector->IsPolicyFromCloudPolicy(policy::key::kManagedBookmarks))
258 return connector->GetManagementDomain(); 318 return connector->GetManagementDomain();
259 return std::string(); 319 return std::string();
260 } 320 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698