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

Side by Side Diff: include.preload.js

Issue 29347167: Issue 4210 - Fix dynamic-frame collapsing in Chrome (Closed)
Patch Set: Created June 30, 2016, 1:39 p.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 | lib/requestBlocker.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 <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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 119
120 for (var i = 0; i < urls.length; i++) 120 for (var i = 0; i < urls.length; i++)
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, contentDocument)
130 { 130 {
131 window.collapsing = true; 131 window.collapsing = true;
132 132
133 var mediatype = typeMap[element.localName]; 133 var mediatype = typeMap[element.localName];
134 if (!mediatype) 134 if (!mediatype)
135 return; 135 return;
136 136
137 var urls = getURLsFromElement(element); 137 var urls = getURLsFromElement(element);
138 if (urls.length == 0) 138 if (urls.length == 0)
139 return; 139 return;
140 140
141 ext.backgroundPage.sendMessage( 141 var message = {
142 { 142 type: "filters.collapse",
143 type: "filters.collapse", 143 urls: urls,
144 urls: urls, 144 mediatype: mediatype,
145 mediatype: mediatype, 145 baseURL: document.location.href
146 baseURL: document.location.href 146 };
147 },
148 147
148 if (contentDocument)
149 message.dynamicFrameURL = contentDocument.location.href;
150
151 ext.backgroundPage.sendMessage(message,
149 function(collapse) 152 function(collapse)
150 { 153 {
151 function collapseElement() 154 function collapseElement()
152 { 155 {
153 if (element.localName == "frame") 156 if (element.localName == "frame")
154 element.style.setProperty("visibility", "hidden", "important"); 157 element.style.setProperty("visibility", "hidden", "important");
155 else 158 else
156 element.style.setProperty("display", "none", "important"); 159 element.style.setProperty("display", "none", "important");
157 } 160 }
158 161
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 // dynamically created frames. Also on Chrome 37-40 549 // dynamically created frames. Also on Chrome 37-40
547 // document_start content scripts (like this one) don't 550 // document_start content scripts (like this one) don't
548 // run either in those frames due to https://crbug.com/416907. 551 // run either in those frames due to https://crbug.com/416907.
549 // So we have to apply element hiding from the parent frame. 552 // So we have to apply element hiding from the parent frame.
550 if (!("init" in contentWindow)) 553 if (!("init" in contentWindow))
551 init(contentDocument); 554 init(contentDocument);
552 555
553 // Moreover, "load" and "error" events aren't dispatched for elements 556 // Moreover, "load" and "error" events aren't dispatched for elements
554 // in dynamically created frames due to https://crbug.com/442107. 557 // in dynamically created frames due to https://crbug.com/442107.
555 // So we also have to apply element collpasing from the parent frame. 558 // So we also have to apply element collpasing from the parent frame.
556 if (!contentWindow.collapsing) 559 if (!contentWindow.collapsing)
Sebastian Noack 2016/08/10 12:38:52 I'd rather remove this workaround than adding yet
557 Array.prototype.forEach.call( 560 Array.prototype.forEach.call(
558 contentDocument.querySelectorAll(Object.keys(typeMap).join(",")), 561 contentDocument.querySelectorAll(Object.keys(typeMap).join(",")),
559 checkCollapse 562 function(element)
563 {
564 checkCollapse(element, contentDocument);
565 }
560 ); 566 );
561 } 567 }
562 } 568 }
563 } 569 }
564 }, true); 570 }, true);
565 571
566 return updateStylesheet; 572 return updateStylesheet;
567 } 573 }
568 574
569 if (document instanceof HTMLDocument) 575 if (document instanceof HTMLDocument)
570 { 576 {
571 checkSitekey(); 577 checkSitekey();
572 window.updateStylesheet = init(document); 578 window.updateStylesheet = init(document);
573 } 579 }
OLDNEW
« no previous file with comments | « no previous file | lib/requestBlocker.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld