summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-11 21:32:30 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-11 21:32:30 +0000
commit00d83804492baccb3228f51f51b82f60e67e2a52 (patch)
tree38c8162d4515d38a42858967752fca7aee29b0f9 /chrome
parent2ab48cac83473ac4024678c36afa2b05c449bd24 (diff)
downloadchromium_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.cc37
-rw-r--r--chrome/browser/gtk/gtk_dnd_util.cc42
-rw-r--r--chrome/browser/gtk/gtk_dnd_util.h16
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();