Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / api_test / notification_provider / basic_usage / background.js
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 const notificationProvider = chrome.notificationProvider;
6
7 var myId = chrome.runtime.id;
8 var id1 = "id1";
9 var returnId = myId + "-" + id1;
10 var content = {
11   type: "basic",
12   iconUrl: "icon.png",
13   title: "Title",
14   message: "This is the message."
15 };
16
17 function createNotification(notificationId, options) {
18   return new Promise(function (resolve, reject) {
19     chrome.notifications.create(notificationId, options, function (id) {
20       if (chrome.runtime.lastError) {
21         reject(new Error("Unable to create notification"));
22         return;
23       }
24       resolve(id);
25       return;
26     });
27   });
28 };
29
30 function notifyOnCleared(senderId, notificationId) {
31   return new Promise(function (resolve, reject) {
32     notificationProvider.notifyOnCleared(senderId,
33                                          notificationId,
34                                          function (wasCleared) {
35       if (chrome.runtime.lastError || !wasCleared) {
36         reject(new Error("Unable to send onClear message"));
37         return;
38       }
39       resolve(wasCleared);
40       return;
41     });
42   });
43 };
44
45 function notifyOnClicked(senderId, notificationId) {
46   return new Promise(function (resolve, reject) {
47     notificationProvider.notifyOnClicked(senderId,
48                                          notificationId,
49                                          function (matchExists) {
50       if (chrome.runtime.lastError || !matchExists) {
51         reject(new Error("Unable to send onClick message"));
52         return;
53       }
54       resolve(matchExists);
55       return;
56     });
57   });
58 };
59
60 function notifyOnButtonClicked(senderId, notificationId, buttonIndex) {
61   return new Promise(function (resolve, reject) {
62     notificationProvider.notifyOnButtonClicked(senderId,
63                                                notificationId,
64                                                buttonIndex,
65                                                function (matchExists) {
66       if (chrome.runtime.lastError || !matchExists) {
67         reject(new Error("Unable to send onButtonClick message"));
68         return;
69       }
70       resolve(matchExists);
71       return;
72     });
73   });
74 };
75
76 function notifyOnPermissionLevelChanged(senderId,
77                                         notifierType,
78                                         permissionLevel) {
79   return new Promise(function (resolve, reject) {
80     notificationProvider.notifyOnPermissionLevelChanged(
81           senderId,
82           notifierType,
83           permissionLevel,
84           function (wasChanged) {
85       if (chrome.runtime.lastError || !wasChanged) {
86         reject(new Error("Unable to send onPermissionLevelChanged message"));
87         return;
88       }
89       resolve(wasChanged);
90       return;
91     });
92   });
93 };
94
95 function notifyOnShowSettings(senderId, notifierType) {
96   return new Promise(function (resolve, reject) {
97     notificationProvider.notifyOnShowSettings(senderId,
98                                               notifierType,
99                                               function (hasSettings) {
100       if (chrome.runtime.lastError || !hasSettings) {
101         reject(new Error("Unable to send onShowSettings message"));
102         return;
103       }
104       resolve(hasSettings);
105       return;
106     });
107   });
108 };
109
110 function failTest(testName) {
111   chrome.test.fail(testName);
112 };
113
114 function testNotifyOnClicked(){
115   chrome.notifications.onClicked.addListener(function(id) {
116     chrome.test.succeed();
117   });
118
119   // Create a notification, so there will be one existing notification.
120   createNotification(id1, content)
121       .catch(function() { failTest("notifications.create"); })
122       // Try to notify that an non-existent notification was clicked.
123       .then(function() { return notifyOnClicked(myId, "doesNotExist"); })
124       // Fail if it returns true.
125       .then(function() { failTest("NotifyOnClicked"); })
126       // Notify the sender that a notificaion was clicked.
127       .catch(function() { return notifyOnClicked(myId, returnId); })
128       .catch(function() { failTest("NotifyOnClicked"); });
129 }
130
131 function testNotifyOnButtonClicked() {
132   chrome.notifications.onButtonClicked.addListener(function(id, buttonIndex) {
133     chrome.test.succeed();
134   });
135
136   // Create a notification, so there will be one existing notification.
137   createNotification(id1, content)
138       .catch(function() { failTest("notifications.create"); })
139       // Try to notify that a non-existent notification button was clicked.
140       .then(function() { return notifyOnButtonClicked(myId, "doesNotExist", 0)})
141       .then(function() { failTest("NotifyOnButtonClicked"); })
142       // Notify the sender that a notificaion button was clicked.
143       .catch(function() { return notifyOnButtonClicked(myId, returnId, 0); })
144       .catch(function() { failTest("NotifyOnButtonClicked"); });
145 }
146
147 function testNotifyOnClosed() {
148   chrome.notifications.onClosed.addListener(function(id, byUser) {
149     chrome.test.succeed();
150   });
151
152   // Create a notification, so there will be one existing notification.
153   createNotification(id1, content)
154       .catch(function() { failTest("notifications.create"); })
155       // Try to notify that an non-existent notification was cleared.
156       .then(function () { return notifyOnCleared(myId, "doesNotExist"); })
157       .then(function() { failTest("NotifyOnCleared"); })
158       // Notify that the original notification was cleared.
159       .catch(function() { return notifyOnCleared(myId, returnId); })
160       .catch(function() { failTest("NotifyOnCleared"); });
161 }
162
163 function testNotifyOnShowSettings() {
164   chrome.notifications.onShowSettings.addListener(function() {
165     chrome.test.succeed();
166   });
167
168   // Create a notification, so there will be one existing notification.
169   createNotification(id1, content)
170       .catch(function() { failTest("notifications.create"); })
171       // Try to notify a non existent sender that a user checked its settings.
172       .then(function () { return notifyOnShowSettings("DoesNotExist",
173                                                       "application"); })
174       // Fail if it returns true.
175       .then(function() { failTest("NotifyOnShowSettings"); })
176       // Notify current notifier that a user checked its settings.
177       .catch(function () { return notifyOnShowSettings(myId, "application"); })
178       .catch(function() { failTest("NotifyOnShowSettings"); })
179 }
180
181 chrome.test.runTests([ testNotifyOnClicked,
182                        testNotifyOnButtonClicked,
183                        testNotifyOnClosed,
184                        testNotifyOnShowSettings ]);