diff options
author | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 17:22:32 +0000 |
---|---|---|
committer | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 17:22:32 +0000 |
commit | cb362ccc87064ae0ee4459ee089e00972b4a76e7 (patch) | |
tree | 46af771471ea7700d18dfbfa173e544e14c83998 /chrome/browser/bookmarks/bookmark_utils.cc | |
parent | f5b43627c9d7faeca9475c38ec67960c1fca46af (diff) | |
download | chromium_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.cc | 64 |
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 |