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