Left: | ||
Right: |
OLD | NEW |
---|---|
1 importAll("filterClasses", this); | 1 importAll("filterClasses", this); |
2 importAll("subscriptionClasses", this); | 2 importAll("subscriptionClasses", this); |
3 importAll("filterStorage", this); | 3 importAll("filterStorage", this); |
4 importAll("elemHide", this); | 4 importAll("elemHide", this); |
5 importAll("filterListener", this); | 5 importAll("filterListener", this); |
6 importAll("filterNotifier", this); | 6 importAll("filterNotifier", this); |
7 importAll("matcher", this); | 7 importAll("matcher", this); |
8 importAll("synchronizer", this); | 8 importAll("synchronizer", this); |
9 | 9 |
10 // Some types cannot be distinguished | 10 // Some types cannot be distinguished |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 } | 47 } |
48 | 48 |
49 // Upgrade options before we do anything else. | 49 // Upgrade options before we do anything else. |
50 setDefaultOptions(); | 50 setDefaultOptions(); |
51 | 51 |
52 /** | 52 /** |
53 * Checks whether a page is whitelisted. | 53 * Checks whether a page is whitelisted. |
54 * @param url {String} | 54 * @param url {String} |
55 * @return {Filter} filter that matched the URL or null if not whitelisted | 55 * @return {Filter} filter that matched the URL or null if not whitelisted |
56 */ | 56 */ |
57 function isWhitelisted(url) | 57 function isWhitelisted(url, type) |
Felix Dahlke
2012/09/18 13:23:14
The new type parameter isn't documented above.
| |
58 { | 58 { |
59 // Ignore fragment identifier | 59 // Ignore fragment identifier |
60 var index = url.indexOf("#"); | 60 var index = url.indexOf("#"); |
61 if (index >= 0) | 61 if (index >= 0) |
62 url = url.substring(0, index); | 62 url = url.substring(0, index); |
63 | 63 |
64 var result = defaultMatcher.matchesAny(url, "DOCUMENT", extractHostFromURL(url ), false); | 64 var result = defaultMatcher.matchesAny(url, type || "DOCUMENT", extractHostFro mURL(url), false); |
65 return (result instanceof WhitelistFilter ? result : null); | 65 return (result instanceof WhitelistFilter ? result : null); |
66 } | 66 } |
67 | 67 |
68 // Adds or removes page action icon according to options. | 68 // Adds or removes page action icon according to options. |
69 function refreshIconAndContextMenu(tab) | 69 function refreshIconAndContextMenu(tab) |
70 { | 70 { |
71 // The tab could have been closed by the time this function is called | 71 // The tab could have been closed by the time this function is called |
72 if(!tab) | 72 if(!tab) |
73 return; | 73 return; |
74 | 74 |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
349 }); | 349 }); |
350 } | 350 } |
351 | 351 |
352 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) | 352 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) |
353 { | 353 { |
354 switch (request.reqtype) | 354 switch (request.reqtype) |
355 { | 355 { |
356 case "get-settings": | 356 case "get-settings": |
357 var hostDomain = null; | 357 var hostDomain = null; |
358 var selectors = null; | 358 var selectors = null; |
359 var enabled = sender.tab ? !isWhitelisted(sender.tab.url) : true; | 359 |
360 // HACK: We don't know which frame sent us the message, try to find it | |
361 // in webRequest's frame data. | |
362 var tabId = -1; | |
363 var frameId = -1; | |
364 if (sender.tab) | |
365 { | |
366 var tabId = sender.tab.id; | |
Felix Dahlke
2012/09/18 13:23:14
You're redeclaring tabId here.
| |
367 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
| |
368 { | |
369 for (var f in frames[tabId]) | |
370 { | |
371 if (getFrameUrl(tabId, f) == request.frameUrl) | |
372 { | |
373 frameId = f; | |
374 break; | |
375 } | |
376 } | |
377 } | |
378 } | |
379 | |
380 var enabled = !isFrameWhitelisted(tabId, frameId, "DOCUMENT") && !isFrameW hitelisted(tabId, frameId, "ELEMHIDE"); | |
360 if (enabled && request.selectors) | 381 if (enabled && request.selectors) |
361 { | 382 { |
362 var noStyleRules = false; | 383 var noStyleRules = false; |
363 var host = request.host; | 384 var host = extractHostFromURL(request.frameUrl); |
385 hostDomain = getBaseDomain(host); | |
364 for (var i = 0; i < noStyleRulesHosts.length; i++) | 386 for (var i = 0; i < noStyleRulesHosts.length; i++) |
365 { | 387 { |
366 var noStyleHost = noStyleRulesHosts[i]; | 388 var noStyleHost = noStyleRulesHosts[i]; |
367 if (host == noStyleHost || (host.length > noStyleHost.length && | 389 if (host == noStyleHost || (host.length > noStyleHost.length && |
368 host.substr(host.length - noStyleHost.leng th - 1) == "." + noStyleHost)) | 390 host.substr(host.length - noStyleHost.leng th - 1) == "." + noStyleHost)) |
369 { | 391 { |
370 noStyleRules = true; | 392 noStyleRules = true; |
371 } | 393 } |
372 } | 394 } |
373 selectors = ElemHide.getSelectorsForDomain(host, false); | 395 selectors = ElemHide.getSelectorsForDomain(host, false); |
374 if (noStyleRules) | 396 if (noStyleRules) |
375 { | 397 { |
376 selectors = selectors.filter(function(s) | 398 selectors = selectors.filter(function(s) |
377 { | 399 { |
378 return !/\[style[\^\$]?=/.test(s); | 400 return !/\[style[\^\$]?=/.test(s); |
379 }); | 401 }); |
380 } | 402 } |
381 } | 403 } |
382 if (enabled) | 404 |
383 hostDomain = getBaseDomain(request.host); | |
384 sendResponse({enabled: enabled, hostDomain: hostDomain, selectors: selecto rs}); | 405 sendResponse({enabled: enabled, hostDomain: hostDomain, selectors: selecto rs}); |
385 break; | 406 break; |
386 case "get-domain-enabled-state": | 407 case "get-domain-enabled-state": |
387 // Returns whether this domain is in the exclusion list. | 408 // Returns whether this domain is in the exclusion list. |
388 // The page action popup asks us this. | 409 // The page action popup asks us this. |
389 if(sender.tab) | 410 if(sender.tab) |
390 { | 411 { |
391 sendResponse({enabled: !isWhitelisted(sender.tab.url), specialCaseYouTub e: localStorage["specialCaseYouTube"] == "true", disableInlineTextAds: localStor age["disableInlineTextAds"] == "true"}); | 412 sendResponse({enabled: !isWhitelisted(sender.tab.url), specialCaseYouTub e: localStorage["specialCaseYouTube"] == "true", disableInlineTextAds: localStor age["disableInlineTextAds"] == "true"}); |
392 return; | 413 return; |
393 } | 414 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
465 refreshIconAndContextMenu(windows[i].tabs[j]); | 486 refreshIconAndContextMenu(windows[i].tabs[j]); |
466 }); | 487 }); |
467 | 488 |
468 // Update icon if a tab changes location | 489 // Update icon if a tab changes location |
469 chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) | 490 chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) |
470 { | 491 { |
471 chrome.tabs.sendRequest(tabId, {reqtype: "clickhide-deactivate"}) | 492 chrome.tabs.sendRequest(tabId, {reqtype: "clickhide-deactivate"}) |
472 if(changeInfo.status == "loading") | 493 if(changeInfo.status == "loading") |
473 refreshIconAndContextMenu(tab); | 494 refreshIconAndContextMenu(tab); |
474 }); | 495 }); |
OLD | NEW |