autocomplete_classifier.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/auto_reset.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_input.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_match.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_provider.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "googleurl/src/gurl.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int AutocompleteClassifier::kDefaultOmniboxProviders =
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_BOOKMARK |
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_BUILTIN |
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_HISTORY_CONTENTS |
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_HISTORY_QUICK |
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_HISTORY_URL |
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_KEYWORD |
22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    AutocompleteProvider::TYPE_SEARCH |
23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    AutocompleteProvider::TYPE_SHORTCUTS |
24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    AutocompleteProvider::TYPE_ZERO_SUGGEST;
25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// static
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int AutocompleteClassifier::kInstantExtendedOmniboxProviders =
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    AutocompleteProvider::TYPE_BUILTIN |
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_HISTORY_QUICK |
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_HISTORY_URL |
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_KEYWORD |
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO: remove TYPE_SEARCH once it's no longer needed to pass
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // the Instant suggestion through via FinalizeInstantQuery.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteProvider::TYPE_SEARCH |
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AutocompleteProvider::TYPE_ZERO_SUGGEST;
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AutocompleteClassifier::AutocompleteClassifier(Profile* profile)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : controller_(new AutocompleteController(profile, NULL,
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                             kDefaultOmniboxProviders)),
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      inside_classify_(false) {
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutocompleteClassifier::~AutocompleteClassifier() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should only reach here after Shutdown() has been called.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!controller_.get());
46}
47
48void AutocompleteClassifier::Classify(const string16& text,
49                                      bool prefer_keyword,
50                                      bool allow_exact_keyword_match,
51                                      AutocompleteMatch* match,
52                                      GURL* alternate_nav_url) {
53  DCHECK(!inside_classify_);
54  base::AutoReset<bool> reset(&inside_classify_, true);
55  controller_->Start(AutocompleteInput(
56      text, string16::npos, string16(), GURL(), true, prefer_keyword,
57      allow_exact_keyword_match, AutocompleteInput::BEST_MATCH));
58  DCHECK(controller_->done());
59  const AutocompleteResult& result = controller_->result();
60  if (result.empty()) {
61    if (alternate_nav_url)
62      *alternate_nav_url = GURL();
63    return;
64  }
65
66  DCHECK(result.default_match() != result.end());
67  *match = *result.default_match();
68  if (alternate_nav_url)
69    *alternate_nav_url = result.alternate_nav_url();
70}
71
72void AutocompleteClassifier::Shutdown() {
73  controller_.reset();
74}
75