| 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-present eyeo GmbH | 3  * Copyright (C) 2006-present 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 17 matching lines...) Expand all  Loading... | 
| 28   ["input", "IMAGE"], | 28   ["input", "IMAGE"], | 
| 29   ["picture", "IMAGE"], | 29   ["picture", "IMAGE"], | 
| 30   ["audio", "MEDIA"], | 30   ["audio", "MEDIA"], | 
| 31   ["video", "MEDIA"], | 31   ["video", "MEDIA"], | 
| 32   ["frame", "SUBDOCUMENT"], | 32   ["frame", "SUBDOCUMENT"], | 
| 33   ["iframe", "SUBDOCUMENT"], | 33   ["iframe", "SUBDOCUMENT"], | 
| 34   ["object", "OBJECT"], | 34   ["object", "OBJECT"], | 
| 35   ["embed", "OBJECT"] | 35   ["embed", "OBJECT"] | 
| 36 ]); | 36 ]); | 
| 37 | 37 | 
| 38 function getURLsFromObjectElement(element) | 38 function* getURLsFromObjectElement(element) | 
| 39 { | 39 { | 
| 40   let url = element.getAttribute("data"); | 40   const paramNames = [ | 
| 41   if (url) | 41     "movie",   // Adobe Flash | 
| 42     return [url]; | 42     "source",  // Silverlight | 
|  | 43     "src",     // Real Media + Quicktime | 
|  | 44     "FileName" // Windows Media | 
|  | 45   ]; | 
| 43 | 46 | 
| 44   for (let child of element.children) | 47   let data = element.getAttribute("data"); | 
|  | 48   if (data) | 
| 45   { | 49   { | 
| 46     if (child.localName != "param") | 50     yield data; | 
| 47       continue; | 51     return; | 
| 48 |  | 
| 49     let name = child.getAttribute("name"); |  | 
| 50     if (name != "movie" &&  // Adobe Flash |  | 
| 51         name != "source" && // Silverlight |  | 
| 52         name != "src" &&    // Real Media + Quicktime |  | 
| 53         name != "FileName") // Windows Media |  | 
| 54       continue; |  | 
| 55 |  | 
| 56     let value = child.getAttribute("value"); |  | 
| 57     if (!value) |  | 
| 58       continue; |  | 
| 59 |  | 
| 60     return [value]; |  | 
| 61   } | 52   } | 
| 62 | 53 | 
| 63   return []; | 54   let param = [...element.children].find( | 
|  | 55     child => child.localName == "param" && | 
|  | 56              paramNames.includes(child.getAttribute("name")) && | 
|  | 57              child.getAttribute("value") | 
|  | 58   ); | 
|  | 59 | 
|  | 60   if (param) | 
|  | 61     yield param.getAttribute("value"); | 
| 64 } | 62 } | 
| 65 | 63 | 
| 66 function getURLsFromAttributes(element) | 64 function* getURLsFromAttributes({src, srcset = ""}) | 
| 67 { | 65 { | 
| 68   let urls = []; | 66   yield src; | 
| 69 | 67 | 
| 70   if (element.src) | 68   yield* srcset.split(",").map(url => url.trim().replace(/\s+\S+$/, "")); | 
| 71     urls.push(element.src); |  | 
| 72 |  | 
| 73   if (element.srcset) |  | 
| 74   { |  | 
| 75     for (let candidate of element.srcset.split(",")) |  | 
| 76     { |  | 
| 77       let url = candidate.trim().replace(/\s+\S+$/, ""); |  | 
| 78       if (url) |  | 
| 79         urls.push(url); |  | 
| 80     } |  | 
| 81   } |  | 
| 82 |  | 
| 83   return urls; |  | 
| 84 } | 69 } | 
| 85 | 70 | 
| 86 function getURLsFromMediaElement(element) | 71 function* getURLsFromMediaElement(element) | 
| 87 { | 72 { | 
| 88   let urls = getURLsFromAttributes(element); | 73   yield* getURLsFromAttributes(element); | 
| 89 | 74 | 
| 90   for (let child of element.children) | 75   let sources = [...element.children].filter( | 
| 91   { | 76     ({localName}) => ["source", "track"].includes(localName) | 
| 92     if (child.localName == "source" || child.localName == "track") | 77   ); | 
| 93       urls.push(...getURLsFromAttributes(child)); |  | 
| 94   } |  | 
| 95 | 78 | 
| 96   if (element.poster) | 79   for (let urls of sources.map(getURLsFromAttributes)) | 
| 97     urls.push(element.poster); | 80     yield* urls; | 
| 98 | 81 | 
| 99   return urls; | 82   yield element.poster; | 
| 100 } | 83 } | 
| 101 | 84 | 
| 102 function getURLsFromElement(element) | 85 function getURLsFromElement(element) | 
| 103 { | 86 { | 
| 104   let urls; | 87   let urls = null; | 
| 105   switch (element.localName) |  | 
| 106   { |  | 
| 107     case "object": |  | 
| 108       urls = getURLsFromObjectElement(element); |  | 
| 109       break; |  | 
| 110 | 88 | 
| 111     case "video": | 89   let {localName} = element; | 
| 112     case "audio": |  | 
| 113     case "picture": |  | 
| 114       urls = getURLsFromMediaElement(element); |  | 
| 115       break; |  | 
| 116 | 90 | 
| 117     default: | 91   if (localName == "object") | 
| 118       urls = getURLsFromAttributes(element); | 92     urls = getURLsFromObjectElement(element); | 
| 119       break; | 93   else if (["video", "audio", "picture"].includes(localName)) | 
| 120   } | 94     urls = getURLsFromMediaElement(element); | 
|  | 95   else | 
|  | 96     urls = getURLsFromAttributes(element); | 
| 121 | 97 | 
| 122   for (let i = 0; i < urls.length; i++) | 98   return [...urls].filter(url => url && !/^(?!https?:)[\w-]+:/i.test(url)); | 
| 123   { |  | 
| 124     if (/^(?!https?:)[\w-]+:/i.test(urls[i])) |  | 
| 125       urls.splice(i--, 1); |  | 
| 126   } |  | 
| 127 |  | 
| 128   return urls; |  | 
| 129 } | 99 } | 
| 130 | 100 | 
| 131 function hideElement(element) | 101 function hideElement(element) | 
| 132 { | 102 { | 
| 133   function doHide() | 103   function doHide() | 
| 134   { | 104   { | 
| 135     let propertyName = "display"; | 105     let propertyName = "display"; | 
| 136     let propertyValue = "none"; | 106     let propertyValue = "none"; | 
| 137     if (element.localName == "frame") | 107     if (element.localName == "frame") | 
| 138     { | 108     { | 
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 537     let element = event.target; | 507     let element = event.target; | 
| 538     if (/^i?frame$/.test(element.localName)) | 508     if (/^i?frame$/.test(element.localName)) | 
| 539       checkCollapse(element); | 509       checkCollapse(element); | 
| 540   }, true); | 510   }, true); | 
| 541 } | 511 } | 
| 542 | 512 | 
| 543 window.checkCollapse = checkCollapse; | 513 window.checkCollapse = checkCollapse; | 
| 544 window.elemhide = elemhide; | 514 window.elemhide = elemhide; | 
| 545 window.typeMap = typeMap; | 515 window.typeMap = typeMap; | 
| 546 window.getURLsFromElement = getURLsFromElement; | 516 window.getURLsFromElement = getURLsFromElement; | 
| OLD | NEW | 
|---|