OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/bookmarks/bookmark_node_data.h" | 5 #include "chrome/browser/bookmarks/bookmark_node_data.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/pickle.h" | 10 #include "base/pickle.h" |
11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
13 #include "chrome/browser/bookmarks/bookmark_model.h" | 13 #include "chrome/browser/bookmarks/bookmark_model.h" |
14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
15 #include "chrome/common/url_constants.h" | 15 #include "chrome/common/url_constants.h" |
16 #include "net/base/escape.h" | 16 #include "net/base/escape.h" |
17 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 17 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
| 18 #include "ui/base/dragdrop/bookmark_format.h" |
18 | 19 |
19 #if defined(OS_MACOSX) | 20 #if defined(OS_MACOSX) |
20 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h" | 21 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h" |
21 #else | 22 #else |
22 #include "chrome/browser/browser_process.h" | 23 #include "chrome/browser/browser_process.h" |
23 #endif | 24 #endif |
24 | 25 |
25 const char* BookmarkNodeData::kClipboardFormatString = | |
26 "chromium/x-bookmark-entries"; | |
27 | |
28 BookmarkNodeData::Element::Element() : is_url(false), id_(0) { | 26 BookmarkNodeData::Element::Element() : is_url(false), id_(0) { |
29 } | 27 } |
30 | 28 |
31 BookmarkNodeData::Element::Element(const BookmarkNode* node) | 29 BookmarkNodeData::Element::Element(const BookmarkNode* node) |
32 : is_url(node->is_url()), | 30 : is_url(node->is_url()), |
33 url(node->url()), | 31 url(node->url()), |
34 title(node->GetTitle()), | 32 title(node->GetTitle()), |
35 id_(node->id()) { | 33 id_(node->id()) { |
36 for (int i = 0; i < node->child_count(); ++i) | 34 for (int i = 0; i < node->child_count(); ++i) |
37 children.push_back(Element(node->GetChild(i))); | 35 children.push_back(Element(node->GetChild(i))); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 children.resize(children_count); | 70 children.resize(children_count); |
73 for (std::vector<Element>::iterator i = children.begin(); | 71 for (std::vector<Element>::iterator i = children.begin(); |
74 i != children.end(); ++i) { | 72 i != children.end(); ++i) { |
75 if (!i->ReadFromPickle(pickle, iterator)) | 73 if (!i->ReadFromPickle(pickle, iterator)) |
76 return false; | 74 return false; |
77 } | 75 } |
78 } | 76 } |
79 return true; | 77 return true; |
80 } | 78 } |
81 | 79 |
82 #if defined(TOOLKIT_VIEWS) | |
83 // static | |
84 ui::OSExchangeData::CustomFormat BookmarkNodeData::GetBookmarkCustomFormat() { | |
85 static ui::OSExchangeData::CustomFormat format; | |
86 static bool format_valid = false; | |
87 | |
88 if (!format_valid) { | |
89 format_valid = true; | |
90 format = ui::OSExchangeData::RegisterCustomFormat( | |
91 BookmarkNodeData::kClipboardFormatString); | |
92 } | |
93 return format; | |
94 } | |
95 #endif | |
96 | |
97 BookmarkNodeData::BookmarkNodeData() { | 80 BookmarkNodeData::BookmarkNodeData() { |
98 } | 81 } |
99 | 82 |
100 BookmarkNodeData::BookmarkNodeData(const BookmarkNode* node) { | 83 BookmarkNodeData::BookmarkNodeData(const BookmarkNode* node) { |
101 elements.push_back(Element(node)); | 84 elements.push_back(Element(node)); |
102 } | 85 } |
103 | 86 |
104 BookmarkNodeData::BookmarkNodeData( | 87 BookmarkNodeData::BookmarkNodeData( |
105 const std::vector<const BookmarkNode*>& nodes) { | 88 const std::vector<const BookmarkNode*>& nodes) { |
106 ReadFromVector(nodes); | 89 ReadFromVector(nodes); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 // Also write the URL to the clipboard as text so that it can be pasted | 137 // Also write the URL to the clipboard as text so that it can be pasted |
155 // into text fields. We use WriteText instead of WriteURL because we don't | 138 // into text fields. We use WriteText instead of WriteURL because we don't |
156 // want to clobber the X clipboard when the user copies out of the omnibox | 139 // want to clobber the X clipboard when the user copies out of the omnibox |
157 // on Linux (on Windows and Mac, there is no difference between these | 140 // on Linux (on Windows and Mac, there is no difference between these |
158 // functions). | 141 // functions). |
159 scw.WriteText(UTF8ToUTF16(url)); | 142 scw.WriteText(UTF8ToUTF16(url)); |
160 } | 143 } |
161 | 144 |
162 Pickle pickle; | 145 Pickle pickle; |
163 WriteToPickle(profile, &pickle); | 146 WriteToPickle(profile, &pickle); |
164 scw.WritePickledData(pickle, kClipboardFormatString); | 147 scw.WritePickledData(pickle, ui::kClipboardFormatString); |
165 } | 148 } |
166 | 149 |
167 bool BookmarkNodeData::ReadFromClipboard() { | 150 bool BookmarkNodeData::ReadFromClipboard() { |
168 std::string data; | 151 std::string data; |
169 ui::Clipboard* clipboard = g_browser_process->clipboard(); | 152 ui::Clipboard* clipboard = g_browser_process->clipboard(); |
170 clipboard->ReadData(kClipboardFormatString, &data); | 153 clipboard->ReadData(ui::kClipboardFormatString, &data); |
171 | 154 |
172 if (!data.empty()) { | 155 if (!data.empty()) { |
173 Pickle pickle(data.data(), data.size()); | 156 Pickle pickle(data.data(), data.size()); |
174 if (ReadFromPickle(&pickle)) | 157 if (ReadFromPickle(&pickle)) |
175 return true; | 158 return true; |
176 } | 159 } |
177 | 160 |
178 string16 title; | 161 string16 title; |
179 std::string url; | 162 std::string url; |
180 clipboard->ReadBookmark(&title, &url); | 163 clipboard->ReadBookmark(&title, &url); |
(...skipping 12 matching lines...) Expand all Loading... |
193 } | 176 } |
194 | 177 |
195 bool BookmarkNodeData::ClipboardContainsBookmarks() { | 178 bool BookmarkNodeData::ClipboardContainsBookmarks() { |
196 #if defined(TOUCH_UI) | 179 #if defined(TOUCH_UI) |
197 // Temporarily disabling clipboard due to bug 96448. | 180 // Temporarily disabling clipboard due to bug 96448. |
198 // TODO(wyck): Reenable when cause of message loop hang in | 181 // TODO(wyck): Reenable when cause of message loop hang in |
199 // gtk_clipboard_wait_for_contents is determined and fixed. | 182 // gtk_clipboard_wait_for_contents is determined and fixed. |
200 return false; | 183 return false; |
201 #else | 184 #else |
202 return g_browser_process->clipboard()->IsFormatAvailableByString( | 185 return g_browser_process->clipboard()->IsFormatAvailableByString( |
203 BookmarkNodeData::kClipboardFormatString, ui::Clipboard::BUFFER_STANDARD); | 186 ui::kClipboardFormatString, ui::Clipboard::BUFFER_STANDARD); |
204 #endif | 187 #endif |
205 } | 188 } |
206 #else | 189 #else |
207 void BookmarkNodeData::WriteToClipboard(Profile* profile) const { | 190 void BookmarkNodeData::WriteToClipboard(Profile* profile) const { |
208 bookmark_pasteboard_helper_mac::WriteToClipboard(elements, | 191 bookmark_pasteboard_helper_mac::WriteToClipboard(elements, |
209 profile_path_.value()); | 192 profile_path_.value()); |
210 } | 193 } |
211 | 194 |
212 bool BookmarkNodeData::ReadFromClipboard() { | 195 bool BookmarkNodeData::ReadFromClipboard() { |
213 // TODO(evan): bookmark_pasteboard_helper_mac should just use FilePaths. | 196 // TODO(evan): bookmark_pasteboard_helper_mac should just use FilePaths. |
(...skipping 28 matching lines...) Expand all Loading... |
242 if (elements[0].url.SchemeIs(chrome::kJavaScriptScheme)) { | 225 if (elements[0].url.SchemeIs(chrome::kJavaScriptScheme)) { |
243 data->SetString(UTF8ToUTF16(elements[0].url.spec())); | 226 data->SetString(UTF8ToUTF16(elements[0].url.spec())); |
244 } else { | 227 } else { |
245 data->SetURL(elements[0].url, elements[0].title); | 228 data->SetURL(elements[0].url, elements[0].title); |
246 } | 229 } |
247 } | 230 } |
248 | 231 |
249 Pickle data_pickle; | 232 Pickle data_pickle; |
250 WriteToPickle(profile, &data_pickle); | 233 WriteToPickle(profile, &data_pickle); |
251 | 234 |
252 data->SetPickledData(GetBookmarkCustomFormat(), data_pickle); | 235 data->SetPickledData(ui::GetBookmarkCustomFormat(), data_pickle); |
253 } | 236 } |
254 | 237 |
255 bool BookmarkNodeData::Read(const ui::OSExchangeData& data) { | 238 bool BookmarkNodeData::Read(const ui::OSExchangeData& data) { |
256 elements.clear(); | 239 elements.clear(); |
257 | 240 |
258 profile_path_.clear(); | 241 profile_path_.clear(); |
259 | 242 |
260 if (data.HasCustomFormat(GetBookmarkCustomFormat())) { | 243 if (data.HasCustomFormat(ui::GetBookmarkCustomFormat())) { |
261 Pickle drag_data_pickle; | 244 Pickle drag_data_pickle; |
262 if (data.GetPickledData(GetBookmarkCustomFormat(), &drag_data_pickle)) { | 245 if (data.GetPickledData(ui::GetBookmarkCustomFormat(), &drag_data_pickle)) { |
263 if (!ReadFromPickle(&drag_data_pickle)) | 246 if (!ReadFromPickle(&drag_data_pickle)) |
264 return false; | 247 return false; |
265 } | 248 } |
266 } else { | 249 } else { |
267 // See if there is a URL on the clipboard. | 250 // See if there is a URL on the clipboard. |
268 Element element; | 251 Element element; |
269 GURL url; | 252 GURL url; |
270 string16 title; | 253 string16 title; |
271 if (data.GetURLAndTitle(&url, &title)) | 254 if (data.GetURLAndTitle(&url, &title)) |
272 ReadFromTuple(url, title); | 255 ReadFromTuple(url, title); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 DCHECK(profile_path_.empty()); | 319 DCHECK(profile_path_.empty()); |
337 | 320 |
338 if (profile) | 321 if (profile) |
339 profile_path_ = profile->GetPath(); | 322 profile_path_ = profile->GetPath(); |
340 } | 323 } |
341 | 324 |
342 bool BookmarkNodeData::IsFromProfile(Profile* profile) const { | 325 bool BookmarkNodeData::IsFromProfile(Profile* profile) const { |
343 // An empty path means the data is not associated with any profile. | 326 // An empty path means the data is not associated with any profile. |
344 return !profile_path_.empty() && profile_path_ == profile->GetPath(); | 327 return !profile_path_.empty() && profile_path_ == profile->GetPath(); |
345 } | 328 } |
OLD | NEW |