Commit 759a66d1 authored by hichris123's avatar hichris123 Committed by Commit bot

Allow copying of multiple bookmarks from within the bookmark manager.

BUG=57376

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

Cr-Commit-Position: refs/heads/master@{#300553}
parent f4efb8d1
...@@ -86,6 +86,7 @@ Changjun Yang <changjun.yang@intel.com> ...@@ -86,6 +86,7 @@ Changjun Yang <changjun.yang@intel.com>
Chansik Yun <chansik.yun@gmail.com> Chansik Yun <chansik.yun@gmail.com>
Chaobin Zhang <zhchbin@gmail.com> Chaobin Zhang <zhchbin@gmail.com>
Chris Harrelson <chrishtr@gmail.com> Chris Harrelson <chrishtr@gmail.com>
Chris Nardi <hichris123@gmail.com>
Christophe Dumez <ch.dumez@samsung.com> Christophe Dumez <ch.dumez@samsung.com>
Christopher Dale <chrelad@gmail.com> Christopher Dale <chrelad@gmail.com>
Clemens Fruhwirth <clemens@endorphin.org> Clemens Fruhwirth <clemens@endorphin.org>
......
...@@ -177,6 +177,22 @@ void BookmarkNodeData::WriteToClipboard(ui::ClipboardType clipboard_type) { ...@@ -177,6 +177,22 @@ void BookmarkNodeData::WriteToClipboard(ui::ClipboardType clipboard_type) {
// on Linux (on Windows and Mac, there is no difference between these // on Linux (on Windows and Mac, there is no difference between these
// functions). // functions).
scw.WriteText(base::UTF8ToUTF16(url)); scw.WriteText(base::UTF8ToUTF16(url));
} else {
// We have either more than one URL, a folder, or a combination of URLs
// and folders.
base::string16 text;
for (size_t i = 0; i < elements.size(); i++) {
text += i == 0 ? base::ASCIIToUTF16("") : base::ASCIIToUTF16("\n");
if (!elements[i].is_url) {
// Then it's a folder. Only copy the name of the folder.
const base::string16 title = elements[i].title;
text += title;
} else {
const base::string16 url = base::UTF8ToUTF16(elements[i].url.spec());
text += url;
}
}
scw.WriteText(text);
} }
Pickle pickle; Pickle pickle;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/files/scoped_temp_dir.h" #include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_model.h"
...@@ -12,6 +13,7 @@ ...@@ -12,6 +13,7 @@
#include "components/bookmarks/test/bookmark_test_helpers.h" #include "components/bookmarks/test/bookmark_test_helpers.h"
#include "components/bookmarks/test/test_bookmark_client.h" #include "components/bookmarks/test/test_bookmark_client.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/dragdrop/os_exchange_data.h" #include "ui/base/dragdrop/os_exchange_data.h"
#include "ui/events/platform/platform_event_source.h" #include "ui/events/platform/platform_event_source.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -37,17 +39,22 @@ class BookmarkNodeDataTest : public testing::Test { ...@@ -37,17 +39,22 @@ class BookmarkNodeDataTest : public testing::Test {
event_source_.reset(); event_source_.reset();
bool success = profile_dir_.Delete(); bool success = profile_dir_.Delete();
ASSERT_TRUE(success); ASSERT_TRUE(success);
ui::Clipboard::DestroyClipboardForCurrentThread();
} }
const base::FilePath& GetProfilePath() const { return profile_dir_.path(); } const base::FilePath& GetProfilePath() const { return profile_dir_.path(); }
BookmarkModel* model() { return model_.get(); } BookmarkModel* model() { return model_.get(); }
protected:
ui::Clipboard& clipboard() { return *ui::Clipboard::GetForCurrentThread(); }
private: private:
base::ScopedTempDir profile_dir_; base::ScopedTempDir profile_dir_;
TestBookmarkClient client_; TestBookmarkClient client_;
scoped_ptr<BookmarkModel> model_; scoped_ptr<BookmarkModel> model_;
scoped_ptr<ui::PlatformEventSource> event_source_; scoped_ptr<ui::PlatformEventSource> event_source_;
base::MessageLoopForUI loop_;
DISALLOW_COPY_AND_ASSIGN(BookmarkNodeDataTest); DISALLOW_COPY_AND_ASSIGN(BookmarkNodeDataTest);
}; };
...@@ -269,6 +276,91 @@ TEST_F(BookmarkNodeDataTest, MultipleNodes) { ...@@ -269,6 +276,91 @@ TEST_F(BookmarkNodeDataTest, MultipleNodes) {
EXPECT_TRUE(read_data.GetFirstNode(model(), GetProfilePath()) == NULL); EXPECT_TRUE(read_data.GetFirstNode(model(), GetProfilePath()) == NULL);
} }
TEST_F(BookmarkNodeDataTest, WriteToClipboardMultipleURLs) {
BookmarkNodeData data;
const BookmarkNode* root = model()->bookmark_bar_node();
GURL url(GURL("http://foo.com"));
const base::string16 title(ASCIIToUTF16("blah"));
GURL url2(GURL("http://bar.com"));
const base::string16 title2(ASCIIToUTF16("blah2"));
const BookmarkNode* url_node = model()->AddURL(root, 0, title, url);
const BookmarkNode* url_node2 = model()->AddURL(root, 1, title2, url2);
std::vector<const BookmarkNode*> nodes;
nodes.push_back(url_node);
nodes.push_back(url_node2);
data.ReadFromVector(nodes);
data.WriteToClipboard(ui::CLIPBOARD_TYPE_COPY_PASTE);
// Now read the data back in.
base::string16 combined_text;
base::string16 new_line = base::ASCIIToUTF16("\n");
combined_text = base::UTF8ToUTF16(url.spec()) + new_line
+ base::UTF8ToUTF16(url2.spec());
base::string16 clipboard_result;
clipboard().ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &clipboard_result);
EXPECT_EQ(combined_text, clipboard_result);
}
TEST_F(BookmarkNodeDataTest, WriteToClipboardEmptyFolder) {
BookmarkNodeData data;
const BookmarkNode* root = model()->bookmark_bar_node();
const BookmarkNode* folder = model()->AddFolder(root, 0, ASCIIToUTF16("g1"));
std::vector<const BookmarkNode*> nodes;
nodes.push_back(folder);
data.ReadFromVector(nodes);
data.WriteToClipboard(ui::CLIPBOARD_TYPE_COPY_PASTE);
// Now read the data back in.
base::string16 clipboard_result;
clipboard().ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &clipboard_result);
EXPECT_EQ(base::ASCIIToUTF16("g1"), clipboard_result);
}
TEST_F(BookmarkNodeDataTest, WriteToClipboardFolderWithChildren) {
BookmarkNodeData data;
const BookmarkNode* root = model()->bookmark_bar_node();
const BookmarkNode* folder = model()->AddFolder(root, 0, ASCIIToUTF16("g1"));
GURL url(GURL("http://foo.com"));
const base::string16 title(ASCIIToUTF16("blah"));
model()->AddURL(folder, 0, title, url);
std::vector<const BookmarkNode*> nodes;
nodes.push_back(folder);
data.ReadFromVector(nodes);
data.WriteToClipboard(ui::CLIPBOARD_TYPE_COPY_PASTE);
// Now read the data back in.
base::string16 clipboard_result;
clipboard().ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &clipboard_result);
EXPECT_EQ(base::ASCIIToUTF16("g1"), clipboard_result);
}
TEST_F(BookmarkNodeDataTest, WriteToClipboardFolderAndURL) {
BookmarkNodeData data;
GURL url(GURL("http://foo.com"));
const base::string16 title(ASCIIToUTF16("blah"));
const BookmarkNode* root = model()->bookmark_bar_node();
const BookmarkNode* url_node = model()->AddURL(root, 0, title, url);
const BookmarkNode* folder = model()->AddFolder(root, 0, ASCIIToUTF16("g1"));
std::vector<const BookmarkNode*> nodes;
nodes.push_back(url_node);
nodes.push_back(folder);
data.ReadFromVector(nodes);
data.WriteToClipboard(ui::CLIPBOARD_TYPE_COPY_PASTE);
// Now read the data back in.
base::string16 combined_text;
base::string16 new_line = base::ASCIIToUTF16("\n");
base::string16 folder_title = ASCIIToUTF16("g1");
combined_text = base::ASCIIToUTF16(url.spec()) + new_line + folder_title;
base::string16 clipboard_result;
clipboard().ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &clipboard_result);
EXPECT_EQ(combined_text, clipboard_result);
}
// Tests reading/writing of meta info. // Tests reading/writing of meta info.
TEST_F(BookmarkNodeDataTest, MetaInfo) { TEST_F(BookmarkNodeDataTest, MetaInfo) {
// Create a node containing meta info. // Create a node containing meta info.
......
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