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

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

Issue 319543003: Create the managed_node at the ChromeBookmarkClient. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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 e601cd40cecade1c1134807da64794470d76f4bf..55a60bd6c05107d2515f6ced505cd55bf79a4b44 100644
--- a/chrome/browser/bookmarks/chrome_bookmark_client.cc
+++ b/chrome/browser/bookmarks/chrome_bookmark_client.cc
@@ -5,7 +5,9 @@
#include "chrome/browser/bookmarks/chrome_bookmark_client.h"
#include "base/bind.h"
+#include "base/bind_helpers.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"
@@ -13,12 +15,20 @@
#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 "chrome/browser/profiles/startup_task_runner_service.h"
+#include "chrome/browser/profiles/startup_task_runner_service_factory.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_node.h"
+#include "content/public/browser/browser_thread.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 {
@@ -34,7 +44,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.
@@ -49,6 +65,10 @@ ChromeBookmarkClient::~ChromeBookmarkClient() {
registrar_.RemoveAll();
}
+bool ChromeBookmarkClient::IsDescendantOfManagedNode(const BookmarkNode* node) {
+ return node && node->HasAncestor(managed_node_);
+}
+
bool ChromeBookmarkClient::PreferTouchIcon() {
#if !defined(OS_IOS)
return false;
@@ -104,7 +124,10 @@ bool ChromeBookmarkClient::IsPermanentNodeVisible(
const BookmarkPermanentNode* node) {
DCHECK(node->type() == BookmarkNode::BOOKMARK_BAR ||
node->type() == BookmarkNode::OTHER_NODE ||
- node->type() == BookmarkNode::MOBILE);
+ node->type() == BookmarkNode::MOBILE ||
+ node == managed_node_);
+ if (node == managed_node_)
+ return false;
#if !defined(OS_IOS)
return node->type() != BookmarkNode::MOBILE;
#else
@@ -117,25 +140,36 @@ void ChromeBookmarkClient::RecordAction(const base::UserMetricsAction& action) {
}
bookmarks::LoadExtraCallback ChromeBookmarkClient::GetLoadExtraNodesCallback() {
- return base::Bind(&ChromeBookmarkClient::LoadExtraNodes);
+ // Create the managed_node now; it will be populated in the LoadExtraNodes
+ // callback.
+ managed_node_ = new BookmarkPermanentNode(0);
+ return base::Bind(
+ &ChromeBookmarkClient::LoadExtraNodes,
+ StartupTaskRunnerServiceFactory::GetForProfile(profile_)
+ ->GetBookmarkTaskRunner(),
+ managed_node_,
+ base::Passed(managed_bookmarks_tracker_.GetInitialManagedBookmarks()));
}
bool ChromeBookmarkClient::CanRemovePermanentNodeChildren(
const BookmarkNode* node) {
- return true;
+ return !IsDescendantOfManagedNode(node);
}
bool ChromeBookmarkClient::CanSetPermanentNodeTitle(
const BookmarkNode* permanent_node) {
- return false;
+ // The |managed_node_| can have its title updated if the user signs in or
+ // out.
+ return !IsDescendantOfManagedNode(permanent_node) ||
+ permanent_node == managed_node_;
}
bool ChromeBookmarkClient::CanSyncNode(const BookmarkNode* node) {
- return true;
+ return !IsDescendantOfManagedNode(node);
}
bool ChromeBookmarkClient::CanReorderChildren(const BookmarkNode* parent) {
- return true;
+ return !IsDescendantOfManagedNode(parent);
}
void ChromeBookmarkClient::Observe(
@@ -177,9 +211,40 @@ void ChromeBookmarkClient::BookmarkAllNodesRemoved(
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(
- int64* next_id) {
- // TODO(joaodasilva): load the managed node. http://crbug.com/49598
- return bookmarks::BookmarkPermanentNodeList();
+ const scoped_refptr<base::DeferredSequencedTaskRunner>& profile_io_runner,
+ BookmarkPermanentNode* managed_node,
+ scoped_ptr<base::ListValue> initial_managed_bookmarks,
+ int64* next_node_id) {
+ DCHECK(profile_io_runner->RunsTasksOnCurrentThread());
+ // Load the initial contents of the |managed_node| now, and assign it an
+ // unused ID.
+ int64 managed_id = *next_node_id;
+ managed_node->set_id(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();
}
« no previous file with comments | « chrome/browser/bookmarks/chrome_bookmark_client.h ('k') | chrome/browser/bookmarks/chrome_bookmark_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698