Commit e0d79f06 authored by aruslan@chromium.org's avatar aruslan@chromium.org

[Android] Allow non-editable partner bookmarks.

BUG=352263
TESTS=PartnerBookmarksShimTest
NOTRY=True

Review URL: https://codereview.chromium.org/215693002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260233 0039d316-1c4b-4281-b951-d872f2087c98
parent 752a5ebc
......@@ -278,7 +278,7 @@ bool BookmarksBridge::IsEditable(const BookmarkNode* node) const {
if (!IsEditBookmarksEnabled())
return false;
if (partner_bookmarks_shim_->IsPartnerBookmark(node))
return true;
return partner_bookmarks_shim_->IsEditable(node);
return !managed_bookmarks_shim_->IsManagedBookmark(node);
}
......
......@@ -42,6 +42,8 @@ static const char kMappingUrl[] = "url";
static const char kMappingProviderTitle[] = "provider_title";
static const char kMappingTitle[] = "mapped_title";
static bool g_disable_partner_bookmarks_editing = false;
} // namespace
// static
......@@ -70,6 +72,11 @@ void PartnerBookmarksShim::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
}
// static
void PartnerBookmarksShim::DisablePartnerBookmarksEditing() {
g_disable_partner_bookmarks_editing = true;
}
bool PartnerBookmarksShim::IsLoaded() const {
return g_partner_model_keeper.Get().loaded;
}
......@@ -83,21 +90,34 @@ bool PartnerBookmarksShim::IsReachable(const BookmarkNode* node) const {
DCHECK(IsPartnerBookmark(node));
if (!HasPartnerBookmarks())
return false;
for (const BookmarkNode* i = node; i != NULL; i = i->parent()) {
const NodeRenamingMapKey key(i->url(), i->GetTitle());
NodeRenamingMap::const_iterator remap = node_rename_remove_map_.find(key);
if (remap != node_rename_remove_map_.end() && remap->second.empty())
return false;
if (!g_disable_partner_bookmarks_editing) {
for (const BookmarkNode* i = node; i != NULL; i = i->parent()) {
const NodeRenamingMapKey key(i->url(), i->GetTitle());
NodeRenamingMap::const_iterator remap = node_rename_remove_map_.find(key);
if (remap != node_rename_remove_map_.end() && remap->second.empty())
return false;
}
}
return true;
}
bool PartnerBookmarksShim::IsEditable(const BookmarkNode* node) const {
DCHECK(IsPartnerBookmark(node));
if (!HasPartnerBookmarks())
return false;
if (g_disable_partner_bookmarks_editing)
return false;
return true;
}
void PartnerBookmarksShim::RemoveBookmark(const BookmarkNode* node) {
DCHECK(IsEditable(node));
RenameBookmark(node, base::string16());
}
void PartnerBookmarksShim::RenameBookmark(const BookmarkNode* node,
const base::string16& title) {
DCHECK(IsEditable(node));
const NodeRenamingMapKey key(node->url(), node->GetTitle());
node_rename_remove_map_[key] = title;
SaveNodeMapping();
......@@ -126,10 +146,12 @@ base::string16 PartnerBookmarksShim::GetTitle(const BookmarkNode* node) const {
DCHECK(node);
DCHECK(IsPartnerBookmark(node));
const NodeRenamingMapKey key(node->url(), node->GetTitle());
NodeRenamingMap::const_iterator i = node_rename_remove_map_.find(key);
if (i != node_rename_remove_map_.end())
return i->second;
if (!g_disable_partner_bookmarks_editing) {
const NodeRenamingMapKey key(node->url(), node->GetTitle());
NodeRenamingMap::const_iterator i = node_rename_remove_map_.find(key);
if (i != node_rename_remove_map_.end())
return i->second;
}
return node->GetTitle();
}
......@@ -184,6 +206,11 @@ void PartnerBookmarksShim::ClearPartnerModelForTesting() {
g_partner_model_keeper.Get().partner_bookmarks_root.reset(0);
}
// static
void PartnerBookmarksShim::EnablePartnerBookmarksEditing() {
g_disable_partner_bookmarks_editing = false;
}
PartnerBookmarksShim::PartnerBookmarksShim(PrefService* prefs)
: prefs_(prefs),
observers_(
......
......@@ -36,6 +36,14 @@ class PartnerBookmarksShim : public base::SupportsUserData::Data {
// Registers preferences.
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// Disables the editing and stops any edits from being applied.
// The user will start to see the original (unedited) partner bookmarks.
// Edits are stored in the user profile, so once the editing is enabled
// ("not disabled") the user would see the edited partner bookmarks.
// This method should be called as early as possible: it does NOT send any
// notifications to already existing shims.
static void DisablePartnerBookmarksEditing();
// Returns true if everything got loaded.
bool IsLoaded() const;
......@@ -46,6 +54,9 @@ class PartnerBookmarksShim : public base::SupportsUserData::Data {
// nor any of its parents were "removed").
bool IsReachable(const BookmarkNode* node) const;
// Returns true if a given node is editable and if editing is allowed.
bool IsEditable(const BookmarkNode* node) const;
// Removes a given bookmark.
// Makes the |node| (and, consequently, all its children) unreachable.
void RemoveBookmark(const BookmarkNode* node);
......@@ -104,6 +115,9 @@ class PartnerBookmarksShim : public base::SupportsUserData::Data {
// For testing: clears partner bookmark model data.
static void ClearPartnerModelForTesting();
// For testing: re-enables partner bookmarks editing.
static void EnablePartnerBookmarksEditing();
private:
explicit PartnerBookmarksShim(PrefService* prefs);
virtual ~PartnerBookmarksShim();
......
......@@ -70,6 +70,7 @@ class PartnerBookmarksShimTest : public testing::Test {
virtual void TearDown() OVERRIDE {
PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
PartnerBookmarksShim::ClearPartnerModelForTesting();
PartnerBookmarksShim::EnablePartnerBookmarksEditing();
profile_.reset(NULL);
}
......@@ -371,3 +372,41 @@ TEST_F(PartnerBookmarksShimTest, SaveLoadProfile) {
EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
}
}
TEST_F(PartnerBookmarksShimTest, DisableEditing) {
PartnerBookmarksShim* shim = partner_bookmarks_shim();
shim->AddObserver(&observer_);
EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
BookmarkNode* partner_bookmark1 = new BookmarkNode(3, GURL("http://a"));
partner_bookmark1->set_type(BookmarkNode::URL);
partner_bookmark1->SetTitle(base::ASCIIToUTF16("a"));
root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
BookmarkNode* partner_bookmark2 = new BookmarkNode(3, GURL("http://b"));
partner_bookmark2->set_type(BookmarkNode::URL);
partner_bookmark2->SetTitle(base::ASCIIToUTF16("b"));
root_partner_node->Add(partner_bookmark2, root_partner_node->child_count());
ASSERT_FALSE(shim->IsLoaded());
EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
shim->SetPartnerBookmarksRoot(root_partner_node);
ASSERT_TRUE(shim->IsLoaded());
// Check that edits work by default.
EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
shim->RenameBookmark(partner_bookmark1, base::ASCIIToUTF16("a2.com"));
shim->RemoveBookmark(partner_bookmark2);
EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
// Disable edits and check that edits are not applied anymore.
PartnerBookmarksShim::DisablePartnerBookmarksEditing();
EXPECT_EQ(base::ASCIIToUTF16("a"), shim->GetTitle(partner_bookmark1));
EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment