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

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

#include <stddef.h>
#include <stdint.h>

#include <optional>

#include "base/at_exit.h"
#include "base/i18n/icu_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "components/omnibox/browser/test_scheme_classifier.h"
#include "third_party/metrics_proto/omnibox_event.pb.h"

// From crbug.com/774858
struct IcuEnvironment {
  IcuEnvironment() { CHECK(base::i18n::InitializeICU()); }
  // Used by ICU integration.
  base::AtExitManager at_exit_manager;
};

IcuEnvironment icu_env;

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  // This is an arbitrary size, and arguably even small for a JSON input,
  // but we have to cut it off somewhere.
  if (size > 4096)
    return 0;
  std::unique_ptr<std::string> response_body =
      std::make_unique<std::string>(reinterpret_cast<const char*>(data), size);
  std::optional<base::Value::List> root_list =
      SearchSuggestionParser::DeserializeJsonData(
          SearchSuggestionParser::ExtractJsonData(nullptr,
                                                  std::move(response_body)));
  if (root_list) {
    AutocompleteInput input;
    {
      // Set-up the input so downstream won't reject it.
      if (!root_list->empty() && (*root_list)[0].is_string()) {
        std::string query = (*root_list)[0].GetString();
        input = AutocompleteInput(base::UTF8ToUTF16(query),
                                  metrics::OmniboxEventProto::OTHER,
                                  TestSchemeClassifier());
      }
    }
    // This is primarily only used to decide where to store the results,
    // and to record in the SuggestResult.
    const bool is_keyword = false;
    SearchSuggestionParser::Results results;
    // Copied from BaseSearchProvider::ParseSuggestResults()
    SearchSuggestionParser::ParseSuggestResults(
        *root_list, input, TestSchemeClassifier(),
        /*default_result_relevance=*/-1,
        /*is_keyword_result=*/is_keyword, &results);
  }
  return 0;
}
