diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-11 21:32:30 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-11 21:32:30 +0000 |
commit | 00d83804492baccb3228f51f51b82f60e67e2a52 (patch) | |
tree | 38c8162d4515d38a42858967752fca7aee29b0f9 /chrome | |
parent | 2ab48cac83473ac4024678c36afa2b05c449bd24 (diff) | |
download | chromium_src-00d83804492baccb3228f51f51b82f60e67e2a52.zip chromium_src-00d83804492baccb3228f51f51b82f60e67e2a52.tar.gz chromium_src-00d83804492baccb3228f51f51b82f60e67e2a52.tar.bz2 |
Refactors code to extract urls out of bookmark_utils and into GtkDndUtil.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/164322
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23082 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.cc | 37 | ||||
-rw-r--r-- | chrome/browser/gtk/gtk_dnd_util.cc | 42 | ||||
-rw-r--r-- | chrome/browser/gtk/gtk_dnd_util.h | 16 |
3 files changed, 70 insertions, 25 deletions
diff --git a/chrome/browser/gtk/bookmark_utils_gtk.cc b/chrome/browser/gtk/bookmark_utils_gtk.cc index 3d73794..4dd7297 100644 --- a/chrome/browser/gtk/bookmark_utils_gtk.cc +++ b/chrome/browser/gtk/bookmark_utils_gtk.cc @@ -291,36 +291,23 @@ std::vector<const BookmarkNode*> GetNodesFromSelection( bool CreateNewBookmarkFromNamedUrl(GtkSelectionData* selection_data, BookmarkModel* model, const BookmarkNode* parent, int idx) { - Pickle data(reinterpret_cast<char*>(selection_data->data), - selection_data->length); - void* iter = NULL; - std::string title_utf8, url_utf8; - bool rv = data.ReadString(&iter, &title_utf8); - rv = rv && data.ReadString(&iter, &url_utf8); - if (rv) { - GURL url(url_utf8); - if (title_utf8.empty()) - title_utf8 = GetNameForURL(url); - model->AddURL(parent, idx, UTF8ToWide(title_utf8), url); - } - return rv; + GURL url; + string16 title; + if (!GtkDndUtil::ExtractNamedURL(selection_data, &url, &title)) + return false; + + model->AddURL(parent, idx, UTF16ToWideHack(title), url); + return true; } bool CreateNewBookmarksFromURIList(GtkSelectionData* selection_data, BookmarkModel* model, const BookmarkNode* parent, int idx) { - gchar** uris = gtk_selection_data_get_uris(selection_data); - if (!uris) { - NOTREACHED(); - return false; - } - - for (size_t i = 0; uris[i] != NULL; ++i) { - GURL url(uris[i]); - std::string title = GetNameForURL(url); - model->AddURL(parent, idx++, UTF8ToWide(title), url); + std::vector<GURL> urls; + GtkDndUtil::ExtractURIList(selection_data, &urls); + for (size_t i = 0; i < urls.size(); ++i) { + std::string title = GetNameForURL(urls[i]); + model->AddURL(parent, idx++, UTF8ToWide(title), urls[i]); } - - g_strfreev(uris); return true; } diff --git a/chrome/browser/gtk/gtk_dnd_util.cc b/chrome/browser/gtk/gtk_dnd_util.cc index 92a5602..e3c20b5 100644 --- a/chrome/browser/gtk/gtk_dnd_util.cc +++ b/chrome/browser/gtk/gtk_dnd_util.cc @@ -4,7 +4,10 @@ #include "chrome/browser/gtk/gtk_dnd_util.h" +#include "base/string_util.h" #include "base/logging.h" +#include "base/pickle.h" +#include "googleurl/src/gurl.h" // static GdkAtom GtkDndUtil::GetAtomForTarget(int target) { @@ -107,3 +110,42 @@ void GtkDndUtil::AddTargetToList(GtkTargetList* targets, int target_code) { NOTREACHED() << " Unexpected target code: " << target_code; } } + +// static +bool GtkDndUtil::ExtractNamedURL(GtkSelectionData* selection_data, + GURL* url, + string16* title) { + Pickle data(reinterpret_cast<char*>(selection_data->data), + selection_data->length); + void* iter = NULL; + std::string title_utf8, url_utf8; + if (!data.ReadString(&iter, &title_utf8) || + !data.ReadString(&iter, &url_utf8)) { + return false; + } + + GURL gurl(url_utf8); + if (!gurl.is_valid()) + return false; + + *url = gurl; + *title = UTF8ToUTF16(title_utf8); + return true; +} + +// static void +bool GtkDndUtil::ExtractURIList(GtkSelectionData* selection_data, + std::vector<GURL>* urls) { + gchar** uris = gtk_selection_data_get_uris(selection_data); + if (!uris) + return false; + + for (size_t i = 0; uris[i] != NULL; ++i) { + GURL url(uris[i]); + if (url.is_valid()) + urls->push_back(url); + } + + g_strfreev(uris); + return true; +} diff --git a/chrome/browser/gtk/gtk_dnd_util.h b/chrome/browser/gtk/gtk_dnd_util.h index 2ac5433..07a218c 100644 --- a/chrome/browser/gtk/gtk_dnd_util.h +++ b/chrome/browser/gtk/gtk_dnd_util.h @@ -6,6 +6,11 @@ #define CHROME_BROWSER_GTK_GTK_DND_UTIL_H_ #include <gtk/gtk.h> +#include <vector> + +#include "base/string16.h" + +class GURL; class GtkDndUtil { public: @@ -45,6 +50,17 @@ class GtkDndUtil { // be sorted in preference order and should be terminated with -1. static void SetDestTargetList(GtkWidget* dest, const int* target_codes); + // Extracts data of type CHROME_NAMED_URL from |selection_data| into + // |url| and |title|. Returns true if the url/title were safely extracted + // and the url is valid. + static bool ExtractNamedURL(GtkSelectionData* selection_data, + GURL* url, + string16* title); + + // Extracts data of type TEXT_URI_LIST from |selection_data| into |urls|. + static bool ExtractURIList(GtkSelectionData* selection_data, + std::vector<GURL>* urls); + private: GtkDndUtil(); |