| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 /*! |  | 
| 2  * Parts of original code from ipv6.js <https://github.com/beaugunderson/javascr
     ipt-ipv6> |  | 
| 3  * Copyright 2011 Beau Gunderson |  | 
| 4  * Available under MIT license <http://mths.be/mit> |  | 
| 5  */ |  | 
| 6 |  | 
| 7 const RE_V4 = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|0x[0-9a-f][0-9a-f]?|0
     [0-7]{3})\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|0x[0-9a-f][0-9a-f]?|0[0-7
     ]{3})$/i; |  | 
| 8 const RE_V4_HEX = /^0x([0-9a-f]{8})$/i; |  | 
| 9 const RE_V4_NUMERIC = /^[0-9]+$/; |  | 
| 10 const RE_V4inV6 = /(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2
     [0-4][0-9]|[01]?[0-9][0-9]?)$/; |  | 
| 11 |  | 
| 12 const RE_BAD_CHARACTERS = /([^0-9a-f:])/i; |  | 
| 13 const RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]$)/i; |  | 
| 14 |  | 
| 15 function isIPv4(address) |  | 
| 16 { |  | 
| 17   if (RE_V4.test(address)) |  | 
| 18     return true; |  | 
| 19   if (RE_V4_HEX.test(address)) |  | 
| 20     return true; |  | 
| 21   if (RE_V4_NUMERIC.test(address)) |  | 
| 22     return true; |  | 
| 23   return false; |  | 
| 24 } |  | 
| 25 |  | 
| 26 function isIPv6(address) |  | 
| 27 { |  | 
| 28   var a4addon = 0; |  | 
| 29   var address4 = address.match(RE_V4inV6); |  | 
| 30   if (address4) |  | 
| 31   { |  | 
| 32     var temp4 = address4[0].split('.'); |  | 
| 33     for (var i = 0; i < 4; i++) |  | 
| 34     { |  | 
| 35       if (/^0[0-9]+/.test(temp4[i])) |  | 
| 36         return false; |  | 
| 37     } |  | 
| 38     address = address.replace(RE_V4inV6, ''); |  | 
| 39     if (/[0-9]$/.test(address)) |  | 
| 40       return false; |  | 
| 41 |  | 
| 42     address = address + temp4.join(':'); |  | 
| 43     a4addon = 2; |  | 
| 44   } |  | 
| 45 |  | 
| 46   if (RE_BAD_CHARACTERS.test(address)) |  | 
| 47     return false; |  | 
| 48 |  | 
| 49   if (RE_BAD_ADDRESS.test(address)) |  | 
| 50     return false; |  | 
| 51 |  | 
| 52   function count(string, substring) |  | 
| 53   { |  | 
| 54     return (string.length - string.replace(new RegExp(substring,"g"), '').length
     ) / substring.length; |  | 
| 55   } |  | 
| 56 |  | 
| 57   var halves = count(address, '::'); |  | 
| 58   if (halves == 1 && count(address, ':') <= 6 + 2 + a4addon) |  | 
| 59     return true; |  | 
| 60   if (halves == 0 && count(address, ':') == 7 + a4addon) |  | 
| 61     return true; |  | 
| 62   return false; |  | 
| 63 } |  | 
| 64 |  | 
| 65 /** |  | 
| 66  * Returns base domain for specified host based on Public Suffix List. |  | 
| 67  */ |  | 
| 68 function getBaseDomain(/**String*/ hostname) /**String*/ |  | 
| 69 { |  | 
| 70   // remove trailing dot(s) |  | 
| 71   hostname = hostname.replace(/\.+$/, ''); |  | 
| 72 |  | 
| 73   // return IP address untouched |  | 
| 74   if (isIPv6(hostname) || isIPv4(hostname)) |  | 
| 75     return hostname; |  | 
| 76 |  | 
| 77   // decode punycode if exists |  | 
| 78   if (hostname.indexOf('xn--') >= 0) |  | 
| 79   { |  | 
| 80     hostname = punycode.toUnicode(hostname); |  | 
| 81   } |  | 
| 82 |  | 
| 83   // search through PSL |  | 
| 84   var prevDomains = []; |  | 
| 85   var curDomain = hostname; |  | 
| 86   var nextDot = curDomain.indexOf('.'); |  | 
| 87   var tld = 0; |  | 
| 88 |  | 
| 89   while (true) |  | 
| 90   { |  | 
| 91     var suffix = publicSuffixes[curDomain]; |  | 
| 92     if (typeof(suffix) != 'undefined') |  | 
| 93     { |  | 
| 94       tld = suffix; |  | 
| 95         break; |  | 
| 96     } |  | 
| 97 |  | 
| 98     if (nextDot < 0) |  | 
| 99     { |  | 
| 100       tld = 1; |  | 
| 101       break; |  | 
| 102     } |  | 
| 103 |  | 
| 104     prevDomains.push(curDomain.substring(0,nextDot)); |  | 
| 105     curDomain = curDomain.substring(nextDot+1); |  | 
| 106     nextDot = curDomain.indexOf('.'); |  | 
| 107   } |  | 
| 108 |  | 
| 109   while (tld > 0 && prevDomains.length > 0) |  | 
| 110   { |  | 
| 111     curDomain = prevDomains.pop() + '.' + curDomain; |  | 
| 112     tld--; |  | 
| 113   } |  | 
| 114 |  | 
| 115   return curDomain; |  | 
| 116 } |  | 
| 117 |  | 
| 118 /** |  | 
| 119  * Checks whether a request is third party for the given document, uses |  | 
| 120  * information from the public suffix list to determine the effective domain |  | 
| 121  * name for the document. |  | 
| 122  */ |  | 
| 123 function isThirdParty(/**String*/ requestHost, /**String*/ documentHost) |  | 
| 124 { |  | 
| 125   // Remove trailing dots |  | 
| 126   requestHost = requestHost.replace(/\.+$/, ""); |  | 
| 127   documentHost = documentHost.replace(/\.+$/, ""); |  | 
| 128 |  | 
| 129   // Extract domain name - leave IP addresses unchanged, otherwise leave only ba
     se domain |  | 
| 130   var documentDomain = getBaseDomain(documentHost); |  | 
| 131   if (requestHost.length > documentDomain.length) |  | 
| 132     return (requestHost.substr(requestHost.length - documentDomain.length - 1) !
     = "." + documentDomain); |  | 
| 133   else |  | 
| 134     return (requestHost != documentDomain); |  | 
| 135 } |  | 
| 136 |  | 
| 137 /** |  | 
| 138  * Extracts host name from a URL. |  | 
| 139  */ |  | 
| 140 function extractHostFromURL(/**String*/ url) |  | 
| 141 { |  | 
| 142   if (url && extractHostFromURL._lastURL == url) |  | 
| 143     return extractHostFromURL._lastDomain; |  | 
| 144 |  | 
| 145   var host = new URL(url).hostname; |  | 
| 146   extractHostFromURL._lastURL = url; |  | 
| 147   extractHostFromURL._lastDomain = host; |  | 
| 148   return host; |  | 
| 149 } |  | 
| 150 |  | 
| 151 /** |  | 
| 152  * Extracts host name from the URL of the given frame. If the URL don't have hos
     t |  | 
| 153  * information (like about:blank or data: URLs) it falls back to the parent fram
     e. |  | 
| 154  */ |  | 
| 155 function extractHostFromFrame(frame) |  | 
| 156 { |  | 
| 157   var host = extractHostFromURL(frame.url); |  | 
| 158   if (!host) |  | 
| 159   { |  | 
| 160     var parentFrame = frame.parent; |  | 
| 161     if (parentFrame) |  | 
| 162       return extractHostFromFrame(parentFrame); |  | 
| 163   } |  | 
| 164   return host; |  | 
| 165 } |  | 
| 166 |  | 
| 167 /** |  | 
| 168  * Strips the fragment from a URL. |  | 
| 169  */ |  | 
| 170 function stripFragmentFromURL(/**String*/ url) |  | 
| 171 { |  | 
| 172   return url.replace(/#.*/, ""); |  | 
| 173 } |  | 
| OLD | NEW | 
|---|