blob: b63c8484b30f87931830e35c661e2f81da7d57bd [file] [log] [blame]
[email protected]7f856be2008-10-29 23:38:061// 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#ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
6#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
7
[email protected]903e7a82009-07-28 00:45:358#include <string>
[email protected]7f856be2008-10-29 23:38:069#include <vector>
10
[email protected]010ea08a2009-10-11 20:21:3211#include "app/gfx/native_widget_types.h"
[email protected]7f856be2008-10-29 23:38:0612#include "chrome/browser/bookmarks/bookmark_drag_data.h"
[email protected]140aea052009-05-05 00:35:0913#include "chrome/browser/bookmarks/bookmark_editor.h"
[email protected]9333f182008-12-09 17:34:1714#include "chrome/browser/history/snippet.h"
[email protected]7f856be2008-10-29 23:38:0615#include "webkit/glue/window_open_disposition.h"
16
[email protected]9333f182008-12-09 17:34:1717class BookmarkModel;
[email protected]7f856be2008-10-29 23:38:0618class BookmarkNode;
[email protected]b3ac5c82009-10-08 20:56:5419class Browser;
[email protected]7f856be2008-10-29 23:38:0620class PageNavigator;
[email protected]44b2c8852009-03-18 00:57:4921class PrefService;
[email protected]7f856be2008-10-29 23:38:0622class Profile;
[email protected]b3ac5c82009-10-08 20:56:5423class TabContents;
[email protected]7f856be2008-10-29 23:38:0624
[email protected]7aa4c002009-03-12 19:10:2225namespace views {
26class DropTargetEvent;
27}
28
[email protected]7f856be2008-10-29 23:38:0629// A collection of bookmark utility functions used by various parts of the UI
30// that show bookmarks: bookmark manager, bookmark bar view ...
31namespace bookmark_utils {
32
[email protected]f28cbb72008-11-04 19:29:0833// Calculates the drop operation given |source_operations| and the ideal
34// set of drop operations (|operations|). This prefers the following ordering:
35// COPY, LINK then MOVE.
36int PreferredDropOperation(int source_operations, int operations);
[email protected]7f856be2008-10-29 23:38:0637
[email protected]7aa4c002009-03-12 19:10:2238// Returns the drag operations for the specified node.
[email protected]b3c33d462009-06-26 22:29:2039int BookmarkDragOperation(const BookmarkNode* node);
[email protected]7aa4c002009-03-12 19:10:2240
41// Returns the preferred drop operation on a bookmark menu/bar.
42// |parent| is the parent node the drop is to occur on and |index| the index the
43// drop is over.
44int BookmarkDropOperation(Profile* profile,
[email protected]fa5dfaf2009-06-02 22:12:0645 const views::DropTargetEvent& event,
46 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2047 const BookmarkNode* parent,
[email protected]fa5dfaf2009-06-02 22:12:0648 int index);
[email protected]7aa4c002009-03-12 19:10:2249
50// Performs a drop of bookmark data onto |parent_node| at |index|. Returns the
51// type of drop the resulted.
52int PerformBookmarkDrop(Profile* profile,
[email protected]fa5dfaf2009-06-02 22:12:0653 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2054 const BookmarkNode* parent_node,
[email protected]fa5dfaf2009-06-02 22:12:0655 int index);
[email protected]7aa4c002009-03-12 19:10:2256
[email protected]7f856be2008-10-29 23:38:0657// Returns true if the bookmark data can be dropped on |drop_parent| at
58// |index|. A drop from a separate profile is always allowed, where as
59// a drop from the same profile is only allowed if none of the nodes in
60// |data| are an ancestor of |drop_parent| and one of the nodes isn't already
61// a child of |drop_parent| at |index|.
62bool IsValidDropLocation(Profile* profile,
63 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2064 const BookmarkNode* drop_parent,
[email protected]7f856be2008-10-29 23:38:0665 int index);
66
67// Clones drag data, adding newly created nodes to |parent| starting at
68// |index_to_add_at|.
69void CloneDragData(BookmarkModel* model,
70 const std::vector<BookmarkDragData::Element>& elements,
[email protected]b3c33d462009-06-26 22:29:2071 const BookmarkNode* parent,
[email protected]7f856be2008-10-29 23:38:0672 int index_to_add_at);
73
[email protected]ced90ae12010-02-20 02:06:1674// Begins dragging a group of bookmarks.
75void DragBookmarks(Profile* profile,
76 const std::vector<const BookmarkNode*>& nodes,
77 gfx::NativeView view);
78
[email protected]7f856be2008-10-29 23:38:0679// Recursively opens all bookmarks. |initial_disposition| dictates how the
80// first URL is opened, all subsequent URLs are opened as background tabs.
81// |navigator| is used to open the URLs. If |navigator| is NULL the last
82// tabbed browser with the profile |profile| is used. If there is no browser
83// with the specified profile a new one is created.
[email protected]d6d6d582009-10-12 19:22:2684void OpenAll(gfx::NativeWindow parent,
[email protected]7f856be2008-10-29 23:38:0685 Profile* profile,
86 PageNavigator* navigator,
[email protected]b3c33d462009-06-26 22:29:2087 const std::vector<const BookmarkNode*>& nodes,
[email protected]7f856be2008-10-29 23:38:0688 WindowOpenDisposition initial_disposition);
89
90// Convenience for opening a single BookmarkNode.
[email protected]d6d6d582009-10-12 19:22:2691void OpenAll(gfx::NativeWindow parent,
[email protected]7f856be2008-10-29 23:38:0692 Profile* profile,
93 PageNavigator* navigator,
[email protected]b3c33d462009-06-26 22:29:2094 const BookmarkNode* node,
[email protected]7f856be2008-10-29 23:38:0695 WindowOpenDisposition initial_disposition);
96
[email protected]fafc8a422008-11-07 17:53:0997// Copies nodes onto the clipboard. If |remove_nodes| is true the nodes are
98// removed after copied to the clipboard. The nodes are copied in such a way
99// that if pasted again copies are made.
100void CopyToClipboard(BookmarkModel* model,
[email protected]b3c33d462009-06-26 22:29:20101 const std::vector<const BookmarkNode*>& nodes,
[email protected]fafc8a422008-11-07 17:53:09102 bool remove_nodes);
103
104// Pastes from the clipboard. The new nodes are added to |parent|, unless
105// |parent| is null in which case this does nothing. The nodes are inserted
106// at |index|. If |index| is -1 the nodes are added to the end.
107void PasteFromClipboard(BookmarkModel* model,
[email protected]b3c33d462009-06-26 22:29:20108 const BookmarkNode* parent,
[email protected]fafc8a422008-11-07 17:53:09109 int index);
110
111// Returns true if the user can copy from the pasteboard.
[email protected]b3c33d462009-06-26 22:29:20112bool CanPasteFromClipboard(const BookmarkNode* node);
[email protected]fafc8a422008-11-07 17:53:09113
[email protected]903e7a82009-07-28 00:45:35114// Returns a name for the given URL. Used for drags into bookmark areas when
115// the source doesn't specify a title.
116std::string GetNameForURL(const GURL& url);
117
[email protected]9333f182008-12-09 17:34:17118// Returns a vector containing up to |max_count| of the most recently modified
119// groups. This never returns an empty vector.
[email protected]b3c33d462009-06-26 22:29:20120std::vector<const BookmarkNode*> GetMostRecentlyModifiedGroups(
121 BookmarkModel* model, size_t max_count);
[email protected]9333f182008-12-09 17:34:17122
123// Returns the most recently added bookmarks. This does not return groups,
124// only nodes of type url.
125void GetMostRecentlyAddedEntries(BookmarkModel* model,
126 size_t count,
[email protected]b3c33d462009-06-26 22:29:20127 std::vector<const BookmarkNode*>* nodes);
[email protected]9333f182008-12-09 17:34:17128
129// Used by GetBookmarksMatchingText to return a matching node and the location
130// of the match in the title.
131struct TitleMatch {
[email protected]b3c33d462009-06-26 22:29:20132 const BookmarkNode* node;
[email protected]9333f182008-12-09 17:34:17133
134 // Location of the matching words in the title of the node.
135 Snippet::MatchPositions match_positions;
136};
137
[email protected]9333f182008-12-09 17:34:17138// Returns true if |n1| was added more recently than |n2|.
[email protected]b3c33d462009-06-26 22:29:20139bool MoreRecentlyAdded(const BookmarkNode* n1, const BookmarkNode* n2);
[email protected]9333f182008-12-09 17:34:17140
[email protected]cb362ccc2008-12-10 17:22:32141// Returns up to |max_count| bookmarks from |model| whose url or title contains
[email protected]fa5dfaf2009-06-02 22:12:06142// the text |text|. |languages| is user's accept-language setting to decode
143// IDN.
[email protected]cb362ccc2008-12-10 17:22:32144void GetBookmarksContainingText(BookmarkModel* model,
145 const std::wstring& text,
146 size_t max_count,
[email protected]fa5dfaf2009-06-02 22:12:06147 const std::wstring& languages,
[email protected]b3c33d462009-06-26 22:29:20148 std::vector<const BookmarkNode*>* nodes);
[email protected]cb362ccc2008-12-10 17:22:32149
150// Returns true if |node|'s url or title contains the string |text|.
[email protected]fa5dfaf2009-06-02 22:12:06151// |languages| is user's accept-language setting to decode IDN.
[email protected]b3c33d462009-06-26 22:29:20152bool DoesBookmarkContainText(const BookmarkNode* node,
[email protected]fa5dfaf2009-06-02 22:12:06153 const std::wstring& text,
154 const std::wstring& languages);
[email protected]cb362ccc2008-12-10 17:22:32155
[email protected]140aea052009-05-05 00:35:09156// Modifies a bookmark node (assuming that there's no magic that needs to be
[email protected]e5486602010-02-09 21:27:55157// done regarding moving from one folder to another). If a new node is
158// explicitly being added, returns a pointer to the new node that was created.
159// Otherwise the return value is identically |node|.
[email protected]a8d71b02009-07-07 00:36:34160const BookmarkNode* ApplyEditsWithNoGroupChange(
161 BookmarkModel* model,
162 const BookmarkNode* parent,
[email protected]ec12ffe2009-10-16 22:28:44163 const BookmarkEditor::EditDetails& details,
[email protected]a8d71b02009-07-07 00:36:34164 const std::wstring& new_title,
165 const GURL& new_url,
166 BookmarkEditor::Handler* handler);
[email protected]140aea052009-05-05 00:35:09167
168// Modifies a bookmark node assuming that the parent of the node may have
[email protected]e5486602010-02-09 21:27:55169// changed and the node will need to be removed and reinserted. If a new node
170// is explicitly being added, returns a pointer to the new node that was
171// created. Otherwise the return value is identically |node|.
[email protected]a8d71b02009-07-07 00:36:34172const BookmarkNode* ApplyEditsWithPossibleGroupChange(
173 BookmarkModel* model,
174 const BookmarkNode* new_parent,
[email protected]ec12ffe2009-10-16 22:28:44175 const BookmarkEditor::EditDetails& details,
[email protected]a8d71b02009-07-07 00:36:34176 const std::wstring& new_title,
177 const GURL& new_url,
178 BookmarkEditor::Handler* handler);
[email protected]140aea052009-05-05 00:35:09179
[email protected]44b2c8852009-03-18 00:57:49180// Toggles whether the bookmark bar is shown only on the new tab page or on
181// all tabs. This is a preference modifier, not a visual modifier.
182void ToggleWhenVisible(Profile* profile);
183
[email protected]1e7bab72009-06-03 17:23:36184// Register local state prefs for bookmark bar view.
185void RegisterPrefs(PrefService* prefs);
186
[email protected]44b2c8852009-03-18 00:57:49187// Register user prefs for BookmarkBar, BookmarkView, ...
188void RegisterUserPrefs(PrefService* prefs);
189
[email protected]76624fde2009-10-09 18:13:23190// Fills in the URL and title for a bookmark of |tab_contents|.
191void GetURLAndTitleToBookmark(TabContents* tab_contents,
[email protected]b3ac5c82009-10-08 20:56:54192 GURL* url,
193 std::wstring* title);
194
[email protected]ec12ffe2009-10-16 22:28:44195// Returns, by reference in |urls|, the url and title pairs for each open
196// tab in browser.
197void GetURLsForOpenTabs(Browser* browser,
198 std::vector<std::pair<GURL, std::wstring> >* urls);
[email protected]b3ac5c82009-10-08 20:56:54199
[email protected]f785ad12008-11-19 23:01:28200// Number of bookmarks we'll open before prompting the user to see if they
201// really want to open all.
202//
203// NOTE: treat this as a const. It is not const as various tests change the
204// value.
205extern int num_urls_before_prompting;
206
[email protected]7f856be2008-10-29 23:38:06207} // namespace bookmark_utils
208
209#endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_