1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 (function() { 6 'use strict'; 7 8 /** 9 * @fileoverview This extension provides hotword triggering capabilites to 10 * Chrome. 11 * 12 * This extension contains all the JavaScript for loading and managing the 13 * hotword detector. The hotword detector and language model data will be 14 * provided by a shared module loaded from the web store. 15 * 16 * IMPORTANT! Whenever adding new events, the extension version number MUST be 17 * incremented. 18 */ 19 20 // Hotwording state. 21 var stateManager = new hotword.StateManager(); 22 23 // Detect Chrome startup and make sure we get a chance to run. 24 chrome.runtime.onStartup.addListener(function() { 25 stateManager.updateStatus(); 26 }); 27 28 // Detect when hotword settings have changed. 29 chrome.hotwordPrivate.onEnabledChanged.addListener(function() { 30 stateManager.updateStatus(); 31 }); 32 33 // Detect when the shared module containing the NaCL module and language model 34 // is installed. 35 chrome.management.onInstalled.addListener(function(info) { 36 if (info.id == hotword.constants.SHARED_MODULE_ID) 37 chrome.runtime.reload(); 38 }); 39 40 // Detect when a session has requested to be started and stopped. 41 chrome.hotwordPrivate.onHotwordSessionRequested.addListener(function() { 42 // TODO(amistry): This event should change state depending on whether the 43 // user has enabled always-on hotwording. But for now, always signal the 44 // start of a hotwording session. This allows this extension to work with 45 // the app launcher in the current state. 46 stateManager.startSession( 47 hotword.constants.SessionSource.LAUNCHER, 48 function() { 49 chrome.hotwordPrivate.setHotwordSessionState(true, function() {}); 50 }); 51 }); 52 53 chrome.hotwordPrivate.onHotwordSessionStopped.addListener(function() { 54 stateManager.stopSession(hotword.constants.SessionSource.LAUNCHER); 55 chrome.hotwordPrivate.setHotwordSessionState(false, function() {}); 56 }); 57 }()); 58