GoogleURLTrackerInfoBarDelegate: Initialize uninitialized member in constructor.
[chromium-blink-merge.git] / chrome / browser / android / bookmarks / managed_bookmarks_shim.cc
blob644fd2dbd2370b6082277cbe8bd0b07e72c679f9
1 // Copyright 2013 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.
5 #include "chrome/browser/android/bookmarks/managed_bookmarks_shim.h"
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/prefs/pref_service.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/policy/managed_bookmarks_policy_handler.h"
12 #include "chrome/common/pref_names.h"
13 #include "components/bookmarks/browser/bookmark_model.h"
14 #include "google_apis/gaia/gaia_auth_util.h"
15 #include "grit/components_strings.h"
16 #include "ui/base/l10n/l10n_util.h"
18 using policy::ManagedBookmarksPolicyHandler;
20 ManagedBookmarksShim::ManagedBookmarksShim(PrefService* prefs)
21 : prefs_(prefs) {
22 registrar_.Init(prefs_);
23 registrar_.Add(
24 prefs::kManagedBookmarks,
25 base::Bind(&ManagedBookmarksShim::Reload, base::Unretained(this)));
26 Reload();
29 ManagedBookmarksShim::~ManagedBookmarksShim() {}
31 void ManagedBookmarksShim::AddObserver(Observer* observer) {
32 observers_.AddObserver(observer);
35 void ManagedBookmarksShim::RemoveObserver(Observer* observer) {
36 observers_.RemoveObserver(observer);
39 bool ManagedBookmarksShim::HasManagedBookmarks() const {
40 return !root_->empty();
43 bool ManagedBookmarksShim::IsManagedBookmark(const BookmarkNode* node) const {
44 while (node != NULL) {
45 if (node == root_.get())
46 return true;
47 node = node->parent();
49 return false;
52 const BookmarkNode* ManagedBookmarksShim::GetManagedBookmarksRoot() const {
53 return root_.get();
56 const BookmarkNode* ManagedBookmarksShim::GetNodeByID(int64 id) const {
57 if (root_->id() == id)
58 return root_.get();
59 for (int i = 0; i < root_->child_count(); ++i) {
60 const BookmarkNode* child = root_->GetChild(i);
61 if (child->id() == id)
62 return child;
64 return NULL;
67 void ManagedBookmarksShim::Reload() {
68 std::string domain;
69 std::string username = prefs_->GetString(prefs::kGoogleServicesUsername);
70 if (!username.empty())
71 domain = gaia::ExtractDomainName(username);
72 base::string16 root_node_name;
73 if (domain.empty()) {
74 root_node_name =
75 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME);
76 } else {
77 root_node_name = l10n_util::GetStringFUTF16(
78 IDS_BOOKMARK_BAR_MANAGED_FOLDER_DOMAIN_NAME, base::UTF8ToUTF16(domain));
81 root_.reset(new BookmarkPermanentNode(0));
82 root_->SetTitle(root_node_name);
84 const base::ListValue* list = prefs_->GetList(prefs::kManagedBookmarks);
85 int64 id = 1;
86 if (list) {
87 for (base::ListValue::const_iterator it = list->begin();
88 it != list->end(); ++it) {
89 const base::DictionaryValue* dict = NULL;
90 if (!*it || !(*it)->GetAsDictionary(&dict)) {
91 NOTREACHED();
92 continue;
95 base::string16 name;
96 std::string url;
97 if (!dict->GetString(ManagedBookmarksPolicyHandler::kName, &name) ||
98 !dict->GetString(ManagedBookmarksPolicyHandler::kUrl, &url)) {
99 NOTREACHED();
100 continue;
103 BookmarkNode* node = new BookmarkNode(id++, GURL(url));
104 node->set_type(BookmarkNode::URL);
105 node->SetTitle(name);
106 root_->Add(node, root_->child_count());
110 FOR_EACH_OBSERVER(Observer, observers_, OnManagedBookmarksChanged());