| 'use strict'; | 
|   | 
| var utils = require('./../utils'); | 
|   | 
| module.exports = ( | 
|   utils.isStandardBrowserEnv() ? | 
|   | 
|   // Standard browser envs have full support of the APIs needed to test | 
|   // whether the request URL is of the same origin as current location. | 
|     (function standardBrowserEnv() { | 
|       var msie = /(msie|trident)/i.test(navigator.userAgent); | 
|       var urlParsingNode = document.createElement('a'); | 
|       var originURL; | 
|   | 
|       /** | 
|     * Parse a URL to discover it's components | 
|     * | 
|     * @param {String} url The URL to be parsed | 
|     * @returns {Object} | 
|     */ | 
|       function resolveURL(url) { | 
|         var href = url; | 
|   | 
|         if (msie) { | 
|         // IE needs attribute set twice to normalize properties | 
|           urlParsingNode.setAttribute('href', href); | 
|           href = urlParsingNode.href; | 
|         } | 
|   | 
|         urlParsingNode.setAttribute('href', href); | 
|   | 
|         // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils | 
|         return { | 
|           href: urlParsingNode.href, | 
|           protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', | 
|           host: urlParsingNode.host, | 
|           search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', | 
|           hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', | 
|           hostname: urlParsingNode.hostname, | 
|           port: urlParsingNode.port, | 
|           pathname: (urlParsingNode.pathname.charAt(0) === '/') ? | 
|             urlParsingNode.pathname : | 
|             '/' + urlParsingNode.pathname | 
|         }; | 
|       } | 
|   | 
|       originURL = resolveURL(window.location.href); | 
|   | 
|       /** | 
|     * Determine if a URL shares the same origin as the current location | 
|     * | 
|     * @param {String} requestURL The URL to test | 
|     * @returns {boolean} True if URL shares the same origin, otherwise false | 
|     */ | 
|       return function isURLSameOrigin(requestURL) { | 
|         var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; | 
|         return (parsed.protocol === originURL.protocol && | 
|             parsed.host === originURL.host); | 
|       }; | 
|     })() : | 
|   | 
|   // Non standard browser envs (web workers, react-native) lack needed support. | 
|     (function nonStandardBrowserEnv() { | 
|       return function isURLSameOrigin() { | 
|         return true; | 
|       }; | 
|     })() | 
| ); |