Home | History | Annotate | Download | only in autocomplete
      1 // Copyright (c) 2011 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/builtin_provider.h"
      6 
      7 #include "base/string_util.h"
      8 #include "base/utf_string_conversions.h"
      9 #include "chrome/browser/autocomplete/autocomplete_match.h"
     10 #include "chrome/browser/browser_about_handler.h"
     11 #include "chrome/browser/net/url_fixer_upper.h"
     12 
     13 const int BuiltinProvider::kRelevance = 575;
     14 
     15 BuiltinProvider::BuiltinProvider(ACProviderListener* listener,
     16                                  Profile* profile)
     17     : AutocompleteProvider(listener, profile, "Builtin") {
     18   std::vector<std::string> builtins(AboutPaths());
     19   for (std::vector<std::string>::iterator i(builtins.begin());
     20        i != builtins.end(); ++i)
     21     builtins_.push_back(ASCIIToUTF16("about:") + ASCIIToUTF16(*i));
     22 }
     23 
     24 BuiltinProvider::~BuiltinProvider() {}
     25 
     26 void BuiltinProvider::Start(const AutocompleteInput& input,
     27                             bool minimal_changes) {
     28   matches_.clear();
     29   if ((input.type() == AutocompleteInput::INVALID) ||
     30       (input.type() == AutocompleteInput::FORCED_QUERY) ||
     31       (input.type() == AutocompleteInput::QUERY) ||
     32       (input.matches_requested() == AutocompleteInput::BEST_MATCH))
     33     return;
     34   for (Builtins::const_iterator i(builtins_.begin());
     35        (i != builtins_.end()) && (matches_.size() < kMaxMatches); ++i) {
     36     if (StartsWith(*i, input.text(), false)) {
     37       AutocompleteMatch match(this, kRelevance, false,
     38                               AutocompleteMatch::NAVSUGGEST);
     39       match.fill_into_edit = *i;
     40       match.destination_url = GURL(*i);
     41       match.contents = match.fill_into_edit;
     42       match.contents_class.push_back(ACMatchClassification(0,
     43           ACMatchClassification::MATCH | ACMatchClassification::URL));
     44       if (match.contents.length() > input.text().length()) {
     45         match.contents_class.push_back(
     46             ACMatchClassification(input.text().length(),
     47                                   ACMatchClassification::URL));
     48       }
     49       matches_.push_back(match);
     50     }
     51   }
     52   for (size_t i = 0; i < matches_.size(); ++i)
     53     matches_[i].relevance = kRelevance + matches_.size() - (i + 1);
     54 }
     55