| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This Source Code is subject to the terms of the Mozilla Public License | 2 * This Source Code is subject to the terms of the Mozilla Public License |
| 3 * version 2.0 (the "License"). You can obtain a copy of the License at | 3 * version 2.0 (the "License"). You can obtain a copy of the License at |
| 4 * http://mozilla.org/MPL/2.0/. | 4 * http://mozilla.org/MPL/2.0/. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 chrome.webRequest.onBeforeRequest.addListener(onBeforeRequest, {urls: ["http://*
/*", "https://*/*"]}, ["blocking"]); | 7 chrome.webRequest.onBeforeRequest.addListener(onBeforeRequest, {urls: ["http://*
/*", "https://*/*"]}, ["blocking"]); |
| 8 chrome.webRequest.onHeadersReceived.addListener(onHeadersReceived, {urls: ["http
://*/*", "https://*/*"]}, ["responseHeaders"]); | 8 chrome.webRequest.onHeadersReceived.addListener(onHeadersReceived, {urls: ["http
://*/*", "https://*/*"]}, ["responseHeaders"]); |
| 9 chrome.tabs.onRemoved.addListener(forgetTab); | 9 chrome.tabs.onRemoved.addListener(forgetTab); |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 | 24 |
| 25 // Type names match Mozilla's with main_frame and sub_frame being the only exc
eptions. | 25 // Type names match Mozilla's with main_frame and sub_frame being the only exc
eptions. |
| 26 if (type == "sub_frame") | 26 if (type == "sub_frame") |
| 27 type = "SUBDOCUMENT"; | 27 type = "SUBDOCUMENT"; |
| 28 else | 28 else |
| 29 type = type.toUpperCase(); | 29 type = type.toUpperCase(); |
| 30 | 30 |
| 31 var frame = (type != "SUBDOCUMENT" ? details.frameId : details.parentFrameId); | 31 var frame = (type != "SUBDOCUMENT" ? details.frameId : details.parentFrameId); |
| 32 var filter = checkRequest(type, details.tabId, details.url, frame); | 32 var filter = checkRequest(type, details.tabId, details.url, frame); |
| 33 if (filter instanceof BlockingFilter) | 33 if (filter instanceof BlockingFilter) |
| 34 { | 34 return {cancel: true}; |
| 35 var collapse = filter.collapse; | |
| 36 if (collapse == null) | |
| 37 collapse = (localStorage["hidePlaceholders"] != "false"); | |
| 38 if (collapse && type == "SUBDOCUMENT") | |
| 39 return {redirectUrl: "about:blank"}; | |
| 40 else if (collapse && type == "IMAGE") | |
| 41 return {redirectUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAA
ABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="}; | |
| 42 else | |
| 43 return {cancel: true}; | |
| 44 } | |
| 45 else | 35 else |
| 46 return {}; | 36 return {}; |
| 47 } | 37 } |
| 48 | 38 |
| 49 function onHeadersReceived(details) | 39 function onHeadersReceived(details) |
| 50 { | 40 { |
| 51 if (details.tabId == -1) | 41 if (details.tabId == -1) |
| 52 return; | 42 return; |
| 53 | 43 |
| 54 var type = details.type; | 44 var type = details.type; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 if (isFrameWhitelisted(tabId, frameId)) | 124 if (isFrameWhitelisted(tabId, frameId)) |
| 135 return false; | 125 return false; |
| 136 | 126 |
| 137 var documentUrl = getFrameUrl(tabId, frameId); | 127 var documentUrl = getFrameUrl(tabId, frameId); |
| 138 if (!documentUrl) | 128 if (!documentUrl) |
| 139 return false; | 129 return false; |
| 140 | 130 |
| 141 var requestHost = extractHostFromURL(url); | 131 var requestHost = extractHostFromURL(url); |
| 142 var documentHost = extractHostFromURL(documentUrl); | 132 var documentHost = extractHostFromURL(documentUrl); |
| 143 var thirdParty = isThirdParty(requestHost, documentHost); | 133 var thirdParty = isThirdParty(requestHost, documentHost); |
| 144 return defaultMatcher.matchesAny(url, type, documentHost, thirdParty); | 134 var filter = defaultMatcher.matchesAny(url, type, documentHost, thirdParty); |
| 135 |
| 136 if (filter instanceof BlockingFilter) |
| 137 { |
| 138 var collapse = filter.collapse; |
| 139 if (collapse == null) |
| 140 collapse = (localStorage["hidePlaceholders"] != "false"); |
| 141 if (collapse && (type == "SUBDOCUMENT" || type == "IMAGE")) |
| 142 { |
| 143 chrome.tabs.sendMessage(tabId, { |
| 144 reqtype: "hide-element", |
| 145 type: type, |
| 146 url: url, |
| 147 documentUrl: documentUrl |
| 148 }); |
| 149 } |
| 150 } |
| 151 |
| 152 return filter; |
| 145 } | 153 } |
| 146 | 154 |
| 147 function isFrameWhitelisted(tabId, frameId, type) | 155 function isFrameWhitelisted(tabId, frameId, type) |
| 148 { | 156 { |
| 149 var parent = frameId; | 157 var parent = frameId; |
| 150 while (parent != -1) | 158 while (parent != -1) |
| 151 { | 159 { |
| 152 var parentUrl = getFrameUrl(tabId, parent); | 160 var parentUrl = getFrameUrl(tabId, parent); |
| 153 if (parentUrl && isWhitelisted(parentUrl, type)) | 161 if (parentUrl && isWhitelisted(parentUrl, type)) |
| 154 return true; | 162 return true; |
| 155 if (parentUrl && "keyException" in frames[tabId][frameId]) | 163 if (parentUrl && "keyException" in frames[tabId][frameId]) |
| 156 return true; | 164 return true; |
| 157 parent = getFrameParent(tabId, parent); | 165 parent = getFrameParent(tabId, parent); |
| 158 } | 166 } |
| 159 return false; | 167 return false; |
| 160 } | 168 } |
| OLD | NEW |