| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/autocomplete/history_url_provider.h" | 5 #include "chrome/browser/autocomplete/history_url_provider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 const GURL& url = input.canonicalized_url(); | 337 const GURL& url = input.canonicalized_url(); |
| 338 if (url.is_valid()) { | 338 if (url.is_valid()) { |
| 339 match.destination_url = url; | 339 match.destination_url = url; |
| 340 | 340 |
| 341 // Trim off "http://" if the user didn't type it. | 341 // Trim off "http://" if the user didn't type it. |
| 342 // NOTE: We use TrimHttpPrefix() here rather than StringForURLDisplay() to | 342 // NOTE: We use TrimHttpPrefix() here rather than StringForURLDisplay() to |
| 343 // strip the scheme as we need to know the offset so we can adjust the | 343 // strip the scheme as we need to know the offset so we can adjust the |
| 344 // |match_location| below. StringForURLDisplay() and TrimHttpPrefix() have | 344 // |match_location| below. StringForURLDisplay() and TrimHttpPrefix() have |
| 345 // slightly different behavior as well (the latter will strip even without | 345 // slightly different behavior as well (the latter will strip even without |
| 346 // two slashes after the scheme). | 346 // two slashes after the scheme). |
| 347 DCHECK(!trim_http || !HasHTTPScheme(input.text())); |
| 347 string16 display_string(provider->StringForURLDisplay(url, false, false)); | 348 string16 display_string(provider->StringForURLDisplay(url, false, false)); |
| 348 const size_t offset = trim_http ? TrimHttpPrefix(&display_string) : 0; | 349 const size_t offset = trim_http ? TrimHttpPrefix(&display_string) : 0; |
| 349 match.fill_into_edit = | 350 match.fill_into_edit = |
| 350 AutocompleteInput::FormattedStringWithEquivalentMeaning(url, | 351 AutocompleteInput::FormattedStringWithEquivalentMeaning(url, |
| 351 display_string); | 352 display_string); |
| 352 match.allowed_to_be_default_match = true; | 353 match.allowed_to_be_default_match = true; |
| 353 // NOTE: Don't set match.inline_autocompletion to something non-empty here; | 354 // NOTE: Don't set match.inline_autocompletion to something non-empty here; |
| 354 // it's surprising and annoying. | 355 // it's surprising and annoying. |
| 355 | 356 |
| 356 // Try to highlight "innermost" match location. If we fix up "w" into | 357 // Try to highlight "innermost" match location. If we fix up "w" into |
| 357 // "www.w.com", we want to highlight the fifth character, not the first. | 358 // "www.w.com", we want to highlight the fifth character, not the first. |
| 358 // This relies on match.destination_url being the non-prefix-trimmed version | 359 // This relies on match.destination_url being the non-prefix-trimmed version |
| 359 // of match.contents. | 360 // of match.contents. |
| 360 match.contents = display_string; | 361 match.contents = display_string; |
| 361 const URLPrefix* best_prefix = URLPrefix::BestURLPrefix( | 362 const URLPrefix* best_prefix = URLPrefix::BestURLPrefix( |
| 362 UTF8ToUTF16(match.destination_url.spec()), input.text()); | 363 UTF8ToUTF16(match.destination_url.spec()), input.text()); |
| 363 | 364 // It's possible for match.destination_url to not contain the user's input |
| 364 // We only want to trim the HTTP scheme off our match if the user didn't | 365 // at all (so |best_prefix| is NULL), for example if the input is |
| 365 // explicitly type "http:". | 366 // "view-source:x" and |destination_url| has an inserted "http://" in the |
| 366 DCHECK(!trim_http || !HasHTTPScheme(input.text())); | 367 // middle. |
| 367 | 368 if (best_prefix == NULL) { |
| 368 // Because of the vagaries of GURL, it's possible for match.destination_url | 369 AutocompleteMatch::ClassifyMatchInString(input.text(), match.contents, |
| 369 // to not contain the user's input at all (so |best_prefix| is NULL). | 370 ACMatchClassification::URL, |
| 370 // In this case don't mark anything as a match. | 371 &match.contents_class); |
| 371 const size_t match_location = (best_prefix == NULL) ? | 372 } else { |
| 372 string16::npos : best_prefix->prefix.length() - offset; | 373 AutocompleteMatch::ClassifyLocationInString( |
| 373 AutocompleteMatch::ClassifyLocationInString(match_location, | 374 best_prefix->prefix.length() - offset, input.text().length(), |
| 374 input.text().length(), | 375 match.contents.length(), ACMatchClassification::URL, |
| 375 match.contents.length(), | 376 &match.contents_class); |
| 376 ACMatchClassification::URL, | 377 } |
| 377 &match.contents_class); | |
| 378 | 378 |
| 379 match.is_history_what_you_typed_match = true; | 379 match.is_history_what_you_typed_match = true; |
| 380 } | 380 } |
| 381 | 381 |
| 382 return match; | 382 return match; |
| 383 } | 383 } |
| 384 | 384 |
| 385 void HistoryURLProvider::Start(const AutocompleteInput& input, | 385 void HistoryURLProvider::Start(const AutocompleteInput& input, |
| 386 bool minimal_changes) { | 386 bool minimal_changes) { |
| 387 // NOTE: We could try hard to do less work in the |minimal_changes| case | 387 // NOTE: We could try hard to do less work in the |minimal_changes| case |
| (...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1088 &match.contents_class); | 1088 &match.contents_class); |
| 1089 } | 1089 } |
| 1090 match.description = info.title(); | 1090 match.description = info.title(); |
| 1091 AutocompleteMatch::ClassifyMatchInString(params->input.text(), | 1091 AutocompleteMatch::ClassifyMatchInString(params->input.text(), |
| 1092 info.title(), | 1092 info.title(), |
| 1093 ACMatchClassification::NONE, | 1093 ACMatchClassification::NONE, |
| 1094 &match.description_class); | 1094 &match.description_class); |
| 1095 RecordAdditionalInfoFromUrlRow(info, &match); | 1095 RecordAdditionalInfoFromUrlRow(info, &match); |
| 1096 return match; | 1096 return match; |
| 1097 } | 1097 } |
| OLD | NEW |