diff options
author | sidchat@chromium.org <sidchat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-06 23:40:17 +0000 |
---|---|---|
committer | sidchat@chromium.org <sidchat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-06 23:40:17 +0000 |
commit | 6b947b56e678d4b9d2f61d6c8d25d083611f5ddd (patch) | |
tree | d02a720e96ec33bf9c55aeee14692cc4f6ba0a6d /chrome/test | |
parent | 1fc3f76e78d49d63a8e7f4a7de1e7612c07e1b30 (diff) | |
download | chromium_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.html | 136 | ||||
-rw-r--r-- | chrome/test/data/extensions/samples/gmail_browser_action/gmail_logged_in.png | bin | 0 -> 48123 bytes | |||
-rw-r--r-- | chrome/test/data/extensions/samples/gmail_browser_action/gmail_not_logged_in.png | bin | 0 -> 48088 bytes | |||
-rw-r--r-- | chrome/test/data/extensions/samples/gmail_browser_action/gmail_whiteout.png | bin | 0 -> 47947 bytes | |||
-rw-r--r-- | chrome/test/data/extensions/samples/gmail_browser_action/manifest.json | 15 |
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 Binary files differnew file mode 100644 index 0000000..24180e0 --- /dev/null +++ b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_logged_in.png 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 Binary files differnew file mode 100644 index 0000000..91a203c --- /dev/null +++ b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_not_logged_in.png 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 Binary files differnew file mode 100644 index 0000000..4cc4996 --- /dev/null +++ b/chrome/test/data/extensions/samples/gmail_browser_action/gmail_whiteout.png 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"] + } +} |