handle document.cookie exceptions in sandboxed frames
This commit is contained in:
		
							parent
							
								
									5ba111dce9
								
							
						
					
					
						commit
						92fcb02a57
					
				|  | @ -59,7 +59,8 @@ self.INJECTED !== 1 && (() => { | |||
|     if (STYLE_VIA_API) { | ||||
|       await API.styleViaAPI({method: 'styleApply'}); | ||||
|     } else { | ||||
|       const styles = chrome.app && getStylesViaXhr() || | ||||
|       const blobId = chrome.app && getXhrBlobId(); | ||||
|       const styles = blobId && getStylesViaXhr(blobId) || | ||||
|         await API.getSectionsByUrl(getMatchUrl(), null, true); | ||||
|       if (styles.disableAll) { | ||||
|         delete styles.disableAll; | ||||
|  | @ -69,24 +70,28 @@ self.INJECTED !== 1 && (() => { | |||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function getStylesViaXhr() { | ||||
|     if (new RegExp(`(^|\\s|;)${chrome.runtime.id}=\\s*([-\\w]+)\\s*(;|$)`).test(document.cookie)) { | ||||
|       const data = RegExp.$2; | ||||
|   function getXhrBlobId() { | ||||
|     try { | ||||
|       const {cookie} = document; // may throw in sandboxed frames
 | ||||
|       return new RegExp(`(^|\\s|;)${chrome.runtime.id}=\\s*([-\\w]+)\\s*(;|$)`).exec(cookie)[2]; | ||||
|     } catch (e) {} | ||||
|   } | ||||
| 
 | ||||
|   function getStylesViaXhr(data) { | ||||
|     try { | ||||
|       const disableAll = data[0] === '1'; | ||||
|       const url = 'blob:' + chrome.runtime.getURL(data.slice(1)); | ||||
|       document.cookie = `${chrome.runtime.id}=1; max-age=0`; // remove our cookie
 | ||||
|       let res; | ||||
|       try { | ||||
|         if (!disableAll) { // will get the styles asynchronously
 | ||||
|       if (!disableAll) { // when disabled, will get the styles asynchronously, no rush
 | ||||
|         const xhr = new XMLHttpRequest(); | ||||
|         xhr.open('GET', url, false); // synchronous
 | ||||
|         xhr.send(); | ||||
|         res = JSON.parse(xhr.response); | ||||
|       } | ||||
|       URL.revokeObjectURL(url); | ||||
|       } catch (e) {} | ||||
|       return res; | ||||
|     } | ||||
|     } catch (e) {} | ||||
|   } | ||||
| 
 | ||||
|   function getMatchUrl() { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user