// 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.

module mojom;

// The structures here roughly mirror those from autocomplete.

struct AutocompleteAdditionalInfo {
  string key;
  string value;
};

struct AutocompleteMatch {
  string? provider_name;
  // Only meaningful if |provider_name| is valid.
  bool provider_done;
  int32 relevance;
  bool deletable;
  string fill_into_edit;
  string inline_autocompletion;
  string destination_url;
  string contents;
  string description;
  string transition;
  bool allowed_to_be_default_match;
  string type;
  bool has_tab_match;
  string? associated_keyword;
  string keyword;
  bool starred;
  int32 duplicates;
  bool from_previous;
  array<AutocompleteAdditionalInfo> additional_info;
};

struct AutocompleteResultsForProvider {
  string provider_name;
  array<AutocompleteMatch> results;
};

struct OmniboxResult {
  bool done;
  // Time delta since the request was started, in milliseconds.
  int32 time_since_omnibox_started_ms;
  // The inferred metrics::OmniboxInputType of the request represented as a
  // string.
  string type;
  string host;
  bool is_typed_host;
  array<AutocompleteMatch> combined_results;
  array<AutocompleteResultsForProvider> results_by_provider;
};

interface OmniboxPageHandler {
  SetClientPage(OmniboxPage page);
  StartOmniboxQuery(string input_string,
                    bool reset_autocomplete_controller,
                    int32 cursor_position,
                    bool prevent_inline_autocomplete,
                    bool prefer_keyword,
                    int32 page_classification);
};

interface OmniboxPage {
  HandleNewAutocompleteResult(OmniboxResult result);
};
