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

Unified Diff: chrome/browser/bookmarks/chrome_bookmark_client.cc

Issue 305973004: BookmarkClient can add extra nodes to BookmarkModel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added support for extra nodes from the client Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/bookmarks/chrome_bookmark_client.cc
diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser/bookmarks/chrome_bookmark_client.cc
index b57fb06f3c37ae0563662a19d708b6557b4a880a..d6aeaf747fd467c0e999cfda42f808c23e51e317 100644
--- a/chrome/browser/bookmarks/chrome_bookmark_client.cc
+++ b/chrome/browser/bookmarks/chrome_bookmark_client.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/bookmarks/chrome_bookmark_client.h"
#include "base/logging.h"
+#include "base/values.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/favicon/favicon_changed_details.h"
#include "chrome/browser/favicon/favicon_service.h"
@@ -12,12 +13,17 @@
#include "chrome/browser/history/history_service.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/history/url_database.h"
+#include "chrome/browser/policy/profile_policy_connector.h"
+#include "chrome/browser/policy/profile_policy_connector_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_source.h"
#include "content/public/browser/user_metrics.h"
+#include "grit/components_strings.h"
+#include "policy/policy_constants.h"
+#include "ui/base/l10n/l10n_util.h"
namespace {
@@ -33,7 +39,13 @@ void NotifyHistoryOfRemovedURLs(Profile* profile,
ChromeBookmarkClient::ChromeBookmarkClient(Profile* profile, bool index_urls)
: profile_(profile),
- model_(new BookmarkModel(this, index_urls)) {
+ model_(new BookmarkModel(this, index_urls)),
+ managed_bookmarks_tracker_(
+ model_.get(),
+ profile_->GetPrefs(),
+ base::Bind(&ChromeBookmarkClient::GetManagedBookmarksDomain,
+ base::Unretained(this))),
+ managed_node_(NULL) {
model_->AddObserver(this);
// Listen for changes to favicons so that we can update the favicon of the
// node appropriately.
@@ -48,6 +60,12 @@ ChromeBookmarkClient::~ChromeBookmarkClient() {
registrar_.RemoveAll();
}
+bool ChromeBookmarkClient::IsAManagedNode(const BookmarkNode* node) {
+ while (node && node != managed_node_)
sky 2014/06/04 20:39:52 return node->HasAncestor(managed_node_);
Joao da Silva 2014/06/04 22:35:58 Done.
+ node = node->parent();
+ return node == managed_node_;
+}
+
bool ChromeBookmarkClient::PreferTouchIcon() {
#if !defined(OS_IOS)
return false;
@@ -103,17 +121,50 @@ void ChromeBookmarkClient::RecordAction(const base::UserMetricsAction& action) {
content::RecordAction(action);
}
-bool ChromeBookmarkClient::IsPermanentNodeVisible(int node_type) {
- DCHECK(node_type == BookmarkNode::BOOKMARK_BAR ||
- node_type == BookmarkNode::OTHER_NODE ||
- node_type == BookmarkNode::MOBILE);
+bool ChromeBookmarkClient::IsPermanentNodeVisible(const BookmarkNode* node) {
+ DCHECK(node->type() == BookmarkNode::BOOKMARK_BAR ||
+ node->type() == BookmarkNode::OTHER_NODE ||
+ node->type() == BookmarkNode::MOBILE ||
+ node == managed_node_);
+ if (node == managed_node_)
+ return false;
#if !defined(OS_IOS)
- return node_type != BookmarkNode::MOBILE;
+ return node->type() != BookmarkNode::MOBILE;
#else
- return node_type == BookmarkNode::MOBILE;
+ return node->type() == BookmarkNode::MOBILE;
#endif
}
+bookmarks::LoadExtraCallback ChromeBookmarkClient::GetLoadExtraNodesCallback() {
+ return base::Bind(
+ &ChromeBookmarkClient::LoadExtraNodes,
+ base::Passed(managed_bookmarks_tracker_.GetInitialManagedBookmarks()));
+}
+
+void ChromeBookmarkClient::ExtraNodesLoaded(
+ const std::vector<BookmarkPermanentNode*>& extra_nodes) {
+ CHECK_EQ(1u, extra_nodes.size());
+ managed_node_ = extra_nodes[0];
+}
+
+bool ChromeBookmarkClient::CanRemoveNode(const BookmarkNode* node) {
+ return !IsAManagedNode(node);
+}
+
+bool ChromeBookmarkClient::CanSetTitle(const BookmarkNode* node) {
+ // The |managed_node_| can have its title updated if the user signs in or
+ // out.
+ return !IsAManagedNode(node) || node == managed_node_;
+}
+
+bool ChromeBookmarkClient::CanSyncNode(const BookmarkNode* node) {
+ return !IsAManagedNode(node);
+}
+
+bool ChromeBookmarkClient::CanReorderChildren(const BookmarkNode* parent) {
+ return !IsAManagedNode(parent);
+}
+
void ChromeBookmarkClient::Observe(
int type,
const content::NotificationSource& source,
@@ -152,3 +203,37 @@ void ChromeBookmarkClient::BookmarkAllNodesRemoved(
const std::set<GURL>& removed_urls) {
NotifyHistoryOfRemovedURLs(profile_, removed_urls);
}
+
+void ChromeBookmarkClient::BookmarkModelLoaded(BookmarkModel* model,
+ bool ids_reassigned) {
+ // Start tracking the managed bookmarks. This will detect any changes that
+ // may have occurred while the initial managed bookmarks were being loaded
+ // on the background.
+ managed_bookmarks_tracker_.Init(managed_node_);
+}
+
+// static
+bookmarks::BookmarkPermanentNodeList ChromeBookmarkClient::LoadExtraNodes(
+ scoped_ptr<base::ListValue> initial_managed_bookmarks,
+ int64* next_node_id) {
+ // Create the managed node now, and load its initial contents.
sky 2014/06/04 20:39:52 DCHECK not on UI thread.
Joao da Silva 2014/06/04 22:35:58 That fails in around 100 unit tests in ~10 suites,
+ int64 managed_id = *next_node_id;
+ BookmarkPermanentNode* managed_node = new BookmarkPermanentNode(managed_id);
+ *next_node_id = policy::ManagedBookmarksTracker::LoadInitial(
+ managed_node, initial_managed_bookmarks.get(), managed_id + 1);
+ managed_node->set_visible(!managed_node->empty());
+ managed_node->SetTitle(
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME));
+
+ bookmarks::BookmarkPermanentNodeList extra_nodes;
+ extra_nodes.push_back(managed_node);
+ return extra_nodes.Pass();
+}
+
+std::string ChromeBookmarkClient::GetManagedBookmarksDomain() {
+ policy::ProfilePolicyConnector* connector =
+ policy::ProfilePolicyConnectorFactory::GetForProfile(profile_);
+ if (connector->IsPolicyFromCloudPolicy(policy::key::kManagedBookmarks))
+ return connector->GetManagementDomain();
+ return std::string();
+}

Powered by Google App Engine
This is Rietveld 408576698