summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmarks/bookmark_utils.cc
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-10 17:22:32 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-10 17:22:32 +0000
commitcb362ccc87064ae0ee4459ee089e00972b4a76e7 (patch)
tree46af771471ea7700d18dfbfa173e544e14c83998 /chrome/browser/bookmarks/bookmark_utils.cc
parentf5b43627c9d7faeca9475c38ec67960c1fca46af (diff)
downloadchromium_src-cb362ccc87064ae0ee4459ee089e00972b4a76e7.zip
chromium_src-cb362ccc87064ae0ee4459ee089e00972b4a76e7.tar.gz
chromium_src-cb362ccc87064ae0ee4459ee089e00972b4a76e7.tar.bz2
Changes bookmark manager search to use contains vs starts with and to
search urls. BUG=4065 TEST=create the URL foo.com and type 'foo.com' in the bookmark manager search box. Make sure the url you just typed shows up in the table. Review URL: http://codereview.chromium.org/13679 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6714 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/bookmarks/bookmark_utils.cc')
-rw-r--r--chrome/browser/bookmarks/bookmark_utils.cc64
1 files changed, 49 insertions, 15 deletions
diff --git a/chrome/browser/bookmarks/bookmark_utils.cc b/chrome/browser/bookmarks/bookmark_utils.cc
index 1a25556..b24b9b7 100644
--- a/chrome/browser/bookmarks/bookmark_utils.cc
+++ b/chrome/browser/bookmarks/bookmark_utils.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/bookmarks/bookmark_utils.h"
+#include "base/string_util.h"
#include "base/time.h"
#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
@@ -146,6 +147,26 @@ bool MoreRecentlyModified(BookmarkNode* n1, BookmarkNode* n2) {
return n1->date_group_modified() > n2->date_group_modified();
}
+// Returns true if |text| contains each string in |words|. This is used when
+// searching for bookmarks.
+bool DoesBookmarkTextContainWords(const std::wstring& text,
+ const std::vector<std::wstring>& words) {
+ for (size_t i = 0; i < words.size(); ++i) {
+ if (text.find(words[i]) == std::wstring::npos)
+ return false;
+ }
+ return true;
+}
+
+// Returns true if |node|s title or url contains the strings in |words|.
+bool DoesBookmarkContainWords(BookmarkNode* node,
+ const std::vector<std::wstring>& words) {
+ return
+ DoesBookmarkTextContainWords(
+ l10n_util::ToLower(node->GetTitle()), words) ||
+ DoesBookmarkTextContainWords(UTF8ToWide(node->GetURL().spec()), words);
+}
+
} // namespace
namespace bookmark_utils {
@@ -369,9 +390,6 @@ void GetBookmarksMatchingText(BookmarkModel* model,
Snippet::MatchPositions match_position;
while (iterator.has_next()) {
BookmarkNode* node = iterator.Next();
- if (node->GetURL().spec() == "http://www.google.com/") {
- DLOG(INFO) << "BLAH";
- }
if (node->is_url() &&
parser.DoesQueryMatch(node->GetTitle(), query_nodes.get(),
&match_position)) {
@@ -384,23 +402,39 @@ void GetBookmarksMatchingText(BookmarkModel* model,
}
}
-bool DoesBookmarkMatchText(const std::wstring& text, BookmarkNode* node) {
- if (!node->is_url())
- return false;
+bool MoreRecentlyAdded(BookmarkNode* n1, BookmarkNode* n2) {
+ return n1->date_added() > n2->date_added();
+}
+void GetBookmarksContainingText(BookmarkModel* model,
+ const std::wstring& text,
+ size_t max_count,
+ std::vector<BookmarkNode*>* nodes) {
+ std::vector<std::wstring> words;
QueryParser parser;
- ScopedVector<QueryNode> query_nodes;
- parser.ParseQuery(text, &query_nodes.get());
- if (query_nodes.empty())
- return false;
+ parser.ExtractQueryWords(l10n_util::ToLower(text), &words);
+ if (words.empty())
+ return;
- Snippet::MatchPositions match_position;
- return parser.DoesQueryMatch(node->GetTitle(), query_nodes.get(),
- &match_position);
+ views::TreeNodeIterator<BookmarkNode> iterator(model->root_node());
+ while (iterator.has_next()) {
+ BookmarkNode* node = iterator.Next();
+ if (node->is_url() && DoesBookmarkContainWords(node, words)) {
+ nodes->push_back(node);
+ if (nodes->size() == max_count)
+ return;
+ }
+ }
}
-bool MoreRecentlyAdded(BookmarkNode* n1, BookmarkNode* n2) {
- return n1->date_added() > n2->date_added();
+bool DoesBookmarkContainText(BookmarkNode* node, const std::wstring& text) {
+ std::vector<std::wstring> words;
+ QueryParser parser;
+ parser.ExtractQueryWords(l10n_util::ToLower(text), &words);
+ if (words.empty())
+ return false;
+
+ return (node->is_url() && DoesBookmarkContainWords(node, words));
}
} // namespace bookmark_utils