Index: background.js |
=================================================================== |
--- a/background.js |
+++ b/background.js |
@@ -49,24 +49,24 @@ function setDefaultOptions() |
// Upgrade options before we do anything else. |
setDefaultOptions(); |
/** |
* Checks whether a page is whitelisted. |
* @param url {String} |
* @return {Filter} filter that matched the URL or null if not whitelisted |
*/ |
-function isWhitelisted(url) |
+function isWhitelisted(url, type) |
Felix Dahlke
2012/09/18 13:23:14
The new type parameter isn't documented above.
|
{ |
// Ignore fragment identifier |
var index = url.indexOf("#"); |
if (index >= 0) |
url = url.substring(0, index); |
- var result = defaultMatcher.matchesAny(url, "DOCUMENT", extractHostFromURL(url), false); |
+ var result = defaultMatcher.matchesAny(url, type || "DOCUMENT", extractHostFromURL(url), false); |
return (result instanceof WhitelistFilter ? result : null); |
} |
// Adds or removes page action icon according to options. |
function refreshIconAndContextMenu(tab) |
{ |
// The tab could have been closed by the time this function is called |
if(!tab) |
@@ -351,21 +351,43 @@ function showContextMenu() |
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) |
{ |
switch (request.reqtype) |
{ |
case "get-settings": |
var hostDomain = null; |
var selectors = null; |
- var enabled = sender.tab ? !isWhitelisted(sender.tab.url) : true; |
+ |
+ // HACK: We don't know which frame sent us the message, try to find it |
+ // in webRequest's frame data. |
+ var tabId = -1; |
+ var frameId = -1; |
+ if (sender.tab) |
+ { |
+ var tabId = sender.tab.id; |
Felix Dahlke
2012/09/18 13:23:14
You're redeclaring tabId here.
|
+ if (tabId in frames) |
Felix Dahlke
2012/09/18 13:23:14
I don't think this statement is necessary here. Th
Wladimir Palant
2012/09/18 15:12:11
Yes, I don't usually rely on this and generally av
|
+ { |
+ for (var f in frames[tabId]) |
+ { |
+ if (getFrameUrl(tabId, f) == request.frameUrl) |
+ { |
+ frameId = f; |
+ break; |
+ } |
+ } |
+ } |
+ } |
+ |
+ var enabled = !isFrameWhitelisted(tabId, frameId, "DOCUMENT") && !isFrameWhitelisted(tabId, frameId, "ELEMHIDE"); |
if (enabled && request.selectors) |
{ |
var noStyleRules = false; |
- var host = request.host; |
+ var host = extractHostFromURL(request.frameUrl); |
+ hostDomain = getBaseDomain(host); |
for (var i = 0; i < noStyleRulesHosts.length; i++) |
{ |
var noStyleHost = noStyleRulesHosts[i]; |
if (host == noStyleHost || (host.length > noStyleHost.length && |
host.substr(host.length - noStyleHost.length - 1) == "." + noStyleHost)) |
{ |
noStyleRules = true; |
} |
@@ -374,18 +396,17 @@ chrome.extension.onRequest.addListener(f |
if (noStyleRules) |
{ |
selectors = selectors.filter(function(s) |
{ |
return !/\[style[\^\$]?=/.test(s); |
}); |
} |
} |
- if (enabled) |
- hostDomain = getBaseDomain(request.host); |
+ |
sendResponse({enabled: enabled, hostDomain: hostDomain, selectors: selectors}); |
break; |
case "get-domain-enabled-state": |
// Returns whether this domain is in the exclusion list. |
// The page action popup asks us this. |
if(sender.tab) |
{ |
sendResponse({enabled: !isWhitelisted(sender.tab.url), specialCaseYouTube: localStorage["specialCaseYouTube"] == "true", disableInlineTextAds: localStorage["disableInlineTextAds"] == "true"}); |