1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 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) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_input.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/metrics/proto/omnibox_event.pb.h" 126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/metrics/proto/omnibox_input_type.pb.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/test_scheme_classifier.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/url_parse.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)using metrics::OmniboxEventProto; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, InputType) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct test_data { 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const metrics::OmniboxInputType::Type type; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } input_cases[] = { 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { base::string16(), metrics::OmniboxInputType::INVALID }, 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("?"), metrics::OmniboxInputType::FORCED_QUERY }, 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("?foo"), metrics::OmniboxInputType::FORCED_QUERY }, 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("?foo bar"), metrics::OmniboxInputType::FORCED_QUERY }, 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { ASCIIToUTF16("?http://foo.com/bar"), 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch metrics::OmniboxInputType::FORCED_QUERY }, 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo"), metrics::OmniboxInputType::UNKNOWN }, 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("localhost"), metrics::OmniboxInputType::URL }, 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.c"), metrics::OmniboxInputType::UNKNOWN }, 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com"), metrics::OmniboxInputType::URL }, 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("-foo.com"), metrics::OmniboxInputType::URL }, 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo-.com"), metrics::OmniboxInputType::URL }, 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo_.com"), metrics::OmniboxInputType::UNKNOWN }, 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.-com"), metrics::OmniboxInputType::QUERY }, 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/"), metrics::OmniboxInputType::URL }, 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar"), metrics::OmniboxInputType::UNKNOWN }, 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar%00"), metrics::OmniboxInputType::QUERY }, 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar/"), metrics::OmniboxInputType::URL }, 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar baz\\"), metrics::OmniboxInputType::URL }, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com/bar"), metrics::OmniboxInputType::URL }, 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo;bar"), metrics::OmniboxInputType::UNKNOWN }, 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar baz"), metrics::OmniboxInputType::UNKNOWN }, 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo bar.com"), metrics::OmniboxInputType::QUERY }, 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo bar"), metrics::OmniboxInputType::QUERY }, 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo+bar"), metrics::OmniboxInputType::QUERY }, 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo+bar.com"), metrics::OmniboxInputType::UNKNOWN }, 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("\"foo:bar\""), metrics::OmniboxInputType::QUERY }, 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("link:foo.com"), metrics::OmniboxInputType::UNKNOWN }, 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo:81"), metrics::OmniboxInputType::URL }, 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("localhost:8080"), metrics::OmniboxInputType::URL }, 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("www.foo.com:81"), metrics::OmniboxInputType::URL }, 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com:123456"), metrics::OmniboxInputType::QUERY }, 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com:abc"), metrics::OmniboxInputType::QUERY }, 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2.3.4:abc"), metrics::OmniboxInputType::QUERY }, 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo.com"), metrics::OmniboxInputType::UNKNOWN }, 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo/z"), metrics::OmniboxInputType::URL }, 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo/z z"), metrics::OmniboxInputType::URL }, 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo.com/z"), metrics::OmniboxInputType::URL }, 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@"), metrics::OmniboxInputType::UNKNOWN }, 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@!foo.com"), metrics::OmniboxInputType::UNKNOWN }, 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo"), metrics::OmniboxInputType::URL }, 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo.c"), metrics::OmniboxInputType::URL }, 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo.com"), metrics::OmniboxInputType::URL }, 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo.com:81"), metrics::OmniboxInputType::URL }, 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo:81"), metrics::OmniboxInputType::URL }, 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2"), metrics::OmniboxInputType::UNKNOWN }, 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2/45"), metrics::OmniboxInputType::UNKNOWN }, 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2:45"), metrics::OmniboxInputType::UNKNOWN }, 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@1.2:45"), metrics::OmniboxInputType::URL }, 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo:45"), metrics::OmniboxInputType::URL }, 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@1.2:45"), metrics::OmniboxInputType::URL }, 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host?query"), metrics::OmniboxInputType::UNKNOWN }, 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host#ref"), metrics::OmniboxInputType::UNKNOWN }, 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host/path?query"), metrics::OmniboxInputType::URL }, 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host/path#ref"), metrics::OmniboxInputType::URL }, 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("en.wikipedia.org/wiki/Jim Beam"), 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In Chrome itself, mailto: will get handled by ShellExecute, but in 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unittest mode, we don't have the data loaded in the external protocol 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handler to know this. 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // { ASCIIToUTF16("mailto:abuse@foo.com"), metrics::OmniboxInputType::URL }, 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("view-source:http://www.foo.com/"), 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("javascript:alert(\"Hi there\");"), 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("C:\\Program Files"), metrics::OmniboxInputType::URL }, 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("\\\\Server\\Folder\\File"), 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:foo"), metrics::OmniboxInputType::URL }, 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo"), metrics::OmniboxInputType::URL }, 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.c"), metrics::OmniboxInputType::URL }, 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.com"), metrics::OmniboxInputType::URL }, 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo_bar.com"), metrics::OmniboxInputType::URL }, 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo/bar%00"), metrics::OmniboxInputType::QUERY }, 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo/bar baz"), metrics::OmniboxInputType::URL }, 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://-foo.com"), metrics::OmniboxInputType::URL }, 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo-.com"), metrics::OmniboxInputType::URL }, 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo_.com"), metrics::OmniboxInputType::UNKNOWN }, 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.-com"), metrics::OmniboxInputType::UNKNOWN }, 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://_foo_.com"), metrics::OmniboxInputType::UNKNOWN }, 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.com:abc"), metrics::OmniboxInputType::QUERY }, 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.com:123456"), metrics::OmniboxInputType::QUERY }, 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://1.2.3.4:abc"), metrics::OmniboxInputType::QUERY }, 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:user@foo.com"), metrics::OmniboxInputType::URL }, 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://user@foo.com"), metrics::OmniboxInputType::URL }, 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:user:pass@foo.com"), metrics::OmniboxInputType::URL }, 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://user:pass@foo.com"), 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://1.2"), metrics::OmniboxInputType::URL }, 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://1.2/45"), metrics::OmniboxInputType::URL }, 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:ps/2 games"), metrics::OmniboxInputType::URL }, 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("https://foo.com"), metrics::OmniboxInputType::URL }, 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("127.0.0.1"), metrics::OmniboxInputType::URL }, 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("127.0.1"), metrics::OmniboxInputType::UNKNOWN }, 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("127.0.1/"), metrics::OmniboxInputType::URL }, 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("browser.tabs.closeButtons"), 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::UNKNOWN }, 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { base::WideToUTF16(L"\u6d4b\u8bd5"), metrics::OmniboxInputType::UNKNOWN }, 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("[2001:]"), metrics::OmniboxInputType::QUERY }, 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("[2001:dB8::1]"), metrics::OmniboxInputType::URL }, 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("192.168.0.256"), metrics::OmniboxInputType::QUERY }, 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("[foo.com]"), metrics::OmniboxInputType::QUERY }, 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:http://a.com/t/bar"), 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:http://a.com/"), 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::QUERY }, 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:file://"), metrics::OmniboxInputType::QUERY }, 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:http"), metrics::OmniboxInputType::QUERY }, 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:"), metrics::OmniboxInputType::QUERY }, 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("chrome-search://"), metrics::OmniboxInputType::QUERY }, 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("chrome-devtools:"), metrics::OmniboxInputType::QUERY }, 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("about://f;"), metrics::OmniboxInputType::QUERY }, 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("://w"), metrics::OmniboxInputType::QUERY }, 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16(":w"), metrics::OmniboxInputType::QUERY }, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(input_cases[i].input, base::string16::npos, 146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 1476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, false, true, 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, TestSchemeClassifier()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].type, input.type()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, InputTypeWithDesiredTLD) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct test_data { 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 1566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const metrics::OmniboxInputType::Type type; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string spec; // Unused if not a URL. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } input_cases[] = { 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("401k"), metrics::OmniboxInputType::URL, 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://www.401k.com/") }, 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("999999999999999"), metrics::OmniboxInputType::URL, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://www.999999999999999.com/") }, 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("x@y"), metrics::OmniboxInputType::URL, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://x@www.y.com/") }, 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("y/z z"), metrics::OmniboxInputType::URL, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://www.y.com/z%20z") }, 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("abc.com"), metrics::OmniboxInputType::URL, 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://abc.com/") }, 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo bar"), metrics::OmniboxInputType::QUERY, 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string() }, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(input_cases[i].input, base::string16::npos, 176d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ASCIIToUTF16("com"), GURL(), 1776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, false, true, 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, TestSchemeClassifier()); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].type, input.type()); 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (input_cases[i].type == metrics::OmniboxInputType::URL) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(input_cases[i].spec, input.canonicalized_url().spec()); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests for a regression where certain input in the omnibox caused us to 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// crash. As long as the test completes without crashing, we're fine. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, InputCrash) { 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutocompleteInput input(base::WideToUTF16(L"\uff65@s"), base::string16::npos, 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 1906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, false, 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, true, TestSchemeClassifier()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, ParseForEmphasizeComponent) { 1955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu using url::Component; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component kInvalidComponent(0, -1); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct test_data { 198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Component scheme; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Component host; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } input_cases[] = { 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { base::string16(), kInvalidComponent, kInvalidComponent }, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("?"), kInvalidComponent, kInvalidComponent }, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("?http://foo.com/bar"), kInvalidComponent, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInvalidComponent }, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("foo/bar baz"), kInvalidComponent, Component(0, 3) }, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("http://foo/bar baz"), Component(0, 4), Component(7, 3) }, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("link:foo.com"), Component(0, 4), kInvalidComponent }, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("www.foo.com:81"), kInvalidComponent, Component(0, 11) }, 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { base::WideToUTF16(L"\u6d4b\u8bd5"), kInvalidComponent, Component(0, 2) }, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:http://www.foo.com/"), Component(12, 4), 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(19, 11) }, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:https://example.com/"), 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 5), Component(20, 11) }, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:www.foo.com"), kInvalidComponent, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 11) }, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:"), Component(0, 11), kInvalidComponent }, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:garbage"), kInvalidComponent, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 7) }, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:http://http://foo"), Component(12, 4), 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(19, 4) }, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:view-source:http://example.com/"), 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 11), kInvalidComponent } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component scheme, host; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteInput::ParseForEmphasizeComponents(input_cases[i].input, 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestSchemeClassifier(), 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &scheme, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &host); 233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(input_cases[i].input, base::string16::npos, 234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 2356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false, true, true, TestSchemeClassifier()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].scheme.begin, scheme.begin); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].scheme.len, scheme.len); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].host.begin, host.begin); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].host.len, host.len); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AutocompleteInputTest, InputTypeWithCursorPosition) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct test_data { 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cursor_position; 248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 normalized_input; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t normalized_cursor_position; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } input_cases[] = { 251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { ASCIIToUTF16("foo bar"), base::string16::npos, 252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16("foo bar"), base::string16::npos }, 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // regular case, no changes. 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("foo bar"), 3, ASCIIToUTF16("foo bar"), 3 }, 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // extra leading space. 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" foo bar"), 3, ASCIIToUTF16("foo bar"), 1 }, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" foo bar"), 3, ASCIIToUTF16("foo bar"), 0 }, 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" foo bar "), 2, ASCIIToUTF16("foo bar "), 0 }, 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // forced query. 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("?foo bar"), 2, ASCIIToUTF16("foo bar"), 1 }, 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" ?foo bar"), 4, ASCIIToUTF16("foo bar"), 1 }, 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("? foo bar"), 4, ASCIIToUTF16("foo bar"), 1 }, 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" ? foo bar"), 6, ASCIIToUTF16("foo bar"), 1 }, 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteInput input(input_cases[i].input, 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_cases[i].cursor_position, 273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 2746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, false, true, true, TestSchemeClassifier()); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(input_cases[i].normalized_input, input.text()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(input_cases[i].normalized_cursor_position, 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input.cursor_position()); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 281