Home | History | Annotate | Download | only in hotword
      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