| 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 682 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 693   // 2176782336 is 36^6 which mean 6 chars [a-z0-9] | 693   // 2176782336 is 36^6 which mean 6 chars [a-z0-9] | 
| 694   // 60466176 is 36^5 | 694   // 60466176 is 36^5 | 
| 695   // 2176782336 - 60466176 = 2116316160. This ensure to always have 6 | 695   // 2176782336 - 60466176 = 2116316160. This ensure to always have 6 | 
| 696   // chars even if Math.random() returns its minimum value 0.0 | 696   // chars even if Math.random() returns its minimum value 0.0 | 
| 697   // | 697   // | 
| 698   return Math.floor(Math.random() * 2116316160 + 60466176).toString(36); | 698   return Math.floor(Math.random() * 2116316160 + 60466176).toString(36); | 
| 699 } | 699 } | 
| 700 | 700 | 
| 701 function wrapPropertyAccess(object, property, descriptor) | 701 function wrapPropertyAccess(object, property, descriptor) | 
| 702 { | 702 { | 
| 703   let currentDescriptor = Object.getOwnPropertyDescriptor(object, property); | 703   let dotIndex = property.indexOf("."); | 
|  | 704   if (dotIndex == -1) | 
|  | 705   { | 
|  | 706     // simple property case. | 
|  | 707     let currentDescriptor = Object.getOwnPropertyDescriptor(object, property); | 
|  | 708     if (currentDescriptor && !currentDescriptor.configurable) | 
|  | 709       return; | 
|  | 710 | 
|  | 711     Object.defineProperty(object, property, descriptor); | 
|  | 712     return; | 
|  | 713   } | 
|  | 714 | 
|  | 715   let name = property.slice(0, dotIndex); | 
|  | 716   property = property.slice(dotIndex + 1); | 
|  | 717   let value = object[name]; | 
|  | 718   if (value && typeof value == "object") | 
|  | 719     wrapPropertyAccess(value, property, descriptor); | 
|  | 720 | 
|  | 721   let currentDescriptor = Object.getOwnPropertyDescriptor(object, name); | 
| 704   if (currentDescriptor && !currentDescriptor.configurable) | 722   if (currentDescriptor && !currentDescriptor.configurable) | 
| 705     return false; | 723     return; | 
| 706 | 724 | 
| 707   Object.defineProperty(object, property, descriptor); | 725   let setter = newValue => | 
| 708   return true; | 726   { | 
|  | 727     value = newValue; | 
|  | 728     if (newValue && typeof newValue == "object") | 
|  | 729       wrapPropertyAccess(newValue, property, descriptor); | 
|  | 730   }; | 
|  | 731 | 
|  | 732   Object.defineProperty(object, name, {get: () => value, set: setter}); | 
| 709 } | 733 } | 
| 710 | 734 | 
| 711 /** | 735 /** | 
| 712  * Overrides the <code>onerror</code> handler to discard tagged error messages | 736  * Overrides the <code>onerror</code> handler to discard tagged error messages | 
| 713  * from our property wrapping. | 737  * from our property wrapping. | 
| 714  * | 738  * | 
| 715  * @param {string} magic The magic string that tags the error message. | 739  * @param {string} magic The magic string that tags the error message. | 
| 716  */ | 740  */ | 
| 717 function overrideOnError(magic) | 741 function overrideOnError(magic) | 
| 718 { | 742 { | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 742   if (!property) | 766   if (!property) | 
| 743     return; | 767     return; | 
| 744 | 768 | 
| 745   let rid = randomId(); | 769   let rid = randomId(); | 
| 746 | 770 | 
| 747   function abort() | 771   function abort() | 
| 748   { | 772   { | 
| 749     throw new ReferenceError(rid); | 773     throw new ReferenceError(rid); | 
| 750   } | 774   } | 
| 751 | 775 | 
| 752   if (wrapPropertyAccess(window, property, {get: abort, set() {}})) | 776   wrapPropertyAccess(window, property, {get: abort, set() {}}); | 
| 753     overrideOnError(rid); | 777   overrideOnError(rid); | 
| 754 } | 778 } | 
| 755 | 779 | 
| 756 exports["abort-on-property-read"] = makeInjector(abortOnPropertyRead, | 780 exports["abort-on-property-read"] = makeInjector(abortOnPropertyRead, | 
| 757                                                  wrapPropertyAccess, | 781                                                  wrapPropertyAccess, | 
| 758                                                  overrideOnError, | 782                                                  overrideOnError, | 
| 759                                                  randomId); | 783                                                  randomId); | 
| 760 | 784 | 
| 761 /** | 785 /** | 
| 762  * Patches a property on the window object to abort execution when the | 786  * Patches a property on the window object to abort execution when the | 
| 763  * property is written. | 787  * property is written. | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 774   if (!property) | 798   if (!property) | 
| 775     return; | 799     return; | 
| 776 | 800 | 
| 777   let rid = randomId(); | 801   let rid = randomId(); | 
| 778 | 802 | 
| 779   function abort() | 803   function abort() | 
| 780   { | 804   { | 
| 781     throw new ReferenceError(rid); | 805     throw new ReferenceError(rid); | 
| 782   } | 806   } | 
| 783 | 807 | 
| 784   if (wrapPropertyAccess(window, property, {set: abort})) | 808   wrapPropertyAccess(window, property, {set: abort}); | 
| 785     overrideOnError(rid); | 809   overrideOnError(rid); | 
| 786 } | 810 } | 
| 787 | 811 | 
| 788 exports["abort-on-property-write"] = makeInjector(abortOnPropertyWrite, | 812 exports["abort-on-property-write"] = makeInjector(abortOnPropertyWrite, | 
| 789                                                   wrapPropertyAccess, | 813                                                   wrapPropertyAccess, | 
| 790                                                   overrideOnError, | 814                                                   overrideOnError, | 
| 791                                                   randomId); | 815                                                   randomId); | 
| 792 | 816 | 
| 793 /** | 817 /** | 
| 794  * Aborts the execution of an inline script. | 818  * Aborts the execution of an inline script. | 
| 795  * | 819  * | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 837       abort(); | 861       abort(); | 
| 838       return currentValue; | 862       return currentValue; | 
| 839     }, | 863     }, | 
| 840     set(value) | 864     set(value) | 
| 841     { | 865     { | 
| 842       abort(); | 866       abort(); | 
| 843       currentValue = value; | 867       currentValue = value; | 
| 844     } | 868     } | 
| 845   }; | 869   }; | 
| 846 | 870 | 
| 847   if (wrapPropertyAccess(object, name, descriptor)) | 871   wrapPropertyAccess(object, name, descriptor); | 
| 848     overrideOnError(rid); | 872   overrideOnError(rid); | 
| 849 } | 873 } | 
| 850 | 874 | 
| 851 exports["abort-current-inline-script"] = | 875 exports["abort-current-inline-script"] = | 
| 852   makeInjector(abortCurrentInlineScript, wrapPropertyAccess, toRegExp, | 876   makeInjector(abortCurrentInlineScript, wrapPropertyAccess, toRegExp, | 
| 853                overrideOnError, regexEscape, randomId); | 877                overrideOnError, regexEscape, randomId); | 
| 854 | 878 | 
| 855 /** | 879 /** | 
| 856  * Strips a query string parameter from <code>fetch()</code> calls. | 880  * Strips a query string parameter from <code>fetch()</code> calls. | 
| 857  * | 881  * | 
| 858  * @param {string} name The name of the parameter. | 882  * @param {string} name The name of the parameter. | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 874       let url = new URL(source); | 898       let url = new URL(source); | 
| 875       url.searchParams.delete(name); | 899       url.searchParams.delete(name); | 
| 876       args[0] = url.href; | 900       args[0] = url.href; | 
| 877     } | 901     } | 
| 878     return fetch_.apply(this, args); | 902     return fetch_.apply(this, args); | 
| 879   }; | 903   }; | 
| 880 } | 904 } | 
| 881 | 905 | 
| 882 exports["strip-fetch-query-parameter"] = makeInjector(stripFetchQueryParameter, | 906 exports["strip-fetch-query-parameter"] = makeInjector(stripFetchQueryParameter, | 
| 883                                                       toRegExp, regexEscape); | 907                                                       toRegExp, regexEscape); | 
| OLD | NEW | 
|---|