chromium/components/spellcheck/common/spellcheck.mojom

// Copyright 2017 The Chromium Authors
// 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/public/mojom/base/read_only_file.mojom";
import "mojo/public/mojom/base/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_base.mojom.ReadOnlyFile? file;
  string language;
};

// Browser process interface exposed to the renderer for requesting spell-
// check host services to be initialized.
//
interface SpellCheckInitializationHost {
  // 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();
};

// Browser process interface exposed to the renderer for requesting spell-
// check host services. This interface is bound per frame.
//
interface SpellCheckHost {
  // Tracks spell checking occurrences to collect histograms, where |word|
  // was checked, and |misspelled| is true if |word| was misspelt.
  NotifyChecked(mojo_base.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|.
  [EnableIf=USE_RENDERER_SPELLCHECKER]
  CallSpellingService(mojo_base.mojom.String16 text) =>
      (bool success, array<SpellCheckResult> results);

  // Asks the host to spellcheck the |text| using a platform-specific spell
  // checker, and returns the spellchecked |results|.
  [EnableIf=USE_BROWSER_SPELLCHECKER]
  RequestTextCheck(mojo_base.mojom.String16 text) =>
      (array<SpellCheckResult> results);

  // Disconnects the Android spell checker session bridge.
  [EnableIf=is_android]
  DisconnectSessionBridge();

  // Checks the correctness of a word with a platform-specific spell checker.
  // TODO(groby): This needs to originate from SpellcheckProvider.
  [EnableIf=USE_BROWSER_SPELLCHECKER, Sync]
  CheckSpelling(mojo_base.mojom.String16 word)
      => (bool correct);

  // Returns a list of suggestions for a given word with a platform-specific
  // spell checker.
  [EnableIf=USE_BROWSER_SPELLCHECKER, Sync]
  FillSuggestionList(mojo_base.mojom.String16 word) =>
      (array<mojo_base.mojom.String16> suggestions);

  // Completes initialization of the spellcheck service by loading dictionaries.
  [EnableIf=is_win]
  InitializeDictionaries() =>
      (array<SpellCheckBDictLanguage> dictionaries,
       array<string> custom_words,
       bool enable);
};

enum Decoration {
  kSpelling,
  kGrammar,
};

struct SpellCheckResult {
  Decoration decoration;
  int32 location;
  int32 length;
  array<mojo_base.mojom.String16> replacements;
};