summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authorsidchat@chromium.org <sidchat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-06 23:40:17 +0000
committersidchat@chromium.org <sidchat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-06 23:40:17 +0000
commit6b947b56e678d4b9d2f61d6c8d25d083611f5ddd (patch)
treed02a720e96ec33bf9c55aeee14692cc4f6ba0a6d /chrome/test
parent1fc3f76e78d49d63a8e7f4a7de1e7612c07e1b30 (diff)
downloadchromium_src-6b947b56e678d4b9d2f61d6c8d25d083611f5ddd.zip
chromium_src-6b947b56e678d4b9d2f61d6c8d25d083611f5ddd.tar.gz
chromium_src-6b947b56e678d4b9d2f61d6c8d25d083611f5ddd.tar.bz2
GMail extension with BrowserAction. It does the following:
- Shows a Gmail logo with a strike out diagonal line when not logged in. - Allows the user to click on the BrowserAction to log in. - If there are unread emails on login, the GMail logo blinks. - Shows the number of unread emails as a Badge (red in color!). - Shows the number of unread emails as a tooltip text if hovered on. - When a new email comes, the GMail logo blinks and the badge text updates. BUG=23898 TEST=none Review URL: http://codereview.chromium.org/246093 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28183 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/data/extensions/samples/gmail_browser_action/background.html136
-rw-r--r--chrome/test/data/extensions/samples/gmail_browser_action/gmail_logged_in.pngbin0 -> 48123 bytes
-rw-r--r--chrome/test/data/extensions/samples/gmail_browser_action/gmail_not_logged_in.pngbin0 -> 48088 bytes
-rw-r--r--chrome/test/data/extensions/samples/gmail_browser_action/gmail_whiteout.pngbin0 -> 47947 bytes
-rw-r--r--chrome/test/data/extensions/samples/gmail_browser_action/manifest.json15
5 files changed, 151 insertions, 0 deletions
diff --git a/chrome/test/data/extensions/samples/gmail_browser_action/background.html b/chrome/test/data/extensions/samples/gmail_browser_action/background.html
new file mode 100644
index 0000000..99a5ec0
--- /dev/null
+++ b/chrome/test/data/extensions/samples/gmail_browser_action/background.html
@@ -0,0 +1,136 @@
+<html>
+<head>
+<script>
+var gmail = "http://mail.google.com/";
+var gmailAtomRef = "http://mail.google.com/mail/feed/atom";
+var pollInterval = 1000 * 10; // 10 seconds
+var requestTimeout = 1000 * 2; // 5 seconds
+var unreadCount = 0;
+var defaultIconId = 1;
+var whiteoutIconId = 2;
+var numberOfBlinks = 0;
+
+function init() {
+ window.setTimeout(startRequest, 0);
+}
+
+function scheduleRequest() {
+ window.setTimeout(startRequest, pollInterval);
+}
+
+// ajax stuff
+function startRequest() {
+ getInboxCount(
+ function(count) {
+ updateUnreadCount(count);
+ scheduleRequest();
+ },
+ function() {
+ scheduleRequest();
+ }
+ );
+}
+
+function getInboxCount(onSuccess, onError) {
+ var xhr = new XMLHttpRequest();
+ var abortTimerId = window.setTimeout(function() {
+ xhr.abort();
+ onError();
+ }, requestTimeout);
+
+ function handleSuccess(count) {
+ window.clearTimeout(abortTimerId);
+ onSuccess(count);
+ }
+
+ function handleError() {
+ window.clearTimeout(abortTimerId);
+ onError();
+ }
+
+ try {
+ console.log("request..");
+ xhr.onreadystatechange = function(){
+ console.log("readystate: " + xhr.readyState);
+ if (xhr.readyState == 4) {
+ console.log("responseText: " + xhr.responseText.substring(0, 200) +
+ "...");
+ if (xhr.responseXML) {
+ var xmlDoc = xhr.responseXML;
+ var fullCountSet = xmlDoc.evaluate("/gmail:feed/gmail:fullcount",
+ xmlDoc, gmailNSResolver, XPathResult.ANY_TYPE, null);
+ var fullCountNode = fullCountSet.iterateNext();
+ if (fullCountNode) {
+ handleSuccess(fullCountNode.textContent);
+ } else {
+ console.log("fullcount not found!");
+ console.error("Error: feed retrieved, but no <fullcount> node " +
+ "found");
+ handleError();
+ }
+ } else {
+ console.log("No responseXML!");
+ }
+ }
+ }
+
+ xhr.onerror = function(error) {
+ console.log("error");
+ console.log(error);
+ handleError();
+ }
+
+ xhr.open("GET", gmailAtomRef, true);
+ xhr.send(null);
+ } catch(e) {
+ console.log("ex: " + e);
+ console.error("exception: " + e);
+ handleError();
+ }
+}
+
+function gmailNSResolver(prefix) {
+ if(prefix == 'gmail') {
+ return 'http://purl.org/atom/ns#';
+ }
+}
+
+function updateUnreadCount(count) {
+ if (unreadCount != count) {
+ unreadCount = count;
+ startBlink();
+ }
+}
+
+function startBlink() {
+ chrome.browserAction.setIcon(defaultIconId);
+ if (numberOfBlinks < 2) {
+ setTimeout(doWhiteout, 200);
+ numberOfBlinks = numberOfBlinks + 1;
+ } else {
+ numberOfBlinks = 0;
+ chrome.browserAction.setBadgeText(unreadCount);
+ chrome.browserAction.setName(unreadCount + " unread emails");
+ }
+}
+
+function doWhiteout() {
+ chrome.browserAction.setIcon(whiteoutIconId);
+ setTimeout(startBlink, 200);
+}
+
+function goToInbox() {
+ chrome.tabs.create({url: gmail});
+}
+
+// Called when the user clicks on the browser action.
+chrome.browserAction.onClicked.addListener(function(windowId) {
+ goToInbox();
+});
+
+</script>
+</head>
+<body onload="init()">
+</body>
+</html>
+
diff --git a/chrome/test/data/extensions/samples/gmail_browser_action/gmail_logged_in.png b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_logged_in.png
new file mode 100644
index 0000000..24180e0
--- /dev/null
+++ b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_logged_in.png
Binary files differ
diff --git a/chrome/test/data/extensions/samples/gmail_browser_action/gmail_not_logged_in.png b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_not_logged_in.png
new file mode 100644
index 0000000..91a203c
--- /dev/null
+++ b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_not_logged_in.png
Binary files differ
diff --git a/chrome/test/data/extensions/samples/gmail_browser_action/gmail_whiteout.png b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_whiteout.png
new file mode 100644
index 0000000..4cc4996
--- /dev/null
+++ b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_whiteout.png
Binary files differ
diff --git a/chrome/test/data/extensions/samples/gmail_browser_action/manifest.json b/chrome/test/data/extensions/samples/gmail_browser_action/manifest.json
new file mode 100644
index 0000000..e0e3a3c
--- /dev/null
+++ b/chrome/test/data/extensions/samples/gmail_browser_action/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "Browser action test",
+ "description": "This extension adds a Gmail button to the toolbar which notifies when new email comes",
+ "version": "1.0",
+ "background_page": "background.html",
+ "permissions": [
+ "tabs", "http://*.google.com/", "https://*.google.com/"
+ ],
+ "browser_action": {
+ "name": "Gmail",
+ "icons": ["gmail_not_logged_in.png",
+ "gmail_logged_in.png",
+ "gmail_whiteout.png"]
+ }
+}