| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // A dictionary keyed off of tabId that keeps track of data per tab (for | 5 chrome.extension.onMessage.addListener(function(request, sender) { |
| 6 // example what feedUrl was detected in the tab). | |
| 7 var feedData = {}; | |
| 8 | |
| 9 chrome.extension.onRequest.addListener(function(request, sender) { | |
| 10 if (request.msg == "feedIcon") { | 6 if (request.msg == "feedIcon") { |
| 11 // First validate that all the URLs have the right schema. | 7 // First validate that all the URLs have the right schema. |
| 12 var input = []; | 8 var input = []; |
| 13 for (var i = 0; i < request.feeds.length; ++i) { | 9 for (var i = 0; i < request.feeds.length; ++i) { |
| 14 var a = document.createElement('a'); | 10 var a = document.createElement('a'); |
| 15 a.href = request.feeds[i].href; | 11 a.href = request.feeds[i].href; |
| 16 if (a.protocol == "http:" || a.protocol == "https:") { | 12 if (a.protocol == "http:" || a.protocol == "https:") { |
| 17 input.push(request.feeds[i]); | 13 input.push(request.feeds[i]); |
| 18 } else { | 14 } else { |
| 19 console.log('Warning: feed source rejected (wrong protocol): ' + | 15 console.log('Warning: feed source rejected (wrong protocol): ' + |
| 20 request.feeds[i].href); | 16 request.feeds[i].href); |
| 21 } | 17 } |
| 22 } | 18 } |
| 23 | 19 |
| 24 if (input.length == 0) | 20 if (input.length == 0) |
| 25 return; // We've rejected all the input, so abort. | 21 return; // We've rejected all the input, so abort. |
| 26 | 22 |
| 27 // We have received a list of feed urls found on the page. | 23 // We have received a list of feed urls found on the page. |
| 28 // Enable the page action icon. | 24 var feeds = {}; |
| 29 feedData[sender.tab.id] = input; | 25 feeds[sender.tab.id] = input; |
| 30 chrome.pageAction.setTitle( | 26 chrome.storage.local.set(feeds, function() { |
| 31 { tabId: sender.tab.id, | 27 // Enable the page action icon. |
| 32 title: chrome.i18n.getMessage("rss_subscription_action_title") | 28 chrome.pageAction.setTitle( |
| 33 }); | 29 { tabId: sender.tab.id, |
| 34 chrome.pageAction.show(sender.tab.id); | 30 title: chrome.i18n.getMessage("rss_subscription_action_title") |
| 31 }); |
| 32 chrome.pageAction.show(sender.tab.id); |
| 33 }); |
| 35 } else if (request.msg == "feedDocument") { | 34 } else if (request.msg == "feedDocument") { |
| 36 // We received word from the content script that this document | 35 // We received word from the content script that this document |
| 37 // is an RSS feed (not just a document linking to the feed). | 36 // is an RSS feed (not just a document linking to the feed). |
| 38 // So, we go straight to the subscribe page in a new tab and | 37 // So, we go straight to the subscribe page in a new tab and |
| 39 // navigate back on the current page (to get out of the xml page). | 38 // navigate back on the current page (to get out of the xml page). |
| 40 // We don't want to navigate in-place because trying to go back | 39 // We don't want to navigate in-place because trying to go back |
| 41 // from the subscribe page takes us back to the xml page, which | 40 // from the subscribe page takes us back to the xml page, which |
| 42 // will redirect to the subscribe page again (we don't support a | 41 // will redirect to the subscribe page again (we don't support a |
| 43 // location.replace equivalant in the Tab navigation system). | 42 // location.replace equivalant in the Tab navigation system). |
| 44 chrome.tabs.executeScript(sender.tab.id, | 43 chrome.tabs.executeScript(sender.tab.id, |
| 45 { code: "if (history.length > 1) " + | 44 { code: "if (history.length > 1) " + |
| 46 "history.go(-1); else window.close();" | 45 "history.go(-1); else window.close();" |
| 47 }); | 46 }); |
| 48 var url = "subscribe.html?" + encodeURIComponent(request.href); | 47 var url = "subscribe.html?" + encodeURIComponent(request.href); |
| 49 url = chrome.extension.getURL(url); | 48 url = chrome.extension.getURL(url); |
| 50 chrome.tabs.create({ url: url, index: sender.tab.index }); | 49 chrome.tabs.create({ url: url, index: sender.tab.index }); |
| 51 } | 50 } |
| 52 }); | 51 }); |
| 53 | 52 |
| 54 chrome.tabs.onRemoved.addListener(function(tabId) { | 53 chrome.tabs.onRemoved.addListener(function(tabId) { |
| 55 delete feedData[tabId]; | 54 chrome.storage.local.remove(tabId.toString()); |
| 56 }); | 55 }); |
| OLD | NEW |