forked from mirrors/gecko-dev
		
	 1f5a8a1faa
			
		
	
	
		1f5a8a1faa
		
	
	
	
	
		
			
			Depends on D15949 Differential Revision: https://phabricator.services.mozilla.com/D15950 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			245 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 | |
| /* vim: set sts=2 sw=2 et tw=80: */
 | |
| "use strict";
 | |
| 
 | |
| loadTestSubscript("head_pageAction.js");
 | |
| 
 | |
| add_task(async function testTabSwitchContext() {
 | |
|   await runTests({
 | |
|     manifest: {
 | |
|       "name": "Foo Extension",
 | |
| 
 | |
|       "page_action": {
 | |
|         "default_icon": "default.png",
 | |
|         "default_popup": "__MSG_popup__",
 | |
|         "default_title": "Default __MSG_title__ \u263a",
 | |
|       },
 | |
| 
 | |
|       "default_locale": "en",
 | |
| 
 | |
|       "permissions": ["tabs"],
 | |
|     },
 | |
| 
 | |
|     "files": {
 | |
|       "_locales/en/messages.json": {
 | |
|         "popup": {
 | |
|           "message": "default.html",
 | |
|           "description": "Popup",
 | |
|         },
 | |
| 
 | |
|         "title": {
 | |
|           "message": "Title",
 | |
|           "description": "Title",
 | |
|         },
 | |
|       },
 | |
| 
 | |
|       "_locales/es_ES/messages.json": {
 | |
|         "popup": {
 | |
|           "message": "default.html",
 | |
|           "description": "Popup",
 | |
|         },
 | |
| 
 | |
|         "title": {
 | |
|           "message": "T\u00edtulo",
 | |
|           "description": "Title",
 | |
|         },
 | |
|       },
 | |
| 
 | |
|       "default.png": imageBuffer,
 | |
|       "1.png": imageBuffer,
 | |
|       "2.png": imageBuffer,
 | |
|     },
 | |
| 
 | |
|     getTests: function(tabs) {
 | |
|       let details = [
 | |
|         {"icon": browser.runtime.getURL("default.png"),
 | |
|          "popup": browser.runtime.getURL("default.html"),
 | |
|          "title": "Default T\u00edtulo \u263a"},
 | |
|         {"icon": browser.runtime.getURL("1.png"),
 | |
|          "popup": browser.runtime.getURL("default.html"),
 | |
|          "title": "Default T\u00edtulo \u263a"},
 | |
|         {"icon": browser.runtime.getURL("2.png"),
 | |
|          "popup": browser.runtime.getURL("2.html"),
 | |
|          "title": "Title 2"},
 | |
|         {"icon": browser.runtime.getURL("2.png"),
 | |
|          "popup": browser.runtime.getURL("2.html"),
 | |
|          "title": ""},
 | |
|         {"icon": browser.runtime.getURL("2.png"),
 | |
|          "popup": browser.runtime.getURL("2.html"),
 | |
|          "title": "Default T\u00edtulo \u263a"},
 | |
|       ];
 | |
| 
 | |
|       let promiseTabLoad = details => {
 | |
|         return new Promise(resolve => {
 | |
|           browser.tabs.onUpdated.addListener(function listener(tabId, changed) {
 | |
|             if (tabId == details.id && changed.url == details.url) {
 | |
|               browser.tabs.onUpdated.removeListener(listener);
 | |
|               resolve();
 | |
|             }
 | |
|           });
 | |
|         });
 | |
|       };
 | |
|       return [
 | |
|         expect => {
 | |
|           browser.test.log("Initial state. No icon visible.");
 | |
|           expect(null);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Show the icon on the first tab, expect default properties.");
 | |
|           await browser.pageAction.show(tabs[0]);
 | |
|           expect(details[0]);
 | |
|         },
 | |
|         expect => {
 | |
|           browser.test.log("Change the icon. Expect default properties excluding the icon.");
 | |
|           browser.pageAction.setIcon({tabId: tabs[0], path: "1.png"});
 | |
|           expect(details[1]);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Create a new tab. No icon visible.");
 | |
|           let tab = await browser.tabs.create({active: true, url: "about:blank?0"});
 | |
|           tabs.push(tab.id);
 | |
|           expect(null);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Await tab load. No icon visible.");
 | |
|           let promise = promiseTabLoad({id: tabs[1], url: "about:blank?0"});
 | |
|           let {url} = await browser.tabs.get(tabs[1]);
 | |
|           if (url === "about:blank") {
 | |
|             await promise;
 | |
|           }
 | |
|           expect(null);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Change properties. Expect new properties.");
 | |
|           let tabId = tabs[1];
 | |
| 
 | |
|           await browser.pageAction.show(tabId);
 | |
|           browser.pageAction.setIcon({tabId, path: "2.png"});
 | |
|           browser.pageAction.setPopup({tabId, popup: "2.html"});
 | |
|           browser.pageAction.setTitle({tabId, title: "Title 2"});
 | |
| 
 | |
|           expect(details[2]);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Change the hash. Expect same properties.");
 | |
| 
 | |
|           let promise = promiseTabLoad({id: tabs[1], url: "about:blank?0#ref"});
 | |
| 
 | |
|           browser.tabs.update(tabs[1], {url: "about:blank?0#ref"});
 | |
| 
 | |
|           await promise;
 | |
|           expect(details[2]);
 | |
|         },
 | |
|         expect => {
 | |
|           browser.test.log("Set empty title. Expect empty title.");
 | |
|           browser.pageAction.setTitle({tabId: tabs[1], title: ""});
 | |
| 
 | |
|           expect(details[3]);
 | |
|         },
 | |
|         expect => {
 | |
|           browser.test.log("Clear the title. Expect default title.");
 | |
|           browser.pageAction.setTitle({tabId: tabs[1], title: null});
 | |
| 
 | |
|           expect(details[4]);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Navigate to a new page. Expect icon hidden.");
 | |
| 
 | |
|           // TODO: This listener should not be necessary, but the |tabs.update|
 | |
|           // callback currently fires too early in e10s windows.
 | |
|           let promise = promiseTabLoad({id: tabs[1], url: "about:blank?1"});
 | |
| 
 | |
|           browser.tabs.update(tabs[1], {url: "about:blank?1"});
 | |
| 
 | |
|           await promise;
 | |
|           expect(null);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Show the icon. Expect default properties again.");
 | |
|           await browser.pageAction.show(tabs[1]);
 | |
|           expect(details[0]);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Switch back to the first tab. Expect previously set properties.");
 | |
|           await browser.tabs.update(tabs[0], {active: true});
 | |
|           expect(details[1]);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Hide the icon on tab 2. Switch back, expect hidden.");
 | |
|           await browser.pageAction.hide(tabs[1]);
 | |
|           await browser.tabs.update(tabs[1], {active: true});
 | |
|           expect(null);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Switch back to tab 1. Expect previous results again.");
 | |
|           await browser.tabs.remove(tabs[1]);
 | |
|           expect(details[1]);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Hide the icon. Expect hidden.");
 | |
|           await browser.pageAction.hide(tabs[0]);
 | |
|           expect(null);
 | |
|         },
 | |
|       ];
 | |
|     },
 | |
|   });
 | |
| });
 | |
| 
 | |
| add_task(async function testDefaultTitle() {
 | |
|   await runTests({
 | |
|     manifest: {
 | |
|       "name": "Foo Extension",
 | |
| 
 | |
|       "page_action": {
 | |
|         "default_icon": "icon.png",
 | |
|       },
 | |
| 
 | |
|       "permissions": ["tabs"],
 | |
|     },
 | |
| 
 | |
|     files: {
 | |
|       "icon.png": imageBuffer,
 | |
|     },
 | |
| 
 | |
|     getTests: function(tabs) {
 | |
|       let details = [
 | |
|         {"title": "Foo Extension",
 | |
|          "popup": "",
 | |
|          "icon": browser.runtime.getURL("icon.png")},
 | |
|         {"title": "Foo Title",
 | |
|          "popup": "",
 | |
|          "icon": browser.runtime.getURL("icon.png")},
 | |
|         {"title": "",
 | |
|          "popup": "",
 | |
|          "icon": browser.runtime.getURL("icon.png")},
 | |
|       ];
 | |
| 
 | |
|       return [
 | |
|         expect => {
 | |
|           browser.test.log("Initial state. No icon visible.");
 | |
|           expect(null);
 | |
|         },
 | |
|         async expect => {
 | |
|           browser.test.log("Show the icon on the first tab, expect extension title as default title.");
 | |
|           await browser.pageAction.show(tabs[0]);
 | |
|           expect(details[0]);
 | |
|         },
 | |
|         expect => {
 | |
|           browser.test.log("Change the title. Expect new title.");
 | |
|           browser.pageAction.setTitle({tabId: tabs[0], title: "Foo Title"});
 | |
|           expect(details[1]);
 | |
|         },
 | |
|         expect => {
 | |
|           browser.test.log("Set empty title. Expect empty title.");
 | |
|           browser.pageAction.setTitle({tabId: tabs[0], title: ""});
 | |
|           expect(details[2]);
 | |
|         },
 | |
|         expect => {
 | |
|           browser.test.log("Clear the title. Expect extension title.");
 | |
|           browser.pageAction.setTitle({tabId: tabs[0], title: null});
 | |
|           expect(details[0]);
 | |
|         },
 | |
|       ];
 | |
|     },
 | |
|   });
 | |
| });
 |