// 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/metrics/proto/omnibox_event.pb.h"
#include "components/metrics/proto/omnibox_input_type.pb.h"
#include "components/omnibox/browser/test_scheme_classifier.h"
#include "testing/gtest/include/gtest/gtest.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 type;
  } input_cases[] = {
    { base::string16(), metrics::OmniboxInputType::INVALID },
    { ASCIIToUTF16("?"), metrics::OmniboxInputType::FORCED_QUERY },
    { ASCIIToUTF16("?foo"), metrics::OmniboxInputType::FORCED_QUERY },
    { ASCIIToUTF16("?foo bar"), metrics::OmniboxInputType::FORCED_QUERY },
    { ASCIIToUTF16("?http://foo.com/bar"),
      metrics::OmniboxInputType::FORCED_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/z"), metrics::OmniboxInputType::URL },
    { ASCIIToUTF16("user@foo/z z"), metrics::OmniboxInputType::URL },
    { ASCIIToUTF16("user@foo.com/z"), metrics::OmniboxInputType::URL },
    { 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("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::QUERY },
    { ASCIIToUTF16("host#ref"), metrics::OmniboxInputType::QUERY },
    { ASCIIToUTF16("host# ref"), metrics::OmniboxInputType::QUERY },
    { 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://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::QUERY },
    { ASCIIToUTF16(":w"), metrics::OmniboxInputType::QUERY },
    { 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, base::string16::npos,
                            std::string(), GURL(),
                            OmniboxEventProto::INVALID_SPEC, true, false, true,
                            true, false, TestSchemeClassifier());
    EXPECT_EQ(input_cases[i].type, input.type());
  }
}

TEST(AutocompleteInputTest, InputTypeWithDesiredTLD) {
  struct test_data {
    const base::string16 input;
    const metrics::OmniboxInputType::Type 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("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",
                            GURL(), OmniboxEventProto::INVALID_SPEC, true,
                            false, true, true, false, TestSchemeClassifier());
    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"), base::string16::npos,
                          std::string(), GURL(),
                          OmniboxEventProto::INVALID_SPEC, true, false, true,
                          true, false, TestSchemeClassifier());
}

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);
    AutocompleteInput input(input_cases[i].input, base::string16::npos,
                            std::string(), GURL(),
                            OmniboxEventProto::INVALID_SPEC, true, false, true,
                            true, false, TestSchemeClassifier());
    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 },

    // forced query.
    { ASCIIToUTF16("?foo bar"), 2, ASCIIToUTF16("foo bar"), 1 },
    { ASCIIToUTF16("  ?foo bar"), 4, ASCIIToUTF16("foo bar"), 1 },
    { ASCIIToUTF16("?  foo bar"), 4, ASCIIToUTF16("foo bar"), 1 },
    { ASCIIToUTF16("  ?  foo bar"), 6, ASCIIToUTF16("foo bar"), 1 },
  };

  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, std::string(),
                            GURL(), OmniboxEventProto::INVALID_SPEC, true,
                            false, true, true, false, TestSchemeClassifier());
    EXPECT_EQ(input_cases[i].normalized_input, input.text());
    EXPECT_EQ(input_cases[i].normalized_cursor_position,
              input.cursor_position());
  }
}
