Commit a54214a5 authored by ankit2.kumar's avatar ankit2.kumar Committed by Commit bot

Show paste option on right click of bookmark bar if some URL is copied from...

Show paste option on right click of bookmark bar if some URL is copied from outside browser or from any page content

Paste option was not appearing when some URL is copied from outside browser
or web page content. But if some URL is copied from url bar the paste option
appears when right click is performed on bookmark bar. Added check in
CanPasteFromClipboard to handle this scenario.

BUG=400644

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

Cr-Commit-Position: refs/heads/master@{#294380}
parent d6f59232
......@@ -22,6 +22,7 @@
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/query_parser/query_parser.h"
#include "net/base/net_util.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/models/tree_node_iterator.h"
#include "url/gurl.h"
......@@ -143,6 +144,17 @@ std::string TruncateUrl(const std::string& url) {
return url.substr(0, kCleanedUpUrlMaxLength);
}
// Returns the URL from the clipboard. If there is no URL an empty URL is
// returned.
GURL GetUrlFromClipboard() {
base::string16 url_text;
#if !defined(OS_IOS)
ui::Clipboard::GetForCurrentThread()->ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE,
&url_text);
#endif
return GURL(url_text);
}
} // namespace
QueryFields::QueryFields() {}
......@@ -196,9 +208,14 @@ void PasteFromClipboard(BookmarkModel* model,
return;
BookmarkNodeData bookmark_data;
if (!bookmark_data.ReadFromClipboard(ui::CLIPBOARD_TYPE_COPY_PASTE))
return;
if (!bookmark_data.ReadFromClipboard(ui::CLIPBOARD_TYPE_COPY_PASTE)) {
GURL url = GetUrlFromClipboard();
if (!url.is_valid())
return;
BookmarkNode node(url);
node.SetTitle(base::ASCIIToUTF16(url.spec()));
bookmark_data = BookmarkNodeData(&node);
}
if (index == -1)
index = parent->child_count();
ScopedGroupBookmarkActions group_paste(model);
......@@ -208,7 +225,8 @@ void PasteFromClipboard(BookmarkModel* model,
bool CanPasteFromClipboard(BookmarkModel* model, const BookmarkNode* node) {
if (!node || !model->client()->CanBeEditedByUser(node))
return false;
return BookmarkNodeData::ClipboardContainsBookmarks();
return (BookmarkNodeData::ClipboardContainsBookmarks() ||
GetUrlFromClipboard().is_valid());
}
std::vector<const BookmarkNode*> GetMostRecentlyModifiedUserFolders(
......
......@@ -257,6 +257,38 @@ TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) {
// Copy and paste is not yet supported on iOS. http://crbug.com/228147
#if !defined(OS_IOS)
TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) {
TestBookmarkClient client;
scoped_ptr<BookmarkModel> model(client.CreateModel());
const base::string16 url_text = ASCIIToUTF16("http://www.google.com/");
const BookmarkNode* new_folder = model->AddFolder(
model->bookmark_bar_node(), 0, ASCIIToUTF16("New_Folder"));
// Write blank text to clipboard.
{
ui::ScopedClipboardWriter clipboard_writer(
ui::Clipboard::GetForCurrentThread(), ui::CLIPBOARD_TYPE_COPY_PASTE);
clipboard_writer.WriteText(base::string16());
}
// Now we shouldn't be able to paste from the clipboard.
EXPECT_FALSE(CanPasteFromClipboard(model.get(), new_folder));
// Write some valid url to the clipboard.
{
ui::ScopedClipboardWriter clipboard_writer(
ui::Clipboard::GetForCurrentThread(), ui::CLIPBOARD_TYPE_COPY_PASTE);
clipboard_writer.WriteText(url_text);
}
// Now we should be able to paste from the clipboard.
EXPECT_TRUE(CanPasteFromClipboard(model.get(), new_folder));
PasteFromClipboard(model.get(), new_folder, 0);
ASSERT_EQ(1, new_folder->child_count());
// Url for added node should be same as url_text.
EXPECT_EQ(url_text, ASCIIToUTF16(new_folder->GetChild(0)->url().spec()));
}
TEST_F(BookmarkUtilsTest, CopyPaste) {
TestBookmarkClient client;
scoped_ptr<BookmarkModel> model(client.CreateModel());
......
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