autocomplete_input_unittest.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "url/url_util.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)using metrics::OmniboxEventProto; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, InputType) { 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(mukai): Fix this scheme setup. 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url::AddStandardScheme("chrome"); 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url::AddStandardScheme("chrome-devtools"); 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url::AddStandardScheme("chrome-search"); 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct test_data { 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const metrics::OmniboxInputType::Type type; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } input_cases[] = { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { base::string16(), metrics::OmniboxInputType::INVALID }, 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("?"), metrics::OmniboxInputType::FORCED_QUERY }, 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("?foo"), metrics::OmniboxInputType::FORCED_QUERY }, 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("?foo bar"), metrics::OmniboxInputType::FORCED_QUERY }, 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { ASCIIToUTF16("?http://foo.com/bar"), 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch metrics::OmniboxInputType::FORCED_QUERY }, 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo"), metrics::OmniboxInputType::UNKNOWN }, 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("localhost"), metrics::OmniboxInputType::URL }, 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.c"), metrics::OmniboxInputType::UNKNOWN }, 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com"), metrics::OmniboxInputType::URL }, 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("-foo.com"), metrics::OmniboxInputType::URL }, 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo-.com"), metrics::OmniboxInputType::URL }, 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo_.com"), metrics::OmniboxInputType::UNKNOWN }, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.-com"), metrics::OmniboxInputType::QUERY }, 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/"), metrics::OmniboxInputType::URL }, 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar"), metrics::OmniboxInputType::UNKNOWN }, 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar%00"), metrics::OmniboxInputType::QUERY }, 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar/"), metrics::OmniboxInputType::URL }, 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar baz\\"), metrics::OmniboxInputType::URL }, 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com/bar"), metrics::OmniboxInputType::URL }, 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo;bar"), metrics::OmniboxInputType::UNKNOWN }, 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo/bar baz"), metrics::OmniboxInputType::UNKNOWN }, 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo bar.com"), metrics::OmniboxInputType::QUERY }, 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo bar"), metrics::OmniboxInputType::QUERY }, 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo+bar"), metrics::OmniboxInputType::QUERY }, 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo+bar.com"), metrics::OmniboxInputType::UNKNOWN }, 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("\"foo:bar\""), metrics::OmniboxInputType::QUERY }, 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("link:foo.com"), metrics::OmniboxInputType::UNKNOWN }, 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo:81"), metrics::OmniboxInputType::URL }, 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("localhost:8080"), metrics::OmniboxInputType::URL }, 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("www.foo.com:81"), metrics::OmniboxInputType::URL }, 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com:123456"), metrics::OmniboxInputType::QUERY }, 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo.com:abc"), metrics::OmniboxInputType::QUERY }, 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2.3.4:abc"), metrics::OmniboxInputType::QUERY }, 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo.com"), metrics::OmniboxInputType::UNKNOWN }, 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo/z"), metrics::OmniboxInputType::URL }, 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo/z z"), metrics::OmniboxInputType::URL }, 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo.com/z"), metrics::OmniboxInputType::URL }, 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@"), metrics::OmniboxInputType::UNKNOWN }, 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@!foo.com"), metrics::OmniboxInputType::UNKNOWN }, 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo"), metrics::OmniboxInputType::URL }, 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo.c"), metrics::OmniboxInputType::URL }, 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo.com"), metrics::OmniboxInputType::URL }, 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo.com:81"), metrics::OmniboxInputType::URL }, 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@foo:81"), metrics::OmniboxInputType::URL }, 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2"), metrics::OmniboxInputType::UNKNOWN }, 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2/45"), metrics::OmniboxInputType::UNKNOWN }, 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("1.2:45"), metrics::OmniboxInputType::UNKNOWN }, 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@1.2:45"), metrics::OmniboxInputType::URL }, 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user@foo:45"), metrics::OmniboxInputType::URL }, 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("user:pass@1.2:45"), metrics::OmniboxInputType::URL }, 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host?query"), metrics::OmniboxInputType::UNKNOWN }, 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host#ref"), metrics::OmniboxInputType::UNKNOWN }, 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host/path?query"), metrics::OmniboxInputType::URL }, 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("host/path#ref"), metrics::OmniboxInputType::URL }, 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("en.wikipedia.org/wiki/Jim Beam"), 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In Chrome itself, mailto: will get handled by ShellExecute, but in 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unittest mode, we don't have the data loaded in the external protocol 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handler to know this. 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // { ASCIIToUTF16("mailto:abuse@foo.com"), metrics::OmniboxInputType::URL }, 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("view-source:http://www.foo.com/"), 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("javascript:alert(\"Hi there\");"), 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("C:\\Program Files"), metrics::OmniboxInputType::URL }, 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("\\\\Server\\Folder\\File"), 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:foo"), metrics::OmniboxInputType::URL }, 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo"), metrics::OmniboxInputType::URL }, 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.c"), metrics::OmniboxInputType::URL }, 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.com"), metrics::OmniboxInputType::URL }, 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo_bar.com"), metrics::OmniboxInputType::URL }, 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo/bar%00"), metrics::OmniboxInputType::QUERY }, 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo/bar baz"), metrics::OmniboxInputType::URL }, 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://-foo.com"), metrics::OmniboxInputType::URL }, 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo-.com"), metrics::OmniboxInputType::URL }, 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo_.com"), metrics::OmniboxInputType::UNKNOWN }, 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.-com"), metrics::OmniboxInputType::UNKNOWN }, 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://_foo_.com"), metrics::OmniboxInputType::UNKNOWN }, 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.com:abc"), metrics::OmniboxInputType::QUERY }, 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://foo.com:123456"), metrics::OmniboxInputType::QUERY }, 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://1.2.3.4:abc"), metrics::OmniboxInputType::QUERY }, 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:user@foo.com"), metrics::OmniboxInputType::URL }, 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://user@foo.com"), metrics::OmniboxInputType::URL }, 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:user:pass@foo.com"), metrics::OmniboxInputType::URL }, 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://user:pass@foo.com"), 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://1.2"), metrics::OmniboxInputType::URL }, 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http://1.2/45"), metrics::OmniboxInputType::URL }, 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("http:ps/2 games"), metrics::OmniboxInputType::URL }, 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("https://foo.com"), metrics::OmniboxInputType::URL }, 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("127.0.0.1"), metrics::OmniboxInputType::URL }, 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("127.0.1"), metrics::OmniboxInputType::UNKNOWN }, 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("127.0.1/"), metrics::OmniboxInputType::URL }, 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("browser.tabs.closeButtons"), 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::UNKNOWN }, 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { base::WideToUTF16(L"\u6d4b\u8bd5"), metrics::OmniboxInputType::UNKNOWN }, 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("[2001:]"), metrics::OmniboxInputType::QUERY }, 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("[2001:dB8::1]"), metrics::OmniboxInputType::URL }, 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("192.168.0.256"), metrics::OmniboxInputType::QUERY }, 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("[foo.com]"), metrics::OmniboxInputType::QUERY }, 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:http://a.com/t/bar"), 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::URL }, 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:http://a.com/"), 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) metrics::OmniboxInputType::QUERY }, 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:file://"), metrics::OmniboxInputType::QUERY }, 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:http"), metrics::OmniboxInputType::QUERY }, 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("filesystem:"), metrics::OmniboxInputType::QUERY }, 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("chrome-search://"), metrics::OmniboxInputType::QUERY }, 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("chrome-devtools:"), metrics::OmniboxInputType::QUERY }, 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("about://f;"), metrics::OmniboxInputType::QUERY }, 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("://w"), metrics::OmniboxInputType::QUERY }, 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16(":w"), metrics::OmniboxInputType::QUERY }, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(input_cases[i].input, base::string16::npos, 152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 1536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, false, true, 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, TestSchemeClassifier()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].type, input.type()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, InputTypeWithDesiredTLD) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct test_data { 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 1626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const metrics::OmniboxInputType::Type type; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string spec; // Unused if not a URL. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } input_cases[] = { 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("401k"), metrics::OmniboxInputType::URL, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://www.401k.com/") }, 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("999999999999999"), metrics::OmniboxInputType::URL, 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://www.999999999999999.com/") }, 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("x@y"), metrics::OmniboxInputType::URL, 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://x@www.y.com/") }, 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("y/z z"), metrics::OmniboxInputType::URL, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://www.y.com/z%20z") }, 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("abc.com"), metrics::OmniboxInputType::URL, 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("http://abc.com/") }, 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { ASCIIToUTF16("foo bar"), metrics::OmniboxInputType::QUERY, 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string() }, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(input_cases[i].input, base::string16::npos, 182d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ASCIIToUTF16("com"), GURL(), 1836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, false, true, 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, TestSchemeClassifier()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].type, input.type()); 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (input_cases[i].type == metrics::OmniboxInputType::URL) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(input_cases[i].spec, input.canonicalized_url().spec()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests for a regression where certain input in the omnibox caused us to 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// crash. As long as the test completes without crashing, we're fine. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, InputCrash) { 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutocompleteInput input(base::WideToUTF16(L"\uff65@s"), base::string16::npos, 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 1966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, false, 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, true, TestSchemeClassifier()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AutocompleteInputTest, ParseForEmphasizeComponent) { 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu using url::Component; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component kInvalidComponent(0, -1); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct test_data { 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Component scheme; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Component host; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } input_cases[] = { 208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { base::string16(), kInvalidComponent, kInvalidComponent }, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("?"), kInvalidComponent, kInvalidComponent }, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("?http://foo.com/bar"), kInvalidComponent, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kInvalidComponent }, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("foo/bar baz"), kInvalidComponent, Component(0, 3) }, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("http://foo/bar baz"), Component(0, 4), Component(7, 3) }, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("link:foo.com"), Component(0, 4), kInvalidComponent }, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("www.foo.com:81"), kInvalidComponent, Component(0, 11) }, 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { base::WideToUTF16(L"\u6d4b\u8bd5"), kInvalidComponent, Component(0, 2) }, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:http://www.foo.com/"), Component(12, 4), 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(19, 11) }, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:https://example.com/"), 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 5), Component(20, 11) }, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:www.foo.com"), kInvalidComponent, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 11) }, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:"), Component(0, 11), kInvalidComponent }, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:garbage"), kInvalidComponent, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 7) }, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:http://http://foo"), Component(12, 4), 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(19, 4) }, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ASCIIToUTF16("view-source:view-source:http://example.com/"), 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component(12, 11), kInvalidComponent } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Component scheme, host; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteInput::ParseForEmphasizeComponents(input_cases[i].input, 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestSchemeClassifier(), 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &scheme, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &host); 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(input_cases[i].input, base::string16::npos, 240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 2416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, true, 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false, true, true, TestSchemeClassifier()); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].scheme.begin, scheme.begin); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].scheme.len, scheme.len); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].host.begin, host.begin); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input_cases[i].host.len, host.len); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AutocompleteInputTest, InputTypeWithCursorPosition) { 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct test_data { 252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cursor_position; 254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 normalized_input; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t normalized_cursor_position; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } input_cases[] = { 257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { ASCIIToUTF16("foo bar"), base::string16::npos, 258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16("foo bar"), base::string16::npos }, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // regular case, no changes. 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("foo bar"), 3, ASCIIToUTF16("foo bar"), 3 }, 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // extra leading space. 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" foo bar"), 3, ASCIIToUTF16("foo bar"), 1 }, 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" foo bar"), 3, ASCIIToUTF16("foo bar"), 0 }, 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" foo bar "), 2, ASCIIToUTF16("foo bar "), 0 }, 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // forced query. 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("?foo bar"), 2, ASCIIToUTF16("foo bar"), 1 }, 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" ?foo bar"), 4, ASCIIToUTF16("foo bar"), 1 }, 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("? foo bar"), 4, ASCIIToUTF16("foo bar"), 1 }, 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16(" ? foo bar"), 6, ASCIIToUTF16("foo bar"), 1 }, 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(input_cases[i].input); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteInput input(input_cases[i].input, 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_cases[i].cursor_position, 279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), GURL(), 2806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) OmniboxEventProto::INVALID_SPEC, 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, false, true, true, TestSchemeClassifier()); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(input_cases[i].normalized_input, input.text()); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(input_cases[i].normalized_cursor_position, 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input.cursor_position()); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 287