builtin_provider_unittest.cc revision c2db58bd994c04d98e4ee2cd7565b71548655fe3
1710632d07b13609444626367bebd34c0af3acb6aMikhail Glushenkov// Copyright (c) 2012 The Chromium Authors. All rights reserved.
26091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer// Use of this source code is governed by a BSD-style license that can be
36091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer// found in the LICENSE file.
46091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner#include "chrome/browser/autocomplete/builtin_provider.h"
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner
76091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer#include "base/message_loop/message_loop.h"
86091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer#include "base/strings/utf_string_conversions.h"
927107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#include "chrome/browser/autocomplete/autocomplete_input.h"
1027107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#include "chrome/browser/autocomplete/autocomplete_match.h"
1127107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#include "chrome/browser/autocomplete/autocomplete_provider.h"
1227107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#include "chrome/common/url_constants.h"
1327107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling#include "chrome/test/base/testing_browser_process.h"
146091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer#include "testing/gtest/include/gtest/gtest.h"
156091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer#include "url/gurl.h"
16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak
17674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszakclass BuiltinProviderTest : public testing::Test {
186091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer protected:
19d509d0b532ec2358b3f341d4a4cd1411cb8b5db2Chris Lattner  template<class ResultType>
200319888773b36dd61d7d2283cb9a26cac1e5abe8Bill Wendling  struct test_data {
213467e30edf63b6d8a8d446186674ba9e4b7885a9Bill Wendling    const string16 input;
2222bd64173981bf1251c4b3bfc684207340534ba3Bill Wendling    const size_t num_results;
2358d74910c6b82e622ecbb57d6644d48fec5a5c0fChris Lattner    const ResultType output[3];
246091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer  };
256091ebd172a16a10f1ea66061a5fa7cbf5139e56Reid Spencer
26d426a642a23a234547cbc7061f5bfec157673249Bill Wendling  BuiltinProviderTest() : builtin_provider_(NULL) {}
27702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  virtual ~BuiltinProviderTest() {}
28f6670729aabc1fab85238d2b306a1c1767a807bbBill Wendling
29817abdd8b055059e5930a15704b9f52da4236456Bill Wendling  virtual void SetUp();
30817abdd8b055059e5930a15704b9f52da4236456Bill Wendling  virtual void TearDown();
316dc3781d44e56f0addf28b06232a50f3f9e6b1afBill Wendling
322c79ecbd704c656178ffa43d5a58ebe3ca188b40Bill Wendling  template<class ResultType>
33ad9a9e15595bc9d5ba1ed752caf8572957f77a3dDuncan Sands  void RunTest(test_data<ResultType>* builtin_cases,
34ad9a9e15595bc9d5ba1ed752caf8572957f77a3dDuncan Sands               int num_cases,
351d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling               ResultType AutocompleteMatch::* member);
3627107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling
3727107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling protected:
381d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling  scoped_refptr<BuiltinProvider> builtin_provider_;
391d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling};
401d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling
41034b94b17006f51722886b0f2283fb6fb19aca1fBill Wendlingvoid BuiltinProviderTest::SetUp() {
426765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling  builtin_provider_ = new BuiltinProvider(NULL, NULL);
431d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling}
4473dee180c836270644dfa7d90f9c5ba877567999Bill Wendling
45f3d1500ab2c7364d3d0fb73a7e1b8c6339ab48b1Bill Wendlingvoid BuiltinProviderTest::TearDown() {
4673dee180c836270644dfa7d90f9c5ba877567999Bill Wendling  builtin_provider_ = NULL;
4773dee180c836270644dfa7d90f9c5ba877567999Bill Wendling}
4873dee180c836270644dfa7d90f9c5ba877567999Bill Wendling
49f3d1500ab2c7364d3d0fb73a7e1b8c6339ab48b1Bill Wendlingtemplate<class ResultType>
5073dee180c836270644dfa7d90f9c5ba877567999Bill Wendlingvoid BuiltinProviderTest::RunTest(test_data<ResultType>* builtin_cases,
5111d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling                                  int num_cases,
5211d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling                                  ResultType AutocompleteMatch::* member) {
53f3d1500ab2c7364d3d0fb73a7e1b8c6339ab48b1Bill Wendling  ACMatches matches;
5411d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling  for (int i = 0; i < num_cases; ++i) {
5511d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling    AutocompleteInput input(builtin_cases[i].input, string16::npos, string16(),
5611d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling                            GURL(), AutocompleteInput::INVALID_SPEC, true,
5711d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling                            false, true, AutocompleteInput::ALL_MATCHES);
5811d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling    builtin_provider_->Start(input, false);
5911d00420e42ba88c3b48cab997965a7be79315e2Bill Wendling    EXPECT_TRUE(builtin_provider_->done());
60629fb82419d9bfff6ae475363bcce66192dfcc8eBill Wendling    matches = builtin_provider_->matches();
615a0eeb5a9d727940b1dbe8dff6e9aa292ada0f6aBill Wendling    EXPECT_EQ(builtin_cases[i].num_results, matches.size()) <<
62480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling                ASCIIToUTF16("Input was: ") << builtin_cases[i].input;
63480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    if (matches.size() == builtin_cases[i].num_results) {
64480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling      for (size_t j = 0; j < builtin_cases[i].num_results; ++j) {
656765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling        EXPECT_EQ(builtin_cases[i].output[j], matches[j].*member) <<
66f6670729aabc1fab85238d2b306a1c1767a807bbBill Wendling                ASCIIToUTF16("Input was: ") << builtin_cases[i].input;
67480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling        EXPECT_FALSE(matches[j].allowed_to_be_default_match);
68480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling      }
69480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    }
70480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  }
719a419f656e278b96e9dfe739cd63c7bff9a4e1fdQuentin Colombet}
72480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling
73480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill WendlingTEST_F(BuiltinProviderTest, TypingScheme) {
74480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const string16 kAbout = ASCIIToUTF16(chrome::kAboutScheme);
75480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const string16 kChrome = ASCIIToUTF16(chrome::kChromeUIScheme);
7667ae13575900e8efd056672987249fd0adbf5e73James Molloy  const string16 kSeparator1 = ASCIIToUTF16(":");
77480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const string16 kSeparator2 = ASCIIToUTF16(":/");
78480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const string16 kSeparator3 = ASCIIToUTF16(content::kStandardSchemeSeparator);
79480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling
803a106e60366a51b4594ec303ff8dbbc58913227fBill Wendling  // These default URLs should correspond with those in BuiltinProvider::Start.
81480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const GURL kURL1 = GURL(chrome::kChromeUIChromeURLsURL);
82480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const GURL kURL2 = GURL(chrome::kChromeUISettingsURL);
83480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  const GURL kURL3 = GURL(chrome::kChromeUIVersionURL);
84480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling
85480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling  test_data<GURL> typing_scheme_cases[] = {
86480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    // Typing an unrelated scheme should give nothing.
87480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    {ASCIIToUTF16("h"),        0, {}},
88480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    {ASCIIToUTF16("http"),     0, {}},
89480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    {ASCIIToUTF16("file"),     0, {}},
906765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling    {ASCIIToUTF16("abouz"),    0, {}},
916765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling    {ASCIIToUTF16("aboutt"),   0, {}},
92f6670729aabc1fab85238d2b306a1c1767a807bbBill Wendling    {ASCIIToUTF16("aboutt:"),  0, {}},
93480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    {ASCIIToUTF16("chroma"),   0, {}},
94480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    {ASCIIToUTF16("chromee"),  0, {}},
95114baee1fa017daefad2339c77b45b9ca3d79a41Bill Wendling    {ASCIIToUTF16("chromee:"), 0, {}},
96480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling
97480b1b28ea6fc1bb5c78d99472df624cfd3fce47Bill Wendling    // Typing a portion of about:// should give the default urls.
980319888773b36dd61d7d2283cb9a26cac1e5abe8Bill Wendling    {kAbout.substr(0, 1),      3, {kURL1, kURL2, kURL3}},
990319888773b36dd61d7d2283cb9a26cac1e5abe8Bill Wendling    {ASCIIToUTF16("A"),        3, {kURL1, kURL2, kURL3}},
1003a4779a9211281a1d0c27c97037342329035a185NAKAMURA Takumi    {kAbout,                   3, {kURL1, kURL2, kURL3}},
1013a4779a9211281a1d0c27c97037342329035a185NAKAMURA Takumi    {kAbout + kSeparator1,     3, {kURL1, kURL2, kURL3}},
1026f78fbbc630d2b86fb752574f5ad74473f57dfb1Chandler Carruth    {kAbout + kSeparator2,     3, {kURL1, kURL2, kURL3}},
1036f78fbbc630d2b86fb752574f5ad74473f57dfb1Chandler Carruth    {kAbout + kSeparator3,     3, {kURL1, kURL2, kURL3}},
1046765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling    {ASCIIToUTF16("aBoUT://"), 3, {kURL1, kURL2, kURL3}},
1056765834754cbb3cb0f15b4b15e98c5e73fa50066Bill Wendling
10627107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling    // Typing a portion of chrome:// should give the default urls.
10727107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling    {kChrome.substr(0, 1),      3, {kURL1, kURL2, kURL3}},
108d426a642a23a234547cbc7061f5bfec157673249Bill Wendling    {ASCIIToUTF16("C"),         3, {kURL1, kURL2, kURL3}},
10927107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling    {kChrome,                   3, {kURL1, kURL2, kURL3}},
1102c79ecbd704c656178ffa43d5a58ebe3ca188b40Bill Wendling    {kChrome + kSeparator1,     3, {kURL1, kURL2, kURL3}},
111c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {kChrome + kSeparator2,     3, {kURL1, kURL2, kURL3}},
112c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {kChrome + kSeparator3,     3, {kURL1, kURL2, kURL3}},
113c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {ASCIIToUTF16("ChRoMe://"), 3, {kURL1, kURL2, kURL3}},
114c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling  };
115c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill Wendling
116169d5270751597aed4095ead00401a3374906147Bill Wendling  RunTest<GURL>(typing_scheme_cases, arraysize(typing_scheme_cases),
117169d5270751597aed4095ead00401a3374906147Bill Wendling                &AutocompleteMatch::destination_url);
1182c79ecbd704c656178ffa43d5a58ebe3ca188b40Bill Wendling}
119c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill Wendling
120c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill WendlingTEST_F(BuiltinProviderTest, NonChromeURLs) {
121c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill Wendling  test_data<GURL> non_chrome_url_cases[] = {
122c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill Wendling    // Typing an unrelated scheme should give nothing.
123c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill Wendling    {ASCIIToUTF16("g@rb@g3"),                      0, {}},
124c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {ASCIIToUTF16("www.google.com"),               0, {}},
125c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {ASCIIToUTF16("http:www.google.com"),          0, {}},
126c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {ASCIIToUTF16("http://www.google.com"),        0, {}},
127c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {ASCIIToUTF16("file:filename"),                0, {}},
128eddab1550ee10cce3bb26a26e88529cb19451aa3NAKAMURA Takumi    {ASCIIToUTF16("scheme:"),                      0, {}},
129eddab1550ee10cce3bb26a26e88529cb19451aa3NAKAMURA Takumi    {ASCIIToUTF16("scheme://"),                    0, {}},
130eddab1550ee10cce3bb26a26e88529cb19451aa3NAKAMURA Takumi    {ASCIIToUTF16("scheme://host"),                0, {}},
1315a4041e7282ca1dba93fe1a97c8260c0ef621f5dBill Wendling    {ASCIIToUTF16("scheme:host/path?query#ref"),   0, {}},
1326dc3781d44e56f0addf28b06232a50f3f9e6b1afBill Wendling    {ASCIIToUTF16("scheme://host/path?query#ref"), 0, {}},
1336dc3781d44e56f0addf28b06232a50f3f9e6b1afBill Wendling  };
1345a4041e7282ca1dba93fe1a97c8260c0ef621f5dBill Wendling
1355a4041e7282ca1dba93fe1a97c8260c0ef621f5dBill Wendling  RunTest<GURL>(non_chrome_url_cases, arraysize(non_chrome_url_cases),
1365a4041e7282ca1dba93fe1a97c8260c0ef621f5dBill Wendling                &AutocompleteMatch::destination_url);
1375a4041e7282ca1dba93fe1a97c8260c0ef621f5dBill Wendling}
1386dc3781d44e56f0addf28b06232a50f3f9e6b1afBill Wendling
1391d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill WendlingTEST_F(BuiltinProviderTest, ChromeURLs) {
140ef99fe8efaa6cb74c66e570a6ef467debca92911Bill Wendling  const string16 kAbout = ASCIIToUTF16(chrome::kAboutScheme);
141e66f3d3ba0ea9f82f65a29c47fc37e997cbf0aceBill Wendling  const string16 kChrome = ASCIIToUTF16(chrome::kChromeUIScheme);
142ef99fe8efaa6cb74c66e570a6ef467debca92911Bill Wendling  const string16 kSeparator1 = ASCIIToUTF16(":");
1431d3dcfe4246b4d45fa78a8dfd0a11c7fff842c15Bill Wendling  const string16 kSeparator2 = ASCIIToUTF16(":/");
144943c29135e03e55f9a5dab393786171a4a536482Bill Wendling  const string16 kSeparator3 = ASCIIToUTF16(content::kStandardSchemeSeparator);
145e66f3d3ba0ea9f82f65a29c47fc37e997cbf0aceBill Wendling
14630b483c94001927b3593ed200e823104bab51660Bill Wendling  // This makes assumptions about the chrome URLs listed by the BuiltinProvider.
147c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling  // Currently they are derived from chrome::kChromeHostURLs[].
148c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling  const string16 kHostM1 = ASCIIToUTF16(content::kChromeUIMediaInternalsHost);
149c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling  const string16 kHostM2 = ASCIIToUTF16(chrome::kChromeUIMemoryHost);
150c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling  const string16 kHostM3 = ASCIIToUTF16(chrome::kChromeUIMemoryInternalsHost);
15160507d53e7e8e6b0c537675f68204a93c3033de7Bill Wendling  const GURL kURLM1 = GURL(kChrome + kSeparator3 + kHostM1);
15292e287f5bde8d34af9c3f2979afb6cd05bfb452cBill Wendling  const GURL kURLM2 = GURL(kChrome + kSeparator3 + kHostM2);
15392e287f5bde8d34af9c3f2979afb6cd05bfb452cBill Wendling  const GURL kURLM3 = GURL(kChrome + kSeparator3 + kHostM3);
15492e287f5bde8d34af9c3f2979afb6cd05bfb452cBill Wendling
1552d5be6c313c0f9e23e56620fa8f8ae8d9b539bf0Bill Wendling  test_data<GURL> chrome_url_cases[] = {
1562d5be6c313c0f9e23e56620fa8f8ae8d9b539bf0Bill Wendling    // Typing an about URL with an unknown host should give nothing.
1572d5be6c313c0f9e23e56620fa8f8ae8d9b539bf0Bill Wendling    {kAbout + kSeparator1 + ASCIIToUTF16("host"), 0, {}},
158c08a5ef6581f2c7550e92d31f63cd65ec29c39e0Bill Wendling    {kAbout + kSeparator2 + ASCIIToUTF16("host"), 0, {}},
1593467e30edf63b6d8a8d446186674ba9e4b7885a9Bill Wendling    {kAbout + kSeparator3 + ASCIIToUTF16("host"), 0, {}},
1603467e30edf63b6d8a8d446186674ba9e4b7885a9Bill Wendling
161bb08593980b16fbd9758da6ca4fa9c7964f2f926Bill Wendling    // Typing a chrome URL with an unknown host should give nothing.
162bb08593980b16fbd9758da6ca4fa9c7964f2f926Bill Wendling    {kChrome + kSeparator1 + ASCIIToUTF16("host"), 0, {}},
163bb08593980b16fbd9758da6ca4fa9c7964f2f926Bill Wendling    {kChrome + kSeparator2 + ASCIIToUTF16("host"), 0, {}},
164827cde1c8319e51463007078a7ce3660ebc93036Duncan Sands    {kChrome + kSeparator3 + ASCIIToUTF16("host"), 0, {}},
165827cde1c8319e51463007078a7ce3660ebc93036Duncan Sands
166e66f3d3ba0ea9f82f65a29c47fc37e997cbf0aceBill Wendling    // Typing an about URL should provide matching URLs.
16727107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling    {kAbout + kSeparator1 + kHostM1.substr(0, 1), 3, {kURLM1, kURLM2, kURLM3}},
16827107f6ab4627fa38bcacad6757ed6d52910f880Bill Wendling    {kAbout + kSeparator2 + kHostM1.substr(0, 2), 3, {kURLM1, kURLM2, kURLM3}},
16918e7211068c9d2c6204512f9c468ee179818a4b6Bill Wendling    {kAbout + kSeparator3 + kHostM1.substr(0, 3), 1, {kURLM1}},
17099faa3b4ec6d03ac7808fe4ff3fbf3d04e375502Bill Wendling    {kAbout + kSeparator3 + kHostM2.substr(0, 3), 2, {kURLM2, kURLM3}},
17107aae2e7d58fe23e370e0cbb9e1a3def99434c36Bill Wendling    {kAbout + kSeparator3 + kHostM1,              1, {kURLM1}},
17207aae2e7d58fe23e370e0cbb9e1a3def99434c36Bill Wendling    {kAbout + kSeparator2 + kHostM2,              2, {kURLM2, kURLM3}},
17307aae2e7d58fe23e370e0cbb9e1a3def99434c36Bill Wendling    {kAbout + kSeparator2 + kHostM3,              1, {kURLM3}},
17407aae2e7d58fe23e370e0cbb9e1a3def99434c36Bill Wendling
17507aae2e7d58fe23e370e0cbb9e1a3def99434c36Bill Wendling    // Typing a chrome URL should provide matching URLs.
17607aae2e7d58fe23e370e0cbb9e1a3def99434c36Bill Wendling    {kChrome + kSeparator1 + kHostM1.substr(0, 1), 3, {kURLM1, kURLM2, kURLM3}},
177a90a99a82b9c5c39fc6dbee9c266dcd7b107fe2fBill Wendling    {kChrome + kSeparator2 + kHostM1.substr(0, 2), 3, {kURLM1, kURLM2, kURLM3}},
1787d38c109aab8654e63e9071c7d948661f6b58433Bill Wendling    {kChrome + kSeparator3 + kHostM1.substr(0, 3), 1, {kURLM1}},
179a90a99a82b9c5c39fc6dbee9c266dcd7b107fe2fBill Wendling    {kChrome + kSeparator3 + kHostM2.substr(0, 3), 2, {kURLM2, kURLM3}},
18073dee180c836270644dfa7d90f9c5ba877567999Bill Wendling    {kChrome + kSeparator3 + kHostM1,              1, {kURLM1}},
1810976e00fd1cbf4128daeb72efd8957d00383fda9Bill Wendling    {kChrome + kSeparator2 + kHostM2,              2, {kURLM2, kURLM3}},
182ec2589863b32da169240c4fa120ef1e3798615d4Bill Wendling    {kChrome + kSeparator2 + kHostM3,              1, {kURLM3}},
1830976e00fd1cbf4128daeb72efd8957d00383fda9Bill Wendling  };
18473dee180c836270644dfa7d90f9c5ba877567999Bill Wendling
185606c8e36dfdd28fc589356addd3e2cbb89a32e4dBill Wendling  RunTest<GURL>(chrome_url_cases, arraysize(chrome_url_cases),
1860976e00fd1cbf4128daeb72efd8957d00383fda9Bill Wendling                &AutocompleteMatch::destination_url);
18787e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling}
18887e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling
1896bdbf061c353295669b6bfc271b948158602d1bcBill Wendling#if !defined(OS_ANDROID)
19087e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling// Disabled on Android where we use native UI instead of chrome://settings.
1916bdbf061c353295669b6bfc271b948158602d1bcBill WendlingTEST_F(BuiltinProviderTest, ChromeSettingsSubpages) {
19287e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling  // This makes assumptions about the chrome URLs listed by the BuiltinProvider.
19387e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling  // Currently they are derived from chrome::kChromeHostURLs[].
19487e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling  const string16 kSettings = ASCIIToUTF16(chrome::kChromeUISettingsURL);
1956bdbf061c353295669b6bfc271b948158602d1bcBill Wendling  const string16 kDefaultPage1 = ASCIIToUTF16(chrome::kAutofillSubPage);
19687e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling  const string16 kDefaultPage2 = ASCIIToUTF16(chrome::kClearBrowserDataSubPage);
19787e10dfefa94f77937c37b0eb51095540d675cbcBill Wendling  const GURL kDefaultURL1 = GURL(kSettings + kDefaultPage1);
1987d38c109aab8654e63e9071c7d948661f6b58433Bill Wendling  const GURL kDefaultURL2 = GURL(kSettings + kDefaultPage2);
199ec2589863b32da169240c4fa120ef1e3798615d4Bill Wendling  const string16 kPage1 = ASCIIToUTF16(chrome::kSearchEnginesSubPage);
20058d74910c6b82e622ecbb57d6644d48fec5a5c0fChris Lattner  const string16 kPage2 = ASCIIToUTF16(chrome::kSyncSetupSubPage);
201ec2589863b32da169240c4fa120ef1e3798615d4Bill Wendling  const GURL kURL1 = GURL(kSettings + kPage1);
202ec2589863b32da169240c4fa120ef1e3798615d4Bill Wendling  const GURL kURL2 = GURL(kSettings + kPage2);
203d05204aea4977eaec25e96bc7605a7bb9d806fc0Bill Wendling
204d05204aea4977eaec25e96bc7605a7bb9d806fc0Bill Wendling  test_data<GURL> settings_subpage_cases[] = {
205d05204aea4977eaec25e96bc7605a7bb9d806fc0Bill Wendling    // Typing the settings path should show settings and the first two subpages.
206d05204aea4977eaec25e96bc7605a7bb9d806fc0Bill Wendling    {kSettings, 3, {GURL(kSettings), kDefaultURL1, kDefaultURL2}},
207710632d07b13609444626367bebd34c0af3acb6aMikhail Glushenkov
20858d74910c6b82e622ecbb57d6644d48fec5a5c0fChris Lattner    // Typing a subpage path should return the appropriate results.
209c22f4aa886443507f8406d30d118fdeeac6a8c6cBill Wendling    {kSettings + kPage1.substr(0, 1),                   2, {kURL1, kURL2}},
21058d74910c6b82e622ecbb57d6644d48fec5a5c0fChris Lattner    {kSettings + kPage1.substr(0, 2),                   1, {kURL1}},
211710632d07b13609444626367bebd34c0af3acb6aMikhail Glushenkov    {kSettings + kPage1.substr(0, kPage1.length() - 1), 1, {kURL1}},
21218e7211068c9d2c6204512f9c468ee179818a4b6Bill Wendling    {kSettings + kPage1,                                1, {kURL1}},
2138e47daf2858e980210f3e1f007036b24da342c29Bill Wendling    {kSettings + kPage2,                                1, {kURL2}},
21428d65722d6f283b327b5815914382077fe9c0ab4Bill Wendling  };
21532a57958226e369f964a034da2ce7083a1a34297Bill Wendling
2161bbd644301ed4d8a7efd4ceb15f71c56fa914f28Bill Wendling  RunTest<GURL>(settings_subpage_cases, arraysize(settings_subpage_cases),
21758d74910c6b82e622ecbb57d6644d48fec5a5c0fChris Lattner                &AutocompleteMatch::destination_url);
218defaca00b8087d452df2b783250a48a32658a910Bill Wendling}
219defaca00b8087d452df2b783250a48a32658a910Bill Wendling#endif
220defaca00b8087d452df2b783250a48a32658a910Bill Wendling