| 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/autocomplete_result.h" | 5 #include "chrome/browser/autocomplete/autocomplete_result.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| 11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "chrome/browser/autocomplete/autocomplete_input.h" | 14 #include "chrome/browser/autocomplete/autocomplete_input.h" |
| 15 #include "chrome/browser/autocomplete/autocomplete_match.h" | 15 #include "chrome/browser/autocomplete/autocomplete_match.h" |
| 16 #include "chrome/browser/autocomplete/autocomplete_provider.h" | 16 #include "chrome/browser/autocomplete/autocomplete_provider.h" |
| 17 #include "chrome/browser/omnibox/omnibox_field_trial.h" | 17 #include "chrome/browser/omnibox/omnibox_field_trial.h" |
| 18 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" | 18 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
| 19 #include "chrome/browser/search_engines/template_url_service.h" | 19 #include "chrome/browser/search_engines/template_url_service.h" |
| 20 #include "chrome/browser/search_engines/template_url_service_test_util.h" | 20 #include "chrome/browser/search_engines/template_url_service_test_util.h" |
| 21 #include "chrome/common/autocomplete_match_type.h" | 21 #include "chrome/common/autocomplete_match_type.h" |
| 22 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
| 23 #include "components/metrics/proto/omnibox_event.pb.h" |
| 23 #include "components/variations/entropy_provider.h" | 24 #include "components/variations/entropy_provider.h" |
| 24 #include "components/variations/variations_associated_data.h" | 25 #include "components/variations/variations_associated_data.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 27 |
| 28 using metrics::OmniboxEventProto; |
| 29 |
| 27 namespace { | 30 namespace { |
| 28 | 31 |
| 29 struct AutocompleteMatchTestData { | 32 struct AutocompleteMatchTestData { |
| 30 std::string destination_url; | 33 std::string destination_url; |
| 31 AutocompleteMatch::Type type; | 34 AutocompleteMatch::Type type; |
| 32 }; | 35 }; |
| 33 | 36 |
| 34 const AutocompleteMatchTestData kVerbatimMatches[] = { | 37 const AutocompleteMatchTestData kVerbatimMatches[] = { |
| 35 { "http://search-what-you-typed/", | 38 { "http://search-what-you-typed/", |
| 36 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, | 39 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 match.destination_url.spec()) << i; | 172 match.destination_url.spec()) << i; |
| 170 } | 173 } |
| 171 } | 174 } |
| 172 | 175 |
| 173 void AutocompleteResultTest::RunCopyOldMatchesTest( | 176 void AutocompleteResultTest::RunCopyOldMatchesTest( |
| 174 const TestData* last, size_t last_size, | 177 const TestData* last, size_t last_size, |
| 175 const TestData* current, size_t current_size, | 178 const TestData* current, size_t current_size, |
| 176 const TestData* expected, size_t expected_size) { | 179 const TestData* expected, size_t expected_size) { |
| 177 AutocompleteInput input(base::ASCIIToUTF16("a"), base::string16::npos, | 180 AutocompleteInput input(base::ASCIIToUTF16("a"), base::string16::npos, |
| 178 base::string16(), GURL(), | 181 base::string16(), GURL(), |
| 179 AutocompleteInput::INVALID_SPEC, false, false, false, | 182 OmniboxEventProto::INVALID_SPEC, false, false, false, |
| 180 true); | 183 true); |
| 181 | 184 |
| 182 ACMatches last_matches; | 185 ACMatches last_matches; |
| 183 PopulateAutocompleteMatches(last, last_size, &last_matches); | 186 PopulateAutocompleteMatches(last, last_size, &last_matches); |
| 184 AutocompleteResult last_result; | 187 AutocompleteResult last_result; |
| 185 last_result.AppendMatches(last_matches); | 188 last_result.AppendMatches(last_matches); |
| 186 last_result.SortAndCull(input, test_util_.profile()); | 189 last_result.SortAndCull(input, test_util_.profile()); |
| 187 | 190 |
| 188 ACMatches current_matches; | 191 ACMatches current_matches; |
| 189 PopulateAutocompleteMatches(current, current_size, ¤t_matches); | 192 PopulateAutocompleteMatches(current, current_size, ¤t_matches); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 205 EXPECT_EQ(r1.end(), r1.default_match()); | 208 EXPECT_EQ(r1.end(), r1.default_match()); |
| 206 EXPECT_EQ(r2.end(), r2.default_match()); | 209 EXPECT_EQ(r2.end(), r2.default_match()); |
| 207 | 210 |
| 208 // Swap with a single match. | 211 // Swap with a single match. |
| 209 ACMatches matches; | 212 ACMatches matches; |
| 210 AutocompleteMatch match; | 213 AutocompleteMatch match; |
| 211 match.relevance = 1; | 214 match.relevance = 1; |
| 212 match.allowed_to_be_default_match = true; | 215 match.allowed_to_be_default_match = true; |
| 213 AutocompleteInput input(base::ASCIIToUTF16("a"), base::string16::npos, | 216 AutocompleteInput input(base::ASCIIToUTF16("a"), base::string16::npos, |
| 214 base::string16(), GURL(), | 217 base::string16(), GURL(), |
| 215 AutocompleteInput::INVALID_SPEC, false, false, false, | 218 OmniboxEventProto::INVALID_SPEC, false, false, false, |
| 216 true); | 219 true); |
| 217 matches.push_back(match); | 220 matches.push_back(match); |
| 218 r1.AppendMatches(matches); | 221 r1.AppendMatches(matches); |
| 219 r1.SortAndCull(input, test_util_.profile()); | 222 r1.SortAndCull(input, test_util_.profile()); |
| 220 EXPECT_EQ(r1.begin(), r1.default_match()); | 223 EXPECT_EQ(r1.begin(), r1.default_match()); |
| 221 EXPECT_EQ("http://a/", r1.alternate_nav_url().spec()); | 224 EXPECT_EQ("http://a/", r1.alternate_nav_url().spec()); |
| 222 r1.Swap(&r2); | 225 r1.Swap(&r2); |
| 223 EXPECT_TRUE(r1.empty()); | 226 EXPECT_TRUE(r1.empty()); |
| 224 EXPECT_EQ(r1.end(), r1.default_match()); | 227 EXPECT_EQ(r1.end(), r1.default_match()); |
| 225 EXPECT_TRUE(r1.alternate_nav_url().is_empty()); | 228 EXPECT_TRUE(r1.alternate_nav_url().is_empty()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 ACMatches matches; | 291 ACMatches matches; |
| 289 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 292 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 290 matches[1].destination_url = GURL(); | 293 matches[1].destination_url = GURL(); |
| 291 matches[3].destination_url = GURL(); | 294 matches[3].destination_url = GURL(); |
| 292 matches[4].destination_url = GURL(); | 295 matches[4].destination_url = GURL(); |
| 293 | 296 |
| 294 AutocompleteResult result; | 297 AutocompleteResult result; |
| 295 result.AppendMatches(matches); | 298 result.AppendMatches(matches); |
| 296 AutocompleteInput input(base::string16(), base::string16::npos, | 299 AutocompleteInput input(base::string16(), base::string16::npos, |
| 297 base::string16(), GURL(), | 300 base::string16(), GURL(), |
| 298 AutocompleteInput::INVALID_SPEC, false, false, false, | 301 OmniboxEventProto::INVALID_SPEC, false, false, false, |
| 299 true); | 302 true); |
| 300 result.SortAndCull(input, test_util_.profile()); | 303 result.SortAndCull(input, test_util_.profile()); |
| 301 | 304 |
| 302 // Of the two results with the same non-empty destination URL, the | 305 // Of the two results with the same non-empty destination URL, the |
| 303 // lower-relevance one should be dropped. All of the results with empty URLs | 306 // lower-relevance one should be dropped. All of the results with empty URLs |
| 304 // should be kept. | 307 // should be kept. |
| 305 ASSERT_EQ(4U, result.size()); | 308 ASSERT_EQ(4U, result.size()); |
| 306 EXPECT_TRUE(result.match_at(0)->destination_url.is_empty()); | 309 EXPECT_TRUE(result.match_at(0)->destination_url.is_empty()); |
| 307 EXPECT_EQ(1300, result.match_at(0)->relevance); | 310 EXPECT_EQ(1300, result.match_at(0)->relevance); |
| 308 EXPECT_TRUE(result.match_at(1)->destination_url.is_empty()); | 311 EXPECT_TRUE(result.match_at(1)->destination_url.is_empty()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 334 matches[0].destination_url = GURL("http://www.foo.com/s?q=foo"); | 337 matches[0].destination_url = GURL("http://www.foo.com/s?q=foo"); |
| 335 matches[1].destination_url = GURL("http://www.foo.com/s?q=foo2"); | 338 matches[1].destination_url = GURL("http://www.foo.com/s?q=foo2"); |
| 336 matches[2].destination_url = GURL("http://www.foo.com/s?q=foo&oq=f"); | 339 matches[2].destination_url = GURL("http://www.foo.com/s?q=foo&oq=f"); |
| 337 matches[3].destination_url = GURL("http://www.foo.com/s?q=foo&aqs=0"); | 340 matches[3].destination_url = GURL("http://www.foo.com/s?q=foo&aqs=0"); |
| 338 matches[4].destination_url = GURL("http://www.foo.com/"); | 341 matches[4].destination_url = GURL("http://www.foo.com/"); |
| 339 | 342 |
| 340 AutocompleteResult result; | 343 AutocompleteResult result; |
| 341 result.AppendMatches(matches); | 344 result.AppendMatches(matches); |
| 342 AutocompleteInput input(base::string16(), base::string16::npos, | 345 AutocompleteInput input(base::string16(), base::string16::npos, |
| 343 base::string16(), GURL(), | 346 base::string16(), GURL(), |
| 344 AutocompleteInput::INVALID_SPEC, false, false, false, | 347 OmniboxEventProto::INVALID_SPEC, false, false, false, |
| 345 true); | 348 true); |
| 346 result.SortAndCull(input, test_util_.profile()); | 349 result.SortAndCull(input, test_util_.profile()); |
| 347 | 350 |
| 348 // We expect the 3rd and 4th results to be removed. | 351 // We expect the 3rd and 4th results to be removed. |
| 349 ASSERT_EQ(3U, result.size()); | 352 ASSERT_EQ(3U, result.size()); |
| 350 EXPECT_EQ("http://www.foo.com/s?q=foo", | 353 EXPECT_EQ("http://www.foo.com/s?q=foo", |
| 351 result.match_at(0)->destination_url.spec()); | 354 result.match_at(0)->destination_url.spec()); |
| 352 EXPECT_EQ(1300, result.match_at(0)->relevance); | 355 EXPECT_EQ(1300, result.match_at(0)->relevance); |
| 353 EXPECT_EQ("http://www.foo.com/s?q=foo2", | 356 EXPECT_EQ("http://www.foo.com/s?q=foo2", |
| 354 result.match_at(1)->destination_url.spec()); | 357 result.match_at(1)->destination_url.spec()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 matches[1].destination_url = GURL("http://www.foo.com/s?q=foo2"); | 389 matches[1].destination_url = GURL("http://www.foo.com/s?q=foo2"); |
| 387 matches[2].destination_url = GURL("http://www.foo.com/s?q=foo&oq=f"); | 390 matches[2].destination_url = GURL("http://www.foo.com/s?q=foo&oq=f"); |
| 388 matches[3].destination_url = GURL("http://www.foo.com/s?q=foo&aqs=0"); | 391 matches[3].destination_url = GURL("http://www.foo.com/s?q=foo&aqs=0"); |
| 389 matches[4].destination_url = GURL("http://www.foo.com/"); | 392 matches[4].destination_url = GURL("http://www.foo.com/"); |
| 390 matches[5].destination_url = GURL("http://www.foo.com/s?q=foo2&oq=f"); | 393 matches[5].destination_url = GURL("http://www.foo.com/s?q=foo2&oq=f"); |
| 391 | 394 |
| 392 AutocompleteResult result; | 395 AutocompleteResult result; |
| 393 result.AppendMatches(matches); | 396 result.AppendMatches(matches); |
| 394 AutocompleteInput input(base::string16(), base::string16::npos, | 397 AutocompleteInput input(base::string16(), base::string16::npos, |
| 395 base::string16(), GURL(), | 398 base::string16(), GURL(), |
| 396 AutocompleteInput::INVALID_SPEC, false, false, false, | 399 OmniboxEventProto::INVALID_SPEC, false, false, false, |
| 397 true); | 400 true); |
| 398 result.SortAndCull(input, test_util_.profile()); | 401 result.SortAndCull(input, test_util_.profile()); |
| 399 | 402 |
| 400 // Expect 3 unique results after SortAndCull(). | 403 // Expect 3 unique results after SortAndCull(). |
| 401 ASSERT_EQ(3U, result.size()); | 404 ASSERT_EQ(3U, result.size()); |
| 402 | 405 |
| 403 // Check that 3rd and 4th result got added to the first result as dups | 406 // Check that 3rd and 4th result got added to the first result as dups |
| 404 // and also duplicates of the 4th match got copied. | 407 // and also duplicates of the 4th match got copied. |
| 405 ASSERT_EQ(4U, result.match_at(0)->duplicate_matches.size()); | 408 ASSERT_EQ(4U, result.match_at(0)->duplicate_matches.size()); |
| 406 const AutocompleteMatch* first_match = result.match_at(0); | 409 const AutocompleteMatch* first_match = result.match_at(0); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 ASSERT_TRUE(chrome_variations::AssociateVariationParams( | 443 ASSERT_TRUE(chrome_variations::AssociateVariationParams( |
| 441 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); | 444 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); |
| 442 } | 445 } |
| 443 base::FieldTrialList::CreateFieldTrial( | 446 base::FieldTrialList::CreateFieldTrial( |
| 444 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A"); | 447 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A"); |
| 445 | 448 |
| 446 AutocompleteResult result; | 449 AutocompleteResult result; |
| 447 result.AppendMatches(matches); | 450 result.AppendMatches(matches); |
| 448 AutocompleteInput input(base::string16(), base::string16::npos, | 451 AutocompleteInput input(base::string16(), base::string16::npos, |
| 449 base::string16(), GURL(), | 452 base::string16(), GURL(), |
| 450 AutocompleteInput::HOME_PAGE, false, false, false, | 453 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 451 true); | 454 true); |
| 452 result.SortAndCull(input, test_util_.profile()); | 455 result.SortAndCull(input, test_util_.profile()); |
| 453 | 456 |
| 454 // Check the new ordering. The history-title results should be omitted. | 457 // Check the new ordering. The history-title results should be omitted. |
| 455 // We cannot check relevance scores because the matches are sorted by | 458 // We cannot check relevance scores because the matches are sorted by |
| 456 // demoted relevance but the actual relevance scores are not modified. | 459 // demoted relevance but the actual relevance scores are not modified. |
| 457 ASSERT_EQ(3u, result.size()); | 460 ASSERT_EQ(3u, result.size()); |
| 458 EXPECT_EQ("http://search-what-you-typed/", | 461 EXPECT_EQ("http://search-what-you-typed/", |
| 459 result.match_at(0)->destination_url.spec()); | 462 result.match_at(0)->destination_url.spec()); |
| 460 EXPECT_EQ("http://history-url/", | 463 EXPECT_EQ("http://history-url/", |
| (...skipping 24 matching lines...) Expand all Loading... |
| 485 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "C", params)); | 488 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "C", params)); |
| 486 } | 489 } |
| 487 base::FieldTrialList::CreateFieldTrial( | 490 base::FieldTrialList::CreateFieldTrial( |
| 488 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "C"); | 491 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "C"); |
| 489 | 492 |
| 490 { | 493 { |
| 491 AutocompleteResult result; | 494 AutocompleteResult result; |
| 492 result.AppendMatches(matches); | 495 result.AppendMatches(matches); |
| 493 AutocompleteInput input( | 496 AutocompleteInput input( |
| 494 base::string16(), base::string16::npos, base::string16(), GURL(), | 497 base::string16(), base::string16::npos, base::string16(), GURL(), |
| 495 AutocompleteInput::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS, false, | 498 OmniboxEventProto::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS, false, |
| 496 false, false, true); | 499 false, false, true); |
| 497 result.SortAndCull(input, test_util_.profile()); | 500 result.SortAndCull(input, test_util_.profile()); |
| 498 | 501 |
| 499 // The NAVSUGGEST dup-url stay above search-url since the navsuggest | 502 // The NAVSUGGEST dup-url stay above search-url since the navsuggest |
| 500 // variant should not be demoted. | 503 // variant should not be demoted. |
| 501 ASSERT_EQ(4u, result.size()); | 504 ASSERT_EQ(4u, result.size()); |
| 502 EXPECT_EQ("http://search-what-you-typed/", | 505 EXPECT_EQ("http://search-what-you-typed/", |
| 503 result.match_at(0)->destination_url.spec()); | 506 result.match_at(0)->destination_url.spec()); |
| 504 EXPECT_EQ("http://dup-url/", | 507 EXPECT_EQ("http://dup-url/", |
| 505 result.match_at(1)->destination_url.spec()); | 508 result.match_at(1)->destination_url.spec()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 523 { | 526 { |
| 524 // Check that reorder doesn't do anything if the top result | 527 // Check that reorder doesn't do anything if the top result |
| 525 // is already a legal default match (which is the default from | 528 // is already a legal default match (which is the default from |
| 526 // PopulateAutocompleteMatches()). | 529 // PopulateAutocompleteMatches()). |
| 527 ACMatches matches; | 530 ACMatches matches; |
| 528 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 531 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 529 AutocompleteResult result; | 532 AutocompleteResult result; |
| 530 result.AppendMatches(matches); | 533 result.AppendMatches(matches); |
| 531 AutocompleteInput input(base::string16(), base::string16::npos, | 534 AutocompleteInput input(base::string16(), base::string16::npos, |
| 532 base::string16(), GURL(), | 535 base::string16(), GURL(), |
| 533 AutocompleteInput::HOME_PAGE, false, false, false, | 536 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 534 true); | 537 true); |
| 535 result.SortAndCull(input, test_util_.profile()); | 538 result.SortAndCull(input, test_util_.profile()); |
| 536 AssertResultMatches(result, data, 4); | 539 AssertResultMatches(result, data, 4); |
| 537 } | 540 } |
| 538 | 541 |
| 539 { | 542 { |
| 540 // Check that reorder swaps up a result appropriately. | 543 // Check that reorder swaps up a result appropriately. |
| 541 ACMatches matches; | 544 ACMatches matches; |
| 542 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 545 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 543 matches[0].allowed_to_be_default_match = false; | 546 matches[0].allowed_to_be_default_match = false; |
| 544 matches[1].allowed_to_be_default_match = false; | 547 matches[1].allowed_to_be_default_match = false; |
| 545 AutocompleteResult result; | 548 AutocompleteResult result; |
| 546 result.AppendMatches(matches); | 549 result.AppendMatches(matches); |
| 547 AutocompleteInput input(base::string16(), base::string16::npos, | 550 AutocompleteInput input(base::string16(), base::string16::npos, |
| 548 base::string16(), GURL(), | 551 base::string16(), GURL(), |
| 549 AutocompleteInput::HOME_PAGE, false, false, false, | 552 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 550 true); | 553 true); |
| 551 result.SortAndCull(input, test_util_.profile()); | 554 result.SortAndCull(input, test_util_.profile()); |
| 552 ASSERT_EQ(4U, result.size()); | 555 ASSERT_EQ(4U, result.size()); |
| 553 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); | 556 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); |
| 554 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); | 557 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
| 555 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); | 558 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); |
| 556 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); | 559 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
| 557 } | 560 } |
| 558 } | 561 } |
| 559 | 562 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 570 { | 573 { |
| 571 // Check that with the field trial disabled, we keep keep the first match | 574 // Check that with the field trial disabled, we keep keep the first match |
| 572 // first even if it has an inline autocompletion. | 575 // first even if it has an inline autocompletion. |
| 573 ACMatches matches; | 576 ACMatches matches; |
| 574 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 577 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 575 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); | 578 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 576 AutocompleteResult result; | 579 AutocompleteResult result; |
| 577 result.AppendMatches(matches); | 580 result.AppendMatches(matches); |
| 578 AutocompleteInput input(base::string16(), base::string16::npos, | 581 AutocompleteInput input(base::string16(), base::string16::npos, |
| 579 base::string16(), GURL(), | 582 base::string16(), GURL(), |
| 580 AutocompleteInput::HOME_PAGE, false, false, false, | 583 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 581 true); | 584 true); |
| 582 result.SortAndCull(input, test_util_.profile()); | 585 result.SortAndCull(input, test_util_.profile()); |
| 583 AssertResultMatches(result, data, 4); | 586 AssertResultMatches(result, data, 4); |
| 584 } | 587 } |
| 585 | 588 |
| 586 // Enable the field trial to disable inlining. | 589 // Enable the field trial to disable inlining. |
| 587 { | 590 { |
| 588 std::map<std::string, std::string> params; | 591 std::map<std::string, std::string> params; |
| 589 params[OmniboxFieldTrial::kDisableInliningRule] = "true"; | 592 params[OmniboxFieldTrial::kDisableInliningRule] = "true"; |
| 590 ASSERT_TRUE(chrome_variations::AssociateVariationParams( | 593 ASSERT_TRUE(chrome_variations::AssociateVariationParams( |
| 591 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "D", params)); | 594 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "D", params)); |
| 592 } | 595 } |
| 593 base::FieldTrialList::CreateFieldTrial( | 596 base::FieldTrialList::CreateFieldTrial( |
| 594 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "D"); | 597 OmniboxFieldTrial::kBundledExperimentFieldTrialName, "D"); |
| 595 | 598 |
| 596 { | 599 { |
| 597 // Now the first match should be demoted past the second. | 600 // Now the first match should be demoted past the second. |
| 598 ACMatches matches; | 601 ACMatches matches; |
| 599 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 602 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 600 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); | 603 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 601 AutocompleteResult result; | 604 AutocompleteResult result; |
| 602 result.AppendMatches(matches); | 605 result.AppendMatches(matches); |
| 603 AutocompleteInput input(base::string16(), base::string16::npos, | 606 AutocompleteInput input(base::string16(), base::string16::npos, |
| 604 base::string16(), GURL(), | 607 base::string16(), GURL(), |
| 605 AutocompleteInput::HOME_PAGE, false, false, false, | 608 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 606 true); | 609 true); |
| 607 result.SortAndCull(input, test_util_.profile()); | 610 result.SortAndCull(input, test_util_.profile()); |
| 608 ASSERT_EQ(4U, result.size()); | 611 ASSERT_EQ(4U, result.size()); |
| 609 EXPECT_EQ("http://b/", result.match_at(0)->destination_url.spec()); | 612 EXPECT_EQ("http://b/", result.match_at(0)->destination_url.spec()); |
| 610 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); | 613 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
| 611 EXPECT_EQ("http://c/", result.match_at(2)->destination_url.spec()); | 614 EXPECT_EQ("http://c/", result.match_at(2)->destination_url.spec()); |
| 612 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); | 615 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
| 613 } | 616 } |
| 614 | 617 |
| 615 { | 618 { |
| 616 // But if there was no inline autocompletion on the first match, then | 619 // But if there was no inline autocompletion on the first match, then |
| 617 // the order should stay the same. This is true even if there are | 620 // the order should stay the same. This is true even if there are |
| 618 // inline autocompletions elsewhere. | 621 // inline autocompletions elsewhere. |
| 619 ACMatches matches; | 622 ACMatches matches; |
| 620 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 623 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 621 matches[2].inline_autocompletion = base::ASCIIToUTF16("completion"); | 624 matches[2].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 622 AutocompleteResult result; | 625 AutocompleteResult result; |
| 623 result.AppendMatches(matches); | 626 result.AppendMatches(matches); |
| 624 AutocompleteInput input(base::string16(), base::string16::npos, | 627 AutocompleteInput input(base::string16(), base::string16::npos, |
| 625 base::string16(), GURL(), | 628 base::string16(), GURL(), |
| 626 AutocompleteInput::HOME_PAGE, false, false, false, | 629 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 627 true); | 630 true); |
| 628 result.SortAndCull(input, test_util_.profile()); | 631 result.SortAndCull(input, test_util_.profile()); |
| 629 AssertResultMatches(result, data, 4); | 632 AssertResultMatches(result, data, 4); |
| 630 } | 633 } |
| 631 | 634 |
| 632 { | 635 { |
| 633 // Try a more complicated situation. | 636 // Try a more complicated situation. |
| 634 ACMatches matches; | 637 ACMatches matches; |
| 635 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 638 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 636 matches[0].allowed_to_be_default_match = false; | 639 matches[0].allowed_to_be_default_match = false; |
| 637 matches[1].inline_autocompletion = base::ASCIIToUTF16("completion"); | 640 matches[1].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 638 AutocompleteResult result; | 641 AutocompleteResult result; |
| 639 result.AppendMatches(matches); | 642 result.AppendMatches(matches); |
| 640 AutocompleteInput input(base::string16(), base::string16::npos, | 643 AutocompleteInput input(base::string16(), base::string16::npos, |
| 641 base::string16(), GURL(), | 644 base::string16(), GURL(), |
| 642 AutocompleteInput::HOME_PAGE, false, false, false, | 645 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 643 true); | 646 true); |
| 644 result.SortAndCull(input, test_util_.profile()); | 647 result.SortAndCull(input, test_util_.profile()); |
| 645 ASSERT_EQ(4U, result.size()); | 648 ASSERT_EQ(4U, result.size()); |
| 646 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); | 649 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); |
| 647 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); | 650 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
| 648 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); | 651 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); |
| 649 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); | 652 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
| 650 } | 653 } |
| 651 | 654 |
| 652 { | 655 { |
| 653 // Try another complicated situation. | 656 // Try another complicated situation. |
| 654 ACMatches matches; | 657 ACMatches matches; |
| 655 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 658 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 656 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); | 659 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 657 matches[1].allowed_to_be_default_match = false; | 660 matches[1].allowed_to_be_default_match = false; |
| 658 AutocompleteResult result; | 661 AutocompleteResult result; |
| 659 result.AppendMatches(matches); | 662 result.AppendMatches(matches); |
| 660 AutocompleteInput input(base::string16(), base::string16::npos, | 663 AutocompleteInput input(base::string16(), base::string16::npos, |
| 661 base::string16(), GURL(), | 664 base::string16(), GURL(), |
| 662 AutocompleteInput::HOME_PAGE, false, false, false, | 665 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 663 true); | 666 true); |
| 664 result.SortAndCull(input, test_util_.profile()); | 667 result.SortAndCull(input, test_util_.profile()); |
| 665 ASSERT_EQ(4U, result.size()); | 668 ASSERT_EQ(4U, result.size()); |
| 666 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); | 669 EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); |
| 667 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); | 670 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
| 668 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); | 671 EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); |
| 669 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); | 672 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
| 670 } | 673 } |
| 671 | 674 |
| 672 { | 675 { |
| 673 // Check that disaster doesn't strike if we can't demote the top inline | 676 // Check that disaster doesn't strike if we can't demote the top inline |
| 674 // autocompletion because every match either has a completion or isn't | 677 // autocompletion because every match either has a completion or isn't |
| 675 // allowed to be the default match. In this case, we should leave | 678 // allowed to be the default match. In this case, we should leave |
| 676 // everything untouched. | 679 // everything untouched. |
| 677 ACMatches matches; | 680 ACMatches matches; |
| 678 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 681 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 679 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); | 682 matches[0].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 680 matches[1].allowed_to_be_default_match = false; | 683 matches[1].allowed_to_be_default_match = false; |
| 681 matches[2].allowed_to_be_default_match = false; | 684 matches[2].allowed_to_be_default_match = false; |
| 682 matches[3].inline_autocompletion = base::ASCIIToUTF16("completion"); | 685 matches[3].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 683 AutocompleteResult result; | 686 AutocompleteResult result; |
| 684 result.AppendMatches(matches); | 687 result.AppendMatches(matches); |
| 685 AutocompleteInput input(base::string16(), base::string16::npos, | 688 AutocompleteInput input(base::string16(), base::string16::npos, |
| 686 base::string16(), GURL(), | 689 base::string16(), GURL(), |
| 687 AutocompleteInput::HOME_PAGE, false, false, false, | 690 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 688 true); | 691 true); |
| 689 result.SortAndCull(input, test_util_.profile()); | 692 result.SortAndCull(input, test_util_.profile()); |
| 690 AssertResultMatches(result, data, 4); | 693 AssertResultMatches(result, data, 4); |
| 691 } | 694 } |
| 692 | 695 |
| 693 { | 696 { |
| 694 // Check a similar situation, except in this case the top match is not | 697 // Check a similar situation, except in this case the top match is not |
| 695 // allowed to the default match, so it still needs to be demoted so we | 698 // allowed to the default match, so it still needs to be demoted so we |
| 696 // get a legal default match first. That match will have an inline | 699 // get a legal default match first. That match will have an inline |
| 697 // autocompletion because we don't have any better options. | 700 // autocompletion because we don't have any better options. |
| 698 ACMatches matches; | 701 ACMatches matches; |
| 699 PopulateAutocompleteMatches(data, arraysize(data), &matches); | 702 PopulateAutocompleteMatches(data, arraysize(data), &matches); |
| 700 matches[0].allowed_to_be_default_match = false; | 703 matches[0].allowed_to_be_default_match = false; |
| 701 matches[1].inline_autocompletion = base::ASCIIToUTF16("completion"); | 704 matches[1].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 702 matches[2].allowed_to_be_default_match = false; | 705 matches[2].allowed_to_be_default_match = false; |
| 703 matches[3].inline_autocompletion = base::ASCIIToUTF16("completion"); | 706 matches[3].inline_autocompletion = base::ASCIIToUTF16("completion"); |
| 704 AutocompleteResult result; | 707 AutocompleteResult result; |
| 705 result.AppendMatches(matches); | 708 result.AppendMatches(matches); |
| 706 AutocompleteInput input(base::string16(), base::string16::npos, | 709 AutocompleteInput input(base::string16(), base::string16::npos, |
| 707 base::string16(), GURL(), | 710 base::string16(), GURL(), |
| 708 AutocompleteInput::HOME_PAGE, false, false, false, | 711 OmniboxEventProto::HOME_PAGE, false, false, false, |
| 709 true); | 712 true); |
| 710 result.SortAndCull(input, test_util_.profile()); | 713 result.SortAndCull(input, test_util_.profile()); |
| 711 ASSERT_EQ(4U, result.size()); | 714 ASSERT_EQ(4U, result.size()); |
| 712 EXPECT_EQ("http://b/", result.match_at(0)->destination_url.spec()); | 715 EXPECT_EQ("http://b/", result.match_at(0)->destination_url.spec()); |
| 713 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); | 716 EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); |
| 714 EXPECT_EQ("http://c/", result.match_at(2)->destination_url.spec()); | 717 EXPECT_EQ("http://c/", result.match_at(2)->destination_url.spec()); |
| 715 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); | 718 EXPECT_EQ("http://d/", result.match_at(3)->destination_url.spec()); |
| 716 } | 719 } |
| 717 } | 720 } |
| 718 | 721 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 result.Reset(); | 823 result.Reset(); |
| 821 matches.clear(); | 824 matches.clear(); |
| 822 | 825 |
| 823 // Case 5: Multiple verbatim matches found in AutocompleteResult. | 826 // Case 5: Multiple verbatim matches found in AutocompleteResult. |
| 824 PopulateAutocompleteMatchesFromTestData(kVerbatimMatches, | 827 PopulateAutocompleteMatchesFromTestData(kVerbatimMatches, |
| 825 arraysize(kVerbatimMatches), | 828 arraysize(kVerbatimMatches), |
| 826 &matches); | 829 &matches); |
| 827 result.AppendMatches(matches); | 830 result.AppendMatches(matches); |
| 828 EXPECT_FALSE(result.ShouldHideTopMatch()); | 831 EXPECT_FALSE(result.ShouldHideTopMatch()); |
| 829 } | 832 } |
| OLD | NEW |