function getCurrentTabUrl() { var queryInfo = {active: true, currentWindow: true}; var d = $.Deferred(); chrome.tabs.query(queryInfo, function(tabs) { var tab = tabs[0]; var url = tab.url; console.assert(typeof url == 'string', 'tab.url should be a string'); d.resolve(url, tab.title); }); return d; } function getStoredCreds() { var d = $.Deferred(); chrome.storage.sync.get({ username: '', password: '' }, function (items) { d.resolve(items.username, items.password); }); return d; } function authenticateMarrow() { var d = $.Deferred(); getStoredCreds().done(function (username, password) { if (username === '') { renderStatus('Fail :('); return; } var postData = {"username":username,"password":password}; return $.ajax('http://marrow.elangley.org/api/user/login?ak=1', { data: JSON.stringify(postData), contentType: 'application/json', type: 'POST', dataType: 'json' }).done(function(r) { d.resolve(username, r.ak); }); }); return d; } function postURL(url, title, username, ak) { var urlObj = JSON.stringify({"url": url, "title": title, "username": username, "ak": ak}); var addUrl = 'http://marrow.elangley.org/api/bones/add'; return $.ajax(addUrl, { data: urlObj, contentType: 'application/json', type: 'POST', dataType: 'json' }); } var commandHandlers = { share_page: function() { var notification = chrome.notifications.create('share', { type: "progress", title: "Add to Marrow", message: "Posting", iconUrl: "marrow_app_128px.png" }); authenticateMarrow().done(function(username, ak) { getCurrentTabUrl().done(function(url, title) { chrome.notifications.update('share', {progress: 50, message: "Posting '"+title+"'"}); postURL(url, title, username, ak) .done(function() { chrome.notifications.update('share', {progress: 100}); }); }); }); } }; chrome.commands.onCommand.addListener(function(command) { console.log('Command:' + command); if (commandHandlers[command] !== undefined) { commandHandlers[command](); } });