// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/omnibox/browser/autocomplete_input.h"

#include <stddef.h>

#include "base/macros.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "components/omnibox/browser/test_scheme_classifier.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/metrics_proto/omnibox_event.pb.h"
#include "third_party/metrics_proto/omnibox_input_type.pb.h"
#include "url/third_party/mozilla/url_parse.h"

using base::ASCIIToUTF16;
using metrics::OmniboxEventProto;

TEST(AutocompleteInputTest, InputType) {
  struct test_data {
    const base::string16 input;
    const metrics::OmniboxInputType type;
  } input_cases[] = {
    {base::string16(), metrics::OmniboxInputType::INVALID},
    {ASCIIToUTF16("?"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("?foo"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("?foo bar"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("?http://foo.com/bar"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("localhost"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo._"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo.c"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("-foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo-.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo_.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo.-com"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo/"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo/bar"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("foo/bar%00"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo/bar/"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo/bar baz\\"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo.com/bar"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo;bar"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo/bar baz"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("foo bar.com"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo bar"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo+bar"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo+bar.com"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("\"foo:bar\""), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("link:foo.com"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("foo:81"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("localhost:8080"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("www.foo.com:81"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("foo.com:123456"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("foo.com:abc"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("1.2.3.4:abc"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("user@foo"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("user@foo.com"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("user@foo/"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user@foo/z"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user@foo/z z"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user@foo.com/z"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user @foo/"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("us er@foo/z"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("u ser@foo/z z"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("us er@foo.com/z"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("user:pass@"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("user:pass@!foo.com"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("user:pass@foo"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user:pass@foo.c"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user:pass@foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("space user:pass@foo"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("space user:pass@foo.c"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("space user:pass@foo.com"),
     metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("user:pass@foo.com:81"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user:pass@foo:81"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16(".1"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16(".1/3"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("1.2"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16(".1.2"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("1.2/"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("1.2/45"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("6008/32768"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("12345678/"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("123456789/"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("1.2:45"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("user@1.2:45"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("user@foo:45"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("user:pass@1.2:45"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("host?query"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("host#"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("host#ref"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("host# ref"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("host/#ref"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("host/?#ref"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("host/?#"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("host.com#ref"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://host#ref"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("host/path?query"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("host/path#ref"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("en.wikipedia.org/wiki/Jim Beam"),
     metrics::OmniboxInputType::URL},
    // In Chrome itself, mailto: will get handled by ShellExecute, but in
    // unittest mode, we don't have the data loaded in the external protocol
    // handler to know this.
    // { ASCIIToUTF16("mailto:abuse@foo.com"), metrics::OmniboxInputType::URL },
    {ASCIIToUTF16("view-source:http://www.foo.com/"),
     metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("javascript:alert(\"Hi there\");"),
     metrics::OmniboxInputType::URL},
#if defined(OS_WIN)
    {ASCIIToUTF16("C:\\Program Files"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("\\\\Server\\Folder\\File"), metrics::OmniboxInputType::URL},
#endif  // defined(OS_WIN)
    {ASCIIToUTF16("http:foo"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo._"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("http://foo.c"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo_bar.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo/bar%00"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("http://foo/bar baz"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://-foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo-.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo_.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo.-com"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("http://_foo_.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://foo.com:abc"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("http://foo.com:123456"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("http://1.2.3.4:abc"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("http:user@foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://user@foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://space user@foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://user:pass@foo"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://space user:pass@foo"),
     metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http:space user:pass@foo"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http:user:pass@foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://user:pass@foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://1.2"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http:user@1.2"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http://1.2/45"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("http:ps/2 games"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("https://foo.com"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("127.0.0.1"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("127.0.1"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("127.0.1/"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("0.0.0"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("0.0.0.0"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("0.0.0.1"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("http://0.0.0.1/"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("browser.tabs.closeButtons"),
     metrics::OmniboxInputType::UNKNOWN},
    {base::WideToUTF16(L"\u6d4b\u8bd5"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16("[2001:]"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("[2001:dB8::1]"), metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("192.168.0.256"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("[foo.com]"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("filesystem:http://a.com/t/bar"),
     metrics::OmniboxInputType::URL},
    {ASCIIToUTF16("filesystem:http://a.com/"),
     metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("filesystem:file://"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("filesystem:http"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("filesystem:"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("chrome-search://"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("chrome-devtools:"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("about://f;"), metrics::OmniboxInputType::QUERY},
    {ASCIIToUTF16("://w"), metrics::OmniboxInputType::UNKNOWN},
    {ASCIIToUTF16(":w"), metrics::OmniboxInputType::UNKNOWN},
    {base::WideToUTF16(L".\u062A"), metrics::OmniboxInputType::UNKNOWN},
  };

  for (size_t i = 0; i < arraysize(input_cases); ++i) {
    SCOPED_TRACE(input_cases[i].input);
    AutocompleteInput input(input_cases[i].input,
                            metrics::OmniboxEventProto::OTHER,
                            TestSchemeClassifier());
    input.set_prevent_inline_autocomplete(true);
    EXPECT_EQ(input_cases[i].type, input.type());
  }
}

TEST(AutocompleteInputTest, InputTypeWithDesiredTLD) {
  struct test_data {
    const base::string16 input;
    const metrics::OmniboxInputType type;
    const std::string spec;  // Unused if not a URL.
  } input_cases[] = {
      {ASCIIToUTF16("401k"), metrics::OmniboxInputType::URL,
       std::string("http://www.401k.com/")},
      {ASCIIToUTF16("56"), metrics::OmniboxInputType::URL,
       std::string("http://www.56.com/")},
      {ASCIIToUTF16("1.2"), metrics::OmniboxInputType::URL,
       std::string("http://www.1.2.com/")},
      {ASCIIToUTF16("1.2/3.4"), metrics::OmniboxInputType::URL,
       std::string("http://www.1.2.com/3.4")},
      {ASCIIToUTF16("192.168.0.1"), metrics::OmniboxInputType::URL,
       std::string("http://www.192.168.0.1.com/")},
      {ASCIIToUTF16("999999999999999"), metrics::OmniboxInputType::URL,
       std::string("http://www.999999999999999.com/")},
      {ASCIIToUTF16("x@y"), metrics::OmniboxInputType::URL,
       std::string("http://x@www.y.com/")},
      {ASCIIToUTF16("x@y.com"), metrics::OmniboxInputType::URL,
       std::string("http://x@y.com/")},
      {ASCIIToUTF16("space user@y"), metrics::OmniboxInputType::UNKNOWN,
       std::string()},
      {ASCIIToUTF16("y/z z"), metrics::OmniboxInputType::URL,
       std::string("http://www.y.com/z%20z")},
      {ASCIIToUTF16("abc.com"), metrics::OmniboxInputType::URL,
       std::string("http://abc.com/")},
      {ASCIIToUTF16("foo bar"), metrics::OmniboxInputType::QUERY,
       std::string()},
  };

  for (size_t i = 0; i < arraysize(input_cases); ++i) {
    SCOPED_TRACE(input_cases[i].input);
    AutocompleteInput input(input_cases[i].input, base::string16::npos, "com",
                            metrics::OmniboxEventProto::OTHER,
                            TestSchemeClassifier());
    input.set_prevent_inline_autocomplete(true);
    EXPECT_EQ(input_cases[i].type, input.type());
    if (input_cases[i].type == metrics::OmniboxInputType::URL)
      EXPECT_EQ(input_cases[i].spec, input.canonicalized_url().spec());
  }
}

// This tests for a regression where certain input in the omnibox caused us to
// crash. As long as the test completes without crashing, we're fine.
TEST(AutocompleteInputTest, InputCrash) {
  AutocompleteInput input(base::WideToUTF16(L"\uff65@s"),
                          metrics::OmniboxEventProto::OTHER,
                          TestSchemeClassifier());
  // Not strictly necessary, but let's be thorough.
  input.set_prevent_inline_autocomplete(true);
}

TEST(AutocompleteInputTest, ParseForEmphasizeComponent) {
  using url::Component;
  Component kInvalidComponent(0, -1);
  struct test_data {
    const base::string16 input;
    const Component scheme;
    const Component host;
  } input_cases[] = {
    { base::string16(), kInvalidComponent, kInvalidComponent },
    { ASCIIToUTF16("?"), kInvalidComponent, kInvalidComponent },
    { ASCIIToUTF16("?http://foo.com/bar"), kInvalidComponent,
        kInvalidComponent },
    { ASCIIToUTF16("foo/bar baz"), kInvalidComponent, Component(0, 3) },
    { ASCIIToUTF16("http://foo/bar baz"), Component(0, 4), Component(7, 3) },
    { ASCIIToUTF16("link:foo.com"), Component(0, 4), kInvalidComponent },
    { ASCIIToUTF16("www.foo.com:81"), kInvalidComponent, Component(0, 11) },
    { base::WideToUTF16(L"\u6d4b\u8bd5"), kInvalidComponent, Component(0, 2) },
    { ASCIIToUTF16("view-source:http://www.foo.com/"), Component(12, 4),
        Component(19, 11) },
    { ASCIIToUTF16("view-source:https://example.com/"),
      Component(12, 5), Component(20, 11) },
    { ASCIIToUTF16("view-source:www.foo.com"), kInvalidComponent,
        Component(12, 11) },
    { ASCIIToUTF16("view-source:"), Component(0, 11), kInvalidComponent },
    { ASCIIToUTF16("view-source:garbage"), kInvalidComponent,
        Component(12, 7) },
    { ASCIIToUTF16("view-source:http://http://foo"), Component(12, 4),
        Component(19, 4) },
    { ASCIIToUTF16("view-source:view-source:http://example.com/"),
        Component(12, 11), kInvalidComponent }
  };

  for (size_t i = 0; i < arraysize(input_cases); ++i) {
    SCOPED_TRACE(input_cases[i].input);
    Component scheme, host;
    AutocompleteInput::ParseForEmphasizeComponents(input_cases[i].input,
                                                   TestSchemeClassifier(),
                                                   &scheme,
                                                   &host);
    EXPECT_EQ(input_cases[i].scheme.begin, scheme.begin);
    EXPECT_EQ(input_cases[i].scheme.len, scheme.len);
    EXPECT_EQ(input_cases[i].host.begin, host.begin);
    EXPECT_EQ(input_cases[i].host.len, host.len);
  }
}

TEST(AutocompleteInputTest, InputTypeWithCursorPosition) {
  struct test_data {
    const base::string16 input;
    size_t cursor_position;
    const base::string16 normalized_input;
    size_t normalized_cursor_position;
  } input_cases[] = {
    { ASCIIToUTF16("foo bar"), base::string16::npos,
      ASCIIToUTF16("foo bar"), base::string16::npos },

    // Regular case, no changes.
    { ASCIIToUTF16("foo bar"), 3, ASCIIToUTF16("foo bar"), 3 },

    // Extra leading space.
    { ASCIIToUTF16("  foo bar"), 3, ASCIIToUTF16("foo bar"), 1 },
    { ASCIIToUTF16("      foo bar"), 3, ASCIIToUTF16("foo bar"), 0 },
    { ASCIIToUTF16("      foo bar   "), 2, ASCIIToUTF16("foo bar   "), 0 },

    // A leading '?' used to be a magic character indicating the following
    // input should be treated as a "forced query", but now if such a string
    // reaches the AutocompleteInput parser the '?' should just be treated like
    // a normal character.
    { ASCIIToUTF16("?foo bar"), 2, ASCIIToUTF16("?foo bar"), 2 },
    { ASCIIToUTF16("  ?foo bar"), 4, ASCIIToUTF16("?foo bar"), 2 },
    { ASCIIToUTF16("?  foo bar"), 4, ASCIIToUTF16("?  foo bar"), 4 },
    { ASCIIToUTF16("  ?  foo bar"), 6, ASCIIToUTF16("?  foo bar"), 4 },
  };

  for (size_t i = 0; i < arraysize(input_cases); ++i) {
    SCOPED_TRACE(input_cases[i].input);
    AutocompleteInput input(
        input_cases[i].input, input_cases[i].cursor_position,
        metrics::OmniboxEventProto::OTHER, TestSchemeClassifier());
    input.set_prevent_inline_autocomplete(true);
    EXPECT_EQ(input_cases[i].normalized_input, input.text());
    EXPECT_EQ(input_cases[i].normalized_cursor_position,
              input.cursor_position());
  }
}
