1/**
2 * Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7var speakKeyStr;
8
9function speakSelection() {
10  var focused = document.activeElement;
11  var selectedText;
12  if (focused) {
13    try {
14      selectedText = focused.value.substring(
15          focused.selectionStart, focused.selectionEnd);
16    } catch (err) {
17    }
18  }
19  if (selectedText == undefined) {
20    var sel = window.getSelection();
21    var selectedText = sel.toString();
22  }
23  chrome.extension.sendRequest({'speak': selectedText});
24}
25
26function onExtensionMessage(request) {
27  if (request['speakSelection'] != undefined) {
28    if (!document.hasFocus()) {
29      return;
30    }
31    speakSelection();
32  } else if (request['key'] != undefined) {
33    speakKeyStr = request['key'];
34  }
35}
36
37function initContentScript() {
38  chrome.extension.onRequest.addListener(onExtensionMessage);
39  chrome.extension.sendRequest({'init': true}, onExtensionMessage);
40
41  document.addEventListener('keydown', function(evt) {
42    if (!document.hasFocus()) {
43      return true;
44    }
45    var keyStr = keyEventToString(evt);
46    if (keyStr == speakKeyStr && speakKeyStr.length > 0) {
47      speakSelection();
48      evt.stopPropagation();
49      evt.preventDefault();
50      return false;
51    }
52    return true;
53  }, false);
54}
55
56initContentScript();
57