Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: chrome/ext/background.js

Issue 5203459900964864: Issue 492 - Implemented popup blocking for Safari (Closed)
Patch Set: Created May 16, 2014, 9:46 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | popupBlocker.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 { 43 {
44 var frame = frames[0]; 44 var frame = frames[0];
45 if (frame) 45 if (frame)
46 return frame.url; 46 return frame.url;
47 } 47 }
48 }, 48 },
49 activate: function() 49 activate: function()
50 { 50 {
51 chrome.tabs.update(this._id, {selected: true}); 51 chrome.tabs.update(this._id, {selected: true});
52 }, 52 },
53 close: function()
54 {
55 chrome.tabs.remove(this._id);
56 },
53 sendMessage: function(message, responseCallback) 57 sendMessage: function(message, responseCallback)
54 { 58 {
55 chrome.tabs.sendMessage(this._id, message, responseCallback); 59 chrome.tabs.sendMessage(this._id, message, responseCallback);
56 } 60 }
57 }; 61 };
58 62
59 ext.pages = { 63 ext.pages = {
60 open: function(url, callback) 64 open: function(url, callback)
61 { 65 {
62 if (callback) 66 if (callback)
(...skipping 28 matching lines...) Expand all
91 } 95 }
92 96
93 chrome.tabs.query(rawInfo, function(tabs) 97 chrome.tabs.query(rawInfo, function(tabs)
94 { 98 {
95 callback(tabs.map(function(tab) 99 callback(tabs.map(function(tab)
96 { 100 {
97 return new Page(tab); 101 return new Page(tab);
98 })); 102 }));
99 }); 103 });
100 }, 104 },
101 onLoading: new ext._EventTarget() 105 onLoading: new ext._EventTarget(),
106 onPopup: new ext._EventTarget()
102 }; 107 };
103 108
109 var popups = {__proto__: null};
110
111 chrome.webNavigation.onCreatedNavigationTarget.addListener(function(details)
112 {
113 var frames = framesOfTabs[details.sourceTabId];
114 if (!frames)
115 return;
116
117 var openerFrame = frames[details.sourceFrameId];
118 if (!openerFrame)
119 return;
120
121 var page = new Page({id: details.tabId, url: details.url});
122 var opener = {page: new Page({id: details.sourceTabId}), frame: openerFrame} ;
123
124 popups[details.tabId] = opener;
125 ext.pages.onPopup._dispatch(page, opener);
126 });
127
104 chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) 128 chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab)
105 { 129 {
130 if (tabId in popups)
131 {
132 if ("url" in changeInfo)
133 ext.pages.onPopup._dispatch(new Page(tab), popups[tabId]);
134
135 if (changeInfo.status == "complete" && tab.url != "about:blank")
136 delete popups[tabId];
137 }
138
106 if (changeInfo.status == "loading") 139 if (changeInfo.status == "loading")
107 ext.pages.onLoading._dispatch(new Page(tab)); 140 ext.pages.onLoading._dispatch(new Page(tab));
108 }); 141 });
109 142
110 chrome.webNavigation.onBeforeNavigate.addListener(function(details) 143 chrome.webNavigation.onBeforeNavigate.addListener(function(details)
111 { 144 {
112 if (details.frameId == 0) 145 if (details.frameId == 0)
113 ext._removeFromAllPageMaps(details.tabId); 146 ext._removeFromAllPageMaps(details.tabId);
114 }); 147 });
115 148
116 chrome.tabs.onRemoved.addListener(function(tabId) 149 chrome.tabs.onRemoved.addListener(function(tabId)
117 { 150 {
118 ext._removeFromAllPageMaps(tabId); 151 ext._removeFromAllPageMaps(tabId);
152
119 delete framesOfTabs[tabId]; 153 delete framesOfTabs[tabId];
154 delete popups[tabId];
120 }); 155 });
121 156
122 157
123 /* Browser actions */ 158 /* Browser actions */
124 159
125 var BrowserAction = function(tabId) 160 var BrowserAction = function(tabId)
126 { 161 {
127 this._tabId = tabId; 162 this._tabId = tabId;
128 }; 163 };
129 BrowserAction.prototype = { 164 BrowserAction.prototype = {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 }; 394 };
360 395
361 return ext.onMessage._dispatch(message, sender, sendResponse); 396 return ext.onMessage._dispatch(message, sender, sendResponse);
362 }); 397 });
363 398
364 399
365 /* Storage */ 400 /* Storage */
366 401
367 ext.storage = localStorage; 402 ext.storage = localStorage;
368 })(); 403 })();
OLDNEW
« no previous file with comments | « no previous file | popupBlocker.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld