Home | History | Annotate | Download | only in autocomplete
      1 // Copyright (c) 2012 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_AUTOCOMPLETE_BOOKMARK_PROVIDER_H_
      6 #define CHROME_BROWSER_AUTOCOMPLETE_BOOKMARK_PROVIDER_H_
      7 
      8 #include <string>
      9 
     10 #include "chrome/browser/autocomplete/autocomplete_input.h"
     11 #include "chrome/browser/autocomplete/autocomplete_match.h"
     12 #include "chrome/browser/autocomplete/autocomplete_provider.h"
     13 #include "chrome/browser/history/snippet.h"
     14 
     15 class BookmarkModel;
     16 struct BookmarkTitleMatch;
     17 class Profile;
     18 
     19 // This class is an autocomplete provider which quickly (and synchronously)
     20 // provides autocomplete suggestions based on the titles of bookmarks. Page
     21 // titles, URLs, and typed and visit counts of the bookmarks are not currently
     22 // taken into consideration as those factors will have been used by the
     23 // HistoryQuickProvider (HQP) while identifying suggestions.
     24 //
     25 // TODO(mrossetti): Propose a way to coordinate with the HQP the taking of typed
     26 // and visit counts and last visit dates, etc. into consideration while scoring.
     27 class BookmarkProvider : public AutocompleteProvider {
     28  public:
     29   BookmarkProvider(AutocompleteProviderListener* listener, Profile* profile);
     30 
     31   // When |minimal_changes| is true short circuit any additional searching and
     32   // leave the previous matches for this provider unchanged, otherwise perform
     33   // a complete search for |input| across all bookmark titles.
     34   virtual void Start(const AutocompleteInput& input,
     35                      bool minimal_changes) OVERRIDE;
     36 
     37   // Sets the BookmarkModel for unit tests.
     38   void set_bookmark_model_for_testing(BookmarkModel* bookmark_model) {
     39     bookmark_model_ = bookmark_model;
     40   }
     41 
     42  private:
     43   virtual ~BookmarkProvider();
     44 
     45   // Performs the actual matching of |input| over the bookmarks and fills in
     46   // |matches_|. If |best_match| then only suggest the single best match,
     47   // otherwise suggest the top |kMaxMatches| matches.
     48   void DoAutocomplete(const AutocompleteInput& input, bool best_match);
     49 
     50   // Compose an AutocompleteMatch based on |title_match| that has 1) the URL of
     51   // title_match's bookmark, and 2) the bookmark's title, not the URL's page
     52   // title, as the description.
     53   AutocompleteMatch TitleMatchToACMatch(const BookmarkTitleMatch& title_match);
     54 
     55   // Converts |positions| into ACMatchClassifications and returns the
     56   // classifications. |text_length| is used to determine the need to add an
     57   // 'unhighlighted' classification span so the tail of the source string
     58   // properly highlighted.
     59   static ACMatchClassifications ClassificationsFromMatch(
     60       const Snippet::MatchPositions& positions,
     61       size_t text_length);
     62 
     63   BookmarkModel* bookmark_model_;
     64 
     65   // Languages used during the URL formatting.
     66   std::string languages_;
     67 
     68   DISALLOW_COPY_AND_ASSIGN(BookmarkProvider);
     69 };
     70 
     71 #endif  // CHROME_BROWSER_AUTOCOMPLETE_BOOKMARK_PROVIDER_H_
     72