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 #include "chrome/browser/autocomplete/autocomplete_classifier.h"
      6 
      7 #include "base/auto_reset.h"
      8 #include "chrome/browser/autocomplete/autocomplete_controller.h"
      9 #include "chrome/browser/autocomplete/autocomplete_input.h"
     10 #include "chrome/browser/autocomplete/autocomplete_match.h"
     11 #include "chrome/browser/autocomplete/autocomplete_provider.h"
     12 #include "url/gurl.h"
     13 
     14 // static
     15 const int AutocompleteClassifier::kDefaultOmniboxProviders =
     16     AutocompleteProvider::TYPE_BOOKMARK |
     17     AutocompleteProvider::TYPE_BUILTIN |
     18     AutocompleteProvider::TYPE_HISTORY_QUICK |
     19     AutocompleteProvider::TYPE_HISTORY_URL |
     20     AutocompleteProvider::TYPE_KEYWORD |
     21     AutocompleteProvider::TYPE_SEARCH |
     22     AutocompleteProvider::TYPE_SHORTCUTS |
     23     AutocompleteProvider::TYPE_ZERO_SUGGEST;
     24 
     25 // static
     26 const int AutocompleteClassifier::kInstantExtendedOmniboxProviders =
     27     AutocompleteProvider::TYPE_BOOKMARK |
     28     AutocompleteProvider::TYPE_BUILTIN |
     29     AutocompleteProvider::TYPE_HISTORY_QUICK |
     30     AutocompleteProvider::TYPE_HISTORY_URL |
     31     AutocompleteProvider::TYPE_KEYWORD |
     32     // TODO: remove TYPE_SEARCH once it's no longer needed to pass
     33     // the Instant suggestion through via FinalizeInstantQuery.
     34     AutocompleteProvider::TYPE_SEARCH |
     35     AutocompleteProvider::TYPE_SHORTCUTS |
     36     AutocompleteProvider::TYPE_ZERO_SUGGEST;
     37 
     38 AutocompleteClassifier::AutocompleteClassifier(Profile* profile)
     39     : controller_(new AutocompleteController(profile, NULL,
     40                                              kDefaultOmniboxProviders)),
     41       inside_classify_(false) {
     42 }
     43 
     44 AutocompleteClassifier::~AutocompleteClassifier() {
     45   // We should only reach here after Shutdown() has been called.
     46   DCHECK(!controller_.get());
     47 }
     48 
     49 void AutocompleteClassifier::Classify(const string16& text,
     50                                       bool prefer_keyword,
     51                                       bool allow_exact_keyword_match,
     52                                       AutocompleteMatch* match,
     53                                       GURL* alternate_nav_url) {
     54   DCHECK(!inside_classify_);
     55   base::AutoReset<bool> reset(&inside_classify_, true);
     56   controller_->Start(AutocompleteInput(
     57       text, string16::npos, string16(), GURL(),
     58       AutocompleteInput::INVALID_SPEC, true, prefer_keyword,
     59       allow_exact_keyword_match, AutocompleteInput::BEST_MATCH));
     60   DCHECK(controller_->done());
     61   const AutocompleteResult& result = controller_->result();
     62   if (result.empty()) {
     63     if (alternate_nav_url)
     64       *alternate_nav_url = GURL();
     65     return;
     66   }
     67 
     68   DCHECK(result.default_match() != result.end());
     69   *match = *result.default_match();
     70   if (alternate_nav_url)
     71     *alternate_nav_url = result.alternate_nav_url();
     72 }
     73 
     74 void AutocompleteClassifier::Shutdown() {
     75   controller_.reset();
     76 }
     77