chromium/ash/webui/help_app_ui/search/search.mojom

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

module ash.help_app.mojom;

import "mojo/public/mojom/base/string16.mojom";

// The info needed to display one search result.
struct SearchResult {
  // Unique identifier for this concept.
  string id;

  // Localized title. Displayed directly in the UI as the main result text.
  mojo_base.mojom.String16 title;

  // Localized category. Displayed directly in the UI as secondary result text.
  mojo_base.mojom.String16 main_category;

  // The URL path containing the relevant content, which may or may not contain
  // URL parameters. For example, if the help content is at
  // chrome://help-app/help/sub/3399763/id/1282338#install-user, then the field
  // would be "help/sub/3399763/id/1282338#install-user" for this page.
  string url_path_with_parameters;

  // Locale code. Leave unset for the system configured locale. The format is
  // language[-country] (e.g., en-US).
  string locale;

  // Relevance score from the local search service. Higher is more relevant. The
  // minimum is relevance 0. Most results should have a score less than 1, but
  // greater than 1 is possible. Can use this to filter the list of search
  // results if needed.
  double relevance_score;
};

// The info needed to add one potential search result to the index.
// Keep this struct in-sync with the `search_concept.proto` under the same
// folder.
struct SearchConcept {
  // Unique identifier for this concept.
  string id;

  // Localized title. Displayed directly in the UI as the main result text.
  mojo_base.mojom.String16 title;

  // Localized category. Displayed directly in the UI as secondary result text.
  mojo_base.mojom.String16 main_category;

  // List of localized tags used to make the search concept searchable.
  array<mojo_base.mojom.String16> tags;

  // The locale of the tags. This could be different from the locale of the
  // other fields. Empty string means system locale. Same format as the locale
  // field.
  string tag_locale;

  // The URL path containing the relevant content, which may or may not contain
  // URL parameters. For example, if the help content is at
  // chrome://help-app/help/sub/3399763/id/1282338#install-user, then the field
  // would be "help/sub/3399763/id/1282338#install-user" for this page.
  string url_path_with_parameters;

  // Locale code. Leave unset for the system configured locale. The format is
  // language[-country] (e.g., en-US) where the language is the 2 or 3 letter
  // code from ISO-639.
  string locale;
};

// Used to observe changes to search results.
interface SearchResultsObserver {
  // Called when the availability of one or more search results has changed.
  // An example of when this gets called is when the search index first updates
  // from empty to populated. Clients can use this function to ensure that they
  // always show up to date search results.
  OnSearchResultAvailabilityChanged();
};

// Provides help app search results. Implemented in the browser process;
// intended to be called from the Launcher C++.
interface SearchHandler {
  // Searches help for the given query and returns a list of results, sorted
  // from most relevant to least relevant. An empty array indicates no relevant
  // results.
  //
  // This function returns an array with a maximum size of |max_num_results|,
  // but the array may contain fewer elements if there are fewer results.
  // Clients should never pass a value of 0 for |max_num_results|, since that
  // would return an empty result array.
  Search(mojo_base.mojom.String16 query,
         uint32 max_num_results) =>
             (array<SearchResult> results);

  // Replaces the content in the launcher search index and metadata cache.
  // Callbacks on completion. Note that the list of concepts and all the fields
  // inside each concept come from an untrusted source:
  // chrome-untrusted://help-app.
  Update(array<SearchConcept> concepts) => ();

  // Adds an observer of search results. Disconnected observers are discarded;
  // to stop observing, close the connection.
  Observe(pending_remote<SearchResultsObserver> observer);
};