Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3037)

Unified Diff: chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js

Issue 256503004: Allow high-res bitmaps to be passed in from notifications API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Restructure code so chrome_child.dll links Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js
diff --git a/chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js b/chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js
new file mode 100644
index 0000000000000000000000000000000000000000..59d60847b1ad9a3c5022cc1c0af9bf30d8ba2eb6
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js
@@ -0,0 +1,305 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+const notifications = chrome.notifications;
+
+const red_dot = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA" +
+ "AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO" +
+ "9TXL0Y4OHwAAAABJRU5ErkJggg==";
+
+var basicNotificationOptions = {
+ type: "basic",
+ title: "Basic title",
+ message: "Basic message",
+ iconUrl: red_dot
+};
+
+function create(id, options) {
+ return new Promise(function (resolve, reject) {
+ notifications.create(id, options, function (id) {
+ if (chrome.runtime.lastError) {
+ reject(new Error("Unable to create notification"));
+ return;
+ }
+ resolve(id);
+ return;
+ });
+ });
+};
+
+function update(id, options) {
+ return new Promise(function (resolve, reject) {
+ notifications.update(id, options, function (ok) {
+ if (chrome.runtime.lastError || !ok) {
+ reject(new Error("Unable to update notification"));
+ return;
+ }
+ resolve(ok);
+ return;
+ });
+ });
+}
+
+function clear(id) {
+ return new Promise(function (resolve, reject) {
+ notifications.clear(id, function (ok) {
+ if (chrome.runtime.lastError || !ok) {
+ reject(new Error("Unable to clear notification"));
+ return;
+ }
+ resolve(ok);
+ return;
+ });
+ });
+}
+
+function getAll() {
+ return new Promise(function (resolve, reject) {
+ notifications.getAll(function (ids) {
+ if (chrome.runtime.lastError) {
+ reject(new Error(chrome.runtime.lastError.message));
+ return;
+ }
+
+ if (ids === undefined) {
+ resolve([]);
+ return
+ }
+
+ var id_list = Object.keys(ids);
+ resolve(id_list);
+ });
+ });
+}
+
+function clearAll() {
+ return getAll().then(function (ids) {
+ var idPromises = ids.map(function (id) { return clear(id); });
+ return Promise.all(idPromises);
+ });
+}
+
+function succeedTest(testName) {
+ return function () {
+ return clearAll().then(
+ function () { chrome.test.succeed(testName); },
+ function (error) {
+ console.log("Unknown error in clearAll: " +
+ JSON.stringify(arguments));
+ });
+ };
+}
+
+function failTest(testName) {
+ return function () {
+ return clearAll().then(
+ function () { chrome.test.fail(testName); },
+ function (error) {
+ console.log("Unknown error in clearAll: " +
+ JSON.stringify(error.message));
+ });
+ };
+}
+
+function testIdUsage() {
+ var testName = "testIdUsage";
+ console.log("Starting testIdUsage.");
+ var succeed = succeedTest(testName);
+ var fail = failTest(testName);
+
+ var createNotification = function (idString) {
+ var options = {
+ type: "basic",
+ iconUrl: red_dot,
+ title: "Attention!",
+ message: "Check out Cirque du Soleil"
+ };
+
+ return create(idString, options);
+ };
+
+ var updateNotification = function (idString) {
+ var options = { title: "!", message: "!" };
+ return update(idString, options);
+ };
+
+ // Should successfully create the notification
+ createNotification("foo")
+ // And update it.
+ .then(updateNotification)
+ .catch(fail)
+ // Next try to update a non-existent notification.
+ .then(function () { return updateNotification("foo2"); })
+ // And fail if it returns true.
+ .then(fail)
+ // Next try to clear a non-existent notification.
+ .catch(function () { return clear("foo2"); })
+ .then(fail)
+ // And finally clear the original notification.
+ .catch(function () { return clear("foo"); })
+ .catch(fail)
+ .then(succeed);
+};
+
+function testBaseFormat() {
+ var testName = "testBaseFormat";
+ console.log("Starting " + testName);
+ var succeed = succeedTest(testName);
+ var fail = failTest(testName);
+
+ var createNotificationWithout = function(toDelete) {
+ var options = {
+ type: "basic",
+ iconUrl: red_dot,
+ title: "Attention!",
+ message: "Check out Cirque du Soleil",
+ contextMessage: "Foobar.",
+ priority: 1,
+ eventTime: 123457896.12389,
+ expandedMessage: "This is a longer expanded message.",
+ isClickable: true
+ };
+
+ for (var i = 0; i < toDelete.length; i++) {
+ delete options[toDelete[i]];
+ }
+
+ return create("", options);
+ };
+
+ // Construct some exclusion lists. The |createNotificationWithout| function
+ // starts with a complex notification and then deletes items in this list.
+ var basicNotification= [
+ "buttons",
+ "items",
+ "progress",
+ "imageUrl"
+ ];
+ var bareNotification = basicNotification.concat([
+ "priority",
+ "eventTime",
+ "expandedMessage",
+ ]);
+ var basicNoType = basicNotification.concat(["type"]);
+ var basicNoIcon = basicNotification.concat(["iconUrl"]);
+ var basicNoTitle = basicNotification.concat(["title"]);
+ var basicNoMessage = basicNotification.concat(["message"]);
+
+ // Try creating a basic notification with just some of the fields.
+ createNotificationWithout(basicNotification)
+ // Try creating a basic notification with all possible fields.
+ .then(function () { return createNotificationWithout([]); })
+ // Try creating a basic notification with the minimum in fields.
+ .then(function () { return createNotificationWithout(bareNotification); })
+ // After this line we are checking to make sure that there is an error
+ // when notifications are created without the proper fields.
+ .catch(fail)
+ // Error if no type.
+ .then(function () { return createNotificationWithout(basicNoType) })
+ // Error if no icon.
+ .catch(function () { return createNotificationWithout(basicNoIcon) })
+ // Error if no title.
+ .catch(function () { return createNotificationWithout(basicNoTitle) })
+ // Error if no message.
+ .catch(function () { return createNotificationWithout(basicNoMessage) })
+ .then(fail, succeed);
+};
+
+function testListItem() {
+ var testName = "testListItem";
+ console.log("Starting " + testName);
+ var succeed = succeedTest(testName);
+ var fail = failTest(testName);
+
+ var item = { title: "Item title.", message: "Item message." };
+ var options = {
+ type: "list",
+ iconUrl: red_dot,
+ title: "Attention!",
+ message: "Check out Cirque du Soleil",
+ contextMessage: "Foobar.",
+ priority: 1,
+ eventTime: 123457896.12389,
+ items: [item, item, item, item, item],
+ isClickable: true
+ };
+ create("id", options).then(succeed, fail);
+};
+
+function arrayEquals(a, b) {
+ if (a === b) return true;
+ if (a == null || b == null) return false;
+ if (a.length !== b.length) return false;
+
+ for (var i = 0; i < a.length; i++) {
+ if (a[i] !== b[i]) return false;
+ }
+ return true;
+};
+
+function testGetAll() {
+ var testName = "testGetAll";
+ console.log("Starting " + testName);
+ var succeed = succeedTest(testName);
+ var fail = failTest(testName);
+ var in_ids = ["a", "b", "c", "d"];
+
+ // First do a get all, make sure the list is empty.
+ getAll()
+ .then(function (ids) {
+ chrome.test.assertEq(0, ids.length);
+ })
+ // Then create a bunch of notifications.
+ .then(function () {
+ var newNotifications = in_ids.map(function (id) {
+ return create(id, basicNotificationOptions);
+ });
+ return Promise.all(newNotifications);
+ })
+ // Try getAll again.
+ .then(function () { return getAll(); })
+ // Check that the right set of notifications is in the center.
+ .then(function (ids) {
+ chrome.test.assertEq(4, ids.length);
+ chrome.test.assertTrue(arrayEquals(ids, in_ids));
+ succeed();
+ }, fail);
+}
+
+function testProgress() {
+ var testName = "testProgress";
+ console.log("Starting " + testName);
+ var succeed = succeedTest(testName);
+ var fail = failTest(testName);
+ var progressOptions = {
+ type: "progress",
+ title: "Basic title",
+ message: "Basic message",
+ iconUrl: red_dot,
+ progress: 30
+ };
+
+ // First, create a basic progress notification.
+ create("progress", progressOptions)
+ // and update it to have a different progress level.
+ .then(function () { return update("progress", { progress: 60 }); })
+ // If either of the above failed, the test fails.
+ .catch(fail)
+ // Now the following parts should all cause an error:
+ // First update the progress to a low value, out-of-range
+ .then(function () { return update("progress", { progress: -10 }); })
+ // First update the progress to a high value, out-of-range
+ .then(fail, function () { return update("progress", { progress: 101 }); })
+ .then(function () { return clear("progress"); })
+ // Finally try to create a notification that has a progress value but not
+ // progress type.
+ .then(fail, function () {
+ progressOptions.type = "basic";
+ return create("progress", progressOptions);
+ }).then(fail, succeed);
+}
+
+chrome.test.runTests([
+ testIdUsage, testBaseFormat, testListItem, testGetAll, testProgress
+]);

Powered by Google App Engine
This is Rietveld 408576698