mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
merge fx-team to mozilla-central a=merge
This commit is contained in:
commit
a34e30bba2
@ -187,8 +187,8 @@ toolkit/components/osfile/**
|
||||
toolkit/components/passwordmgr/**
|
||||
|
||||
# Uses preprocessing
|
||||
toolkit/content/contentAreaUtils.js
|
||||
toolkit/content/widgets/videocontrols.xml
|
||||
toolkit/content/widgets/wizard.xml
|
||||
toolkit/components/jsdownloads/src/DownloadIntegration.jsm
|
||||
toolkit/components/search/nsSearchService.js
|
||||
toolkit/components/url-classifier/**
|
||||
|
@ -4,9 +4,7 @@
|
||||
"mozilla"
|
||||
],
|
||||
"rules": {
|
||||
"mozilla/components-imports": 1,
|
||||
"mozilla/import-globals-from": 1,
|
||||
"mozilla/this-top-level-scope": 1,
|
||||
"mozilla/import-globals": 1,
|
||||
},
|
||||
"env": {
|
||||
"es6": true
|
||||
|
@ -47,18 +47,32 @@ function execute (queries, options) {
|
||||
return new Promise(resolve => {
|
||||
let root = historyService
|
||||
.executeQueries(queries, queries.length, options).root;
|
||||
resolve(collect([], root));
|
||||
// Let's extract an eventual uri wildcard, if both domain and uri are set.
|
||||
// See utils.js::urlQueryParser() for more details.
|
||||
// In case of multiple queries, we only retain the first found wildcard.
|
||||
let uriWildcard = queries.reduce((prev, query) => {
|
||||
if (query.uri && query.domain) {
|
||||
if (!prev)
|
||||
prev = query.uri.spec;
|
||||
query.uri = null;
|
||||
}
|
||||
return prev;
|
||||
}, "");
|
||||
resolve(collect([], root, uriWildcard));
|
||||
});
|
||||
}
|
||||
|
||||
function collect (acc, node) {
|
||||
function collect (acc, node, uriWildcard) {
|
||||
node.containerOpen = true;
|
||||
for (let i = 0; i < node.childCount; i++) {
|
||||
let child = node.getChild(i);
|
||||
|
||||
if (!uriWildcard || child.uri.startsWith(uriWildcard)) {
|
||||
acc.push(child);
|
||||
}
|
||||
if (child.type === child.RESULT_TYPE_FOLDER) {
|
||||
let container = child.QueryInterface(Ci.nsINavHistoryContainerResultNode);
|
||||
collect(acc, container);
|
||||
collect(acc, container, uriWildcard);
|
||||
}
|
||||
}
|
||||
node.containerOpen = false;
|
||||
|
@ -12,7 +12,7 @@ module.metadata = {
|
||||
}
|
||||
};
|
||||
|
||||
const { Cc, Ci } = require('chrome');
|
||||
const { Cc, Ci, Cu } = require('chrome');
|
||||
const { Class } = require('../core/heritage');
|
||||
const { method } = require('../lang/functional');
|
||||
const { defer, promised, all } = require('../core/promise');
|
||||
@ -22,6 +22,8 @@ const { merge } = require('../util/object');
|
||||
const bmsrv = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
|
||||
getService(Ci.nsINavBookmarksService);
|
||||
|
||||
Cu.importGlobalProperties(["URL"]);
|
||||
|
||||
/*
|
||||
* TreeNodes are used to construct dependency trees
|
||||
* for BookmarkItems
|
||||
@ -128,9 +130,9 @@ exports.isRootGroup = isRootGroup;
|
||||
* --> 'http://moz.com', 'http://moz.com/thunderbird'
|
||||
* '*.moz.com' // domain: moz.com, domainIsHost: false
|
||||
* --> 'http://moz.com', 'http://moz.com/index', 'http://ff.moz.com/test'
|
||||
* 'http://moz.com' // url: http://moz.com/, urlIsPrefix: false
|
||||
* 'http://moz.com' // uri: http://moz.com/
|
||||
* --> 'http://moz.com/'
|
||||
* 'http://moz.com/*' // url: http://moz.com/, urlIsPrefix: true
|
||||
* 'http://moz.com/*' // uri: http://moz.com/, domain: moz.com, domainIsHost: true
|
||||
* --> 'http://moz.com/', 'http://moz.com/thunderbird'
|
||||
*/
|
||||
|
||||
@ -139,8 +141,21 @@ function urlQueryParser (query, url) {
|
||||
if (/^https?:\/\//.test(url)) {
|
||||
query.uri = url.charAt(url.length - 1) === '/' ? url : url + '/';
|
||||
if (/\*$/.test(url)) {
|
||||
query.uri = url.replace(/\*$/, '');
|
||||
query.uriIsPrefix = true;
|
||||
// Wildcard searches on URIs are not supported, so try to extract a
|
||||
// domain and filter the data later.
|
||||
url = url.replace(/\*$/, '');
|
||||
try {
|
||||
query.domain = new URL(url).hostname;
|
||||
query.domainIsHost = true;
|
||||
// Unfortunately here we cannot use an expando to store the wildcard,
|
||||
// cause the query is a wrapped native XPCOM object, so we reuse uri.
|
||||
// We clearly don't want to query for both uri and domain, thus we'll
|
||||
// have to handle this in host-query.js::execute()
|
||||
query.uri = url;
|
||||
} catch (ex) {
|
||||
// Cannot extract an host cause it's not a valid uri, the query will
|
||||
// just return nothing.
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (/^\*/.test(url)) {
|
||||
|
@ -453,8 +453,8 @@
|
||||
key="bookmarkAllTabsKb"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&recentBookmarks.label;"
|
||||
id="menu_recentBookmarks"
|
||||
disabled="true"/>
|
||||
<vbox id="menu_recentBookmarks"/>
|
||||
<menuseparator id="bookmarksToolbarSeparator"/>
|
||||
<menu id="bookmarksToolbarFolderMenu"
|
||||
class="menu-iconic bookmark-item"
|
||||
|
@ -1341,7 +1341,7 @@ var BookmarkingUI = {
|
||||
});
|
||||
},
|
||||
|
||||
_updateRecentBookmarks: function(container, extraCSSClass = "") {
|
||||
_updateRecentBookmarks: function(aHeaderItem, extraCSSClass = "") {
|
||||
const kMaxResults = 5;
|
||||
|
||||
let options = PlacesUtils.history.getNewQueryOptions();
|
||||
@ -1351,8 +1351,9 @@ var BookmarkingUI = {
|
||||
options.maxResults = kMaxResults;
|
||||
let query = PlacesUtils.history.getNewQuery();
|
||||
|
||||
while (container.firstChild) {
|
||||
container.firstChild.remove();
|
||||
while (aHeaderItem.nextSibling &&
|
||||
aHeaderItem.nextSibling.localName == "menuitem") {
|
||||
aHeaderItem.nextSibling.remove();
|
||||
}
|
||||
|
||||
PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
|
||||
@ -1385,7 +1386,7 @@ var BookmarkingUI = {
|
||||
}
|
||||
fragment.appendChild(item);
|
||||
}
|
||||
container.appendChild(fragment);
|
||||
aHeaderItem.parentNode.insertBefore(fragment, aHeaderItem.nextSibling);
|
||||
},
|
||||
handleError: function (aError) {
|
||||
Cu.reportError("Error while attempting to show recent bookmarks: " + aError);
|
||||
|
@ -83,6 +83,7 @@ if (AppConstants.platform != "macosx") {
|
||||
var gEditUIVisible = true;
|
||||
}
|
||||
|
||||
/*globals gBrowser, gNavToolbox, gURLBar, gNavigatorBundle*/
|
||||
[
|
||||
["gBrowser", "content"],
|
||||
["gNavToolbox", "navigator-toolbox"],
|
||||
@ -157,9 +158,9 @@ XPCOMUtils.defineLazyGetter(this, "PopupNotifications", function () {
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "DeveloperToolbar", function() {
|
||||
let tmp = {};
|
||||
Cu.import("resource://devtools/client/shared/DeveloperToolbar.jsm", tmp);
|
||||
return new tmp.DeveloperToolbar(window, document.getElementById("developer-toolbar"));
|
||||
let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
let { DeveloperToolbar } = require("devtools/client/shared/developer-toolbar");
|
||||
return new DeveloperToolbar(window, document.getElementById("developer-toolbar"));
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "BrowserToolboxProcess", function() {
|
||||
|
@ -813,9 +813,9 @@
|
||||
key="manBookmarkKb"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&recentBookmarks.label;"
|
||||
id="BMB_recentBookmarks"
|
||||
disabled="true"
|
||||
class="subviewbutton"/>
|
||||
<vbox id="BMB_recentBookmarks"/>
|
||||
<menuseparator/>
|
||||
<menu id="BMB_bookmarksToolbar"
|
||||
class="menu-iconic bookmark-item subviewbutton"
|
||||
|
@ -1863,8 +1863,7 @@
|
||||
}, 0, this.tabContainer);
|
||||
}
|
||||
|
||||
// invalidate caches
|
||||
this._browsers = null;
|
||||
// invalidate cache
|
||||
this._visibleTabs = null;
|
||||
|
||||
this.tabContainer.appendChild(t);
|
||||
@ -2379,10 +2378,6 @@
|
||||
|
||||
var wasPinned = aTab.pinned;
|
||||
|
||||
// Invalidate browsers cache, as the tab is removed from the
|
||||
// tab container.
|
||||
this._browsers = null;
|
||||
|
||||
// Remove the tab ...
|
||||
this.tabContainer.removeChild(aTab);
|
||||
|
||||
@ -2860,15 +2855,32 @@
|
||||
onget="return this.mCurrentBrowser;"
|
||||
readonly="true"/>
|
||||
|
||||
<property name="browsers" readonly="true">
|
||||
<getter>
|
||||
<field name="browsers" readonly="true">
|
||||
<![CDATA[
|
||||
return this._browsers ||
|
||||
(this._browsers = Array.map(this.tabs, tab => tab.linkedBrowser));
|
||||
// This defines a proxy which allows us to access browsers by
|
||||
// index without actually creating a full array of browsers.
|
||||
new Proxy([], {
|
||||
has: (target, name) => {
|
||||
if (typeof name == "string" && Number.isInteger(parseInt(name))) {
|
||||
return (name in this.tabs);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
get: (target, name) => {
|
||||
if (name == "length") {
|
||||
return this.tabs.length;
|
||||
}
|
||||
if (typeof name == "string" && Number.isInteger(parseInt(name))) {
|
||||
if (!(name in this.tabs)) {
|
||||
return undefined;
|
||||
}
|
||||
return this.tabs[name].linkedBrowser;
|
||||
}
|
||||
return target[name];
|
||||
}
|
||||
});
|
||||
]]>
|
||||
</getter>
|
||||
</property>
|
||||
<field name="_browsers">null</field>
|
||||
</field>
|
||||
|
||||
<!-- Moves a tab to a new browser window, unless it's already the only tab
|
||||
in the current window, in which case this will do nothing. -->
|
||||
@ -2929,8 +2941,7 @@
|
||||
this.mCurrentTab._logicallySelected = false;
|
||||
this.mCurrentTab._visuallySelected = false;
|
||||
|
||||
// invalidate caches
|
||||
this._browsers = null;
|
||||
// invalidate cache
|
||||
this._visibleTabs = null;
|
||||
|
||||
// use .item() instead of [] because dragging to the end of the strip goes out of
|
||||
|
@ -136,7 +136,6 @@ skip-if = e10s # Bug 1093153 - no about:home support yet
|
||||
[browser_action_searchengine_alias.js]
|
||||
[browser_addKeywordSearch.js]
|
||||
[browser_search_favicon.js]
|
||||
skip-if = e10s # Bug 1212647
|
||||
[browser_alltabslistener.js]
|
||||
[browser_audioTabIcon.js]
|
||||
[browser_autocomplete_a11y_label.js]
|
||||
@ -290,8 +289,6 @@ skip-if = os == 'win' || e10s # Bug 1159268 - Need a content-process safe versio
|
||||
skip-if = e10s # Bug 1094510 - test hits the network in e10s mode only
|
||||
[browser_clipboard.js]
|
||||
[browser_contentAreaClick.js]
|
||||
[browser_contextSearchTabPosition.js]
|
||||
skip-if = os == "mac" || e10s # bug 967013; e10s: bug 1094761 - test hits the network in e10s, causing next test to crash
|
||||
[browser_ctrlTab.js]
|
||||
[browser_datachoices_notification.js]
|
||||
skip-if = !datareporting
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
"use strict";
|
||||
|
||||
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/PlacesUtils.jsm");
|
||||
var Bookmarks = PlacesUtils.bookmarks;
|
||||
@ -111,7 +111,9 @@ extensions.registerSchemaAPI("bookmarks", "bookmarks", (extension, context) => {
|
||||
return getTree(id, false);
|
||||
},
|
||||
|
||||
// search
|
||||
search: function(query) {
|
||||
return Bookmarks.search(query).then(result => result.map(convert));
|
||||
},
|
||||
|
||||
create: function(bookmark) {
|
||||
let info = {
|
||||
@ -139,7 +141,7 @@ extensions.registerSchemaAPI("bookmarks", "bookmarks", (extension, context) => {
|
||||
try {
|
||||
return Bookmarks.insert(info).then(convert);
|
||||
} catch (e) {
|
||||
return Promise.reject({ message: `Invalid bookmark: ${JSON.stringify(info)}` });
|
||||
return Promise.reject({message: `Invalid bookmark: ${JSON.stringify(info)}`});
|
||||
}
|
||||
},
|
||||
|
||||
@ -158,7 +160,7 @@ extensions.registerSchemaAPI("bookmarks", "bookmarks", (extension, context) => {
|
||||
try {
|
||||
return Bookmarks.update(info).then(convert);
|
||||
} catch (e) {
|
||||
return Promise.reject({ message: `Invalid bookmark: ${JSON.stringify(info)}` });
|
||||
return Promise.reject({message: `Invalid bookmark: ${JSON.stringify(info)}`});
|
||||
}
|
||||
},
|
||||
|
||||
@ -177,7 +179,7 @@ extensions.registerSchemaAPI("bookmarks", "bookmarks", (extension, context) => {
|
||||
try {
|
||||
return Bookmarks.update(info).then(convert);
|
||||
} catch (e) {
|
||||
return Promise.reject({ message: `Invalid bookmark: ${JSON.stringify(info)}` });
|
||||
return Promise.reject({message: `Invalid bookmark: ${JSON.stringify(info)}`});
|
||||
}
|
||||
},
|
||||
|
||||
@ -190,7 +192,7 @@ extensions.registerSchemaAPI("bookmarks", "bookmarks", (extension, context) => {
|
||||
try {
|
||||
return Bookmarks.remove(info).then(result => {});
|
||||
} catch (e) {
|
||||
return Promise.reject({ message: `Invalid bookmark: ${JSON.stringify(info)}` });
|
||||
return Promise.reject({message: `Invalid bookmark: ${JSON.stringify(info)}`});
|
||||
}
|
||||
},
|
||||
},
|
||||
|
@ -44,7 +44,7 @@ function BrowserAction(options, extension) {
|
||||
title: title || extension.name,
|
||||
badgeText: "",
|
||||
badgeBackgroundColor: null,
|
||||
icon: IconDetails.normalize({ path: options.default_icon }, extension,
|
||||
icon: IconDetails.normalize({path: options.default_icon}, extension,
|
||||
null, true),
|
||||
popup: popup,
|
||||
};
|
||||
|
@ -310,7 +310,7 @@ MenuItem.prototype = {
|
||||
let extension = this.extension;
|
||||
if (!rootItems.has(extension)) {
|
||||
let root = new MenuItem(extension, this.context,
|
||||
{ title: extension.name },
|
||||
{title: extension.name},
|
||||
/* isRoot = */ true);
|
||||
rootItems.set(extension, root);
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
extensions.on("uninstall", (msg, extension) => {
|
||||
if (extension.uninstallURL) {
|
||||
let browser = Services.wm.getMostRecentWindow("navigator:browser").gBrowser;
|
||||
browser.addTab(extension.uninstallURL, { relatedToCurrent: true });
|
||||
browser.addTab(extension.uninstallURL, {relatedToCurrent: true});
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -28,7 +28,7 @@ function PageAction(options, extension) {
|
||||
this.defaults = {
|
||||
show: false,
|
||||
title: title || extension.name,
|
||||
icon: IconDetails.normalize({ path: options.default_icon }, extension,
|
||||
icon: IconDetails.normalize({path: options.default_icon}, extension,
|
||||
null, true),
|
||||
popup: popup && extension.baseURI.resolve(popup),
|
||||
};
|
||||
|
@ -465,7 +465,7 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => {
|
||||
|
||||
captureVisibleTab: function(windowId, options) {
|
||||
if (!extension.hasPermission("<all_urls>")) {
|
||||
return Promise.reject({ message: "The <all_urls> permission is required to use the captureVisibleTab API" });
|
||||
return Promise.reject({message: "The <all_urls> permission is required to use the captureVisibleTab API"});
|
||||
}
|
||||
|
||||
let window = windowId == null ?
|
||||
@ -524,7 +524,7 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => {
|
||||
if (details.file !== null) {
|
||||
let url = context.uri.resolve(details.file);
|
||||
if (!extension.isExtensionURL(url)) {
|
||||
return Promise.reject({ message: "Files to be injected must be within the extension" });
|
||||
return Promise.reject({message: "Files to be injected must be within the extension"});
|
||||
}
|
||||
options[kind].push(url);
|
||||
}
|
||||
@ -538,7 +538,7 @@ extensions.registerSchemaAPI("tabs", null, (extension, context) => {
|
||||
options.run_at = details.runAt;
|
||||
}
|
||||
|
||||
return context.sendMessage(mm, "Extension:Execute", { options }, recipient);
|
||||
return context.sendMessage(mm, "Extension:Execute", {options}, recipient);
|
||||
},
|
||||
|
||||
executeScript: function(tabId, details) {
|
||||
|
@ -235,7 +235,7 @@ class BasePopup {
|
||||
};
|
||||
this.browser.addEventListener("load", loadListener, true);
|
||||
}).then(() => {
|
||||
let { contentWindow } = this.browser;
|
||||
let {contentWindow} = this.browser;
|
||||
|
||||
contentWindow.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils)
|
||||
@ -423,7 +423,7 @@ ExtensionTabManager.prototype = {
|
||||
convert(tab) {
|
||||
let window = tab.ownerDocument.defaultView;
|
||||
|
||||
let mutedInfo = { muted: tab.muted };
|
||||
let mutedInfo = {muted: tab.muted};
|
||||
if (tab.muteReason === null) {
|
||||
mutedInfo.reason = "user";
|
||||
} else if (tab.muteReason) {
|
||||
|
@ -234,7 +234,6 @@
|
||||
},
|
||||
{
|
||||
"name": "search",
|
||||
"unsupported": true,
|
||||
"type": "function",
|
||||
"description": "Searches for BookmarkTreeNodes matching the given query. Queries specified with an object produce BookmarkTreeNodes matching all specified properties.",
|
||||
"async": "callback",
|
||||
@ -258,6 +257,7 @@
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"optional": true,
|
||||
"description": "The URL of the bookmark; matches verbatim. Note that folders have no URL."
|
||||
},
|
||||
|
@ -13,10 +13,10 @@ function* runTests(options) {
|
||||
browser.browserAction.getBadgeText({tabId}),
|
||||
browser.browserAction.getBadgeBackgroundColor({tabId})]
|
||||
).then(details => {
|
||||
return Promise.resolve({ title: details[0],
|
||||
return Promise.resolve({title: details[0],
|
||||
popup: details[1],
|
||||
badge: details[2],
|
||||
badgeBackgroundColor: details[3] });
|
||||
badgeBackgroundColor: details[3]});
|
||||
});
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ function* runTests(options) {
|
||||
// Check that the API returns the expected values, and then
|
||||
// run the next test.
|
||||
new Promise(resolve => {
|
||||
return browser.tabs.query({ active: true, currentWindow: true }, resolve);
|
||||
return browser.tabs.query({active: true, currentWindow: true}, resolve);
|
||||
}).then(tabs => {
|
||||
return checkDetails(expecting, tabs[0].id);
|
||||
}).then(() => {
|
||||
@ -72,7 +72,7 @@ function* runTests(options) {
|
||||
nextTest();
|
||||
});
|
||||
|
||||
browser.tabs.query({ active: true, currentWindow: true }, resultTabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, resultTabs => {
|
||||
tabs[0] = resultTabs[0].id;
|
||||
|
||||
nextTest();
|
||||
@ -148,39 +148,39 @@ add_task(function* testTabSwitchContext() {
|
||||
|
||||
getTests(tabs, expectDefaults) {
|
||||
let details = [
|
||||
{ "icon": browser.runtime.getURL("default.png"),
|
||||
{"icon": browser.runtime.getURL("default.png"),
|
||||
"popup": browser.runtime.getURL("default.html"),
|
||||
"title": "Default Title",
|
||||
"badge": "",
|
||||
"badgeBackgroundColor": null },
|
||||
{ "icon": browser.runtime.getURL("1.png"),
|
||||
"badgeBackgroundColor": null},
|
||||
{"icon": browser.runtime.getURL("1.png"),
|
||||
"popup": browser.runtime.getURL("default.html"),
|
||||
"title": "Default Title",
|
||||
"badge": "",
|
||||
"badgeBackgroundColor": null },
|
||||
{ "icon": browser.runtime.getURL("2.png"),
|
||||
"badgeBackgroundColor": null},
|
||||
{"icon": browser.runtime.getURL("2.png"),
|
||||
"popup": browser.runtime.getURL("2.html"),
|
||||
"title": "Title 2",
|
||||
"badge": "2",
|
||||
"badgeBackgroundColor": [0xff, 0, 0, 0xff],
|
||||
"disabled": true },
|
||||
{ "icon": browser.runtime.getURL("1.png"),
|
||||
"disabled": true},
|
||||
{"icon": browser.runtime.getURL("1.png"),
|
||||
"popup": browser.runtime.getURL("default-2.html"),
|
||||
"title": "Default Title 2",
|
||||
"badge": "d2",
|
||||
"badgeBackgroundColor": [0, 0xff, 0, 0xff],
|
||||
"disabled": true },
|
||||
{ "icon": browser.runtime.getURL("1.png"),
|
||||
"disabled": true},
|
||||
{"icon": browser.runtime.getURL("1.png"),
|
||||
"popup": browser.runtime.getURL("default-2.html"),
|
||||
"title": "Default Title 2",
|
||||
"badge": "d2",
|
||||
"badgeBackgroundColor": [0, 0xff, 0, 0xff],
|
||||
"disabled": false },
|
||||
{ "icon": browser.runtime.getURL("default-2.png"),
|
||||
"disabled": false},
|
||||
{"icon": browser.runtime.getURL("default-2.png"),
|
||||
"popup": browser.runtime.getURL("default-2.html"),
|
||||
"title": "Default Title 2",
|
||||
"badge": "d2",
|
||||
"badgeBackgroundColor": [0, 0xff, 0, 0xff] },
|
||||
"badgeBackgroundColor": [0, 0xff, 0, 0xff]},
|
||||
];
|
||||
|
||||
return [
|
||||
@ -192,14 +192,14 @@ add_task(function* testTabSwitchContext() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Change the icon in the current tab. Expect default properties excluding the icon.");
|
||||
browser.browserAction.setIcon({ tabId: tabs[0], path: "1.png" });
|
||||
browser.browserAction.setIcon({tabId: tabs[0], path: "1.png"});
|
||||
expectDefaults(details[0]).then(() => {
|
||||
expect(details[1]);
|
||||
});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Create a new tab. Expect default properties.");
|
||||
browser.tabs.create({ active: true, url: "about:blank?0" }, tab => {
|
||||
browser.tabs.create({active: true, url: "about:blank?0"}, tab => {
|
||||
tabs.push(tab.id);
|
||||
expectDefaults(details[0]).then(() => {
|
||||
expect(details[0]);
|
||||
@ -209,11 +209,11 @@ add_task(function* testTabSwitchContext() {
|
||||
expect => {
|
||||
browser.test.log("Change properties. Expect new properties.");
|
||||
let tabId = tabs[1];
|
||||
browser.browserAction.setIcon({ tabId, path: "2.png" });
|
||||
browser.browserAction.setPopup({ tabId, popup: "2.html" });
|
||||
browser.browserAction.setTitle({ tabId, title: "Title 2" });
|
||||
browser.browserAction.setBadgeText({ tabId, text: "2" });
|
||||
browser.browserAction.setBadgeBackgroundColor({ tabId, color: [0xff, 0, 0, 0xff] });
|
||||
browser.browserAction.setIcon({tabId, path: "2.png"});
|
||||
browser.browserAction.setPopup({tabId, popup: "2.html"});
|
||||
browser.browserAction.setTitle({tabId, title: "Title 2"});
|
||||
browser.browserAction.setBadgeText({tabId, text: "2"});
|
||||
browser.browserAction.setBadgeBackgroundColor({tabId, color: [0xff, 0, 0, 0xff]});
|
||||
browser.browserAction.disable(tabId);
|
||||
|
||||
expectDefaults(details[0]).then(() => {
|
||||
@ -232,21 +232,21 @@ add_task(function* testTabSwitchContext() {
|
||||
}
|
||||
});
|
||||
|
||||
browser.tabs.update(tabs[1], { url: "about:blank?1" });
|
||||
browser.tabs.update(tabs[1], {url: "about:blank?1"});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Switch back to the first tab. Expect previously set properties.");
|
||||
browser.tabs.update(tabs[0], { active: true }, () => {
|
||||
browser.tabs.update(tabs[0], {active: true}, () => {
|
||||
expect(details[1]);
|
||||
});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Change default values, expect those changes reflected.");
|
||||
browser.browserAction.setIcon({ path: "default-2.png" });
|
||||
browser.browserAction.setPopup({ popup: "default-2.html" });
|
||||
browser.browserAction.setTitle({ title: "Default Title 2" });
|
||||
browser.browserAction.setBadgeText({ text: "d2" });
|
||||
browser.browserAction.setBadgeBackgroundColor({ color: [0, 0xff, 0, 0xff] });
|
||||
browser.browserAction.setIcon({path: "default-2.png"});
|
||||
browser.browserAction.setPopup({popup: "default-2.html"});
|
||||
browser.browserAction.setTitle({title: "Default Title 2"});
|
||||
browser.browserAction.setBadgeText({text: "d2"});
|
||||
browser.browserAction.setBadgeBackgroundColor({color: [0, 0xff, 0, 0xff]});
|
||||
browser.browserAction.disable();
|
||||
expectDefaults(details[3]).then(() => {
|
||||
expect(details[3]);
|
||||
@ -261,7 +261,7 @@ add_task(function* testTabSwitchContext() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Switch back to tab 2. Expect former value, unaffected by changes to defaults in previous step.");
|
||||
browser.tabs.update(tabs[1], { active: true }, () => {
|
||||
browser.tabs.update(tabs[1], {active: true}, () => {
|
||||
expectDefaults(details[3]).then(() => {
|
||||
expect(details[2]);
|
||||
});
|
||||
@ -275,7 +275,7 @@ add_task(function* testTabSwitchContext() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Create a new tab. Expect new default properties.");
|
||||
browser.tabs.create({ active: true, url: "about:blank?2" }, tab => {
|
||||
browser.tabs.create({active: true, url: "about:blank?2"}, tab => {
|
||||
tabs.push(tab.id);
|
||||
expect(details[5]);
|
||||
});
|
||||
@ -305,26 +305,26 @@ add_task(function* testDefaultTitle() {
|
||||
|
||||
getTests(tabs, expectDefaults) {
|
||||
let details = [
|
||||
{ "title": "Foo Extension",
|
||||
{"title": "Foo Extension",
|
||||
"popup": "",
|
||||
"badge": "",
|
||||
"badgeBackgroundColor": null,
|
||||
"icon": browser.runtime.getURL("icon.png") },
|
||||
{ "title": "Foo Title",
|
||||
"icon": browser.runtime.getURL("icon.png")},
|
||||
{"title": "Foo Title",
|
||||
"popup": "",
|
||||
"badge": "",
|
||||
"badgeBackgroundColor": null,
|
||||
"icon": browser.runtime.getURL("icon.png") },
|
||||
{ "title": "Bar Title",
|
||||
"icon": browser.runtime.getURL("icon.png")},
|
||||
{"title": "Bar Title",
|
||||
"popup": "",
|
||||
"badge": "",
|
||||
"badgeBackgroundColor": null,
|
||||
"icon": browser.runtime.getURL("icon.png") },
|
||||
{ "title": "",
|
||||
"icon": browser.runtime.getURL("icon.png")},
|
||||
{"title": "",
|
||||
"popup": "",
|
||||
"badge": "",
|
||||
"badgeBackgroundColor": null,
|
||||
"icon": browser.runtime.getURL("icon.png") },
|
||||
"icon": browser.runtime.getURL("icon.png")},
|
||||
];
|
||||
|
||||
return [
|
||||
@ -336,28 +336,28 @@ add_task(function* testDefaultTitle() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Change the title. Expect new title.");
|
||||
browser.browserAction.setTitle({ tabId: tabs[0], title: "Foo Title" });
|
||||
browser.browserAction.setTitle({tabId: tabs[0], title: "Foo Title"});
|
||||
expectDefaults(details[0]).then(() => {
|
||||
expect(details[1]);
|
||||
});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Change the default. Expect same properties.");
|
||||
browser.browserAction.setTitle({ title: "Bar Title" });
|
||||
browser.browserAction.setTitle({title: "Bar Title"});
|
||||
expectDefaults(details[2]).then(() => {
|
||||
expect(details[1]);
|
||||
});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Clear the title. Expect new default title.");
|
||||
browser.browserAction.setTitle({ tabId: tabs[0], title: "" });
|
||||
browser.browserAction.setTitle({tabId: tabs[0], title: ""});
|
||||
expectDefaults(details[2]).then(() => {
|
||||
expect(details[2]);
|
||||
});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Set default title to null string. Expect null string from API, extension title in UI.");
|
||||
browser.browserAction.setTitle({ title: "" });
|
||||
browser.browserAction.setTitle({title: ""});
|
||||
expectDefaults(details[3]).then(() => {
|
||||
expect(details[3]);
|
||||
});
|
||||
|
@ -31,100 +31,100 @@ add_task(function* testDetailsObjects() {
|
||||
/* eslint-disable comma-dangle, indent */
|
||||
let iconDetails = [
|
||||
// Only paths.
|
||||
{ details: { "path": "a.png" },
|
||||
{details: {"path": "a.png"},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": browser.runtime.getURL("data/a.png"), } },
|
||||
{ details: { "path": "/a.png" },
|
||||
"2": browser.runtime.getURL("data/a.png")}},
|
||||
{details: {"path": "/a.png"},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("a.png"),
|
||||
"2": browser.runtime.getURL("a.png"), } },
|
||||
{ details: { "path": { "19": "a.png" } },
|
||||
"2": browser.runtime.getURL("a.png")}},
|
||||
{details: {"path": {"19": "a.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": browser.runtime.getURL("data/a.png"), } },
|
||||
{ details: { "path": { "38": "a.png" } },
|
||||
"2": browser.runtime.getURL("data/a.png")}},
|
||||
{details: {"path": {"38": "a.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": browser.runtime.getURL("data/a.png"), } },
|
||||
{ details: { "path": { "19": "a.png", "38": "a-x2.png" } },
|
||||
"2": browser.runtime.getURL("data/a.png")}},
|
||||
{details: {"path": {"19": "a.png", "38": "a-x2.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": browser.runtime.getURL("data/a-x2.png"), } },
|
||||
"2": browser.runtime.getURL("data/a-x2.png")}},
|
||||
|
||||
// Only ImageData objects.
|
||||
{ details: { "imageData": imageData.red.imageData },
|
||||
{details: {"imageData": imageData.red.imageData},
|
||||
resolutions: {
|
||||
"1": imageData.red.url,
|
||||
"2": imageData.red.url, } },
|
||||
{ details: { "imageData": { "19": imageData.red.imageData } },
|
||||
"2": imageData.red.url}},
|
||||
{details: {"imageData": {"19": imageData.red.imageData}},
|
||||
resolutions: {
|
||||
"1": imageData.red.url,
|
||||
"2": imageData.red.url, } },
|
||||
{ details: { "imageData": { "38": imageData.red.imageData } },
|
||||
"2": imageData.red.url}},
|
||||
{details: {"imageData": {"38": imageData.red.imageData}},
|
||||
resolutions: {
|
||||
"1": imageData.red.url,
|
||||
"2": imageData.red.url, } },
|
||||
{ details: { "imageData": {
|
||||
"2": imageData.red.url}},
|
||||
{details: {"imageData": {
|
||||
"19": imageData.red.imageData,
|
||||
"38": imageData.green.imageData } },
|
||||
"38": imageData.green.imageData}},
|
||||
resolutions: {
|
||||
"1": imageData.red.url,
|
||||
"2": imageData.green.url, } },
|
||||
"2": imageData.green.url}},
|
||||
|
||||
// Mixed path and imageData objects.
|
||||
//
|
||||
// The behavior is currently undefined if both |path| and
|
||||
// |imageData| specify icons of the same size.
|
||||
{ details: {
|
||||
"path": { "19": "a.png" },
|
||||
"imageData": { "38": imageData.red.imageData } },
|
||||
{details: {
|
||||
"path": {"19": "a.png"},
|
||||
"imageData": {"38": imageData.red.imageData}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": imageData.red.url, } },
|
||||
{ details: {
|
||||
"path": { "38": "a.png" },
|
||||
"imageData": { "19": imageData.red.imageData } },
|
||||
"2": imageData.red.url}},
|
||||
{details: {
|
||||
"path": {"38": "a.png"},
|
||||
"imageData": {"19": imageData.red.imageData}},
|
||||
resolutions: {
|
||||
"1": imageData.red.url,
|
||||
"2": browser.runtime.getURL("data/a.png"), } },
|
||||
"2": browser.runtime.getURL("data/a.png")}},
|
||||
|
||||
// A path or ImageData object by itself is treated as a 19px icon.
|
||||
{ details: {
|
||||
{details: {
|
||||
"path": "a.png",
|
||||
"imageData": { "38": imageData.red.imageData } },
|
||||
"imageData": {"38": imageData.red.imageData}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": imageData.red.url, } },
|
||||
{ details: {
|
||||
"path": { "38": "a.png" },
|
||||
"imageData": imageData.red.imageData, },
|
||||
"2": imageData.red.url}},
|
||||
{details: {
|
||||
"path": {"38": "a.png"},
|
||||
"imageData": imageData.red.imageData},
|
||||
resolutions: {
|
||||
"1": imageData.red.url,
|
||||
"2": browser.runtime.getURL("data/a.png"), } },
|
||||
"2": browser.runtime.getURL("data/a.png")}},
|
||||
|
||||
// Various resolutions
|
||||
{ details: { "path": { "18": "a.png", "32": "a-x2.png" } },
|
||||
{details: {"path": {"18": "a.png", "32": "a-x2.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/a.png"),
|
||||
"2": browser.runtime.getURL("data/a-x2.png"), } },
|
||||
{ details: { "path": { "16": "16.png", "100": "100.png" } },
|
||||
"2": browser.runtime.getURL("data/a-x2.png")}},
|
||||
{details: {"path": {"16": "16.png", "100": "100.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/100.png"),
|
||||
"2": browser.runtime.getURL("data/100.png"), } },
|
||||
{ details: { "path": { "2": "2.png"} },
|
||||
"2": browser.runtime.getURL("data/100.png")}},
|
||||
{details: {"path": {"2": "2.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/2.png"),
|
||||
"2": browser.runtime.getURL("data/2.png"), } },
|
||||
{ details: { "path": {
|
||||
"2": browser.runtime.getURL("data/2.png")}},
|
||||
{details: {"path": {
|
||||
"6": "6.png",
|
||||
"18": "18.png",
|
||||
"32": "32.png",
|
||||
"48": "48.png",
|
||||
"128": "128.png" } },
|
||||
"128": "128.png"}},
|
||||
resolutions: {
|
||||
"1": browser.runtime.getURL("data/18.png"),
|
||||
"2": browser.runtime.getURL("data/48.png"), } },
|
||||
"2": browser.runtime.getURL("data/48.png")}},
|
||||
];
|
||||
|
||||
// Allow serializing ImageData objects for logging.
|
||||
@ -162,7 +162,7 @@ add_task(function* testDetailsObjects() {
|
||||
let tests = [];
|
||||
for (let [idx, icon] of iconDetails.entries()) {
|
||||
for (let res of Object.keys(icon.resolutions)) {
|
||||
tests.push({ index: idx, resolution: Number(res) });
|
||||
tests.push({index: idx, resolution: Number(res)});
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,7 +170,7 @@ add_task(function* testDetailsObjects() {
|
||||
// between each test.
|
||||
tests.sort(test => test.resolution);
|
||||
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
tabId = tabs[0].id;
|
||||
browser.pageAction.show(tabId);
|
||||
|
||||
@ -230,7 +230,7 @@ add_task(function* testInvalidIconSizes() {
|
||||
},
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
let tabId = tabs[0].id;
|
||||
|
||||
let promises = [];
|
||||
@ -255,16 +255,16 @@ add_task(function* testInvalidIconSizes() {
|
||||
for (let type of ["path", "imageData"]) {
|
||||
let img = type == "imageData" ? imageData : "test.png";
|
||||
|
||||
assertSetIconThrows({ [type]: { "abcdef": img } });
|
||||
assertSetIconThrows({ [type]: { "48px": img } });
|
||||
assertSetIconThrows({ [type]: { "20.5": img } });
|
||||
assertSetIconThrows({ [type]: { "5.0": img } });
|
||||
assertSetIconThrows({ [type]: { "-300": img } });
|
||||
assertSetIconThrows({ [type]: { "abc": img, "5": img }});
|
||||
assertSetIconThrows({[type]: {"abcdef": img}});
|
||||
assertSetIconThrows({[type]: {"48px": img}});
|
||||
assertSetIconThrows({[type]: {"20.5": img}});
|
||||
assertSetIconThrows({[type]: {"5.0": img}});
|
||||
assertSetIconThrows({[type]: {"-300": img}});
|
||||
assertSetIconThrows({[type]: {"abc": img, "5": img}});
|
||||
}
|
||||
|
||||
assertSetIconThrows({ imageData: { "abcdef": imageData }, path: {"5": "test.png"} });
|
||||
assertSetIconThrows({ path: { "abcdef": "test.png" }, imageData: {"5": imageData} });
|
||||
assertSetIconThrows({imageData: {"abcdef": imageData}, path: {"5": "test.png"}});
|
||||
assertSetIconThrows({path: {"abcdef": "test.png"}, imageData: {"5": imageData}});
|
||||
}
|
||||
|
||||
Promise.all(promises).then(() => {
|
||||
@ -287,9 +287,9 @@ add_task(function* testDefaultDetails() {
|
||||
let icons = [
|
||||
"foo/bar.png",
|
||||
"/foo/bar.png",
|
||||
{ "19": "foo/bar.png" },
|
||||
{ "38": "foo/bar.png" },
|
||||
{ "19": "foo/bar.png", "38": "baz/quux.png" },
|
||||
{"19": "foo/bar.png"},
|
||||
{"38": "foo/bar.png"},
|
||||
{"19": "foo/bar.png", "38": "baz/quux.png"},
|
||||
];
|
||||
|
||||
let expectedURL = new RegExp(String.raw`^moz-extension://[^/]+/foo/bar\.png$`);
|
||||
@ -297,12 +297,12 @@ add_task(function* testDefaultDetails() {
|
||||
for (let icon of icons) {
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
"browser_action": { "default_icon": icon },
|
||||
"page_action": { "default_icon": icon },
|
||||
"browser_action": {"default_icon": icon},
|
||||
"page_action": {"default_icon": icon},
|
||||
},
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
let tabId = tabs[0].id;
|
||||
|
||||
browser.pageAction.show(tabId);
|
||||
@ -345,7 +345,7 @@ add_task(function* testSecureURLsDenied() {
|
||||
},
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
let tabId = tabs[0].id;
|
||||
|
||||
let urls = ["chrome://browser/content/browser.xul",
|
||||
|
@ -30,34 +30,34 @@ function* testInArea(area) {
|
||||
let sendClick;
|
||||
let tests = [
|
||||
() => {
|
||||
sendClick({ expectEvent: false, expectPopup: "a" });
|
||||
sendClick({expectEvent: false, expectPopup: "a"});
|
||||
},
|
||||
() => {
|
||||
sendClick({ expectEvent: false, expectPopup: "a" });
|
||||
sendClick({expectEvent: false, expectPopup: "a"});
|
||||
},
|
||||
() => {
|
||||
browser.browserAction.setPopup({ popup: "popup-b.html" });
|
||||
sendClick({ expectEvent: false, expectPopup: "b" });
|
||||
browser.browserAction.setPopup({popup: "popup-b.html"});
|
||||
sendClick({expectEvent: false, expectPopup: "b"});
|
||||
},
|
||||
() => {
|
||||
sendClick({ expectEvent: false, expectPopup: "b" });
|
||||
sendClick({expectEvent: false, expectPopup: "b"});
|
||||
},
|
||||
() => {
|
||||
browser.browserAction.setPopup({ popup: "" });
|
||||
sendClick({ expectEvent: true, expectPopup: null });
|
||||
browser.browserAction.setPopup({popup: ""});
|
||||
sendClick({expectEvent: true, expectPopup: null});
|
||||
},
|
||||
() => {
|
||||
sendClick({ expectEvent: true, expectPopup: null });
|
||||
sendClick({expectEvent: true, expectPopup: null});
|
||||
},
|
||||
() => {
|
||||
browser.browserAction.setPopup({ popup: "/popup-a.html" });
|
||||
sendClick({ expectEvent: false, expectPopup: "a" });
|
||||
browser.browserAction.setPopup({popup: "/popup-a.html"});
|
||||
sendClick({expectEvent: false, expectPopup: "a"});
|
||||
},
|
||||
];
|
||||
|
||||
let expect = {};
|
||||
sendClick = ({ expectEvent, expectPopup }) => {
|
||||
expect = { event: expectEvent, popup: expectPopup };
|
||||
sendClick = ({expectEvent, expectPopup}) => {
|
||||
expect = {event: expectEvent, popup: expectPopup};
|
||||
browser.test.sendMessage("send-click");
|
||||
};
|
||||
|
||||
|
@ -43,7 +43,7 @@ add_task(function* () {
|
||||
});
|
||||
});
|
||||
|
||||
browser.tabs.executeScript({ file: "script.js" });
|
||||
browser.tabs.executeScript({file: "script.js"});
|
||||
},
|
||||
|
||||
files: {
|
||||
|
@ -22,14 +22,14 @@ add_task(function* () {
|
||||
browser.test.sendMessage("menuItemClick", JSON.stringify(info));
|
||||
}
|
||||
|
||||
browser.contextMenus.create({ contexts: ["all"], type: "separator" });
|
||||
browser.contextMenus.create({contexts: ["all"], type: "separator"});
|
||||
|
||||
let contexts = ["page", "selection", "image"];
|
||||
for (let i = 0; i < contexts.length; i++) {
|
||||
let context = contexts[i];
|
||||
let title = context;
|
||||
browser.contextMenus.create({ title: title, contexts: [context], id: "ext-" + context,
|
||||
onclick: genericOnClick });
|
||||
browser.contextMenus.create({title: title, contexts: [context], id: "ext-" + context,
|
||||
onclick: genericOnClick});
|
||||
if (context == "selection") {
|
||||
browser.contextMenus.update("ext-selection", {
|
||||
title: "selection is: '%s'",
|
||||
@ -41,20 +41,20 @@ add_task(function* () {
|
||||
}
|
||||
}
|
||||
|
||||
let parent = browser.contextMenus.create({ title: "parent" });
|
||||
let parent = browser.contextMenus.create({title: "parent"});
|
||||
browser.contextMenus.create(
|
||||
{ title: "child1", parentId: parent, onclick: genericOnClick });
|
||||
{title: "child1", parentId: parent, onclick: genericOnClick});
|
||||
let child2 = browser.contextMenus.create(
|
||||
{ title: "child2", parentId: parent, onclick: genericOnClick });
|
||||
{title: "child2", parentId: parent, onclick: genericOnClick});
|
||||
|
||||
let parentToDel = browser.contextMenus.create({ title: "parentToDel" });
|
||||
let parentToDel = browser.contextMenus.create({title: "parentToDel"});
|
||||
browser.contextMenus.create(
|
||||
{ title: "child1", parentId: parentToDel, onclick: genericOnClick });
|
||||
{title: "child1", parentId: parentToDel, onclick: genericOnClick});
|
||||
browser.contextMenus.create(
|
||||
{ title: "child2", parentId: parentToDel, onclick: genericOnClick });
|
||||
{title: "child2", parentId: parentToDel, onclick: genericOnClick});
|
||||
browser.contextMenus.remove(parentToDel);
|
||||
|
||||
browser.contextMenus.update(parent, { parentId: child2 }).then(
|
||||
browser.contextMenus.update(parent, {parentId: child2}).then(
|
||||
() => {
|
||||
browser.test.notifyFail();
|
||||
},
|
||||
@ -81,7 +81,7 @@ add_task(function* () {
|
||||
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("#img1",
|
||||
{ type: "contextmenu", button: 2 }, gBrowser.selectedBrowser);
|
||||
{type: "contextmenu", button: 2}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
|
||||
// Check some menu items
|
||||
@ -134,7 +134,7 @@ add_task(function* () {
|
||||
// Bring up context menu again
|
||||
popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouse(null, 1, 1,
|
||||
{ type: "contextmenu", button: 2 }, gBrowser.selectedBrowser);
|
||||
{type: "contextmenu", button: 2}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
|
||||
items = contentAreaContextMenu.getElementsByAttribute("ext-type", "top-level-menu");
|
||||
@ -163,7 +163,7 @@ add_task(function* () {
|
||||
|
||||
popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("#img1",
|
||||
{ type: "contextmenu", button: 2 }, gBrowser.selectedBrowser);
|
||||
{type: "contextmenu", button: 2}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
|
||||
items = contentAreaContextMenu.getElementsByAttribute("ext-type", "top-level-menu");
|
||||
|
@ -37,7 +37,7 @@ add_task(function* testLastError() {
|
||||
SimpleTest.monitorConsole(resolve, [{message: /Invalid extension ID/, forbid: true}]);
|
||||
});
|
||||
|
||||
yield sendMessage({ checkLastError: api });
|
||||
yield sendMessage({checkLastError: api});
|
||||
|
||||
SimpleTest.endMonitorConsole();
|
||||
yield waitForConsole;
|
||||
|
@ -11,7 +11,7 @@ function* runTests(options) {
|
||||
// promise that resolves to an object containing them.
|
||||
function getDetails() {
|
||||
return new Promise(resolve => {
|
||||
return browser.tabs.query({ active: true, currentWindow: true }, resolve);
|
||||
return browser.tabs.query({active: true, currentWindow: true}, resolve);
|
||||
}).then(([tab]) => {
|
||||
let tabId = tab.id;
|
||||
browser.test.log(`Get details: tab={id: ${tabId}, url: ${JSON.stringify(tab.url)}}`);
|
||||
@ -19,8 +19,8 @@ function* runTests(options) {
|
||||
browser.pageAction.getTitle({tabId}),
|
||||
browser.pageAction.getPopup({tabId})]);
|
||||
}).then(details => {
|
||||
return Promise.resolve({ title: details[0],
|
||||
popup: details[1] });
|
||||
return Promise.resolve({title: details[0],
|
||||
popup: details[1]});
|
||||
});
|
||||
}
|
||||
|
||||
@ -59,7 +59,7 @@ function* runTests(options) {
|
||||
tabs = [];
|
||||
tests = getTests(tabs);
|
||||
|
||||
browser.tabs.query({ active: true, currentWindow: true }, resultTabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, resultTabs => {
|
||||
tabs[0] = resultTabs[0].id;
|
||||
|
||||
nextTest();
|
||||
@ -163,18 +163,18 @@ add_task(function* testTabSwitchContext() {
|
||||
|
||||
getTests(tabs) {
|
||||
let details = [
|
||||
{ "icon": browser.runtime.getURL("default.png"),
|
||||
{"icon": browser.runtime.getURL("default.png"),
|
||||
"popup": browser.runtime.getURL("default.html"),
|
||||
"title": "Default Title \u263a" },
|
||||
{ "icon": browser.runtime.getURL("1.png"),
|
||||
"title": "Default Title \u263a"},
|
||||
{"icon": browser.runtime.getURL("1.png"),
|
||||
"popup": browser.runtime.getURL("default.html"),
|
||||
"title": "Default Title \u263a" },
|
||||
{ "icon": browser.runtime.getURL("2.png"),
|
||||
"title": "Default Title \u263a"},
|
||||
{"icon": browser.runtime.getURL("2.png"),
|
||||
"popup": browser.runtime.getURL("2.html"),
|
||||
"title": "Title 2" },
|
||||
{ "icon": browser.runtime.getURL("2.png"),
|
||||
"title": "Title 2"},
|
||||
{"icon": browser.runtime.getURL("2.png"),
|
||||
"popup": browser.runtime.getURL("2.html"),
|
||||
"title": "Default Title \u263a" },
|
||||
"title": "Default Title \u263a"},
|
||||
];
|
||||
|
||||
let promiseTabLoad = details => {
|
||||
@ -201,13 +201,13 @@ add_task(function* testTabSwitchContext() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Change the icon. Expect default properties excluding the icon.");
|
||||
browser.pageAction.setIcon({ tabId: tabs[0], path: "1.png" });
|
||||
browser.pageAction.setIcon({tabId: tabs[0], path: "1.png"});
|
||||
expect(details[1]);
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Create a new tab. No icon visible.");
|
||||
browser.tabs.create({ active: true, url: "about:blank?0" }, tab => {
|
||||
tabLoadPromise = promiseTabLoad({ url: "about:blank?0", id: tab.id });
|
||||
browser.tabs.create({active: true, url: "about:blank?0"}, tab => {
|
||||
tabLoadPromise = promiseTabLoad({url: "about:blank?0", id: tab.id});
|
||||
tabs.push(tab.id);
|
||||
expect(null);
|
||||
});
|
||||
@ -222,15 +222,15 @@ add_task(function* testTabSwitchContext() {
|
||||
browser.test.log("Change properties. Expect new properties.");
|
||||
let tabId = tabs[1];
|
||||
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" });
|
||||
browser.pageAction.setIcon({tabId, path: "2.png"});
|
||||
browser.pageAction.setPopup({tabId, popup: "2.html"});
|
||||
browser.pageAction.setTitle({tabId, title: "Title 2"});
|
||||
|
||||
expect(details[2]);
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Clear the title. Expect default title.");
|
||||
browser.pageAction.setTitle({ tabId: tabs[1], title: "" });
|
||||
browser.pageAction.setTitle({tabId: tabs[1], title: ""});
|
||||
|
||||
expect(details[3]);
|
||||
},
|
||||
@ -239,11 +239,11 @@ add_task(function* testTabSwitchContext() {
|
||||
|
||||
// TODO: This listener should not be necessary, but the |tabs.update|
|
||||
// callback currently fires too early in e10s windows.
|
||||
promiseTabLoad({ id: tabs[1], url: "about:blank?1" }).then(() => {
|
||||
promiseTabLoad({id: tabs[1], url: "about:blank?1"}).then(() => {
|
||||
expect(null);
|
||||
});
|
||||
|
||||
browser.tabs.update(tabs[1], { url: "about:blank?1" });
|
||||
browser.tabs.update(tabs[1], {url: "about:blank?1"});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Show the icon. Expect default properties again.");
|
||||
@ -252,14 +252,14 @@ add_task(function* testTabSwitchContext() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Switch back to the first tab. Expect previously set properties.");
|
||||
browser.tabs.update(tabs[0], { active: true }, () => {
|
||||
browser.tabs.update(tabs[0], {active: true}, () => {
|
||||
expect(details[1]);
|
||||
});
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Hide the icon on tab 2. Switch back, expect hidden.");
|
||||
browser.pageAction.hide(tabs[1]);
|
||||
browser.tabs.update(tabs[1], { active: true }, () => {
|
||||
browser.tabs.update(tabs[1], {active: true}, () => {
|
||||
expect(null);
|
||||
});
|
||||
},
|
||||
@ -293,12 +293,12 @@ add_task(function* testDefaultTitle() {
|
||||
|
||||
getTests(tabs) {
|
||||
let details = [
|
||||
{ "title": "Foo Extension",
|
||||
{"title": "Foo Extension",
|
||||
"popup": "",
|
||||
"icon": browser.runtime.getURL("icon.png") },
|
||||
{ "title": "Foo Title",
|
||||
"icon": browser.runtime.getURL("icon.png")},
|
||||
{"title": "Foo Title",
|
||||
"popup": "",
|
||||
"icon": browser.runtime.getURL("icon.png") },
|
||||
"icon": browser.runtime.getURL("icon.png")},
|
||||
];
|
||||
|
||||
return [
|
||||
@ -313,12 +313,12 @@ add_task(function* testDefaultTitle() {
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Change the title. Expect new title.");
|
||||
browser.pageAction.setTitle({ tabId: tabs[0], title: "Foo Title" });
|
||||
browser.pageAction.setTitle({tabId: tabs[0], title: "Foo Title"});
|
||||
expect(details[1]);
|
||||
},
|
||||
expect => {
|
||||
browser.test.log("Clear the title. Expect extension title.");
|
||||
browser.pageAction.setTitle({ tabId: tabs[0], title: "" });
|
||||
browser.pageAction.setTitle({tabId: tabs[0], title: ""});
|
||||
expect(details[0]);
|
||||
},
|
||||
];
|
||||
|
@ -34,34 +34,34 @@ add_task(function* testPageActionPopup() {
|
||||
let sendClick;
|
||||
let tests = [
|
||||
() => {
|
||||
sendClick({ expectEvent: false, expectPopup: "a" });
|
||||
sendClick({expectEvent: false, expectPopup: "a"});
|
||||
},
|
||||
() => {
|
||||
sendClick({ expectEvent: false, expectPopup: "a" });
|
||||
sendClick({expectEvent: false, expectPopup: "a"});
|
||||
},
|
||||
() => {
|
||||
browser.pageAction.setPopup({ tabId, popup: "popup-b.html" });
|
||||
sendClick({ expectEvent: false, expectPopup: "b" });
|
||||
browser.pageAction.setPopup({tabId, popup: "popup-b.html"});
|
||||
sendClick({expectEvent: false, expectPopup: "b"});
|
||||
},
|
||||
() => {
|
||||
sendClick({ expectEvent: false, expectPopup: "b" });
|
||||
sendClick({expectEvent: false, expectPopup: "b"});
|
||||
},
|
||||
() => {
|
||||
browser.pageAction.setPopup({ tabId, popup: "" });
|
||||
sendClick({ expectEvent: true, expectPopup: null });
|
||||
browser.pageAction.setPopup({tabId, popup: ""});
|
||||
sendClick({expectEvent: true, expectPopup: null});
|
||||
},
|
||||
() => {
|
||||
sendClick({ expectEvent: true, expectPopup: null });
|
||||
sendClick({expectEvent: true, expectPopup: null});
|
||||
},
|
||||
() => {
|
||||
browser.pageAction.setPopup({ tabId, popup: "/popup-a.html" });
|
||||
sendClick({ expectEvent: false, expectPopup: "a" });
|
||||
browser.pageAction.setPopup({tabId, popup: "/popup-a.html"});
|
||||
sendClick({expectEvent: false, expectPopup: "a"});
|
||||
},
|
||||
];
|
||||
|
||||
let expect = {};
|
||||
sendClick = ({ expectEvent, expectPopup }) => {
|
||||
expect = { event: expectEvent, popup: expectPopup };
|
||||
sendClick = ({expectEvent, expectPopup}) => {
|
||||
expect = {event: expectEvent, popup: expectPopup};
|
||||
browser.test.sendMessage("send-click");
|
||||
};
|
||||
|
||||
@ -101,7 +101,7 @@ add_task(function* testPageActionPopup() {
|
||||
}
|
||||
});
|
||||
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
tabId = tabs[0].id;
|
||||
|
||||
browser.pageAction.show(tabId);
|
||||
@ -165,7 +165,7 @@ add_task(function* testPageActionSecurity() {
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
[api]: { "default_popup": URL },
|
||||
[api]: {"default_popup": URL},
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -27,15 +27,15 @@ add_task(function* testPageActionPopup() {
|
||||
|
||||
background: function() {
|
||||
let tabId;
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
tabId = tabs[0].id;
|
||||
browser.pageAction.show(tabId);
|
||||
browser.test.sendMessage("ready");
|
||||
});
|
||||
|
||||
browser.test.onMessage.addListener(() => {
|
||||
browser.browserAction.setPopup({ popup: "/popup-a.html" });
|
||||
browser.pageAction.setPopup({ tabId, popup: "popup-b.html" });
|
||||
browser.browserAction.setPopup({popup: "/popup-a.html"});
|
||||
browser.pageAction.setPopup({tabId, popup: "popup-b.html"});
|
||||
|
||||
browser.test.sendMessage("ok");
|
||||
});
|
||||
|
@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
let { AddonManager } = Components.utils.import("resource://gre/modules/AddonManager.jsm", {});
|
||||
let { Extension } = Components.utils.import("resource://gre/modules/Extension.jsm", {});
|
||||
let {AddonManager} = Components.utils.import("resource://gre/modules/AddonManager.jsm", {});
|
||||
let {Extension} = Components.utils.import("resource://gre/modules/Extension.jsm", {});
|
||||
|
||||
function install(url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@ -78,7 +78,7 @@ add_task(function* test_setuninstallurl_badargs() {
|
||||
add_task(function* test_setuninstall_empty_url() {
|
||||
function backgroundScript() {
|
||||
browser.runtime.setUninstallURL("")
|
||||
.then(() => browser.tabs.create({ url: "http://example.com/addon_loaded" }));
|
||||
.then(() => browser.tabs.create({url: "http://example.com/addon_loaded"}));
|
||||
}
|
||||
|
||||
let addon = yield makeAndInstallXPI("test_uinstallurl2@tests.mozilla.org",
|
||||
@ -95,7 +95,7 @@ add_task(function* test_setuninstall_empty_url() {
|
||||
add_task(function* test_setuninstallurl() {
|
||||
function backgroundScript() {
|
||||
browser.runtime.setUninstallURL("http://example.com/addon_uninstalled")
|
||||
.then(() => browser.tabs.create({ url: "http://example.com/addon_loaded" }));
|
||||
.then(() => browser.tabs.create({url: "http://example.com/addon_loaded"}));
|
||||
}
|
||||
|
||||
let addon = yield makeAndInstallXPI("test_uinstallurl@tests.mozilla.org",
|
||||
|
@ -38,16 +38,16 @@ add_task(function* () {
|
||||
});
|
||||
});
|
||||
|
||||
browser.tabs.create({ url: "tab.html" },
|
||||
browser.tabs.create({url: "tab.html"},
|
||||
(tab) => { tabId = tab.id; });
|
||||
},
|
||||
|
||||
files: {
|
||||
"tab.js": function() {
|
||||
let port = browser.runtime.connect({ name: "tab-connection-name"});
|
||||
let port = browser.runtime.connect({name: "tab-connection-name"});
|
||||
port.postMessage("tab to background port message");
|
||||
port.onMessage.addListener((msg) => {
|
||||
port.postMessage({ tabReceived: msg });
|
||||
port.postMessage({tabReceived: msg});
|
||||
});
|
||||
},
|
||||
"tab.html": `
|
||||
|
@ -49,7 +49,7 @@ add_task(function* () {
|
||||
|
||||
let windowId;
|
||||
let tabIds;
|
||||
promiseTabs.query({ lastFocusedWindow: true }).then(tabs => {
|
||||
promiseTabs.query({lastFocusedWindow: true}).then(tabs => {
|
||||
browser.test.assertEq(tabs.length, 3, "We have three tabs");
|
||||
|
||||
for (let tab of tabs) {
|
||||
@ -65,10 +65,10 @@ add_task(function* () {
|
||||
|
||||
browser.test.log("Test initial queries for muted and audible return no tabs");
|
||||
return Promise.all([
|
||||
promiseTabs.query({ windowId, audible: false }),
|
||||
promiseTabs.query({ windowId, audible: true }),
|
||||
promiseTabs.query({ windowId, muted: true }),
|
||||
promiseTabs.query({ windowId, muted: false }),
|
||||
promiseTabs.query({windowId, audible: false}),
|
||||
promiseTabs.query({windowId, audible: true}),
|
||||
promiseTabs.query({windowId, muted: true}),
|
||||
promiseTabs.query({windowId, muted: false}),
|
||||
]);
|
||||
}).then(([silent, audible, muted, nonMuted]) => {
|
||||
browser.test.assertEq(3, silent.length, "Three silent tabs");
|
||||
@ -95,10 +95,10 @@ add_task(function* () {
|
||||
|
||||
browser.test.log("Re-check queries. Expect one audible and one muted tab");
|
||||
return Promise.all([
|
||||
promiseTabs.query({ windowId, audible: false }),
|
||||
promiseTabs.query({ windowId, audible: true }),
|
||||
promiseTabs.query({ windowId, muted: true }),
|
||||
promiseTabs.query({ windowId, muted: false }),
|
||||
promiseTabs.query({windowId, audible: false}),
|
||||
promiseTabs.query({windowId, audible: true}),
|
||||
promiseTabs.query({windowId, muted: true}),
|
||||
promiseTabs.query({windowId, muted: false}),
|
||||
]);
|
||||
}).then(([silent, audible, muted, nonMuted]) => {
|
||||
browser.test.assertEq(2, silent.length, "Two silent tabs");
|
||||
@ -116,8 +116,8 @@ add_task(function* () {
|
||||
return Promise.all([
|
||||
promiseUpdated(tabIds[0], "mutedInfo"),
|
||||
promiseUpdated(tabIds[1], "mutedInfo"),
|
||||
promiseTabs.update(tabIds[0], { muted: false }),
|
||||
promiseTabs.update(tabIds[1], { muted: true }),
|
||||
promiseTabs.update(tabIds[0], {muted: false}),
|
||||
promiseTabs.update(tabIds[1], {muted: true}),
|
||||
]);
|
||||
}).then(([unmuted, muted]) => {
|
||||
for (let obj of [unmuted.changeInfo, unmuted.tab]) {
|
||||
|
@ -39,11 +39,11 @@ function* runTest(options) {
|
||||
|
||||
browser.test.log(`Test color ${options.color} at fullZoom=${options.fullZoom}`);
|
||||
|
||||
promiseTabs.query({ currentWindow: true, active: true }).then(([tab]) => {
|
||||
promiseTabs.query({currentWindow: true, active: true}).then(([tab]) => {
|
||||
return Promise.all([
|
||||
promiseTabs.captureVisibleTab(tab.windowId, { format: "jpeg", quality: 95 }),
|
||||
promiseTabs.captureVisibleTab(tab.windowId, { format: "png", quality: 95 }),
|
||||
promiseTabs.captureVisibleTab(tab.windowId, { quality: 95 }),
|
||||
promiseTabs.captureVisibleTab(tab.windowId, {format: "jpeg", quality: 95}),
|
||||
promiseTabs.captureVisibleTab(tab.windowId, {format: "png", quality: 95}),
|
||||
promiseTabs.captureVisibleTab(tab.windowId, {quality: 95}),
|
||||
promiseTabs.captureVisibleTab(tab.windowId),
|
||||
]).then(([jpeg, png, ...pngs]) => {
|
||||
browser.test.assertTrue(pngs.every(url => url == png), "All PNGs are identical");
|
||||
@ -60,7 +60,7 @@ function* runTest(options) {
|
||||
}).then(([jpeg, png]) => {
|
||||
let tabDims = `${tab.width}\u00d7${tab.height}`;
|
||||
|
||||
let images = { jpeg, png };
|
||||
let images = {jpeg, png};
|
||||
for (let format of Object.keys(images)) {
|
||||
let img = images[format];
|
||||
|
||||
@ -78,17 +78,17 @@ function* runTest(options) {
|
||||
// Check the colors of the first and last pixels of the image, to make
|
||||
// sure we capture the entire frame, and scale it correctly.
|
||||
let coords = [
|
||||
{ x: 0, y: 0,
|
||||
color: options.color },
|
||||
{ x: img.width - 1,
|
||||
{x: 0, y: 0,
|
||||
color: options.color},
|
||||
{x: img.width - 1,
|
||||
y: img.height - 1,
|
||||
color: options.color },
|
||||
{ x: img.width / 2 | 0,
|
||||
color: options.color},
|
||||
{x: img.width / 2 | 0,
|
||||
y: img.height / 2 | 0,
|
||||
color: options.neutral },
|
||||
color: options.neutral},
|
||||
];
|
||||
|
||||
for (let { x, y, color } of coords) {
|
||||
for (let {x, y, color} of coords) {
|
||||
let imageData = ctx.getImageData(x, y, 1, 1).data;
|
||||
|
||||
if (format == "png") {
|
||||
@ -133,13 +133,13 @@ function* runTest(options) {
|
||||
}
|
||||
|
||||
add_task(function* testCaptureVisibleTab() {
|
||||
yield runTest({ color: [0, 0, 0], fullZoom: 1 });
|
||||
yield runTest({color: [0, 0, 0], fullZoom: 1});
|
||||
|
||||
yield runTest({ color: [0, 0, 0], fullZoom: 2 });
|
||||
yield runTest({color: [0, 0, 0], fullZoom: 2});
|
||||
|
||||
yield runTest({ color: [0, 0, 0], fullZoom: 0.5 });
|
||||
yield runTest({color: [0, 0, 0], fullZoom: 0.5});
|
||||
|
||||
yield runTest({ color: [255, 255, 255], fullZoom: 1 });
|
||||
yield runTest({color: [255, 255, 255], fullZoom: 1});
|
||||
});
|
||||
|
||||
add_task(function* testCaptureVisibleTabPermissions() {
|
||||
@ -149,7 +149,7 @@ add_task(function* testCaptureVisibleTabPermissions() {
|
||||
},
|
||||
|
||||
background: function(x) {
|
||||
browser.tabs.query({ currentWindow: true, active: true }, tab => {
|
||||
browser.tabs.query({currentWindow: true, active: true}, tab => {
|
||||
browser.tabs.captureVisibleTab(tab.windowId).then(
|
||||
() => {
|
||||
browser.test.notifyFail("captureVisibleTabPermissions");
|
||||
|
@ -19,7 +19,7 @@ add_task(function* () {
|
||||
manifest: {
|
||||
"permissions": ["tabs"],
|
||||
|
||||
"background": { "page": "bg/background.html" },
|
||||
"background": {"page": "bg/background.html"},
|
||||
},
|
||||
|
||||
files: {
|
||||
@ -45,48 +45,48 @@ add_task(function* () {
|
||||
|
||||
let tests = [
|
||||
{
|
||||
create: { url: "http://example.com/" },
|
||||
result: { url: "http://example.com/" },
|
||||
create: {url: "http://example.com/"},
|
||||
result: {url: "http://example.com/"},
|
||||
},
|
||||
{
|
||||
create: { url: "blank.html" },
|
||||
result: { url: browser.runtime.getURL("bg/blank.html") },
|
||||
create: {url: "blank.html"},
|
||||
result: {url: browser.runtime.getURL("bg/blank.html")},
|
||||
},
|
||||
{
|
||||
create: {},
|
||||
result: { url: "about:newtab" },
|
||||
result: {url: "about:newtab"},
|
||||
},
|
||||
{
|
||||
create: { active: false },
|
||||
result: { active: false },
|
||||
create: {active: false},
|
||||
result: {active: false},
|
||||
},
|
||||
{
|
||||
create: { active: true },
|
||||
result: { active: true },
|
||||
create: {active: true},
|
||||
result: {active: true},
|
||||
},
|
||||
{
|
||||
create: { pinned: true },
|
||||
result: { pinned: true, index: 0 },
|
||||
create: {pinned: true},
|
||||
result: {pinned: true, index: 0},
|
||||
},
|
||||
{
|
||||
create: { pinned: true, active: true },
|
||||
result: { pinned: true, active: true, index: 0 },
|
||||
create: {pinned: true, active: true},
|
||||
result: {pinned: true, active: true, index: 0},
|
||||
},
|
||||
{
|
||||
create: { pinned: true, active: false },
|
||||
result: { pinned: true, active: false, index: 0 },
|
||||
create: {pinned: true, active: false},
|
||||
result: {pinned: true, active: false, index: 0},
|
||||
},
|
||||
{
|
||||
create: { index: 1 },
|
||||
result: { index: 1 },
|
||||
create: {index: 1},
|
||||
result: {index: 1},
|
||||
},
|
||||
{
|
||||
create: { index: 1, active: false },
|
||||
result: { index: 1, active: false },
|
||||
create: {index: 1, active: false},
|
||||
result: {index: 1, active: false},
|
||||
},
|
||||
{
|
||||
create: { windowId: activeWindow },
|
||||
result: { windowId: activeWindow },
|
||||
create: {windowId: activeWindow},
|
||||
result: {windowId: activeWindow},
|
||||
},
|
||||
];
|
||||
|
||||
@ -141,7 +141,7 @@ add_task(function* () {
|
||||
|
||||
return browser.tabs.remove(tabId);
|
||||
}).then(() => {
|
||||
return browser.tabs.update(activeTab, { active: true });
|
||||
return browser.tabs.update(activeTab, {active: true});
|
||||
}).then(() => {
|
||||
nextTest();
|
||||
});
|
||||
@ -150,7 +150,7 @@ add_task(function* () {
|
||||
nextTest();
|
||||
}
|
||||
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
activeTab = tabs[0].id;
|
||||
activeWindow = tabs[0].windowId;
|
||||
|
||||
|
@ -14,7 +14,7 @@ function* testHasNoPermission(params) {
|
||||
browser.test.onMessage.addListener(msg => {
|
||||
browser.test.assertEq(msg, "execute-script");
|
||||
|
||||
browser.tabs.query({ currentWindow: true }, tabs => {
|
||||
browser.tabs.query({currentWindow: true}, tabs => {
|
||||
browser.tabs.executeScript({
|
||||
file: "script.js",
|
||||
});
|
||||
@ -70,12 +70,12 @@ add_task(function* testBadPermissions() {
|
||||
|
||||
info("Test no special permissions");
|
||||
yield testHasNoPermission({
|
||||
manifest: { "permissions": ["http://example.com/"] },
|
||||
manifest: {"permissions": ["http://example.com/"]},
|
||||
});
|
||||
|
||||
info("Test tabs permissions");
|
||||
yield testHasNoPermission({
|
||||
manifest: { "permissions": ["http://example.com/", "tabs"] },
|
||||
manifest: {"permissions": ["http://example.com/", "tabs"]},
|
||||
});
|
||||
|
||||
info("Test active tab, browser action, no click");
|
||||
@ -94,7 +94,7 @@ add_task(function* testBadPermissions() {
|
||||
},
|
||||
contentSetup() {
|
||||
return new Promise(resolve => {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
browser.pageAction.show(tabs[0].id);
|
||||
resolve();
|
||||
});
|
||||
@ -108,7 +108,7 @@ add_task(function* testBadPermissions() {
|
||||
|
||||
add_task(function* testBadURL() {
|
||||
function background() {
|
||||
browser.tabs.query({ currentWindow: true }, tabs => {
|
||||
browser.tabs.query({currentWindow: true}, tabs => {
|
||||
let promises = [
|
||||
new Promise(resolve => {
|
||||
browser.tabs.executeScript({
|
||||
|
@ -61,17 +61,17 @@ add_task(function* testGoodPermissions() {
|
||||
|
||||
info("Test explicit host permission");
|
||||
yield testHasPermission({
|
||||
manifest: { "permissions": ["http://mochi.test/"] },
|
||||
manifest: {"permissions": ["http://mochi.test/"]},
|
||||
});
|
||||
|
||||
info("Test explicit host subdomain permission");
|
||||
yield testHasPermission({
|
||||
manifest: { "permissions": ["http://*.mochi.test/"] },
|
||||
manifest: {"permissions": ["http://*.mochi.test/"]},
|
||||
});
|
||||
|
||||
info("Test explicit <all_urls> permission");
|
||||
yield testHasPermission({
|
||||
manifest: { "permissions": ["<all_urls>"] },
|
||||
manifest: {"permissions": ["<all_urls>"]},
|
||||
});
|
||||
|
||||
info("Test activeTab permission with a browser action click");
|
||||
@ -98,7 +98,7 @@ add_task(function* testGoodPermissions() {
|
||||
},
|
||||
contentSetup() {
|
||||
return new Promise(resolve => {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
browser.pageAction.show(tabs[0].id);
|
||||
resolve();
|
||||
});
|
||||
@ -112,7 +112,7 @@ add_task(function* testGoodPermissions() {
|
||||
yield testHasPermission({
|
||||
manifest: {
|
||||
"permissions": ["activeTab"],
|
||||
"browser_action": { "default_popup": "_blank.html" },
|
||||
"browser_action": {"default_popup": "_blank.html"},
|
||||
},
|
||||
setup: clickBrowserAction,
|
||||
tearDown: closeBrowserAction,
|
||||
@ -122,11 +122,11 @@ add_task(function* testGoodPermissions() {
|
||||
yield testHasPermission({
|
||||
manifest: {
|
||||
"permissions": ["activeTab"],
|
||||
"page_action": { "default_popup": "_blank.html" },
|
||||
"page_action": {"default_popup": "_blank.html"},
|
||||
},
|
||||
contentSetup() {
|
||||
return new Promise(resolve => {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
|
||||
browser.tabs.query({active: true, currentWindow: true}, tabs => {
|
||||
browser.pageAction.show(tabs[0].id);
|
||||
resolve();
|
||||
});
|
||||
@ -142,7 +142,7 @@ add_task(function* testGoodPermissions() {
|
||||
"permissions": ["activeTab", "contextMenus"],
|
||||
},
|
||||
contentSetup() {
|
||||
browser.contextMenus.create({ title: "activeTab", contexts: ["all"] });
|
||||
browser.contextMenus.create({title: "activeTab", contexts: ["all"]});
|
||||
return Promise.resolve();
|
||||
},
|
||||
setup: function* (extension) {
|
||||
@ -150,7 +150,7 @@ add_task(function* testGoodPermissions() {
|
||||
let awaitPopupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
|
||||
let awaitPopupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
|
||||
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("a[href]", { type: "contextmenu", button: 2 },
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("a[href]", {type: "contextmenu", button: 2},
|
||||
gBrowser.selectedBrowser);
|
||||
yield awaitPopupShown;
|
||||
|
||||
|
@ -7,7 +7,7 @@ add_task(function* () {
|
||||
manifest: {
|
||||
"permissions": ["tabs"],
|
||||
|
||||
"browser_action": { "default_popup": "popup.html" },
|
||||
"browser_action": {"default_popup": "popup.html"},
|
||||
},
|
||||
|
||||
files: {
|
||||
@ -18,7 +18,7 @@ add_task(function* () {
|
||||
browser.test.assertEq(currentTab.url, url, "getCurrent in non-active background tab");
|
||||
|
||||
// Activate the tab.
|
||||
browser.tabs.onActivated.addListener(function listener({ tabId }) {
|
||||
browser.tabs.onActivated.addListener(function listener({tabId}) {
|
||||
if (tabId == currentTab.id) {
|
||||
browser.tabs.onActivated.removeListener(listener);
|
||||
|
||||
@ -31,7 +31,7 @@ add_task(function* () {
|
||||
});
|
||||
}
|
||||
});
|
||||
browser.tabs.update(currentTab.id, { active: true });
|
||||
browser.tabs.update(currentTab.id, {active: true});
|
||||
});
|
||||
},
|
||||
|
||||
@ -52,7 +52,7 @@ add_task(function* () {
|
||||
browser.test.sendMessage("background-finished");
|
||||
});
|
||||
|
||||
browser.tabs.create({ url: "tab.html", active: false });
|
||||
browser.tabs.create({url: "tab.html", active: false});
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -62,7 +62,7 @@ add_task(function* testExecuteScript() {
|
||||
return;
|
||||
}
|
||||
|
||||
let { promise, background, foreground } = promises.shift();
|
||||
let {promise, background, foreground} = promises.shift();
|
||||
new Promise(promise).then(() => {
|
||||
browser.tabs.executeScript({
|
||||
code: `(${checkCSS})()`,
|
||||
|
@ -20,7 +20,7 @@ add_task(function* () {
|
||||
let tab = tabs[0];
|
||||
browser.tabs.move(tab.id, {index: 0});
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
browser.test.assertEq(tabs[0].url, tab.url, "should be first tab");
|
||||
browser.test.notifyPass("tabs.move.single");
|
||||
@ -40,12 +40,12 @@ add_task(function* () {
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
tabs.sort(function(a, b) { return a.url > b.url; });
|
||||
browser.tabs.move(tabs.map(tab => tab.id), {index: 0});
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
browser.test.assertEq(tabs[0].url, "about:blank", "should be first tab");
|
||||
browser.test.assertEq(tabs[1].url, "about:config", "should be second tab");
|
||||
@ -67,13 +67,13 @@ add_task(function* () {
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
let tab = tabs[0];
|
||||
// Assuming that tab.id of 12345 does not exist.
|
||||
browser.tabs.move([12345, tab.id], {index: 0});
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
browser.test.assertEq(tabs[0].url, tab.url, "should be first tab");
|
||||
browser.test.notifyPass("tabs.move.invalid");
|
||||
@ -93,12 +93,12 @@ add_task(function* () {
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
let tab = tabs[0];
|
||||
browser.tabs.move(tab.id, {index: -1});
|
||||
browser.tabs.query(
|
||||
{ lastFocusedWindow: true },
|
||||
{lastFocusedWindow: true},
|
||||
tabs => {
|
||||
browser.test.assertEq(tabs[2].url, tab.url, "should be last tab");
|
||||
browser.test.notifyPass("tabs.move.last");
|
||||
|
@ -21,7 +21,7 @@ add_task(function* () {
|
||||
browser.tabs.move(source.id, {windowId: destination.windowId, index: 0});
|
||||
|
||||
browser.tabs.query(
|
||||
{ url: "<all_urls>" },
|
||||
{url: "<all_urls>"},
|
||||
tabs => {
|
||||
browser.test.assertEq(tabs[0].url, "http://example.com/");
|
||||
browser.test.assertEq(tabs[0].windowId, destination.windowId);
|
||||
@ -54,14 +54,14 @@ add_task(function* () {
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query(
|
||||
{ url: "<all_urls>" },
|
||||
{url: "<all_urls>"},
|
||||
tabs => {
|
||||
let destination = tabs[0];
|
||||
let source = tabs[1]; // remember, pinning moves it to the left.
|
||||
browser.tabs.move(source.id, {windowId: destination.windowId, index: 0});
|
||||
|
||||
browser.tabs.query(
|
||||
{ url: "<all_urls>" },
|
||||
{url: "<all_urls>"},
|
||||
tabs => {
|
||||
browser.test.assertEq(true, tabs[0].pinned);
|
||||
browser.test.notifyPass("tabs.move.pin");
|
||||
@ -94,13 +94,13 @@ add_task(function* () {
|
||||
|
||||
background: function() {
|
||||
browser.tabs.query(
|
||||
{ url: "<all_urls>" },
|
||||
{url: "<all_urls>"},
|
||||
tabs => {
|
||||
let move1 = tabs[1];
|
||||
let move3 = tabs[3];
|
||||
browser.tabs.move([move1.id, move3.id], {index: 0});
|
||||
browser.tabs.query(
|
||||
{ url: "<all_urls>" },
|
||||
{url: "<all_urls>"},
|
||||
tabs => {
|
||||
browser.test.assertEq(tabs[0].url, move1.url);
|
||||
browser.test.assertEq(tabs[2].url, move3.url);
|
||||
|
@ -23,9 +23,9 @@ add_task(function* () {
|
||||
let pageURL = "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context_tabs_onUpdated_page.html";
|
||||
|
||||
let expectedSequence = [
|
||||
{ status: "loading" },
|
||||
{ status: "loading", url: pageURL },
|
||||
{ status: "complete" },
|
||||
{status: "loading"},
|
||||
{status: "loading", url: pageURL},
|
||||
{status: "complete"},
|
||||
];
|
||||
let collectedSequence = [];
|
||||
|
||||
@ -60,7 +60,7 @@ add_task(function* () {
|
||||
browser.test.notifyPass("tabs.onUpdated");
|
||||
});
|
||||
|
||||
browser.tabs.create({ url: pageURL });
|
||||
browser.tabs.create({url: pageURL});
|
||||
},
|
||||
files: {
|
||||
"content-script.js": `
|
||||
|
@ -9,7 +9,7 @@ add_task(function* tabsSendMessageNoExceptionOnNonExistentTab() {
|
||||
},
|
||||
|
||||
background: function() {
|
||||
browser.tabs.create({ url: "about:robots"}, tab => {
|
||||
browser.tabs.create({url: "about:robots"}, tab => {
|
||||
let exception;
|
||||
try {
|
||||
browser.tabs.sendMessage(tab.id, "message");
|
||||
|
@ -8,7 +8,7 @@ add_task(function* testWebNavigationGetNonExistentTab() {
|
||||
let results = [
|
||||
// There is no "tabId = 0" because the id assigned by TabManager (defined in ext-utils.js)
|
||||
// starts from 1.
|
||||
browser.webNavigation.getAllFrames({ tabId: 0 }).then(() => {
|
||||
browser.webNavigation.getAllFrames({tabId: 0}).then(() => {
|
||||
browser.test.fail("getAllFrames Promise should be rejected on error");
|
||||
}, (error) => {
|
||||
browser.test.assertEq("No tab found with tabId: 0", error.message,
|
||||
@ -16,7 +16,7 @@ add_task(function* testWebNavigationGetNonExistentTab() {
|
||||
}),
|
||||
// There is no "tabId = 0" because the id assigned by TabManager (defined in ext-utils.js)
|
||||
// starts from 1, processId is currently marked as optional and it is ignored.
|
||||
browser.webNavigation.getFrame({ tabId: 0, frameId: 15, processId: 20 }).then(() => {
|
||||
browser.webNavigation.getFrame({tabId: 0, frameId: 15, processId: 20}).then(() => {
|
||||
browser.test.fail("getFrame Promise should be rejected on error");
|
||||
}, (error) => {
|
||||
browser.test.assertEq("No tab found with tabId: 0", error.message,
|
||||
@ -57,11 +57,11 @@ add_task(function* testWebNavigationFrames() {
|
||||
return;
|
||||
}
|
||||
|
||||
browser.webNavigation.getAllFrames({ tabId }).then((getAllFramesDetails) => {
|
||||
browser.webNavigation.getAllFrames({tabId}).then((getAllFramesDetails) => {
|
||||
let getFramePromises = getAllFramesDetails.map((frameDetail) => {
|
||||
let { frameId } = frameDetail;
|
||||
let {frameId} = frameDetail;
|
||||
// processId is currently marked as optional and it is ignored.
|
||||
return browser.webNavigation.getFrame({ tabId, frameId, processId: 0 });
|
||||
return browser.webNavigation.getFrame({tabId, frameId, processId: 0});
|
||||
});
|
||||
|
||||
Promise.all(getFramePromises).then((getFrameResults) => {
|
||||
@ -81,7 +81,7 @@ add_task(function* testWebNavigationFrames() {
|
||||
}
|
||||
|
||||
// Check that getFrame Promise is rejected with the expected error message on nonexistent frameId.
|
||||
browser.webNavigation.getFrame({ tabId, frameId: nonExistentFrameId, processId: 20 }).then(() => {
|
||||
browser.webNavigation.getFrame({tabId, frameId: nonExistentFrameId, processId: 20}).then(() => {
|
||||
browser.test.fail("getFrame promise should be rejected for an unexistent frameId");
|
||||
}, (error) => {
|
||||
browser.test.assertEq(`No frame found with frameId: ${nonExistentFrameId}`, error.message,
|
||||
@ -93,7 +93,7 @@ add_task(function* testWebNavigationFrames() {
|
||||
});
|
||||
});
|
||||
|
||||
browser.tabs.create({ url: "tab.html" }, (tab) => {
|
||||
browser.tabs.create({url: "tab.html"}, (tab) => {
|
||||
tabId = tab.id;
|
||||
});
|
||||
} + ")();",
|
||||
|
@ -21,6 +21,8 @@ support-files =
|
||||
[browser_bing.js]
|
||||
[browser_bing_behavior.js]
|
||||
[browser_contextmenu.js]
|
||||
[browser_contextSearchTabPosition.js]
|
||||
skip-if = os == "mac" # bug 967013
|
||||
[browser_eBay.js]
|
||||
[browser_eBay_behavior.js]
|
||||
[browser_google.js]
|
||||
|
@ -3,12 +3,10 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
add_task(function* test() {
|
||||
|
||||
// Will need to be changed if Google isn't the default search engine.
|
||||
// Note: geoSpecificDefaults are disabled for mochitests, so this is the
|
||||
// non-US en-US default.
|
||||
let histogramKey = "google.contextmenu";
|
||||
let engine = yield promiseNewEngine("testEngine.xml");
|
||||
let histogramKey = "other-" + engine.name + ".contextmenu";
|
||||
let numSearchesBefore = 0;
|
||||
|
||||
try {
|
||||
let hs = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").snapshot();
|
||||
if (histogramKey in hs) {
|
||||
@ -19,7 +17,7 @@ add_task(function* test() {
|
||||
}
|
||||
|
||||
let tabs = [];
|
||||
let tabsLoadedDeferred = Promise.defer();
|
||||
let tabsLoadedDeferred = new Deferred();
|
||||
|
||||
function tabAdded(event) {
|
||||
let tab = event.target;
|
||||
@ -54,3 +52,10 @@ add_task(function* test() {
|
||||
Assert.equal(hs[histogramKey].sum, numSearchesBefore + 2,
|
||||
"The histogram must contain the correct search count");
|
||||
});
|
||||
|
||||
function Deferred() {
|
||||
this.promise = new Promise((resolve, reject) => {
|
||||
this.resolve = resolve;
|
||||
this.reject = reject;
|
||||
});
|
||||
}
|
@ -21,6 +21,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "console",
|
||||
"resource://gre/modules/Console.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PrivacyFilter",
|
||||
"resource:///modules/sessionstore/PrivacyFilter.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "RunState",
|
||||
"resource:///modules/sessionstore/RunState.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "SessionStore",
|
||||
"resource:///modules/sessionstore/SessionStore.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "SessionFile",
|
||||
@ -209,6 +211,19 @@ var SessionSaverInternal = {
|
||||
}
|
||||
}
|
||||
|
||||
// If this is the final write on a clean shutdown, and the user changed
|
||||
// their cookie preferences to "Keep until I close Firefox", then we
|
||||
// should remove all cookies. Check "resume_session_once" so we keep
|
||||
// cookies when restarting due to a Firefox update.
|
||||
if (RunState.isClosing &&
|
||||
Services.prefs.getIntPref("network.cookie.lifetimePolicy") ==
|
||||
Services.cookies.ACCEPT_SESSION &&
|
||||
!Services.prefs.getBoolPref("browser.sessionstore.resume_session_once")) {
|
||||
for (let window of state.windows) {
|
||||
delete window.cookies;
|
||||
}
|
||||
}
|
||||
|
||||
stopWatchFinish("COLLECT_DATA_MS", "COLLECT_DATA_LONGEST_OP_MS");
|
||||
return this._writeState(state);
|
||||
},
|
||||
|
@ -1236,9 +1236,7 @@ var SessionStoreInternal = {
|
||||
|
||||
var tabbrowser = aWindow.gBrowser;
|
||||
|
||||
// The tabbrowser binding will go away once the window is closed,
|
||||
// so we'll hold a reference to the browsers in the closure here.
|
||||
let browsers = tabbrowser.browsers;
|
||||
let browsers = Array.from(tabbrowser.browsers);
|
||||
|
||||
TAB_EVENTS.forEach(function(aEvent) {
|
||||
tabbrowser.tabContainer.removeEventListener(aEvent, this, true);
|
||||
@ -1320,7 +1318,6 @@ var SessionStoreInternal = {
|
||||
// access any DOM elements from aWindow within this callback unless
|
||||
// you're holding on to them in the closure.
|
||||
|
||||
// We can still access tabbrowser.browsers, thankfully.
|
||||
for (let browser of browsers) {
|
||||
if (this._closedWindowTabs.has(browser.permanentKey)) {
|
||||
let tabData = this._closedWindowTabs.get(browser.permanentKey);
|
||||
|
@ -1,4 +1,3 @@
|
||||
[DEFAULT]
|
||||
|
||||
[browser_bug538331.js]
|
||||
skip-if = e10s # Bug ?????? - child process crash, but only when run as part of the suite (ie, probably not actually this tests fault!?)
|
||||
|
@ -361,11 +361,8 @@ function testShowNotification()
|
||||
if (i == (BG_NOTIFY_TESTS.length - 1)) {
|
||||
// Wait for any windows caught by the windowcatcher to close
|
||||
gWindowCatcher.finish(function () {
|
||||
BrowserTestUtils.waitForNewTab(gBrowser).then(testNotificationURL);
|
||||
button.click();
|
||||
gBrowser.selectedBrowser.addEventListener("load", function () {
|
||||
gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
|
||||
testNotificationURL();
|
||||
}, true);
|
||||
});
|
||||
} else {
|
||||
notifyBox.removeAllNotifications(true);
|
||||
@ -389,7 +386,7 @@ function testNotificationURL()
|
||||
{
|
||||
ok(true, "Test testNotificationURL: clicking the notification button " +
|
||||
"opened the url specified by the update");
|
||||
let href = gBrowser.selectedBrowser.contentWindow.location.href;
|
||||
let href = gBrowser.currentURI.spec;
|
||||
let expectedURL = BG_NOTIFY_TESTS[BG_NOTIFY_TESTS.length - 1].notificationURL;
|
||||
is(href, expectedURL, "The url opened from the notification should be the " +
|
||||
"url provided by the update");
|
||||
|
@ -9,7 +9,9 @@ allprojects {
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
maven {
|
||||
url gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,8 +19,9 @@ buildDir "${topobjdir}/gradle/build"
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
|
||||
maven {
|
||||
url gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORY
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
54
configure.in
54
configure.in
@ -5252,12 +5252,56 @@ if test -n "$MOZ_OMX_PLUGIN"; then
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Enable building mobile/android with Gradle
|
||||
dnl Gradle support
|
||||
dnl
|
||||
dnl If --with-gradle is specified, build mobile/android with Gradle.
|
||||
dnl
|
||||
dnl If no Gradle binary is specified, use the in tree Gradle wrapper.
|
||||
dnl The wrapper downloads and installs Gradle, which is good for local
|
||||
dnl developers but not good in automation.
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(gradle-mobile-android-builds,
|
||||
[ --enable-gradle-mobile-android-builds Enable building mobile/android with Gradle],
|
||||
MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE=1,
|
||||
MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE=)
|
||||
|
||||
GRADLE=
|
||||
MOZ_ARG_WITH_STRING(gradle,
|
||||
[ --with-gradle=/path/to/bin/gradle
|
||||
Enable building mobile/android with Gradle (argument: location of binary or wrapper (gradle/gradlew))],
|
||||
if test "$withval" = "no" ; then
|
||||
dnl --without-gradle => use the wrapper in |mach gradle|, don't build
|
||||
dnl with Gradle by default.
|
||||
GRADLE=$srcdir/gradlew
|
||||
MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE=
|
||||
elif test "$withval" = "yes" ; then
|
||||
dnl --with-gradle => use the wrapper in |mach gradle|, build with
|
||||
dnl Gradle by default.
|
||||
GRADLE=$srcdir/gradlew
|
||||
MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE=1
|
||||
else
|
||||
dnl --with-gradle=/path/to/gradle => use the given binary in |mach
|
||||
dnl gradle|, build with Gradle by default.
|
||||
GRADLE=$withval
|
||||
MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE=1
|
||||
fi
|
||||
,
|
||||
dnl No --with{out}-gradle => use the wrapper in |mach gradle|, don't build
|
||||
dnl with Gradle by default.
|
||||
GRADLE=$srcdir/gradlew
|
||||
MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE=
|
||||
)
|
||||
|
||||
if test "$OS_TARGET" = Android -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk" ; then
|
||||
if test -z "$GRADLE" -o ! -x "$GRADLE" ; then
|
||||
AC_MSG_ERROR([The program gradlew/gradle was not found. Use --with-gradle=/path/to/bin/gradle}])
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(GRADLE)
|
||||
|
||||
dnl Path to Maven repository containing Gradle dependencies. Automation will
|
||||
dnl set this to file:///path/to/local via the mozconfig. Local developer
|
||||
dnl default is jcenter.
|
||||
if test -z "$GRADLE_MAVEN_REPOSITORY" ; then
|
||||
GRADLE_MAVEN_REPOSITORY=https://jcenter.bintray.com/
|
||||
fi
|
||||
AC_SUBST(GRADLE_MAVEN_REPOSITORY)
|
||||
|
||||
if test -n "$MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE"; then
|
||||
if test "$OS_TARGET" = "Android" -a x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then
|
||||
|
74
devtools/bootstrap.js
vendored
74
devtools/bootstrap.js
vendored
@ -79,11 +79,77 @@ function reload(event) {
|
||||
|
||||
// Ask the loader to update itself and reopen the toolbox if needed
|
||||
const {devtools} = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
devtools.reload(reloadToolbox);
|
||||
devtools.reload();
|
||||
|
||||
// Also tells gDevTools to reload its dependencies
|
||||
const {gDevTools} = devtools.require("devtools/client/framework/devtools");
|
||||
gDevTools.reload();
|
||||
// Go over all top level windows to reload all devtools related things
|
||||
let windowsEnum = Services.wm.getEnumerator(null);
|
||||
while (windowsEnum.hasMoreElements()) {
|
||||
let window = windowsEnum.getNext();
|
||||
let windowtype = window.document.documentElement.getAttribute("windowtype");
|
||||
if (windowtype == "navigator:browser" && window.gBrowser) {
|
||||
// Enumerate tabs on firefox windows
|
||||
for (let tab of window.gBrowser.tabs) {
|
||||
let browser = tab.linkedBrowser;
|
||||
let location = browser.documentURI.spec;
|
||||
let mm = browser.messageManager;
|
||||
// To reload JSON-View tabs and any devtools document
|
||||
if (location.startsWith("about:debugging") ||
|
||||
location.startsWith("chrome://devtools/")) {
|
||||
browser.reload();
|
||||
}
|
||||
// We have to use a frame script to query "baseURI"
|
||||
mm.loadFrameScript("data:text/javascript,new " + function () {
|
||||
let isJSONView = content.document.baseURI.startsWith("resource://devtools/");
|
||||
if (isJSONView) {
|
||||
content.location.reload();
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
|
||||
// Manually reload gcli if it has been used
|
||||
// Bug 1248348: Inject the developer toolbar dynamically within browser/
|
||||
// so that we can easily remove/reinject it
|
||||
const desc = Object.getOwnPropertyDescriptor(window, "DeveloperToolbar");
|
||||
if (desc && !desc.get) {
|
||||
let wasVisible = window.DeveloperToolbar.visible;
|
||||
window.DeveloperToolbar.hide()
|
||||
.then(() => {
|
||||
window.DeveloperToolbar.destroy();
|
||||
|
||||
let { DeveloperToolbar } = devtools.require("devtools/client/shared/developer-toolbar");
|
||||
window.DeveloperToolbar = new DeveloperToolbar(window, window.document.getElementById("developer-toolbar"));
|
||||
if (wasVisible) {
|
||||
window.DeveloperToolbar.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (windowtype === "devtools:webide") {
|
||||
window.location.reload();
|
||||
} else if (windowtype === "devtools:webconsole") {
|
||||
// Browser console document can't just be reloaded.
|
||||
// HUDService is going to close it on unload.
|
||||
// Instead we have to manually toggle it.
|
||||
let HUDService = devtools.require("devtools/client/webconsole/hudservice");
|
||||
HUDService.toggleBrowserConsole()
|
||||
.then(() => {
|
||||
HUDService.toggleBrowserConsole();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (reloadToolbox) {
|
||||
// Reopen the toolbox automatically if we are reloading from toolbox shortcut
|
||||
// and are on a browser window.
|
||||
// Wait for a second before opening the toolbox to avoid races
|
||||
// between the old and the new one.
|
||||
let {setTimeout} = Cu.import("resource://gre/modules/Timer.jsm", {});
|
||||
setTimeout(() => {
|
||||
let { TargetFactory } = devtools.require("devtools/client/framework/target");
|
||||
let { gDevTools } = devtools.require("devtools/client/framework/devtools");
|
||||
let target = TargetFactory.forTab(top.gBrowser.selectedTab);
|
||||
gDevTools.showToolbox(target);
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
let listener;
|
||||
|
@ -10,7 +10,6 @@
|
||||
<head>
|
||||
<title>&animationInspectorTitle;</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<link rel="stylesheet" href="chrome://devtools/skin/common.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="chrome://devtools/skin/animationinspector.css" type="text/css"/>
|
||||
<script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
</head>
|
||||
|
@ -65,8 +65,10 @@ add_task(function*() {
|
||||
info("Select a finite animation, reload the page and wait for the " +
|
||||
"animation to complete");
|
||||
yield selectNode(".negative-delay", inspector);
|
||||
|
||||
let onScrubberStopped = waitForScrubberStopped(timeline);
|
||||
yield reloadTab(inspector);
|
||||
yield waitForScrubberStopped(timeline);
|
||||
yield onScrubberStopped;
|
||||
|
||||
ok(btn.classList.contains("paused"),
|
||||
"The button is in paused state once finite animations are done");
|
||||
|
@ -4,7 +4,6 @@
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/canvasdebugger.css" type="text/css"?>
|
||||
<!DOCTYPE window [
|
||||
|
@ -5,7 +5,6 @@
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
|
||||
<?xml-stylesheet href="debugger.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/debugger.css" type="text/css"?>
|
||||
<!DOCTYPE window [
|
||||
|
@ -6,7 +6,6 @@
|
||||
|
||||
<!DOCTYPE window []>
|
||||
|
||||
<?xml-stylesheet href="chrome://devtools/skin/common.css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/eyedropper.css" type="text/css"?>
|
||||
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
|
@ -3,6 +3,7 @@
|
||||
/* 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
|
||||
@ -198,6 +199,8 @@ BrowserToolboxProcess.prototype = {
|
||||
|
||||
if (this._options.addonID) {
|
||||
xulURI += "?addonID=" + this._options.addonID;
|
||||
} else if (this._options.testScript) {
|
||||
xulURI += "?testScript=" + encodeURIComponent(this._options.testScript);
|
||||
}
|
||||
|
||||
dumpn("Running chrome debugging process.");
|
||||
|
@ -1,3 +1,9 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
const Services = Cu.import("resource://gre/modules/Services.jsm", {}).Services;
|
||||
const promise = require("promise");
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* 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/. */
|
||||
|
@ -17,6 +17,7 @@ support-files =
|
||||
browser_toolbox_options_enable_serviceworkers_testing.html
|
||||
serviceworker.js
|
||||
|
||||
[browser_browser_toolbox.js]
|
||||
[browser_devtools_api.js]
|
||||
[browser_devtools_api_destroy.js]
|
||||
[browser_dynamic_tool_enabling.js]
|
||||
|
63
devtools/client/framework/test/browser_browser_toolbox.js
Normal file
63
devtools/client/framework/test/browser_browser_toolbox.js
Normal file
@ -0,0 +1,63 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// On debug test slave, it takes about 50s to run the test.
|
||||
requestLongerTimeout(4);
|
||||
|
||||
add_task(function* runTest() {
|
||||
yield new Promise(done => {
|
||||
let options = {"set": [
|
||||
["devtools.debugger.prompt-connection", false],
|
||||
["devtools.debugger.remote-enabled", true],
|
||||
["devtools.chrome.enabled", true],
|
||||
// Test-only pref to allow passing `testScript` argument to the browser
|
||||
// toolbox
|
||||
["devtools.browser-toolbox.allow-unsafe-script", true],
|
||||
// On debug test slave, it takes more than the default time (20s)
|
||||
// to get a initialized console
|
||||
["devtools.debugger.remote-timeout", 120000]
|
||||
]};
|
||||
SpecialPowers.pushPrefEnv(options, done);
|
||||
});
|
||||
|
||||
// Wait for a notification sent by a script evaluated in the webconsole
|
||||
// of the browser toolbox.
|
||||
let onCustomMessage = new Promise(done => {
|
||||
Services.obs.addObserver(function listener() {
|
||||
Services.obs.removeObserver(listener, "browser-toolbox-console-works");
|
||||
done();
|
||||
}, "browser-toolbox-console-works", false);
|
||||
});
|
||||
|
||||
let { BrowserToolboxProcess } = Cu.import("resource://devtools/client/framework/ToolboxProcess.jsm", {});
|
||||
let closePromise;
|
||||
yield new Promise(onRun => {
|
||||
let options = {
|
||||
// Pass a test script evaluated in the browser toolbox window
|
||||
// living in a distinct process. It has access to `toolbox` object
|
||||
// in its global scope.
|
||||
testScript: "new " + function () {
|
||||
toolbox.selectTool("webconsole")
|
||||
.then(() => toolbox.getPanel("webconsole"))
|
||||
.then(() => {
|
||||
let { jsterm } = toolbox.getPanel("webconsole").hud;
|
||||
let js = "Services.obs.notifyObservers(null, 'browser-toolbox-console-works', null);";
|
||||
return jsterm.execute(js);
|
||||
})
|
||||
.then(() => toolbox.destroy());
|
||||
}
|
||||
};
|
||||
closePromise = new Promise(onClose => {
|
||||
info("Opening the browser toolbox\n");
|
||||
BrowserToolboxProcess.init(onClose, onRun, options);
|
||||
});
|
||||
});
|
||||
ok(true, "Browser toolbox started\n");
|
||||
|
||||
yield onCustomMessage;
|
||||
ok(true, "Received the custom message");
|
||||
|
||||
yield closePromise;
|
||||
ok(true, "Browser toolbox process just closed");
|
||||
});
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that network requests originating from the toolbox don't get recorded in
|
||||
|
@ -1,5 +1,7 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Tests that the keybindings for opening and closing the inspector work as expected
|
||||
// Can probably make this a shared test that tests all of the tools global keybindings
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
var target;
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Ensure target is closed if client is closed directly
|
||||
function test() {
|
||||
|
@ -1,5 +1,7 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Test support methods on Target, such as `hasActor`, `getActorDescription`,
|
||||
// `actorHasMethod` and `getTrait`.
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function test() {
|
||||
let {Toolbox} = require("devtools/client/framework/toolbox");
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
var toolbox;
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
@ -1,6 +1,8 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// A helper frame-script for devtools/client/framework service worker tests.
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
var {Toolbox} = require("devtools/client/framework/toolbox");
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function test() {
|
||||
gBrowser.selectedTab = gBrowser.addTab();
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that opening the toolbox doesn't throw when the previously selected
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
@ -6,7 +8,6 @@ function test() {
|
||||
let {ToolSidebar} = require("devtools/client/framework/sidebar");
|
||||
|
||||
const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
|
||||
"<?xml-stylesheet href='chrome://devtools/skin/common.css' type='text/css'?>" +
|
||||
"<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
|
||||
"<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
|
||||
"<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
@ -6,7 +8,6 @@ function test() {
|
||||
const { ToolSidebar } = require("devtools/client/framework/sidebar");
|
||||
|
||||
const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
|
||||
"<?xml-stylesheet href='chrome://devtools/skin/common.css' type='text/css'?>" +
|
||||
"<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
|
||||
"<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
|
||||
"<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
|
||||
|
@ -1,5 +1,8 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that the sidebar widget auto-registers existing tabs.
|
||||
@ -7,7 +10,6 @@
|
||||
const {ToolSidebar} = require("devtools/client/framework/sidebar");
|
||||
|
||||
const testToolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
|
||||
"<?xml-stylesheet href='chrome://devtools/skin/common.css' type='text/css'?>" +
|
||||
"<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
|
||||
"<hbox flex='1'><description flex='1'>test tool</description>" +
|
||||
"<splitter class='devtools-side-splitter'/>" +
|
||||
|
@ -1,5 +1,8 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that the sidebar widget correctly displays the "all tabs..." button
|
||||
|
@ -4,7 +4,6 @@
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/common.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Test for dynamically registering and unregistering themes
|
||||
const CHROME_URL = "chrome://mochitests/content/browser/devtools/client/framework/test/";
|
||||
|
@ -1,5 +1,7 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user