Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / api_test / notifications / galore / app / view.js
1 // Copyright (c) 2013 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 var mainWindow;
6 var sections = [];
7
8 var settings = {}
9 // Initial values.
10 settings.priority = "0";
11 settings.progress = 10;
12 settings.progress_sec = 2;
13 settings.progress_step = 20;
14
15 function onMainWindowClosed() {
16   mainWindow = null;
17   sections = [];
18 }
19
20 function createAppWindow(onLoad) {
21   chrome.app.window.create('window.html', {
22     id: 'window',
23     defaultWidth: 440, minWidth: 440, maxWidth: 840,
24     defaultHeight: 640, minHeight: 640, maxHeight: 940,
25     hidden: true
26   }, function(w) {
27     mainWindow = w;
28     mainWindow.contentWindow.onload = function() {
29       setButtonHandlers();
30       getElement("body").dataset.priority = settings.priority;
31       onLoad();
32     };
33     mainWindow.onClosed.addListener(onMainWindowClosed)
34   });
35 }
36
37 function resovleImageUrl(imageUrl, callback) {
38   if (imageUrl.substr(0,4) != "http") {
39     callback(imageUrl);
40     return;
41   }
42
43   var xhr = new XMLHttpRequest();
44   xhr.open("GET", imageUrl);
45   xhr.responseType = "blob";
46   xhr.onload = function() {
47     callback(URL.createObjectURL(this.response));
48   }
49   xhr.send();
50 }
51
52 function addNotificationButton(sectionTitle,
53                                buttonTitle,
54                                iconUrl,
55                                onClickHandler) {
56   var button = getElement('#templates .notification').cloneNode(true);
57   var image = button.querySelector('img');
58   resovleImageUrl(iconUrl, function(url) { image.src = url });
59   image.src = iconUrl;
60   image.alt = buttonTitle;
61   button.name = buttonTitle;
62   button.onclick = onClickHandler;
63   getSection(sectionTitle).appendChild(button);
64 }
65
66 function addProgressControl(sectionTitle) {
67   var control = getElement('#templates .progress-control').cloneNode(true);
68   getSection(sectionTitle).appendChild(control)
69
70   var progress = control.querySelector('.progress');
71   progress.id = "progress"
72   progress.value = settings.progress;
73
74   var progress_oneshot = control.querySelector('.progress-oneshot');
75   progress_oneshot.id = 'progress-oneshot';
76   progress_oneshot.checked = true;
77
78   var progress_sec = control.querySelector('.progress-sec');
79   progress_sec.id = "progress-sec"
80   progress_sec.value = settings.progress_sec;
81
82   var progress_step = control.querySelector('.progress-step');
83   progress_step.id = "progress-step"
84   progress_step.value = settings.progress_step;
85 }
86
87 function showWindow() {
88   if (mainWindow)
89     mainWindow.show();
90 }
91
92 function logEvent(message) {
93   var event = getElement('#templates .event').cloneNode(true);
94   event.textContent = message;
95   getElement('#events').appendChild(event).scrollIntoView();
96 }
97
98 function logError(message) {
99   var events = getElement('#events');
100   var error = getElement('#templates .error').cloneNode(true);
101   error.textContent = message;
102   events.appendChild(error).scrollIntoView();
103 }
104
105 function setButtonHandlers() {
106   setButtonAction('#clear-events', clearEvents);
107   setButtonAction('#record', onRecord);
108   setButtonAction('#pause', onPause);
109   setButtonAction('#stop', onStop);
110   setButtonAction('#play', onPlay);
111 }
112
113 function setRecorderStatusText(text) {
114   getElement("#recording-status").innerText = text;
115 }
116
117 function updateRecordingStatsDisplay(text) {
118   getElement("#recording-stats").innerText = text;
119 }
120
121 function clearEvents() {
122   var events = getElement('#events');
123   while (events.lastChild)
124     events.removeChild(events.lastChild);
125 }
126
127 function getSection(title) {
128   sections[title] = (sections[title] || makeSection(title));
129   return sections[title];
130 }
131
132 function makeSection(title) {
133   var section = getElement('#templates .section').cloneNode(true);
134   section.querySelector('span').textContent = title;
135   return getElement('#notifications').appendChild(section);
136 }
137
138 function setButtonAction(elements, action) {
139   getElements(elements).forEach(function(element) {
140     element.onclick = action;
141   });
142 }
143
144 function getElement(element) {
145   return getElements(element)[0];
146 }
147
148 function getElements(elements) {
149   if (typeof elements === 'string')
150     elements = mainWindow.contentWindow.document.querySelectorAll(elements);
151   if (String(elements) === '[object NodeList]')
152     elements = Array.prototype.slice.call(elements);
153   return Array.isArray(elements) ? elements : [elements];
154 }