Orphaned content script case self-destruction for install.js
This commit is contained in:
		
							parent
							
								
									66a1c17847
								
							
						
					
					
						commit
						db560f3ede
					
				
							
								
								
									
										42
									
								
								install.js
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								install.js
									
									
									
									
									
								
							|  | @ -69,7 +69,9 @@ function sendEvent(type, data) { | |||
| 	document.dispatchEvent(stylishEvent); | ||||
| } | ||||
| 
 | ||||
| document.addEventListener("stylishInstallChrome", function() { | ||||
| document.addEventListener("stylishUpdateChrome", stylishUpdateChrome); | ||||
| function stylishInstallChrome() { | ||||
| 	orphanCheck(); | ||||
| 	getResource(getMeta("stylish-description"), function(name) { | ||||
| 		if (confirm(chrome.i18n.getMessage('styleInstall', [name]))) { | ||||
| 			getResource(getMeta("stylish-code-chrome"), function(code) { | ||||
|  | @ -83,9 +85,11 @@ document.addEventListener("stylishInstallChrome", function() { | |||
| 			getResource(getMeta("stylish-install-ping-url-chrome")); | ||||
| 		} | ||||
| 	}); | ||||
| }, false); | ||||
| } | ||||
| 
 | ||||
| document.addEventListener("stylishUpdateChrome", function() { | ||||
| document.addEventListener("stylishInstallChrome", stylishInstallChrome); | ||||
| function stylishUpdateChrome() { | ||||
| 	orphanCheck(); | ||||
| 	chrome.runtime.sendMessage({method: "getStyles", url: getMeta("stylish-id-url") || location.href}, function(response) { | ||||
| 		var style = response[0]; | ||||
| 		if (confirm(chrome.i18n.getMessage('styleUpdate', [style.name]))) { | ||||
|  | @ -99,8 +103,7 @@ document.addEventListener("stylishUpdateChrome", function() { | |||
| 			}); | ||||
| 		} | ||||
| 	}); | ||||
| }, false); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| function getMeta(name) { | ||||
| 	var e = document.querySelector("link[rel='" + name + "']"); | ||||
|  | @ -146,3 +149,32 @@ function getResource(url, callback) { | |||
| 	...document.querySelectorAll('div[id^="stylish-installed-style-not-installed-"]'), | ||||
| 	...document.querySelectorAll('div[id^="stylish-installed-style-needs-update-"]') | ||||
| ]); | ||||
| 
 | ||||
| // orphaned content script check
 | ||||
| 
 | ||||
| chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => | ||||
| 	msg.method == 'ping' && sendResponse(true)); | ||||
| 
 | ||||
| function orphanCheck() { | ||||
| 	var port = chrome.runtime.connect(); | ||||
| 	if (port) { | ||||
| 		port.disconnect(); | ||||
| 		return; | ||||
| 	} | ||||
| 	// we're orphaned due to an extension update
 | ||||
| 	// we can detach event listeners
 | ||||
| 	document.removeEventListener('stylishUpdateChrome', stylishUpdateChrome); | ||||
| 	document.removeEventListener('stylishInstallChrome', stylishInstallChrome); | ||||
| 	// we can't detach chrome.runtime.onMessage because it's no longer connected internally
 | ||||
| 	// we can destroy global functions in this context to free up memory
 | ||||
| 	[ | ||||
| 		'arraysAreEqual', | ||||
| 		'getMeta', | ||||
| 		'getResource', | ||||
| 		'orphanCheck', | ||||
| 		'sectionsAreEqual', | ||||
| 		'sendEvent', | ||||
| 		'stylishUpdateChrome', | ||||
| 		'stylishInstallChrome' | ||||
| 	].forEach(fn => window[fn] = null); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user