forked from mirrors/gecko-dev
		
	 0a8ff0ad85
			
		
	
	
		0a8ff0ad85
		
	
	
	
	
		
			
			# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D35951 --HG-- extra : source : 62f3501af4bc1c0bd1ee1977a28aee04706a6663
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| // Simple tab wrapper abstracting our messaging mechanism;
 | |
| class KnownTab {
 | |
|   constructor(name, tab) {
 | |
|     this.name = name;
 | |
|     this.tab = tab;
 | |
|   }
 | |
| 
 | |
|   cleanup() {
 | |
|     this.tab = null;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Simple data structure class to help us track opened tabs and their pids.
 | |
| class KnownTabs {
 | |
|   constructor() {
 | |
|     this.byPid = new Map();
 | |
|     this.byName = new Map();
 | |
|   }
 | |
| 
 | |
|   cleanup() {
 | |
|     this.byPid = null;
 | |
|     this.byName = null;
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Open our helper page in a tab in its own content process, asserting that it
 | |
|  * really is in its own process.  We initially load and wait for about:blank to
 | |
|  * load, and only then loadURI to our actual page.  This is to ensure that
 | |
|  * LocalStorageManager has had an opportunity to be created and populate
 | |
|  * mOriginsHavingData.
 | |
|  *
 | |
|  * (nsGlobalWindow will reliably create LocalStorageManager as a side-effect of
 | |
|  * the unconditional call to nsGlobalWindow::PreloadLocalStorage.  This will
 | |
|  * reliably create the StorageDBChild instance, and its corresponding
 | |
|  * StorageDBParent will send the set of origins when it is constructed.)
 | |
|  */
 | |
| async function openTestTabInOwnProcess(helperPageUrl, name, knownTabs) {
 | |
|   let realUrl = helperPageUrl + "?" + encodeURIComponent(name);
 | |
|   // Load and wait for about:blank.
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab({
 | |
|     gBrowser,
 | |
|     opening: "about:blank",
 | |
|     forceNewProcess: true,
 | |
|   });
 | |
|   let pid = tab.linkedBrowser.frameLoader.remoteTab.osPid;
 | |
|   ok(!knownTabs.byName.has(name), "tab needs its own name: " + name);
 | |
|   ok(!knownTabs.byPid.has(pid), "tab needs to be in its own process: " + pid);
 | |
| 
 | |
|   let knownTab = new KnownTab(name, tab);
 | |
|   knownTabs.byPid.set(pid, knownTab);
 | |
|   knownTabs.byName.set(name, knownTab);
 | |
| 
 | |
|   // Now trigger the actual load of our page.
 | |
|   BrowserTestUtils.loadURI(tab.linkedBrowser, realUrl);
 | |
|   await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
 | |
|   is(tab.linkedBrowser.frameLoader.remoteTab.osPid, pid, "still same pid");
 | |
|   return knownTab;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Close all the tabs we opened.
 | |
|  */
 | |
| async function cleanupTabs(knownTabs) {
 | |
|   for (let knownTab of knownTabs.byName.values()) {
 | |
|     BrowserTestUtils.removeTab(knownTab.tab);
 | |
|     knownTab.cleanup();
 | |
|   }
 | |
|   knownTabs.cleanup();
 | |
| }
 |