// Copyright 2017 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 spellcheck.mojom;

import "mojo/common/file.mojom";
import "mojo/common/string16.mojom";

// Render process interface exposed to the browser for receiving process-
// wide spellcheck control and updates from the browser process.
//
interface SpellChecker {
  // Initialize the render process spellchecker. Called after startup and
  // also in response to a renderer's spellcheck::mojom::SpellCheckHost
  // RequestDictionary request.
  Initialize(array<SpellCheckBDictLanguage> dictionaries,
             array<string> custom_words,
             bool enable);

  // Custom dictionary words have been added or removed: update the local
  // custom word list.
  CustomDictionaryChanged(array<string> words_added,
                          array<string> words_removed);
};

struct SpellCheckBDictLanguage {
  mojo.common.mojom.File? file;
  string language;
};

// Browser process interface exposed to the renderer for requesting spell-
// check host services.
//
interface SpellCheckHost {
  // Asks the browser to initialize the renderer's spellcheck system. The
  // initialize call arrives on interface spellcheck::mojom::SpellChecker
  // in async response to this request.
  RequestDictionary();

  // Tracks spell checking occurrences to collect histograms, where |word|
  // was checked, and |misspelled| is true if |word| was misspelt.
  NotifyChecked(mojo.common.mojom.String16 word, bool misspelled);

  // Asks the host to spellcheck the |text| using a remote Spelling server
  // to do the spellchecking. If the remote Spelling server is available,
  // returns |success| true, and the spellchecked |results|. Note this API
  // requires a !BUILDFLAG(USE_BROWSER_SPELLCHECKER) build.
  CallSpellingService(mojo.common.mojom.String16 text) =>
      (bool success, array<SpellCheckResult> results);
};

enum Decoration {
  kSpelling,
  kGrammar,
};

struct SpellCheckResult {
  Decoration decoration;
  int32 location;
  int32 length;
  array<string> replacements;
};