blob: 0c4ecaba867f8c1734e599135a3c34fcfbbdec18 [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]d7e85c52009-02-25 17:28:3011#include "base/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;
19class PageNavigator;
[email protected]44b2c8852009-03-18 00:57:4920class PrefService;
[email protected]7f856be2008-10-29 23:38:0621class Profile;
22
[email protected]7aa4c002009-03-12 19:10:2223namespace views {
24class DropTargetEvent;
25}
26
[email protected]7f856be2008-10-29 23:38:0627// A collection of bookmark utility functions used by various parts of the UI
28// that show bookmarks: bookmark manager, bookmark bar view ...
29namespace bookmark_utils {
30
[email protected]f28cbb72008-11-04 19:29:0831// Calculates the drop operation given |source_operations| and the ideal
32// set of drop operations (|operations|). This prefers the following ordering:
33// COPY, LINK then MOVE.
34int PreferredDropOperation(int source_operations, int operations);
[email protected]7f856be2008-10-29 23:38:0635
[email protected]7aa4c002009-03-12 19:10:2236// Returns the drag operations for the specified node.
[email protected]b3c33d462009-06-26 22:29:2037int BookmarkDragOperation(const BookmarkNode* node);
[email protected]7aa4c002009-03-12 19:10:2238
39// Returns the preferred drop operation on a bookmark menu/bar.
40// |parent| is the parent node the drop is to occur on and |index| the index the
41// drop is over.
42int BookmarkDropOperation(Profile* profile,
[email protected]fa5dfaf2009-06-02 22:12:0643 const views::DropTargetEvent& event,
44 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2045 const BookmarkNode* parent,
[email protected]fa5dfaf2009-06-02 22:12:0646 int index);
[email protected]7aa4c002009-03-12 19:10:2247
48// Performs a drop of bookmark data onto |parent_node| at |index|. Returns the
49// type of drop the resulted.
50int PerformBookmarkDrop(Profile* profile,
[email protected]fa5dfaf2009-06-02 22:12:0651 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2052 const BookmarkNode* parent_node,
[email protected]fa5dfaf2009-06-02 22:12:0653 int index);
[email protected]7aa4c002009-03-12 19:10:2254
[email protected]7f856be2008-10-29 23:38:0655// Returns true if the bookmark data can be dropped on |drop_parent| at
56// |index|. A drop from a separate profile is always allowed, where as
57// a drop from the same profile is only allowed if none of the nodes in
58// |data| are an ancestor of |drop_parent| and one of the nodes isn't already
59// a child of |drop_parent| at |index|.
60bool IsValidDropLocation(Profile* profile,
61 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2062 const BookmarkNode* drop_parent,
[email protected]7f856be2008-10-29 23:38:0663 int index);
64
65// Clones drag data, adding newly created nodes to |parent| starting at
66// |index_to_add_at|.
67void CloneDragData(BookmarkModel* model,
68 const std::vector<BookmarkDragData::Element>& elements,
[email protected]b3c33d462009-06-26 22:29:2069 const BookmarkNode* parent,
[email protected]7f856be2008-10-29 23:38:0670 int index_to_add_at);
71
72// Recursively opens all bookmarks. |initial_disposition| dictates how the
73// first URL is opened, all subsequent URLs are opened as background tabs.
74// |navigator| is used to open the URLs. If |navigator| is NULL the last
75// tabbed browser with the profile |profile| is used. If there is no browser
76// with the specified profile a new one is created.
[email protected]6128eae2009-05-27 22:00:3977void OpenAll(gfx::NativeView parent,
[email protected]7f856be2008-10-29 23:38:0678 Profile* profile,
79 PageNavigator* navigator,
[email protected]b3c33d462009-06-26 22:29:2080 const std::vector<const BookmarkNode*>& nodes,
[email protected]7f856be2008-10-29 23:38:0681 WindowOpenDisposition initial_disposition);
82
83// Convenience for opening a single BookmarkNode.
[email protected]6128eae2009-05-27 22:00:3984void OpenAll(gfx::NativeView parent,
[email protected]7f856be2008-10-29 23:38:0685 Profile* profile,
86 PageNavigator* navigator,
[email protected]b3c33d462009-06-26 22:29:2087 const BookmarkNode* node,
[email protected]7f856be2008-10-29 23:38:0688 WindowOpenDisposition initial_disposition);
89
[email protected]fafc8a422008-11-07 17:53:0990// Copies nodes onto the clipboard. If |remove_nodes| is true the nodes are
91// removed after copied to the clipboard. The nodes are copied in such a way
92// that if pasted again copies are made.
93void CopyToClipboard(BookmarkModel* model,
[email protected]b3c33d462009-06-26 22:29:2094 const std::vector<const BookmarkNode*>& nodes,
[email protected]fafc8a422008-11-07 17:53:0995 bool remove_nodes);
96
97// Pastes from the clipboard. The new nodes are added to |parent|, unless
98// |parent| is null in which case this does nothing. The nodes are inserted
99// at |index|. If |index| is -1 the nodes are added to the end.
100void PasteFromClipboard(BookmarkModel* model,
[email protected]b3c33d462009-06-26 22:29:20101 const BookmarkNode* parent,
[email protected]fafc8a422008-11-07 17:53:09102 int index);
103
104// Returns true if the user can copy from the pasteboard.
[email protected]b3c33d462009-06-26 22:29:20105bool CanPasteFromClipboard(const BookmarkNode* node);
[email protected]fafc8a422008-11-07 17:53:09106
[email protected]903e7a82009-07-28 00:45:35107// Returns a name for the given URL. Used for drags into bookmark areas when
108// the source doesn't specify a title.
109std::string GetNameForURL(const GURL& url);
110
[email protected]9333f182008-12-09 17:34:17111// Returns a vector containing up to |max_count| of the most recently modified
112// groups. This never returns an empty vector.
[email protected]b3c33d462009-06-26 22:29:20113std::vector<const BookmarkNode*> GetMostRecentlyModifiedGroups(
114 BookmarkModel* model, size_t max_count);
[email protected]9333f182008-12-09 17:34:17115
116// Returns the most recently added bookmarks. This does not return groups,
117// only nodes of type url.
118void GetMostRecentlyAddedEntries(BookmarkModel* model,
119 size_t count,
[email protected]b3c33d462009-06-26 22:29:20120 std::vector<const BookmarkNode*>* nodes);
[email protected]9333f182008-12-09 17:34:17121
122// Used by GetBookmarksMatchingText to return a matching node and the location
123// of the match in the title.
124struct TitleMatch {
[email protected]b3c33d462009-06-26 22:29:20125 const BookmarkNode* node;
[email protected]9333f182008-12-09 17:34:17126
127 // Location of the matching words in the title of the node.
128 Snippet::MatchPositions match_positions;
129};
130
[email protected]9333f182008-12-09 17:34:17131// Returns true if |n1| was added more recently than |n2|.
[email protected]b3c33d462009-06-26 22:29:20132bool MoreRecentlyAdded(const BookmarkNode* n1, const BookmarkNode* n2);
[email protected]9333f182008-12-09 17:34:17133
[email protected]cb362ccc2008-12-10 17:22:32134// Returns up to |max_count| bookmarks from |model| whose url or title contains
[email protected]fa5dfaf2009-06-02 22:12:06135// the text |text|. |languages| is user's accept-language setting to decode
136// IDN.
[email protected]cb362ccc2008-12-10 17:22:32137void GetBookmarksContainingText(BookmarkModel* model,
138 const std::wstring& text,
139 size_t max_count,
[email protected]fa5dfaf2009-06-02 22:12:06140 const std::wstring& languages,
[email protected]b3c33d462009-06-26 22:29:20141 std::vector<const BookmarkNode*>* nodes);
[email protected]cb362ccc2008-12-10 17:22:32142
143// Returns true if |node|'s url or title contains the string |text|.
[email protected]fa5dfaf2009-06-02 22:12:06144// |languages| is user's accept-language setting to decode IDN.
[email protected]b3c33d462009-06-26 22:29:20145bool DoesBookmarkContainText(const BookmarkNode* node,
[email protected]fa5dfaf2009-06-02 22:12:06146 const std::wstring& text,
147 const std::wstring& languages);
[email protected]cb362ccc2008-12-10 17:22:32148
[email protected]140aea052009-05-05 00:35:09149// Modifies a bookmark node (assuming that there's no magic that needs to be
[email protected]a8d71b02009-07-07 00:36:34150// done regarding moving from one folder to another). If the URL changed or a
151// new node is explicitly being added, returns a pointer to the new node that
152// was created. Otherwise the return value is identically |node|.
153const BookmarkNode* ApplyEditsWithNoGroupChange(
154 BookmarkModel* model,
155 const BookmarkNode* parent,
156 const BookmarkNode* node,
157 const std::wstring& new_title,
158 const GURL& new_url,
159 BookmarkEditor::Handler* handler);
[email protected]140aea052009-05-05 00:35:09160
161// Modifies a bookmark node assuming that the parent of the node may have
[email protected]a8d71b02009-07-07 00:36:34162// changed and the node will need to be removed and reinserted. If the URL
163// changed or a new node is explicitly being added, returns a pointer to the
164// new node that was created. Otherwise the return value is identically |node|.
165const BookmarkNode* ApplyEditsWithPossibleGroupChange(
166 BookmarkModel* model,
167 const BookmarkNode* new_parent,
168 const BookmarkNode* node,
169 const std::wstring& new_title,
170 const GURL& new_url,
171 BookmarkEditor::Handler* handler);
[email protected]140aea052009-05-05 00:35:09172
[email protected]44b2c8852009-03-18 00:57:49173// Toggles whether the bookmark bar is shown only on the new tab page or on
174// all tabs. This is a preference modifier, not a visual modifier.
175void ToggleWhenVisible(Profile* profile);
176
[email protected]1e7bab72009-06-03 17:23:36177// Register local state prefs for bookmark bar view.
178void RegisterPrefs(PrefService* prefs);
179
[email protected]44b2c8852009-03-18 00:57:49180// Register user prefs for BookmarkBar, BookmarkView, ...
181void RegisterUserPrefs(PrefService* prefs);
182
[email protected]f785ad12008-11-19 23:01:28183// Number of bookmarks we'll open before prompting the user to see if they
184// really want to open all.
185//
186// NOTE: treat this as a const. It is not const as various tests change the
187// value.
188extern int num_urls_before_prompting;
189
[email protected]7f856be2008-10-29 23:38:06190} // namespace bookmark_utils
191
192#endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_