OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 { | 121 { |
122 if (/^(?!https?:)[\w-]+:/i.test(urls[i])) | 122 if (/^(?!https?:)[\w-]+:/i.test(urls[i])) |
123 urls.splice(i--, 1); | 123 urls.splice(i--, 1); |
124 } | 124 } |
125 | 125 |
126 return urls; | 126 return urls; |
127 } | 127 } |
128 | 128 |
129 function checkCollapse(element) | 129 function checkCollapse(element) |
130 { | 130 { |
131 window.collapsing = true; | |
132 | |
133 var mediatype = typeMap[element.localName]; | 131 var mediatype = typeMap[element.localName]; |
134 if (!mediatype) | 132 if (!mediatype) |
135 return; | 133 return; |
136 | 134 |
137 var urls = getURLsFromElement(element); | 135 var urls = getURLsFromElement(element); |
138 if (urls.length == 0) | 136 if (urls.length == 0) |
139 return; | 137 return; |
140 | 138 |
141 ext.backgroundPage.sendMessage( | 139 ext.backgroundPage.sendMessage( |
142 { | 140 { |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 var contentWindow = contentDocument.defaultView; | 590 var contentWindow = contentDocument.defaultView; |
593 if (contentDocument instanceof contentWindow.HTMLDocument) | 591 if (contentDocument instanceof contentWindow.HTMLDocument) |
594 { | 592 { |
595 // Prior to Chrome 37, content scripts cannot run in | 593 // Prior to Chrome 37, content scripts cannot run in |
596 // dynamically created frames. Also on Chrome 37-40 | 594 // dynamically created frames. Also on Chrome 37-40 |
597 // document_start content scripts (like this one) don't | 595 // document_start content scripts (like this one) don't |
598 // run either in those frames due to https://crbug.com/416907. | 596 // run either in those frames due to https://crbug.com/416907. |
599 // So we have to apply element hiding from the parent frame. | 597 // So we have to apply element hiding from the parent frame. |
600 if (!("init" in contentWindow)) | 598 if (!("init" in contentWindow)) |
601 init(contentDocument); | 599 init(contentDocument); |
602 | |
603 // Moreover, "load" and "error" events aren't dispatched for elements | |
604 // in dynamically created frames due to https://crbug.com/442107. | |
605 // So we also have to apply element collpasing from the parent frame. | |
606 if (!contentWindow.collapsing) | |
607 Array.prototype.forEach.call( | |
608 contentDocument.querySelectorAll(Object.keys(typeMap).join(",")), | |
609 checkCollapse | |
610 ); | |
611 } | 600 } |
612 } | 601 } |
613 } | 602 } |
614 }, true); | 603 }, true); |
615 | 604 |
616 return updateStylesheet; | 605 return updateStylesheet; |
617 } | 606 } |
618 | 607 |
619 if (document instanceof HTMLDocument) | 608 if (document instanceof HTMLDocument) |
620 { | 609 { |
621 checkSitekey(); | 610 checkSitekey(); |
622 window.updateStylesheet = init(document); | 611 window.updateStylesheet = init(document); |
623 } | 612 } |
OLD | NEW |