OLD | NEW |
1 <html> | 1 <html> |
2 <head> | 2 <head> |
3 <script> | 3 <script> |
4 // The Page Action ID. | 4 // The Page Action ID. |
5 var pageActionId = "RssPageAction"; | 5 var pageActionId = "RssPageAction"; |
6 | 6 |
7 // The icons to use. These correspond to the icons listed in the manifest. | 7 // The icon to use. This corresponds to the icon listed in the manifest. |
8 var subscribeId = 0; | 8 var subscribeId = 0; |
9 var alreadySubscribedId = 1; | |
10 | 9 |
11 // The window this Page Action is associated with. | 10 // A dictionary keyed off of tabId that keeps track of data per tab (for |
12 var windowId = -1; | 11 // example what feedUrl was detected in the tab). |
13 | 12 var feedData = {}; |
14 // The TabId this Page Action is associated with. | |
15 var tabId = -1; | |
16 | |
17 // The URL of the page that contains the feed. | |
18 var pageUrl = ""; | |
19 | |
20 // The feed URL found on the page. | |
21 var feedUrl = ""; | |
22 | |
23 // The URL to use to check if user is subscribed already. | |
24 var subscribedUrl = "http://www.google.com/reader/api/0/subscribed?s=feed%2F"; | |
25 | |
26 // The XMLHttpRequest object that checks if you are already subscribed. | |
27 var req; | |
28 | |
29 // The status of whether you have already subscribed to this feed or not. | |
30 var alreadySubscribed = false; | |
31 | |
32 function EnableIcon(subscribed) { | |
33 alreadySubscribed = subscribed; | |
34 if (!alreadySubscribed) { | |
35 chrome.pageActions.enableForTab( | |
36 pageActionId, {tabId: tabId, | |
37 url: pageUrl, | |
38 title: "Click to subscribe...", | |
39 iconId: subscribeId}); | |
40 } else { | |
41 chrome.pageActions.enableForTab( | |
42 pageActionId, {tabId: tabId, | |
43 url: pageUrl, | |
44 title: "You are already subscribed to this feed", | |
45 iconId: alreadySubscribedId}); | |
46 } | |
47 } | |
48 | 13 |
49 chrome.self.onConnect.addListener(function(port) { | 14 chrome.self.onConnect.addListener(function(port) { |
50 windowId = port.tab.windowId; | |
51 tabId = port.tab.id; | |
52 pageUrl = port.tab.url; | |
53 | |
54 // This will get called from the content script using PostMessage. | 15 // This will get called from the content script using PostMessage. |
55 // |feedUrls| is a list of URL feeds found on the page. We only need 1 to | 16 // |feedUrls| is a list of URL feeds found on the page. We only need 1 to |
56 // enable the PageAction icon in the Omnibox. | 17 // enable the PageAction icon in the Omnibox. |
57 port.onMessage.addListener(function(feedUrls) { | 18 port.onMessage.addListener(function(feedUrls) { |
58 feedUrl = feedUrls[0]; | 19 feedUrl = feedUrls[0]; |
59 // Let Chrome know that the PageAction needs to be enabled for this tabId | 20 // Let Chrome know that the PageAction needs to be enabled for this tabId |
60 // and for the url of this page. | 21 // and for the url of this page. |
61 if (feedUrl) { | 22 if (feedUrl) { |
62 EnableIcon(false); // Not subscribed (as far as we know, might change). | 23 feedData[port.tab.id] = {pageUrl: port.tab.url, |
| 24 feedUrl: feedUrl}; |
63 | 25 |
64 // But also check the server to see if we have already subscribed so | 26 chrome.pageActions.enableForTab( |
65 // that we can update the status. | 27 pageActionId, {tabId: port.tab.id, |
66 feedUrl = encodeURIComponent(feedUrl); | 28 url: port.tab.url, |
67 req = new XMLHttpRequest(); | 29 title: "Click to subscribe...", |
68 req.onload = handleResponse; | 30 iconId: subscribeId}); |
69 req.open("GET", subscribedUrl + feedUrl, false); | |
70 req.send(null); | |
71 } | 31 } |
72 }); | 32 }); |
73 }); | 33 }); |
74 | 34 |
75 function handleResponse() { | |
76 if (req.responseText == "true") | |
77 EnableIcon(true); // true == Already suscribed. | |
78 } | |
79 | |
80 // Chrome will call into us when the user clicks on the icon in the OmniBox. | 35 // Chrome will call into us when the user clicks on the icon in the OmniBox. |
81 chrome.pageActions.onExecute.addListener(function(reply) { | 36 chrome.pageActions["RssPageAction"].addListener(function(reply) { |
82 chrome.windows.getCurrent(function(window) { | 37 chrome.windows.getCurrent(function(window) { |
83 chrome.tabs.get(reply.data.tabId, function(tab) { | 38 chrome.tabs.get(reply.data.tabId, function(tab) { |
84 if (!alreadySubscribed && window.focused) { | 39 // We need to know if we are the active window, because the tab may |
85 // We need to know if we are the active window, because the tab may | 40 // have moved to another window and we don't want to execute this |
86 // have moved to another window and we don't want to execute this | 41 // action multiple times. |
87 // action multiple times. | 42 if (window.focused) { |
88 if (reply.pageActionId == pageActionId && | 43 // Create a new tab showing the subscription page with the right |
89 reply.data.tabUrl == pageUrl) { | 44 // feed URL. |
90 // Create a new tab showing the subscription page with the right | 45 chrome.tabs.create({url: "subscribe.html?" + |
91 // feed URL. | 46 feedData[reply.data.tabId].feedUrl, |
92 chrome.tabs.create({url: "subscribe.html?" + feedUrl, | 47 windowId: window.windowId}); |
93 windowId: windowId}); | |
94 } else { | |
95 console.log("Ignoring execute event."); | |
96 console.log("PageActionId: " + reply.pageActionId + " == " + | |
97 pageActionId); | |
98 console.log("TabUrl : " + reply.data.tabUrl + " == " + | |
99 pageUrl); | |
100 } | |
101 } | 48 } |
102 }); | 49 }); |
103 }); | 50 }); |
104 }); | 51 }); |
| 52 |
| 53 chrome.tabs.onRemoved.addListener(function(reply) { |
| 54 feedData[reply.tabId] = null; |
| 55 }); |
105 </script> | 56 </script> |
106 </head> | 57 </head> |
107 </html> | 58 </html> |
OLD | NEW |