1 // Copyright 2014 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.
5 #ifndef COMPONENTS_ENHANCED_BOOKMARKS_BOOKMARK_SERVER_SEARCH_SERVICE_H_
6 #define COMPONENTS_ENHANCED_BOOKMARKS_BOOKMARK_SERVER_SEARCH_SERVICE_H_
11 #include "base/containers/mru_cache.h"
12 #include "components/enhanced_bookmarks/bookmark_server_service.h"
13 #include "net/url_request/url_fetcher.h"
15 namespace enhanced_bookmarks
{
17 class EnhancedBookmarkModel
;
19 // Sends requests to the bookmark server to search for bookmarks relevant to a
20 // given query. Will handle one outgoing request at a time.
21 class BookmarkServerSearchService
: public BookmarkServerService
{
23 BookmarkServerSearchService(
24 scoped_refptr
<net::URLRequestContextGetter
> request_context_getter
,
25 ProfileOAuth2TokenService
* token_service
,
26 SigninManagerBase
* signin_manager
,
27 EnhancedBookmarkModel
* bookmark_model
);
28 ~BookmarkServerSearchService() override
;
30 // Triggers a search. The query must not be empty. A call to this method
31 // cancels any previous searches. If there have been multiple queries in
32 // between, onChange will only be called for the last query.
33 // Note this method will be synchronous if query hits the cache.
34 void Search(const std::string
& query
);
36 // Returns search results for a query. Results for a query are only available
37 // after Search() is called and after then OnChange() observer methods has
38 // been sent.This method might return an empty vector, meaning there are no
39 // bookmarks matching the given query. Returning null means we are still
40 // loading and no results have come to the client. Previously cancelled
41 // queries will not trigger onChange(), and this method will also return null
42 // for queries that have never been passed to Search() before.
43 scoped_ptr
<std::vector
<const BookmarkNode
*>> ResultForQuery(
44 const std::string
& query
);
47 scoped_ptr
<net::URLFetcher
> CreateFetcher() override
;
49 bool ProcessResponse(const std::string
& response
,
50 bool* should_notify
) override
;
52 void CleanAfterFailure() override
;
54 // EnhancedBookmarkModelObserver methods.
55 void EnhancedBookmarkModelLoaded() override
{};
56 void EnhancedBookmarkAdded(const BookmarkNode
* node
) override
;
57 void EnhancedBookmarkRemoved(const BookmarkNode
* node
) override
{};
58 void EnhancedBookmarkNodeChanged(const BookmarkNode
* node
) override
{};
59 void EnhancedBookmarkAllUserNodesRemoved() override
;
60 void EnhancedBookmarkRemoteIdChanged(const BookmarkNode
* node
,
61 const std::string
& old_remote_id
,
62 const std::string
& remote_id
) override
;
65 // Cache for previous search result, a map from a query string to vector of
67 base::MRUCache
<std::string
, std::vector
<std::string
>> cache_
;
68 // The query currently on the fly, and is cleared as soon as the result is
70 std::string current_query_
;
71 DISALLOW_COPY_AND_ASSIGN(BookmarkServerSearchService
);
73 } // namespace enhanced_bookmarks
75 #endif // COMPONENTS_ENHANCED_BOOKMARKS_BOOKMARK_SERVER_SEARCH_SERVICE_H_