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"
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
)
22 registrar_
.Init(prefs_
);
24 prefs::kManagedBookmarks
,
25 base::Bind(&ManagedBookmarksShim::Reload
, base::Unretained(this)));
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())
47 node
= node
->parent();
52 const BookmarkNode
* ManagedBookmarksShim::GetManagedBookmarksRoot() const {
56 const BookmarkNode
* ManagedBookmarksShim::GetNodeByID(int64 id
) const {
57 if (root_
->id() == id
)
59 for (int i
= 0; i
< root_
->child_count(); ++i
) {
60 const BookmarkNode
* child
= root_
->GetChild(i
);
61 if (child
->id() == id
)
67 void ManagedBookmarksShim::Reload() {
69 std::string username
= prefs_
->GetString(prefs::kGoogleServicesUsername
);
70 if (!username
.empty())
71 domain
= gaia::ExtractDomainName(username
);
72 base::string16 root_node_name
;
75 l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_MANAGED_FOLDER_DEFAULT_NAME
);
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
);
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
)) {
97 if (!dict
->GetString(ManagedBookmarksPolicyHandler::kName
, &name
) ||
98 !dict
->GetString(ManagedBookmarksPolicyHandler::kUrl
, &url
)) {
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());