• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
6 #define CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/string16.h"
13 #include "chrome/browser/bookmarks/bookmark_editor.h"
14 #include "chrome/browser/bookmarks/bookmark_node_data.h"
15 #include "chrome/browser/history/snippet.h"
16 #include "ui/gfx/native_widget_types.h"
17 #include "webkit/glue/window_open_disposition.h"
18 
19 class BookmarkModel;
20 class BookmarkNode;
21 class Browser;
22 class PageNavigator;
23 class PrefService;
24 class Profile;
25 class TabContents;
26 
27 namespace views {
28 class DropTargetEvent;
29 }
30 
31 // A collection of bookmark utility functions used by various parts of the UI
32 // that show bookmarks: bookmark manager, bookmark bar view ...
33 namespace bookmark_utils {
34 
35 // Calculates the drop operation given |source_operations| and the ideal
36 // set of drop operations (|operations|). This prefers the following ordering:
37 // COPY, LINK then MOVE.
38 int PreferredDropOperation(int source_operations, int operations);
39 
40 // Returns the drag operations for the specified node.
41 int BookmarkDragOperation(Profile* profile, const BookmarkNode* node);
42 
43 // Returns the preferred drop operation on a bookmark menu/bar.
44 // |parent| is the parent node the drop is to occur on and |index| the index the
45 // drop is over.
46 int BookmarkDropOperation(Profile* profile,
47                           const views::DropTargetEvent& event,
48                           const BookmarkNodeData& data,
49                           const BookmarkNode* parent,
50                           int index);
51 
52 // Performs a drop of bookmark data onto |parent_node| at |index|. Returns the
53 // type of drop the resulted.
54 int PerformBookmarkDrop(Profile* profile,
55                         const BookmarkNodeData& data,
56                         const BookmarkNode* parent_node,
57                         int index);
58 
59 // Returns true if the bookmark data can be dropped on |drop_parent| at
60 // |index|. A drop from a separate profile is always allowed, where as
61 // a drop from the same profile is only allowed if none of the nodes in
62 // |data| are an ancestor of |drop_parent| and one of the nodes isn't already
63 // a child of |drop_parent| at |index|.
64 bool IsValidDropLocation(Profile* profile,
65                          const BookmarkNodeData& data,
66                          const BookmarkNode* drop_parent,
67                          int index);
68 
69 // Clones bookmark node, adding newly created nodes to |parent| starting at
70 // |index_to_add_at|.
71 void CloneBookmarkNode(BookmarkModel* model,
72                        const std::vector<BookmarkNodeData::Element>& elements,
73                        const BookmarkNode* parent,
74                        int index_to_add_at);
75 
76 // Begins dragging a folder of bookmarks.
77 void DragBookmarks(Profile* profile,
78                    const std::vector<const BookmarkNode*>& nodes,
79                    gfx::NativeView view);
80 
81 // Opens all the bookmarks in |nodes| that are of type url and all the child
82 // bookmarks that are of type url for folders in |nodes|. |initial_disposition|
83 // dictates how the first URL is opened, all subsequent URLs are opened as
84 // background tabs.  |navigator| is used to open the URLs. If |navigator| is
85 // NULL the last tabbed browser with the profile |profile| is used. If there is
86 // no browser with the specified profile a new one is created.
87 void OpenAll(gfx::NativeWindow parent,
88              Profile* profile,
89              PageNavigator* navigator,
90              const std::vector<const BookmarkNode*>& nodes,
91              WindowOpenDisposition initial_disposition);
92 
93 // Convenience for |OpenAll| with a single BookmarkNode.
94 void OpenAll(gfx::NativeWindow parent,
95              Profile* profile,
96              PageNavigator* navigator,
97              const BookmarkNode* node,
98              WindowOpenDisposition initial_disposition);
99 
100 // Copies nodes onto the clipboard. If |remove_nodes| is true the nodes are
101 // removed after copied to the clipboard. The nodes are copied in such a way
102 // that if pasted again copies are made.
103 void CopyToClipboard(BookmarkModel* model,
104                      const std::vector<const BookmarkNode*>& nodes,
105                      bool remove_nodes);
106 
107 // Pastes from the clipboard. The new nodes are added to |parent|, unless
108 // |parent| is null in which case this does nothing. The nodes are inserted
109 // at |index|. If |index| is -1 the nodes are added to the end.
110 void PasteFromClipboard(BookmarkModel* model,
111                         const BookmarkNode* parent,
112                         int index);
113 
114 // Returns true if the user can copy from the pasteboard.
115 bool CanPasteFromClipboard(const BookmarkNode* node);
116 
117 // Returns a name for the given URL. Used for drags into bookmark areas when
118 // the source doesn't specify a title.
119 string16 GetNameForURL(const GURL& url);
120 
121 // Returns a vector containing up to |max_count| of the most recently modified
122 // folders. This never returns an empty vector.
123 std::vector<const BookmarkNode*> GetMostRecentlyModifiedFolders(
124     BookmarkModel* model, size_t max_count);
125 
126 // Returns the most recently added bookmarks. This does not return folders,
127 // only nodes of type url.
128 void GetMostRecentlyAddedEntries(BookmarkModel* model,
129                                  size_t count,
130                                  std::vector<const BookmarkNode*>* nodes);
131 
132 // Used by GetBookmarksMatchingText to return a matching node and the location
133 // of the match in the title.
134 struct TitleMatch {
135   TitleMatch();
136   ~TitleMatch();
137 
138   const BookmarkNode* node;
139 
140   // Location of the matching words in the title of the node.
141   Snippet::MatchPositions match_positions;
142 };
143 
144 // Returns true if |n1| was added more recently than |n2|.
145 bool MoreRecentlyAdded(const BookmarkNode* n1, const BookmarkNode* n2);
146 
147 // Returns up to |max_count| bookmarks from |model| whose url or title contains
148 // the text |text|.  |languages| is user's accept-language setting to decode
149 // IDN.
150 void GetBookmarksContainingText(BookmarkModel* model,
151                                 const string16& text,
152                                 size_t max_count,
153                                 const std::string& languages,
154                                 std::vector<const BookmarkNode*>* nodes);
155 
156 // Returns true if |node|'s url or title contains the string |text|.
157 // |languages| is user's accept-language setting to decode IDN.
158 bool DoesBookmarkContainText(const BookmarkNode* node,
159                              const string16& text,
160                              const std::string& languages);
161 
162 // Modifies a bookmark node (assuming that there's no magic that needs to be
163 // done regarding moving from one folder to another).  If a new node is
164 // explicitly being added, returns a pointer to the new node that was created.
165 // Otherwise the return value is identically |node|.
166 const BookmarkNode* ApplyEditsWithNoFolderChange(
167     BookmarkModel* model,
168     const BookmarkNode* parent,
169     const BookmarkEditor::EditDetails& details,
170     const string16& new_title,
171     const GURL& new_url);
172 
173 // Modifies a bookmark node assuming that the parent of the node may have
174 // changed and the node will need to be removed and reinserted.  If a new node
175 // is explicitly being added, returns a pointer to the new node that was
176 // created.  Otherwise the return value is identically |node|.
177 const BookmarkNode* ApplyEditsWithPossibleFolderChange(
178     BookmarkModel* model,
179     const BookmarkNode* new_parent,
180     const BookmarkEditor::EditDetails& details,
181     const string16& new_title,
182     const GURL& new_url);
183 
184 // Toggles whether the bookmark bar is shown only on the new tab page or on
185 // all tabs.  This is a preference modifier, not a visual modifier.
186 void ToggleWhenVisible(Profile* profile);
187 
188 // Register user preferences for BookmarksBar.
189 void RegisterUserPrefs(PrefService* prefs);
190 
191 // Fills in the URL and title for a bookmark of |tab_contents|.
192 void GetURLAndTitleToBookmark(TabContents* tab_contents,
193                               GURL* url,
194                               string16* title);
195 
196 // Returns, by reference in |urls|, the url and title pairs for each open
197 // tab in browser.
198 void GetURLsForOpenTabs(Browser* browser,
199                         std::vector<std::pair<GURL, string16> >* urls);
200 
201 // Returns the parent for newly created folders/bookmarks. If |selection| has
202 // one element and it is a folder, |selection[0]| is returned, otherwise
203 // |parent| is returned. If |index| is non-null it is set to the index newly
204 // added nodes should be added at.
205 const BookmarkNode* GetParentForNewNodes(
206     const BookmarkNode* parent,
207     const std::vector<const BookmarkNode*>& selection,
208     int* index);
209 
210 // Returns true if the specified node is of type URL, or has a descendant
211 // of type URL.
212 bool NodeHasURLs(const BookmarkNode* node);
213 
214 // Number of bookmarks we'll open before prompting the user to see if they
215 // really want to open all.
216 //
217 // NOTE: treat this as a const. It is not const as various tests change the
218 // value.
219 extern int num_urls_before_prompting;
220 
221 }  // namespace bookmark_utils
222 
223 #endif  // CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
224