|  |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import utils from './../utils.js'; | 
					
						
							|  |  |  | import platform from '../platform/index.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default platform.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() { | 
					
						
							|  |  |  |     const msie = /(msie|trident)/i.test(navigator.userAgent); | 
					
						
							|  |  |  |     const urlParsingNode = document.createElement('a'); | 
					
						
							|  |  |  |     let originURL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |     * Parse a URL to discover it's components | 
					
						
							|  |  |  |     * | 
					
						
							|  |  |  |     * @param {String} url The URL to be parsed | 
					
						
							|  |  |  |     * @returns {Object} | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     function resolveURL(url) { | 
					
						
							|  |  |  |       let 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) { | 
					
						
							|  |  |  |       const 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; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   })(); |