Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(469)

Side by Side Diff: chrome/browser/bookmark_drag_data.cc

Issue 1868: Moves bookmark related classes into bookmarks directory. There are no... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/bookmark_drag_data.h ('k') | chrome/browser/bookmark_drag_data_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/pickle.h"
6 #include "chrome/browser/bookmark_bar_model.h"
7 #include "chrome/browser/bookmark_drag_data.h"
8 #include "chrome/common/os_exchange_data.h"
9
10 static CLIPFORMAT clipboard_format = 0;
11
12 static void RegisterFormat() {
13 if (clipboard_format == 0) {
14 clipboard_format = RegisterClipboardFormat(L"chrome/x-bookmark-entry");
15 DCHECK(clipboard_format);
16 }
17 }
18
19 BookmarkDragData::BookmarkDragData() : is_url(false), is_valid(false) {
20 }
21
22 BookmarkDragData::BookmarkDragData(BookmarkBarNode* node)
23 : is_url(node->GetType() == history::StarredEntry::URL),
24 url(node->GetURL()),
25 title(node->GetTitle()),
26 is_valid(true),
27 id_(node->id()) {
28 if (!is_url)
29 AddChildren(node);
30 }
31
32 void BookmarkDragData::Write(OSExchangeData* data) const {
33 RegisterFormat();
34
35 DCHECK(data);
36
37 if (is_url) {
38 data->SetURL(url, title);
39 }
40 Pickle data_pickle;
41 WriteToPickle(&data_pickle);
42 data->SetPickledData(clipboard_format, data_pickle);
43 }
44
45 bool BookmarkDragData::Read(const OSExchangeData& data) {
46 RegisterFormat();
47
48 is_valid = data.GetURLAndTitle(&url, &title) && url.is_valid();
49 is_url = is_valid;
50 profile_id.clear();
51
52 if (data.HasFormat(clipboard_format)) {
53 Pickle drag_data_pickle;
54 if (data.GetPickledData(clipboard_format, &drag_data_pickle)) {
55 void* data_iterator = NULL;
56 if (ReadFromPickle(&drag_data_pickle, &data_iterator)) {
57 is_valid = true;
58 }
59 }
60 }
61 return is_valid;
62 }
63
64 BookmarkBarNode* BookmarkDragData::GetNode(BookmarkBarModel* model) const {
65 DCHECK(!is_url && id_ && is_valid);
66 return model->GetNodeByID(id_);
67 }
68
69 void BookmarkDragData::WriteToPickle(Pickle* pickle) const {
70 pickle->WriteBool(is_url);
71 pickle->WriteWString(profile_id);
72 pickle->WriteString(url.spec());
73 pickle->WriteWString(title);
74 if (!is_url) {
75 pickle->WriteInt(id_);
76 pickle->WriteInt(static_cast<int>(children.size()));
77 for (std::vector<BookmarkDragData>::const_iterator i = children.begin();
78 i != children.end(); ++i) {
79 i->WriteToPickle(pickle);
80 }
81 }
82 }
83
84 bool BookmarkDragData::ReadFromPickle(Pickle* pickle, void** iterator) {
85 std::string url_spec;
86 is_valid = false;
87 if (!pickle->ReadBool(iterator, &is_url) ||
88 !pickle->ReadWString(iterator, &profile_id) ||
89 !pickle->ReadString(iterator, &url_spec) ||
90 !pickle->ReadWString(iterator, &title)) {
91 return false;
92 }
93 url = GURL(url_spec);
94 if (!is_url) {
95 id_ = 0;
96 children.clear();
97 if (!pickle->ReadInt(iterator, &id_))
98 return false;
99 int children_count;
100 if (!pickle->ReadInt(iterator, &children_count))
101 return false;
102 children.resize(children_count);
103 for (std::vector<BookmarkDragData>::iterator i = children.begin();
104 i != children.end(); ++i) {
105 if (!i->ReadFromPickle(pickle, iterator))
106 return false;
107 }
108 }
109 is_valid = true;
110 return true;
111 }
112
113 void BookmarkDragData::AddChildren(BookmarkBarNode* node) {
114 for (int i = 0, max = node->GetChildCount(); i < max; ++i)
115 children.push_back(BookmarkDragData(node->GetChild(i)));
116 }
117
OLDNEW
« no previous file with comments | « chrome/browser/bookmark_drag_data.h ('k') | chrome/browser/bookmark_drag_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698