From 88cda498ca4cde55e70b54d09a23500e4a666c21 Mon Sep 17 00:00:00 2001 From: "gbillock@chromium.org" Date: Fri, 15 Jul 2011 21:40:40 +0000 Subject: [PATCH] Add support for text/html to bookmarks gtk drag/drop. R=estade@chromium.org BUG=none TEST=BookmarkUtilsGtkTest.WriteBookmarkToSelectionHTML Review URL: http://codereview.chromium.org/7377003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92744 0039d316-1c4b-4281-b951-d872f2087c98 --- .../ui/gtk/bookmarks/bookmark_utils_gtk.cc | 13 +++++++++++++ .../gtk/bookmarks/bookmark_utils_gtk_unittest.cc | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.cc b/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.cc index 4da5a629c7dabc..53cd58a1362977 100644 --- a/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.cc +++ b/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.cc @@ -290,6 +290,7 @@ int GetCodeMask(bool folder) { int rv = ui::CHROME_BOOKMARK_ITEM; if (!folder) { rv |= ui::TEXT_URI_LIST | + ui::TEXT_HTML | ui::TEXT_PLAIN | ui::NETSCAPE_URL; } @@ -351,6 +352,18 @@ void WriteBookmarksToSelection(const std::vector& nodes, free(uris); break; } + case ui::TEXT_HTML: { + std::string utf8_title = UTF16ToUTF8(nodes[0]->GetTitle()); + std::string utf8_html = StringPrintf("%s", + nodes[0]->GetURL().spec().c_str(), + utf8_title.c_str()); + gtk_selection_data_set(selection_data, + GetAtomForTarget(ui::TEXT_HTML), + kBitsInAByte, + reinterpret_cast(utf8_html.data()), + utf8_html.size()); + break; + } case ui::TEXT_PLAIN: { gtk_selection_data_set_text(selection_data, nodes[0]->GetURL().spec().c_str(), -1); diff --git a/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc b/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc index fa790fcef813fa..37aceadae96a46 100644 --- a/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc +++ b/chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc @@ -2,7 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include +#include "base/utf_string_conversions.h" +#include "chrome/browser/bookmarks/bookmark_model.h" #include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h" +#include "googleurl/src/gurl.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/dragdrop/gtk_dnd_util.h" @@ -36,3 +40,14 @@ TEST(BookmarkUtilsGtkTest, GetNodesFromSelectionInvalid) { ui::CHROME_BOOKMARK_ITEM, NULL, NULL, NULL); EXPECT_EQ(0u, nodes.size()); } + +TEST(BookmarkUtilsGtkTest, WriteBookmarkToSelectionHTML) { + BookmarkNode x(GURL("http://www.google.com")); + x.set_title(string16(ASCIIToUTF16("Google"))); + GtkSelectionData data; + data.data = NULL; + data.length = 0; + bookmark_utils::WriteBookmarkToSelection(&x, &data, ui::TEXT_HTML, NULL); + std::string selection(reinterpret_cast(data.data), data.length); + EXPECT_EQ("Google", selection); +}