Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('hotword', function() { | 5 cr.define('hotword', function() { |
| 6 'use strict'; | 6 'use strict'; |
| 7 | 7 |
| 8 /** | 8 /** |
| 9 * Trivial container class for session information. | 9 * Trivial container class for session information. |
| 10 * @param {!hotword.constants.SessionSource} source Source of the hotword | 10 * @param {!hotword.constants.SessionSource} source Source of the hotword |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 94 */ | 94 */ |
| 95 this.chime_ = | 95 this.chime_ = |
| 96 /** @type {!HTMLAudioElement} */(document.createElement('audio')); | 96 /** @type {!HTMLAudioElement} */(document.createElement('audio')); |
| 97 | 97 |
| 98 /** | 98 /** |
| 99 * Chrome event listeners. Saved so that they can be de-registered when | 99 * Chrome event listeners. Saved so that they can be de-registered when |
| 100 * hotwording is disabled. | 100 * hotwording is disabled. |
| 101 * @private | 101 * @private |
| 102 */ | 102 */ |
| 103 this.idleStateChangedListener_ = this.handleIdleStateChanged_.bind(this); | 103 this.idleStateChangedListener_ = this.handleIdleStateChanged_.bind(this); |
| 104 this.startupListener_ = this.handleStartup_.bind(this); | |
| 104 | 105 |
| 105 /** | 106 /** |
| 106 * Whether this user is locked. | 107 * Whether this user is locked. |
| 107 * @private {boolean} | 108 * @private {boolean} |
| 108 */ | 109 */ |
| 109 this.isLocked_ = false; | 110 this.isLocked_ = false; |
| 110 | 111 |
| 111 /** | 112 /** |
| 112 * Current state of audio logging. | 113 * Current state of audio logging. |
| 113 * This is tracked separately from hotwordStatus_ because we need to restart | 114 * This is tracked separately from hotwordStatus_ because we need to restart |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 134 // Get the initial status. | 135 // Get the initial status. |
| 135 chrome.hotwordPrivate.getStatus(this.handleStatus_.bind(this)); | 136 chrome.hotwordPrivate.getStatus(this.handleStatus_.bind(this)); |
| 136 | 137 |
| 137 // Setup the chime and insert into the page. | 138 // Setup the chime and insert into the page. |
| 138 // Set preload=none to prevent an audio output stream from being created | 139 // Set preload=none to prevent an audio output stream from being created |
| 139 // when the extension loads. | 140 // when the extension loads. |
| 140 this.chime_.preload = 'none'; | 141 this.chime_.preload = 'none'; |
| 141 this.chime_.src = chrome.extension.getURL( | 142 this.chime_.src = chrome.extension.getURL( |
| 142 hotword.constants.SHARED_MODULE_ROOT + '/audio/chime.wav'); | 143 hotword.constants.SHARED_MODULE_ROOT + '/audio/chime.wav'); |
| 143 document.body.appendChild(this.chime_); | 144 document.body.appendChild(this.chime_); |
| 145 | |
| 146 // In order to remove this listener, it must first be added. This handles | |
| 147 // the case on first Chrome startup where this event is never registered, | |
| 148 // so can't be removed when it's determined that hotwording is disabled. | |
| 149 chrome.runtime.onStartup.addListener(this.startupListener_); | |
|
Matt Giuca
2015/05/15 06:54:42
Why not just not remove it if it hasn't been added
Anand Mistry (off Chromium)
2015/05/15 07:08:36
Ah, undocumented and poorly understood behaviour o
Matt Giuca
2015/05/15 08:32:43
Gross :(
Could you explain that a bit in the comm
Anand Mistry (off Chromium)
2015/05/18 01:24:22
Done.
| |
| 144 } | 150 } |
| 145 | 151 |
| 146 /** | 152 /** |
| 147 * @enum {number} | 153 * @enum {number} |
| 148 * @private | 154 * @private |
| 149 */ | 155 */ |
| 150 StateManager.State_ = { | 156 StateManager.State_ = { |
| 151 STOPPED: 0, | 157 STOPPED: 0, |
| 152 STARTING: 1, | 158 STARTING: 1, |
| 153 RUNNING: 2, | 159 RUNNING: 2, |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 272 this.startDetector_(); | 278 this.startDetector_(); |
| 273 } else { | 279 } else { |
| 274 this.shutdownDetector_(); | 280 this.shutdownDetector_(); |
| 275 } | 281 } |
| 276 | 282 |
| 277 if (!chrome.idle.onStateChanged.hasListener( | 283 if (!chrome.idle.onStateChanged.hasListener( |
| 278 this.idleStateChangedListener_)) { | 284 this.idleStateChangedListener_)) { |
| 279 chrome.idle.onStateChanged.addListener( | 285 chrome.idle.onStateChanged.addListener( |
| 280 this.idleStateChangedListener_); | 286 this.idleStateChangedListener_); |
| 281 } | 287 } |
| 288 if (!chrome.runtime.onStartup.hasListener(this.startupListener_)) | |
| 289 chrome.runtime.onStartup.addListener(this.startupListener_); | |
| 282 } else { | 290 } else { |
| 283 // Not enabled. Shut down if running. | 291 // Not enabled. Shut down if running. |
| 284 this.shutdownDetector_(); | 292 this.shutdownDetector_(); |
| 285 | 293 |
| 286 chrome.idle.onStateChanged.removeListener( | 294 chrome.idle.onStateChanged.removeListener( |
| 287 this.idleStateChangedListener_); | 295 this.idleStateChangedListener_); |
| 296 // If hotwording isn't enabled, don't start this component extension on | |
| 297 // Chrome startup. If a user enables hotwording, the status change | |
| 298 // event will be fired and the onStartup event will be registered. | |
| 299 chrome.runtime.onStartup.removeListener(this.startupListener_); | |
| 288 } | 300 } |
| 289 }, | 301 }, |
| 290 | 302 |
| 291 /** | 303 /** |
| 292 * Starts the hotword detector. | 304 * Starts the hotword detector. |
| 293 * @private | 305 * @private |
| 294 */ | 306 */ |
| 295 startDetector_: function() { | 307 startDetector_: function() { |
| 296 // Last attempt to start detector resulted in an error. | 308 // Last attempt to start detector resulted in an error. |
| 297 if (this.state_ == State_.ERROR) { | 309 if (this.state_ == State_.ERROR) { |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 595 handleIdleStateChanged_: function(state) { | 607 handleIdleStateChanged_: function(state) { |
| 596 hotword.debug('Idle state changed: ' + state); | 608 hotword.debug('Idle state changed: ' + state); |
| 597 var oldLocked = this.isLocked_; | 609 var oldLocked = this.isLocked_; |
| 598 if (state == 'locked') | 610 if (state == 'locked') |
| 599 this.isLocked_ = true; | 611 this.isLocked_ = true; |
| 600 else | 612 else |
| 601 this.isLocked_ = false; | 613 this.isLocked_ = false; |
| 602 | 614 |
| 603 if (oldLocked != this.isLocked_) | 615 if (oldLocked != this.isLocked_) |
| 604 this.updateStateFromStatus_(); | 616 this.updateStateFromStatus_(); |
| 617 }, | |
| 618 | |
| 619 /** | |
| 620 * Handles a chrome.runtime.onStartup event. | |
| 621 * @private | |
| 622 */ | |
| 623 handleStartup_: function() { | |
| 624 updateStatus(); | |
| 605 } | 625 } |
| 606 }; | 626 }; |
| 607 | 627 |
| 608 return { | 628 return { |
| 609 StateManager: StateManager | 629 StateManager: StateManager |
| 610 }; | 630 }; |
| 611 }); | 631 }); |
| OLD | NEW |