// 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.
// The chrome.hotwordPrivate API allows extensions to access and
// mutate the preference for enabling hotword search. It also provides
// information on whether the hotword search is available. This API provides an
// event interface to transmit to the extension a signal that the preference fo
// hotword search has change.
//
// For an FYI, visit http://goo.gl/AyHbkH
namespace hotwordPrivate {
dictionary StatusDetails {
// Whether the hotword preference has been set.
boolean enabledSet;
// If the hotword extension is enabled. Will always be false if |available|
// is false.
boolean enabled;
// Whether the hotword extension is available to be enabled
// Optional field, only valid when getStatus() is called with
// |getOptionalFields| = true. Otherwise, set to false.
boolean available;
// Whether always-on is available to be enabled
// Optional field, only valid when getStatus() is called with
// |getOptionalFields| = true. Otherwise, set to false.
boolean alwaysOnAvailable;
// Whether the sound of "Ok, Google" plus a few seconds before is sent
// back to Google.
boolean audioLoggingEnabled;
// Whether always-on hotwording is enabled.
boolean alwaysOnEnabled;
// Whether training mode is enabled.
boolean trainingEnabled;
// Whether the user corresponding to this profile is the active user.
boolean userIsActive;
// Whether hotword hardware is available if requested.
boolean hotwordHardwareAvailable;
};
dictionary LaunchState {
// TODO(kcarattini): Consider adding more variables here,
// such as the available state of the hotword service.
// The mode that the Hotword Audio Verification app was launched in.
long launchMode;
};
dictionary LogDetails {
// Number of audio channels. i.e. 1 = mono, 2 = stereo
long channels;
// Bytes per sample per channel.
long bytes_per_sample;
// Sample rate. Usually 32000 or 44100, but may be any integer.
long sample_rate;
// Array containing audio data. Length is
// (channels * bytes_per_sample * sample_rate * ).
ArrayBuffer buffer;
};
dictionary AudioHistoryState {
// Whether the call to set or get this state was successful.
boolean success;
// The current value of the audio history opt-in state after this
// call.
boolean enabled;
};
// The type of the recognized hotword. Right now it only has 'search' but
// could be expanded to other types of actions in the future.
enum HotwordType { search };
callback GenericDoneCallback = void ();
callback LaunchStateCallback = void(LaunchState result);
callback LocalizeStringsCallback = void(object result);
callback StatusDetailsCallback = void(StatusDetails result);
callback AudioHistoryCallback = void(AudioHistoryState result);
interface Functions {
// Sets the current enabled state of hotword search.
// True: enable hotword search. False: disable hotword search.
static void setEnabled(boolean state,
optional GenericDoneCallback callback);
// Retrieves the current state of hotword search.
// The result is put into a StatusDetails object.
// |getOptionalFields|: If true, fills in fields tagged as optional in
// StatusDetails with valid values. These fields are not valid by default
// since their current implementations may cause blocking operations.
static void getStatus(optional boolean getOptionalFields,
StatusDetailsCallback callback);
// Retrieves a dictionary mapping names to localized resource strings.
static void getLocalizedStrings(LocalizeStringsCallback callback);
// Sets the current enabled state of audio logging in the extension.
// True: logging enabled. False: no logging.
static void setAudioLoggingEnabled(boolean state,
optional GenericDoneCallback callback);
// Sets the current enabled state of hotword-always-on-search pref.
// True: enable hotword always on search.
// False: disable hotword always on search.
static void setHotwordAlwaysOnSearchEnabled(boolean state,
optional GenericDoneCallback callback);
// Sets the current state of the browser-requested hotword session.
static void setHotwordSessionState(boolean started,
optional GenericDoneCallback callback);
// Notifies that a hotword has been recognized in the browser-requested
// hotword session.
static void notifyHotwordRecognition(HotwordType type,
optional LogDetails log,
optional GenericDoneCallback callback);
// Retrieves the state that the Hotword Audio Verification app was
// launched in. The result is put into a LaunchState object.
static void getLaunchState(LaunchStateCallback callback);
// Starts the speaker model training.
static void startTraining(optional GenericDoneCallback callback);
// Finalizess the speaker model.
static void finalizeSpeakerModel(optional GenericDoneCallback callback);
// Notifies that the speaker model has been saved.
static void notifySpeakerModelSaved(optional GenericDoneCallback callback);
// Stops the speaker model training.
static void stopTraining(optional GenericDoneCallback callback);
// Sets the audio history opt-in state.
static void setAudioHistoryEnabled(boolean enabled,
optional AudioHistoryCallback callback);
// Gets the audio history opt-in state.
static void getAudioHistoryEnabled(optional AudioHistoryCallback callback);
// Sends the result of whether a speaker model exists to the browser.
static void speakerModelExistsResult(boolean exists,
optional GenericDoneCallback callback);
};
interface Events {
// Fired when the hotword detector enabled state should be changed.
// This can be from various sources, e.g. a pref change or training
// a speaker model.
static void onEnabledChanged();
// Fired when the browser wants to start a hotword session.
static void onHotwordSessionRequested();
// Fired when the browser wants to stop the requested hotword session.
static void onHotwordSessionStopped();
// Fired when the speaker model should be finalized.
static void onFinalizeSpeakerModel();
// Fired when the speaker model has been saved.
static void onSpeakerModelSaved();
// Fired when a hotword has triggered.
static void onHotwordTriggered();
// Fired when the speaker model should be deleted.
static void onDeleteSpeakerModel();
// Fired when the browser wants to find out whether the speaker model
// exists.
static void onSpeakerModelExists();
// Fired when the microphone state changes.
static void onMicrophoneStateChanged(boolean enabled);
};
};