forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			110 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| const ConsoleAPIStorage = Cc["@mozilla.org/consoleAPI-storage;1"].getService(
 | |
|   Ci.nsIConsoleAPIStorage
 | |
| );
 | |
| 
 | |
| const { WebExtensionPolicy } = Cu.getGlobalForObject(
 | |
|   ChromeUtils.import("resource://gre/modules/Services.jsm", {})
 | |
| );
 | |
| 
 | |
| const FAKE_ADDON_ID = "test-webext-addon@mozilla.org";
 | |
| const EXPECTED_CONSOLE_ID = `addon/${FAKE_ADDON_ID}`;
 | |
| const EXPECTED_CONSOLE_MESSAGE_CONTENT = "fake-webext-addon-test-log-message";
 | |
| const ConsoleObserver = {
 | |
|   QueryInterface: ChromeUtils.generateQI(["nsIObserver"]),
 | |
| 
 | |
|   init() {
 | |
|     Services.obs.addObserver(this, "console-api-log-event");
 | |
|   },
 | |
| 
 | |
|   uninit() {
 | |
|     Services.obs.removeObserver(this, "console-api-log-event");
 | |
|   },
 | |
| 
 | |
|   observe(aSubject, aTopic, aData) {
 | |
|     if (aTopic == "console-api-log-event") {
 | |
|       let consoleAPIMessage = aSubject.wrappedJSObject;
 | |
| 
 | |
|       is(
 | |
|         consoleAPIMessage.arguments[0],
 | |
|         EXPECTED_CONSOLE_MESSAGE_CONTENT,
 | |
|         "the consoleAPIMessage contains the expected message"
 | |
|       );
 | |
| 
 | |
|       is(
 | |
|         consoleAPIMessage.addonId,
 | |
|         FAKE_ADDON_ID,
 | |
|         "the consoleAPImessage originAttributes contains the expected addonId"
 | |
|       );
 | |
| 
 | |
|       let cachedMessages = ConsoleAPIStorage.getEvents().filter(msg => {
 | |
|         return msg.addonId == FAKE_ADDON_ID;
 | |
|       });
 | |
| 
 | |
|       is(
 | |
|         cachedMessages.length,
 | |
|         1,
 | |
|         "found the expected cached console messages from the addon"
 | |
|       );
 | |
|       is(
 | |
|         cachedMessages[0] && cachedMessages[0].addonId,
 | |
|         FAKE_ADDON_ID,
 | |
|         "the cached message originAttributes contains the expected addonId"
 | |
|       );
 | |
| 
 | |
|       finish();
 | |
|     }
 | |
|   },
 | |
| };
 | |
| 
 | |
| function test() {
 | |
|   ConsoleObserver.init();
 | |
| 
 | |
|   waitForExplicitFinish();
 | |
| 
 | |
|   let uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].getService(
 | |
|     Ci.nsIUUIDGenerator
 | |
|   );
 | |
|   let uuid = uuidGenerator.generateUUID().number;
 | |
|   uuid = uuid.slice(1, -1); // Strip { and } off the UUID.
 | |
| 
 | |
|   const url = `moz-extension://${uuid}/`;
 | |
|   let policy = new WebExtensionPolicy({
 | |
|     id: FAKE_ADDON_ID,
 | |
|     mozExtensionHostname: uuid,
 | |
|     baseURL: "file:///",
 | |
|     allowedOrigins: new MatchPatternSet([]),
 | |
|     localizeCallback() {},
 | |
|   });
 | |
|   policy.active = true;
 | |
| 
 | |
|   let baseURI = Services.io.newURI(url);
 | |
|   let principal = Services.scriptSecurityManager.createContentPrincipal(
 | |
|     baseURI,
 | |
|     {}
 | |
|   );
 | |
| 
 | |
|   let chromeWebNav = Services.appShell.createWindowlessBrowser(true);
 | |
|   let docShell = chromeWebNav.docShell;
 | |
|   docShell.createAboutBlankContentViewer(principal, principal);
 | |
| 
 | |
|   info("fake webextension docShell created");
 | |
| 
 | |
|   registerCleanupFunction(function() {
 | |
|     policy.active = false;
 | |
|     if (chromeWebNav) {
 | |
|       chromeWebNav.close();
 | |
|       chromeWebNav = null;
 | |
|     }
 | |
|     ConsoleObserver.uninit();
 | |
|   });
 | |
| 
 | |
|   let window = docShell.contentViewer.DOMDocument.defaultView;
 | |
|   window.eval(`console.log("${EXPECTED_CONSOLE_MESSAGE_CONTENT}");`);
 | |
|   chromeWebNav.close();
 | |
|   chromeWebNav = null;
 | |
| 
 | |
|   info("fake webextension page logged a console api message");
 | |
| }
 | 
