- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / examples / extensions / fx / content.js
1 /*
2  * Content script for Chrome Sounds.
3  * Tracks in-page events and notifies the background page.
4  */
5
6 function sendEvent(event, value) {
7   console.log("sendEvent: " + event + "," + value);
8   chrome.extension.sendRequest({eventName: event, eventValue: value});
9 }
10
11 // Timers to trigger "stopEvent" for coalescing events.
12 var timers = {};
13
14 function stopEvent(type) {
15   timers[type] = 0;
16   sendEvent(type, "stopped");
17 }
18
19 // Automatically coalesces repeating events into a start and a stop event.
20 // |validator| is a function which should return true if the event is
21 // considered to be a valid event of this type.
22 function handleEvent(event, type, validator) {
23   if (validator) {
24     if (!validator(event)) {
25       return;
26     }
27   }
28   var timerId = timers[type];
29   var eventInProgress = (timerId > 0);
30   if (eventInProgress) {
31     clearTimeout(timerId);
32     timers[type] = 0;
33   } else {
34     sendEvent(type, "started");
35   }
36   timers[type] = setTimeout(stopEvent, 300, type);
37 }
38
39 function listenAndCoalesce(target, type, validator) {
40   target.addEventListener(type, function(event) {
41     handleEvent(event, type, validator);
42   }, true);
43 }
44
45 listenAndCoalesce(document, "scroll");
46
47 // For some reason, "resize" doesn't seem to work with addEventListener.
48 if ((window == window.top) && document.body && !document.body.onresize) {
49   document.body.onresize = function(event) {
50     sendEvent("resize", "");
51   };
52 }
53
54 listenAndCoalesce(document, "keypress", function(event) {
55   if (event.charCode == 13)
56     return false;
57
58   // TODO(erikkay) This doesn't work in gmail's rich text compose window.
59   return event.target.tagName == "TEXTAREA" ||
60          event.target.tagName == "INPUT" ||
61          event.target.isContentEditable;
62 });