Skip to content

Commit

Permalink
Added date_added and folder_modification_time to BookmarkNodeData.
Browse files Browse the repository at this point in the history
BookmarkNodeData holds values for date_added and folder_modification_time
so that it will be possible for bookmark_utils::CloneBookmarkNode can
keep those values for cloned nodes.

This change should not have any change in behavior.

BUG=126092
R=sky@chromium.org

Review URL: https://chromiumcodereview.appspot.com/22855011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218891 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
tom.cassiotis@gmail.com committed Aug 22, 2013
1 parent f827a8c commit 7be9c7d
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 11 deletions.
2 changes: 1 addition & 1 deletion chrome/browser/bookmarks/bookmark_model.cc
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ void BookmarkModel::Copy(const BookmarkNode* node,
std::vector<BookmarkNodeData::Element> elements(drag_data.elements);
// CloneBookmarkNode will use BookmarkModel methods to do the job, so we
// don't need to send notifications here.
bookmark_utils::CloneBookmarkNode(this, elements, new_parent, index);
bookmark_utils::CloneBookmarkNode(this, elements, new_parent, index, true);

if (store_.get())
store_->ScheduleSave();
Expand Down
4 changes: 4 additions & 0 deletions chrome/browser/bookmarks/bookmark_node_data.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ BookmarkNodeData::Element::Element(const BookmarkNode* node)
: is_url(node->is_url()),
url(node->url()),
title(node->GetTitle()),
date_added(node->date_added()),
date_folder_modified(node->date_folder_modified()),
id_(node->id()) {
for (int i = 0; i < node->child_count(); ++i)
children.push_back(Element(node->GetChild(i)));
Expand Down Expand Up @@ -58,6 +60,8 @@ bool BookmarkNodeData::Element::ReadFromPickle(Pickle* pickle,
return false;
}
url = GURL(url_spec);
date_added = base::Time();
date_folder_modified = base::Time();
children.clear();
if (!is_url) {
uint64 children_count;
Expand Down
7 changes: 7 additions & 0 deletions chrome/browser/bookmarks/bookmark_node_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include "base/files/file_path.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "url/gurl.h"

#if defined(TOOLKIT_VIEWS)
Expand Down Expand Up @@ -54,6 +55,12 @@ struct BookmarkNodeData {
// Title of the entry, used for both urls and folders.
string16 title;

// Date of when this node was created.
base::Time date_added;

// Date of the last modification. Only used for folders.
base::Time date_folder_modified;

// Children, only used for non-URL nodes.
std::vector<Element> children;

Expand Down
16 changes: 16 additions & 0 deletions chrome/browser/bookmarks/bookmark_node_data_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ TEST_F(BookmarkNodeDataTest, JustURL) {
EXPECT_TRUE(drag_data.elements[0].is_url);
EXPECT_EQ(url, drag_data.elements[0].url);
EXPECT_EQ(title, drag_data.elements[0].title);
EXPECT_TRUE(drag_data.elements[0].date_added.is_null());
EXPECT_TRUE(drag_data.elements[0].date_folder_modified.is_null());
EXPECT_EQ(0, drag_data.elements[0].children.size());
}

Expand All @@ -84,6 +86,9 @@ TEST_F(BookmarkNodeDataTest, URL) {
EXPECT_TRUE(drag_data.elements[0].is_url);
EXPECT_EQ(url, drag_data.elements[0].url);
EXPECT_EQ(title, drag_data.elements[0].title);
EXPECT_EQ(node->date_added(), drag_data.elements[0].date_added);
EXPECT_EQ(node->date_folder_modified(),
drag_data.elements[0].date_folder_modified);
ui::OSExchangeData data;
drag_data.Write(&profile, &data);

Expand All @@ -96,6 +101,8 @@ TEST_F(BookmarkNodeDataTest, URL) {
EXPECT_TRUE(read_data.elements[0].is_url);
EXPECT_EQ(url, read_data.elements[0].url);
EXPECT_EQ(title, read_data.elements[0].title);
EXPECT_TRUE(read_data.elements[0].date_added.is_null());
EXPECT_TRUE(read_data.elements[0].date_folder_modified.is_null());
EXPECT_TRUE(read_data.GetFirstNode(&profile) == node);

// Make sure asking for the node with a different profile returns NULL.
Expand Down Expand Up @@ -129,6 +136,9 @@ TEST_F(BookmarkNodeDataTest, Folder) {
ASSERT_EQ(1, drag_data.elements.size());
EXPECT_EQ(g12->GetTitle(), drag_data.elements[0].title);
EXPECT_FALSE(drag_data.elements[0].is_url);
EXPECT_EQ(g12->date_added(), drag_data.elements[0].date_added);
EXPECT_EQ(g12->date_folder_modified(),
drag_data.elements[0].date_folder_modified);

ui::OSExchangeData data;
drag_data.Write(&profile, &data);
Expand All @@ -141,6 +151,8 @@ TEST_F(BookmarkNodeDataTest, Folder) {
ASSERT_EQ(1, read_data.elements.size());
EXPECT_EQ(g12->GetTitle(), read_data.elements[0].title);
EXPECT_FALSE(read_data.elements[0].is_url);
EXPECT_TRUE(read_data.elements[0].date_added.is_null());
EXPECT_TRUE(read_data.elements[0].date_folder_modified.is_null());

// We should get back the same node when asking for the same profile.
const BookmarkNode* r_g12 = read_data.GetFirstNode(&profile);
Expand Down Expand Up @@ -185,6 +197,8 @@ TEST_F(BookmarkNodeDataTest, FolderWithChild) {
EXPECT_TRUE(read_child.is_url);
EXPECT_EQ(title, read_child.title);
EXPECT_EQ(url, read_child.url);
EXPECT_TRUE(read_data.elements[0].date_added.is_null());
EXPECT_TRUE(read_data.elements[0].date_folder_modified.is_null());
EXPECT_TRUE(read_child.is_url);

// And make sure we get the node back.
Expand Down Expand Up @@ -224,6 +238,8 @@ TEST_F(BookmarkNodeDataTest, MultipleNodes) {
EXPECT_TRUE(read_data.is_valid());
ASSERT_EQ(2, read_data.elements.size());
ASSERT_EQ(1, read_data.elements[0].children.size());
EXPECT_TRUE(read_data.elements[0].date_added.is_null());
EXPECT_TRUE(read_data.elements[0].date_folder_modified.is_null());

const BookmarkNodeData::Element& read_folder = read_data.elements[0];
EXPECT_FALSE(read_folder.is_url);
Expand Down
29 changes: 22 additions & 7 deletions chrome/browser/bookmarks/bookmark_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,27 @@ namespace {
void CloneBookmarkNodeImpl(BookmarkModel* model,
const BookmarkNodeData::Element& element,
const BookmarkNode* parent,
int index_to_add_at) {
int index_to_add_at,
bool reset_node_times) {
if (element.is_url) {
model->AddURL(parent, index_to_add_at, element.title, element.url);
if (reset_node_times) {
model->AddURL(parent, index_to_add_at, element.title, element.url);
} else {
DCHECK(!element.date_added.is_null());
model->AddURLWithCreationTime(parent, index_to_add_at, element.title,
element.url, element.date_added);
}
} else {
const BookmarkNode* new_folder = model->AddFolder(parent,
index_to_add_at,
element.title);
if (!reset_node_times) {
DCHECK(!element.date_folder_modified.is_null());
model->SetDateFolderModified(new_folder, element.date_folder_modified);
}
for (int i = 0; i < static_cast<int>(element.children.size()); ++i)
CloneBookmarkNodeImpl(model, element.children[i], new_folder, i);
CloneBookmarkNodeImpl(model, element.children[i], new_folder, i,
reset_node_times);
}
}

Expand Down Expand Up @@ -83,13 +95,16 @@ namespace bookmark_utils {
void CloneBookmarkNode(BookmarkModel* model,
const std::vector<BookmarkNodeData::Element>& elements,
const BookmarkNode* parent,
int index_to_add_at) {
int index_to_add_at,
bool reset_node_times) {
if (!parent->is_folder() || !model) {
NOTREACHED();
return;
}
for (size_t i = 0; i < elements.size(); ++i)
CloneBookmarkNodeImpl(model, elements[i], parent, index_to_add_at + i);
for (size_t i = 0; i < elements.size(); ++i) {
CloneBookmarkNodeImpl(model, elements[i], parent, index_to_add_at + i,
reset_node_times);
}
}


Expand Down Expand Up @@ -122,7 +137,7 @@ void PasteFromClipboard(BookmarkModel* model,

if (index == -1)
index = parent->child_count();
CloneBookmarkNode(model, bookmark_data.elements, parent, index);
CloneBookmarkNode(model, bookmark_data.elements, parent, index, true);
}

bool CanPasteFromClipboard(const BookmarkNode* node) {
Expand Down
7 changes: 5 additions & 2 deletions chrome/browser/bookmarks/bookmark_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,14 @@ class PrefRegistrySyncable;
namespace bookmark_utils {

// Clones bookmark node, adding newly created nodes to |parent| starting at
// |index_to_add_at|.
// |index_to_add_at|. If |reset_node_times| is true cloned bookmarks and
// folders will receive new creation times and folder modification times
// instead of using the values stored in |elements|.
void CloneBookmarkNode(BookmarkModel* model,
const std::vector<BookmarkNodeData::Element>& elements,
const BookmarkNode* parent,
int index_to_add_at);
int index_to_add_at,
bool reset_node_times);

// Copies nodes onto the clipboard. If |remove_nodes| is true the nodes are
// removed after copied to the clipboard. The nodes are copied in such a way
Expand Down
3 changes: 2 additions & 1 deletion chrome/browser/ui/bookmarks/bookmark_drag_drop.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ int DropBookmarks(Profile* profile,
return ui::DragDropTypes::DRAG_NONE;
}
// Dropping a folder from different profile. Always accept.
bookmark_utils::CloneBookmarkNode(model, data.elements, parent_node, index);
bookmark_utils::CloneBookmarkNode(model, data.elements, parent_node,
index, true);
return ui::DragDropTypes::DRAG_COPY;
}

Expand Down

0 comments on commit 7be9c7d

Please sign in to comment.