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

Delta Between Two Patch Sets: include.preload.js

Issue 29710595: Issue 6433 - Use generators in getURLsFromElement (Closed) Base URL: https://hg.adblockplus.org/adblockpluschrome/
Left Patch Set: Use functional style Created Feb. 28, 2018, 2:24 a.m.
Right Patch Set: Refactor (fixed) Created March 1, 2018, 9:37 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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
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* getURLsFromObjectParamChildren({children: [...children]})
39 { 39 {
40 const paramNames = [ 40 const names = [
41 "movie", // Adobe Flash 41 "movie", // Adobe Flash
42 "source", // Silverlight 42 "source", // Silverlight
43 "src", // Real Media + Quicktime 43 "src", // Real Media + Quicktime
44 "FileName" // Windows Media 44 "FileName" // Windows Media
45 ]; 45 ];
46 46
47 let param = children.find(
48 child => child.localName == "param" &&
49 names.includes(child.getAttribute("name")) &&
50 child.getAttribute("value")
51 );
52
53 if (param)
54 yield param.getAttribute("value");
55 }
56
57 function* getURLsFromObjectElement(element)
58 {
47 let data = element.getAttribute("data"); 59 let data = element.getAttribute("data");
48 if (data) 60 if (data)
49 {
50 yield data; 61 yield data;
51 return; 62 else
52 } 63 yield* getURLsFromObjectParamChildren(element);
53 64 }
54 let param = [].find.call( 65
55 element.children, 66 function* getURLsFromMediaSourceChildren({children: [...children]})
56 child => child.localName == "param" && 67 {
57 paramNames.includes(child.getAttribute("name")) && 68 let sources = children.filter(
58 child.getAttribute("value") 69 ({localName}) => ["source", "track"].includes(localName)
59 ); 70 );
60 71
61 if (param) 72 for (let source of sources)
62 yield param.getAttribute("value"); 73 yield* getURLsFromAttributes(source);
63 } 74 }
64 75
65 function* getURLsFromAttributes({src = "", srcset = ""}) 76 function* getURLsFromMediaElement(element)
77 {
78 yield* getURLsFromAttributes(element);
79 yield* getURLsFromMediaSourceChildren(element);
80
81 yield element.poster;
82 }
83
84 function* getURLsFromAttributes({src, srcset = ""})
66 { 85 {
67 yield src; 86 yield src;
68 87
69 yield* srcset.split(",").map(url => url.trim().replace(/\s+\S+$/, "")); 88 yield* srcset.split(",").map(url => url.trim().replace(/\s+\S+$/, ""));
70 }
71
72 function* getURLsFromMediaElement(element)
73 {
74 yield* getURLsFromAttributes(element);
75
76 for (let child of element.children)
77 {
78 if (["source", "track"].includes(child.localName))
79 yield* getURLsFromAttributes(child);
80 }
81
82 yield element.poster;
83 } 89 }
84 90
85 function getURLsFromElement(element) 91 function getURLsFromElement(element)
86 { 92 {
87 let urls = null; 93 let urls = null;
88 94
89 let {localName} = element; 95 let {localName} = element;
90 96
91 if (localName == "object") 97 if (localName == "object")
92 urls = getURLsFromObjectElement(element); 98 urls = getURLsFromObjectElement(element);
93 else if (["video", "audio", "picture"].includes(localName)) 99 else if (["video", "audio", "picture"].includes(localName))
94 urls = getURLsFromMediaElement(element); 100 urls = getURLsFromMediaElement(element);
95 else 101 else
96 urls = getURLsFromAttributes(element); 102 urls = getURLsFromAttributes(element);
97 103
98 return Array.from(urls).filter( 104 return [...urls].filter(url => url && !/^(?!https?:)[\w-]+:/i.test(url));
99 url => url && !/^(?!https?:)[\w-]+:/i.test(url)
100 );
101 } 105 }
102 106
103 function hideElement(element) 107 function hideElement(element)
104 { 108 {
105 function doHide() 109 function doHide()
106 { 110 {
107 let propertyName = "display"; 111 let propertyName = "display";
108 let propertyValue = "none"; 112 let propertyValue = "none";
109 if (element.localName == "frame") 113 if (element.localName == "frame")
110 { 114 {
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 let element = event.target; 513 let element = event.target;
510 if (/^i?frame$/.test(element.localName)) 514 if (/^i?frame$/.test(element.localName))
511 checkCollapse(element); 515 checkCollapse(element);
512 }, true); 516 }, true);
513 } 517 }
514 518
515 window.checkCollapse = checkCollapse; 519 window.checkCollapse = checkCollapse;
516 window.elemhide = elemhide; 520 window.elemhide = elemhide;
517 window.typeMap = typeMap; 521 window.typeMap = typeMap;
518 window.getURLsFromElement = getURLsFromElement; 522 window.getURLsFromElement = getURLsFromElement;
LEFTRIGHT
« no previous file | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld