merge fx-team to mozilla-inbound a=merge
|
@ -107,6 +107,7 @@ devtools/client/webconsole/**
|
|||
!devtools/client/webconsole/jsterm.js
|
||||
!devtools/client/webconsole/console-commands.js
|
||||
devtools/client/webide/**
|
||||
!devtools/client/webide/components/webideCli.js
|
||||
devtools/server/**
|
||||
!devtools/server/actors/webbrowser.js
|
||||
!devtools/server/actors/styles.js
|
||||
|
@ -117,6 +118,7 @@ devtools/shared/*.js
|
|||
!devtools/shared/event-emitter.js
|
||||
!devtools/shared/task.js
|
||||
devtools/shared/*.jsm
|
||||
!devtools/shared/Loader.jsm
|
||||
devtools/shared/apps/**
|
||||
devtools/shared/client/**
|
||||
devtools/shared/discovery/**
|
||||
|
|
|
@ -614,6 +614,8 @@ pref("accessibility.typeaheadfind", false);
|
|||
pref("accessibility.typeaheadfind.timeout", 5000);
|
||||
pref("accessibility.typeaheadfind.linksonly", false);
|
||||
pref("accessibility.typeaheadfind.flashBar", 1);
|
||||
pref("findbar.highlightAll", true);
|
||||
pref("findbar.modalHighlight", true);
|
||||
|
||||
// Tracks when accessibility is loaded into the previous session.
|
||||
pref("accessibility.loadedInLastSession", false);
|
||||
|
@ -1408,6 +1410,8 @@ pref("browser.esedbreader.loglevel", "Error");
|
|||
|
||||
pref("browser.laterrun.enabled", false);
|
||||
|
||||
pref("browser.migration.automigrate", false);
|
||||
|
||||
// Enable browser frames for use on desktop. Only exposed to chrome callers.
|
||||
pref("dom.mozBrowserFramesEnabled", true);
|
||||
|
||||
|
|
|
@ -75,8 +75,8 @@ a {
|
|||
-moz-box-flex: 1;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
padding-left: 34px;
|
||||
padding-right: 8px;
|
||||
padding-inline-start: 34px;
|
||||
padding-inline-end: 8px;
|
||||
background: hsla(0,0%,100%,.9) padding-box;
|
||||
border: 1px solid;
|
||||
border-radius: 2px 0 0 2px;
|
||||
|
@ -124,6 +124,7 @@ a {
|
|||
|
||||
#searchSubmit:dir(rtl) {
|
||||
border-radius: 2px 0 0 2px;
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg#search-arrow-go-rtl"), linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.1));
|
||||
}
|
||||
|
||||
#searchText:focus + #searchSubmit,
|
||||
|
@ -143,6 +144,12 @@ a {
|
|||
0 1px 0 hsla(210,54%,20%,.03);
|
||||
}
|
||||
|
||||
#searchText:focus + #searchSubmit:dir(rtl),
|
||||
#searchText[keepfocus] + #searchSubmit:dir(rtl),
|
||||
#searchText[autofocus] + #searchSubmit:dir(rtl) {
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg#search-arrow-go-rtl-inverted"), linear-gradient(#4cb1ff, #1793e5);
|
||||
}
|
||||
|
||||
#searchText + #searchSubmit:hover {
|
||||
background: url("chrome://browser/skin/search-arrow-go.svg#search-arrow-go-inverted") center center no-repeat, linear-gradient(#66bdff, #0d9eff);
|
||||
box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
|
||||
|
@ -151,6 +158,10 @@ a {
|
|||
0 0 4px hsla(206,100%,20%,.2);
|
||||
}
|
||||
|
||||
#searchText + #searchSubmit:dir(rtl):hover {
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg#search-arrow-go-rtl-inverted"), linear-gradient(#66bdff, #0d9eff);
|
||||
}
|
||||
|
||||
#searchText + #searchSubmit:hover:active {
|
||||
box-shadow: 0 1px 1px hsla(211,79%,6%,.1) inset,
|
||||
0 0 1px hsla(211,79%,6%,.2) inset;
|
||||
|
|
|
@ -14,6 +14,11 @@
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
.contentSearchSuggestionTable:-moz-dir(rtl) {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.contentSearchSuggestionsList {
|
||||
border-bottom: 1px solid hsl(0, 0%, 92%);
|
||||
width: 100%;
|
||||
|
@ -38,7 +43,7 @@
|
|||
|
||||
.contentSearchHeaderRow > td > img,
|
||||
.contentSearchSuggestionRow > td > .historyIcon {
|
||||
margin-right: 8px;
|
||||
margin-inline-end: 8px;
|
||||
margin-bottom: -3px;
|
||||
}
|
||||
|
||||
|
@ -110,6 +115,10 @@
|
|||
background-position: right center;
|
||||
}
|
||||
|
||||
.contentSearchOneOffItem:-moz-dir(rtl) {
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
.contentSearchOneOffItem > img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
|
|
|
@ -366,8 +366,8 @@ input[type=button] {
|
|||
-moz-box-flex: 1;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
padding-left: 34px;
|
||||
padding-right: 8px;
|
||||
padding-inline-start: 34px;
|
||||
padding-inline-end: 8px;
|
||||
background: hsla(0,0%,100%,.9) padding-box;
|
||||
border: 1px solid;
|
||||
border-spacing: 0;
|
||||
|
@ -416,6 +416,7 @@ input[type=button] {
|
|||
|
||||
#newtab-search-submit:dir(rtl) {
|
||||
border-radius: 2px 0 0 2px;
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg#search-arrow-go-rtl"), linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.1));
|
||||
}
|
||||
|
||||
#newtab-search-text:focus + #newtab-search-submit,
|
||||
|
@ -448,6 +449,13 @@ input[type=button] {
|
|||
transition-duration: 0ms;
|
||||
}
|
||||
|
||||
#newtab-search-text:focus + #newtab-search-submit:dir(rtl),
|
||||
#newtab-search-text[keepfocus] + #newtab-search-submit:dir(rtl),
|
||||
#newtab-search-text[autofocus] + #newtab-search-submit:dir(rtl),
|
||||
#newtab-search-text + #newtab-search-submit:dir(rtl):hover {
|
||||
background-image: url("chrome://browser/skin/search-arrow-go.svg#search-arrow-go-rtl-inverted"), linear-gradient(#4cb1ff, #1793e5);
|
||||
}
|
||||
|
||||
/* CUSTOMIZE */
|
||||
#newtab-customize-overlay {
|
||||
opacity: 0;
|
||||
|
|
|
@ -1005,7 +1005,7 @@ function promisePopupHidden(popup) {
|
|||
function promiseNotificationShown(notification) {
|
||||
let win = notification.browser.ownerDocument.defaultView;
|
||||
if (win.PopupNotifications.panel.state == "open") {
|
||||
return Promise.resolved();
|
||||
return Promise.resolve();
|
||||
}
|
||||
let panelPromise = promisePopupShown(win.PopupNotifications.panel);
|
||||
notification.reshow();
|
||||
|
|
|
@ -117,7 +117,7 @@ var tests = [
|
|||
},
|
||||
// Moving a tab to a new window should preserve swappable notifications.
|
||||
{ id: "Test#6",
|
||||
run: function() {
|
||||
run: function* () {
|
||||
gBrowser.selectedTab = gBrowser.addTab("about:blank");
|
||||
let notifyObj = new BasicNotification(this.id);
|
||||
let originalCallback = notifyObj.options.eventCallback;
|
||||
|
@ -126,17 +126,26 @@ var tests = [
|
|||
return eventName == "swapping";
|
||||
};
|
||||
|
||||
showNotification(notifyObj);
|
||||
let notification = showNotification(notifyObj);
|
||||
let win = gBrowser.replaceTabWithWindow(gBrowser.selectedTab);
|
||||
whenDelayedStartupFinished(win, function() {
|
||||
let [tab] = win.gBrowser.tabs;
|
||||
let anchor = win.document.getElementById("default-notification-icon");
|
||||
win.PopupNotifications._reshowNotifications(anchor);
|
||||
checkPopup(win.PopupNotifications.panel, notifyObj);
|
||||
ok(notifyObj.swappingCallbackTriggered, "the swapping callback was triggered");
|
||||
win.close();
|
||||
goNext();
|
||||
yield whenDelayedStartupFinished(win);
|
||||
let [tab] = win.gBrowser.tabs;
|
||||
let anchor = win.document.getElementById("default-notification-icon");
|
||||
|
||||
yield new Promise(resolve => {
|
||||
notification.options.eventCallback = function (eventName) {
|
||||
if (eventName == "shown") {
|
||||
resolve();
|
||||
}
|
||||
};
|
||||
info("Showing the notification again");
|
||||
notification.reshow();
|
||||
});
|
||||
|
||||
checkPopup(win.PopupNotifications.panel, notifyObj);
|
||||
ok(notifyObj.swappingCallbackTriggered, "the swapping callback was triggered");
|
||||
win.close();
|
||||
goNext();
|
||||
}
|
||||
},
|
||||
// the hideNotNow option
|
||||
|
|
|
@ -8,12 +8,18 @@ XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
|
|||
"resource://gre/modules/PlacesUtils.jsm");
|
||||
|
||||
function whenDelayedStartupFinished(aWindow, aCallback) {
|
||||
Services.obs.addObserver(function observer(aSubject, aTopic) {
|
||||
if (aWindow == aSubject) {
|
||||
Services.obs.removeObserver(observer, aTopic);
|
||||
executeSoon(aCallback);
|
||||
}
|
||||
}, "browser-delayed-startup-finished", false);
|
||||
return new Promise(resolve => {
|
||||
info("Waiting for delayed startup to finish");
|
||||
Services.obs.addObserver(function observer(aSubject, aTopic) {
|
||||
if (aWindow == aSubject) {
|
||||
Services.obs.removeObserver(observer, aTopic);
|
||||
if (aCallback) {
|
||||
executeSoon(aCallback);
|
||||
}
|
||||
resolve();
|
||||
}
|
||||
}, "browser-delayed-startup-finished", false);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,3 +9,4 @@ JAR_MANIFESTS += ['jar.mn']
|
|||
DIRS += ['schemas']
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += ['test/browser/browser.ini']
|
||||
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell/xpcshell.ini']
|
||||
|
|
|
@ -393,7 +393,7 @@ add_task(function* testSecureManifestURLsDenied() {
|
|||
info(`TEST ${api} icon url: ${url}`);
|
||||
|
||||
let matchURLForbidden = url => ({
|
||||
message: new RegExp(`String "${url}" must be a relative URL`),
|
||||
message: new RegExp(`match the format "strictRelativeUrl"`),
|
||||
});
|
||||
|
||||
let messages = [matchURLForbidden(url)];
|
||||
|
|
|
@ -45,7 +45,7 @@ add_task(function* test_delete() {
|
|||
browser.test.sendMessage("ready");
|
||||
}
|
||||
|
||||
const REFERENCE_DATE = new Date(1999, 9, 9, 9, 9);
|
||||
const BASE_URL = "http://mozilla.com/test_history/";
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
|
@ -60,65 +60,75 @@ add_task(function* test_delete() {
|
|||
|
||||
let historyClearedCount;
|
||||
let visits = [];
|
||||
let visitDate = new Date(1999, 9, 9, 9, 9).getTime();
|
||||
|
||||
function pushVisit(visits) {
|
||||
visitDate += 1000;
|
||||
visits.push({date: new Date(visitDate)});
|
||||
}
|
||||
|
||||
// Add 5 visits for one uri and 3 visits for 3 others
|
||||
for (let i = 0; i < 8; ++i) {
|
||||
let baseUri = "http://mozilla.com/test_history/";
|
||||
let uri = (i > 4) ? `${baseUri}${i}/` : baseUri;
|
||||
let dbDate = PlacesUtils.toPRTime(Number(REFERENCE_DATE) + 3600 * 1000 * i);
|
||||
|
||||
for (let i = 0; i < 4; ++i) {
|
||||
let visit = {
|
||||
uri,
|
||||
url: `${BASE_URL}${i}`,
|
||||
title: "visit " + i,
|
||||
visitDate: dbDate,
|
||||
visits: [],
|
||||
};
|
||||
if (i === 0) {
|
||||
for (let j = 0; j < 5; ++j) {
|
||||
pushVisit(visit.visits);
|
||||
}
|
||||
} else {
|
||||
pushVisit(visit.visits);
|
||||
}
|
||||
visits.push(visit);
|
||||
}
|
||||
|
||||
yield PlacesTestUtils.addVisits(visits);
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[0].uri), 5, "5 visits for uri found in history database");
|
||||
yield PlacesUtils.history.insertMany(visits);
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[0].url), 5, "5 visits for uri found in history database");
|
||||
|
||||
let testUrl = visits[6].uri.spec;
|
||||
let testUrl = visits[2].url;
|
||||
ok(yield PlacesTestUtils.isPageInDB(testUrl), "expected url found in history database");
|
||||
|
||||
extension.sendMessage("delete-url", testUrl);
|
||||
yield extension.awaitMessage("url-deleted");
|
||||
is(yield PlacesTestUtils.isPageInDB(testUrl), false, "expected url not found in history database");
|
||||
|
||||
// delete 3 of the 5 visits for url 1
|
||||
let filter = {
|
||||
startTime: PlacesUtils.toDate(visits[1].visitDate),
|
||||
endTime: PlacesUtils.toDate(visits[3].visitDate),
|
||||
startTime: visits[0].visits[0].date,
|
||||
endTime: visits[0].visits[2].date,
|
||||
};
|
||||
|
||||
extension.sendMessage("delete-range", filter);
|
||||
let removedUrls = yield extension.awaitMessage("range-deleted");
|
||||
ok(!removedUrls.includes(visits[0].uri.spec), `${visits[0].uri.spec} received by onVisitRemoved`);
|
||||
ok(!removedUrls.includes(visits[0].url), `${visits[0].url} not received by onVisitRemoved`);
|
||||
ok(yield PlacesTestUtils.isPageInDB(visits[0].url), "expected uri found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[0].url), 2, "2 visits for uri found in history database");
|
||||
ok(yield PlacesTestUtils.isPageInDB(visits[1].url), "expected uri found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[1].url), 1, "1 visit for uri found in history database");
|
||||
|
||||
ok(yield PlacesTestUtils.isPageInDB(visits[0].uri), "expected uri found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[0].uri), 2, "2 visits for uri found in history database");
|
||||
ok(yield PlacesTestUtils.isPageInDB(visits[5].uri), "expected uri found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[5].uri), 1, "1 visit for uri found in history database");
|
||||
|
||||
filter.startTime = PlacesUtils.toDate(visits[0].visitDate);
|
||||
filter.endTime = PlacesUtils.toDate(visits[5].visitDate);
|
||||
// delete the rest of the visits for url 1, and the visit for url 2
|
||||
filter.startTime = visits[0].visits[0].date;
|
||||
filter.endTime = visits[1].visits[0].date;
|
||||
|
||||
extension.sendMessage("delete-range", filter);
|
||||
yield extension.awaitMessage("range-deleted");
|
||||
|
||||
is(yield PlacesTestUtils.isPageInDB(visits[0].uri), false, "expected uri not found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[0].uri), 0, "0 visits for uri found in history database");
|
||||
is(yield PlacesTestUtils.isPageInDB(visits[5].uri), false, "expected uri not found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[5].uri), 0, "0 visits for uri found in history database");
|
||||
is(yield PlacesTestUtils.isPageInDB(visits[0].url), false, "expected uri not found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[0].url), 0, "0 visits for uri found in history database");
|
||||
is(yield PlacesTestUtils.isPageInDB(visits[1].url), false, "expected uri not found in history database");
|
||||
is(yield PlacesTestUtils.visitsInDB(visits[1].url), 0, "0 visits for uri found in history database");
|
||||
|
||||
ok(yield PlacesTestUtils.isPageInDB(visits[7].uri), "expected uri found in history database");
|
||||
ok(yield PlacesTestUtils.isPageInDB(visits[3].url), "expected uri found in history database");
|
||||
|
||||
extension.sendMessage("delete-all");
|
||||
[historyClearedCount, removedUrls] = yield extension.awaitMessage("history-cleared");
|
||||
is(PlacesUtils.history.hasHistoryEntries, false, "history is empty");
|
||||
is(historyClearedCount, 2, "onVisitRemoved called for each clearing of history");
|
||||
is(removedUrls.length, 3, "onVisitRemoved called the expected number of times");
|
||||
for (let index of [0, 5, 6]) {
|
||||
let url = visits[index].uri.spec;
|
||||
for (let i = 1; i < 3; ++i) {
|
||||
let url = visits[i].url;
|
||||
ok(removedUrls.includes(url), `${url} received by onVisitRemoved`);
|
||||
}
|
||||
yield extension.unload();
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"extends": "../../../../../testing/xpcshell/xpcshell.eslintrc",
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
"use strict";
|
||||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
||||
|
||||
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Extension",
|
||||
"resource://gre/modules/Extension.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionData",
|
||||
"resource://gre/modules/Extension.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
|
||||
"resource://gre/modules/NetUtil.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Schemas",
|
||||
"resource://gre/modules/Schemas.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
|
||||
Cu.import("resource://gre/modules/ExtensionManagement.jsm");
|
||||
|
||||
/* exported normalizeManifest */
|
||||
|
||||
let BASE_MANIFEST = {
|
||||
"applications": {"gecko": {"id": "test@web.ext"}},
|
||||
|
||||
"manifest_version": 2,
|
||||
|
||||
"name": "name",
|
||||
"version": "0",
|
||||
};
|
||||
|
||||
ExtensionManagement.registerSchema("chrome://browser/content/schemas/commands.json");
|
||||
|
||||
function* normalizeManifest(manifest, baseManifest = BASE_MANIFEST) {
|
||||
const {Management} = Cu.import("resource://gre/modules/Extension.jsm", {});
|
||||
|
||||
yield Management.lazyInit();
|
||||
|
||||
let errors = [];
|
||||
let context = {
|
||||
url: null,
|
||||
|
||||
logError: error => {
|
||||
errors.push(error);
|
||||
},
|
||||
|
||||
preprocessors: {},
|
||||
};
|
||||
|
||||
manifest = Object.assign({}, baseManifest, manifest);
|
||||
|
||||
let normalized = Schemas.normalize(manifest, "manifest.WebExtensionManifest", context);
|
||||
normalized.errors = errors;
|
||||
|
||||
return normalized;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
"use strict";
|
||||
|
||||
|
||||
add_task(function* test_manifest_commands() {
|
||||
let normalized = yield normalizeManifest({
|
||||
"commands": {
|
||||
"toggle-feature": {
|
||||
"suggested_key": {"default": "Shifty+Y"},
|
||||
"description": "Send a 'toggle-feature' event to the extension",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
let expectedError = (
|
||||
String.raw`commands.toggle-feature.suggested_key.default: Value must either: ` +
|
||||
String.raw`match the pattern /^\s*(Alt|Ctrl|Command|MacCtrl)\s*\+\s*(Shift\s*\+\s*)?([A-Z0-9]|Comma|Period|Home|End|PageUp|PageDown|Space|Insert|Delete|Up|Down|Left|Right)\s*$/, or ` +
|
||||
String.raw`match the pattern /^(MediaNextTrack|MediaPlayPause|MediaPrevTrack|MediaStop)$/`
|
||||
);
|
||||
|
||||
ok(normalized.error.includes(expectedError),
|
||||
`The manifest error ${JSON.stringify(normalized.error)} must contain ${JSON.stringify(expectedError)}`);
|
||||
});
|
|
@ -0,0 +1,6 @@
|
|||
[DEFAULT]
|
||||
head = head.js
|
||||
tail =
|
||||
firefox-appdir = browser
|
||||
|
||||
[test_ext_manifest_commands.js]
|
|
@ -491,7 +491,9 @@ GenericProtocolHandler.prototype = {
|
|||
},
|
||||
|
||||
get protocolFlags() {
|
||||
return this._http.protocolFlags;
|
||||
let {URI_DANGEROUS_TO_LOAD, ALLOWS_PROXY_HTTP, ALLOWS_PROXY} =
|
||||
Ci.nsIProtocolHandler;
|
||||
return URI_DANGEROUS_TO_LOAD | ALLOWS_PROXY | ALLOWS_PROXY_HTTP;
|
||||
},
|
||||
|
||||
get defaultPort() {
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
/* 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";
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["AutoMigrate"];
|
||||
|
||||
const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
|
||||
|
||||
Cu.import("resource:///modules/MigrationUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
const AutoMigrate = {
|
||||
get resourceTypesToUse() {
|
||||
let {BOOKMARKS, HISTORY, FORMDATA, PASSWORDS} = Ci.nsIBrowserProfileMigrator;
|
||||
return BOOKMARKS | HISTORY | FORMDATA | PASSWORDS;
|
||||
},
|
||||
|
||||
/**
|
||||
* Automatically pick a migrator and resources to migrate,
|
||||
* then migrate those and start up.
|
||||
*
|
||||
* @throws if automatically deciding on migrators/data
|
||||
* failed for some reason.
|
||||
*/
|
||||
migrate(profileStartup, migratorKey, profileToMigrate) {
|
||||
let histogram = Services.telemetry.getKeyedHistogramById("FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_SUCCEEDED");
|
||||
histogram.add("initialized");
|
||||
let migrator = this.pickMigrator(migratorKey);
|
||||
histogram.add("got-browser");
|
||||
|
||||
profileToMigrate = this.pickProfile(migrator, profileToMigrate);
|
||||
histogram.add("got-profile");
|
||||
|
||||
let resourceTypes = migrator.getMigrateData(profileToMigrate, profileStartup);
|
||||
if (!(resourceTypes & this.resourceTypesToUse)) {
|
||||
throw new Error("No usable resources were found for the selected browser!");
|
||||
}
|
||||
histogram.add("got-data");
|
||||
|
||||
let sawErrors = false;
|
||||
let migrationObserver = function(subject, topic, data) {
|
||||
if (topic == "Migration:ItemError") {
|
||||
sawErrors = true;
|
||||
} else if (topic == "Migration:Ended") {
|
||||
histogram.add(sawErrors ? "finished-with-errors" : "finished");
|
||||
Services.obs.removeObserver(migrationObserver, "Migration:Ended");
|
||||
Services.obs.removeObserver(migrationObserver, "Migration:ItemError");
|
||||
}
|
||||
};
|
||||
|
||||
Services.obs.addObserver(migrationObserver, "Migration:Ended", false);
|
||||
Services.obs.addObserver(migrationObserver, "Migration:ItemError", false);
|
||||
migrator.migrate(this.resourceTypesToUse, profileStartup, profileToMigrate);
|
||||
histogram.add("migrate-called-without-exceptions");
|
||||
},
|
||||
|
||||
/**
|
||||
* Pick and return a migrator to use for automatically migrating.
|
||||
*
|
||||
* @param {String} migratorKey optional, a migrator key to prefer/pick.
|
||||
* @returns the migrator to use for migrating.
|
||||
*/
|
||||
pickMigrator(migratorKey) {
|
||||
if (!migratorKey) {
|
||||
let defaultKey = MigrationUtils.getMigratorKeyForDefaultBrowser();
|
||||
if (!defaultKey) {
|
||||
throw new Error("Could not determine default browser key to migrate from");
|
||||
}
|
||||
migratorKey = defaultKey;
|
||||
}
|
||||
if (migratorKey == "firefox") {
|
||||
throw new Error("Can't automatically migrate from Firefox.");
|
||||
}
|
||||
|
||||
let migrator = MigrationUtils.getMigrator(migratorKey);
|
||||
if (!migrator) {
|
||||
throw new Error("Migrator specified or a default was found, but the migrator object is not available.");
|
||||
}
|
||||
return migrator;
|
||||
},
|
||||
|
||||
/**
|
||||
* Pick a source profile (from the original browser) to use.
|
||||
*
|
||||
* @param {Migrator} migrator the migrator object to use
|
||||
* @param {String} suggestedId the id of the profile to migrate, if pre-specified, or null
|
||||
* @returns the id of the profile to migrate, or null if migrating
|
||||
* from the default profile.
|
||||
*/
|
||||
pickProfile(migrator, suggestedId) {
|
||||
let profiles = migrator.sourceProfiles;
|
||||
if (profiles && !profiles.length) {
|
||||
throw new Error("No profile data found to migrate.");
|
||||
}
|
||||
if (suggestedId) {
|
||||
if (!profiles) {
|
||||
throw new Error("Profile specified but only a default profile found.");
|
||||
}
|
||||
let suggestedProfile = profiles.find(profile => profile.id == suggestedId);
|
||||
if (!suggestedProfile) {
|
||||
throw new Error("Profile specified was not found.");
|
||||
}
|
||||
return suggestedProfile.id;
|
||||
}
|
||||
if (profiles && profiles.length > 1) {
|
||||
throw new Error("Don't know how to pick a profile when more than 1 profile is present.");
|
||||
}
|
||||
return profiles ? profiles[0].id : null;
|
||||
},
|
||||
};
|
||||
|
|
@ -21,6 +21,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "BookmarkHTMLUtils",
|
|||
"resource://gre/modules/BookmarkHTMLUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PromiseUtils",
|
||||
"resource://gre/modules/PromiseUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate",
|
||||
"resource:///modules/AutoMigrate.jsm");
|
||||
|
||||
var gMigrators = null;
|
||||
var gProfileStartup = null;
|
||||
|
@ -95,7 +97,7 @@ this.MigratorPrototype = {
|
|||
* profiles.
|
||||
*
|
||||
* Each migration resource should provide:
|
||||
* - a |type| getter, retunring any of the migration types (see
|
||||
* - a |type| getter, returning any of the migration types (see
|
||||
* nsIBrowserProfileMigrator).
|
||||
*
|
||||
* - a |migrate| method, taking a single argument, aCallback(bool success),
|
||||
|
@ -696,8 +698,22 @@ this.MigrationUtils = Object.freeze({
|
|||
}
|
||||
}
|
||||
|
||||
let isRefresh = migrator && skipSourcePage &&
|
||||
migratorKey == AppConstants.MOZ_APP_NAME;
|
||||
|
||||
if (!isRefresh &&
|
||||
Services.prefs.getBoolPref("browser.migration.automigrate")) {
|
||||
try {
|
||||
AutoMigrate.migrate(aProfileStartup, aMigratorKey, aProfileToMigrate);
|
||||
return;
|
||||
} catch (ex) {
|
||||
// If automigration failed, continue and show the dialog.
|
||||
Cu.reportError(ex);
|
||||
}
|
||||
}
|
||||
|
||||
let migrationEntryPoint = this.MIGRATION_ENTRYPOINT_FIRSTRUN;
|
||||
if (migrator && skipSourcePage && migratorKey == AppConstants.MOZ_APP_NAME) {
|
||||
if (isRefresh) {
|
||||
migrationEntryPoint = this.MIGRATION_ENTRYPOINT_FXREFRESH;
|
||||
}
|
||||
|
||||
|
@ -721,6 +737,8 @@ this.MigrationUtils = Object.freeze({
|
|||
gMigrationBundle = null;
|
||||
},
|
||||
|
||||
gAvailableMigratorKeys,
|
||||
|
||||
MIGRATION_ENTRYPOINT_UNKNOWN: 0,
|
||||
MIGRATION_ENTRYPOINT_FIRSTRUN: 1,
|
||||
MIGRATION_ENTRYPOINT_FXREFRESH: 2,
|
||||
|
|
|
@ -27,6 +27,7 @@ EXTRA_PP_COMPONENTS += [
|
|||
]
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
'AutoMigrate.jsm',
|
||||
'MigrationUtils.jsm',
|
||||
]
|
||||
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
Cu.import("resource:///modules/MigrationUtils.jsm");
|
||||
let AutoMigrateBackstage = Cu.import("resource:///modules/AutoMigrate.jsm");
|
||||
|
||||
let gShimmedMigratorKeyPicker = null;
|
||||
let gShimmedMigrator = null;
|
||||
|
||||
// This is really a proxy on MigrationUtils, but if we specify that directly,
|
||||
// we get in trouble because the object itself is frozen, and Proxies can't
|
||||
// return a different value to an object when directly proxying a frozen
|
||||
// object.
|
||||
AutoMigrateBackstage.MigrationUtils = new Proxy({}, {
|
||||
get(target, name) {
|
||||
if (name == "getMigratorKeyForDefaultBrowser" && gShimmedMigratorKeyPicker) {
|
||||
return gShimmedMigratorKeyPicker;
|
||||
}
|
||||
if (name == "getMigrator" && gShimmedMigrator) {
|
||||
return function() { return gShimmedMigrator };
|
||||
}
|
||||
return MigrationUtils[name];
|
||||
},
|
||||
});
|
||||
|
||||
do_register_cleanup(function() {
|
||||
AutoMigrateBackstage.MigrationUtils = MigrationUtils;
|
||||
});
|
||||
|
||||
/**
|
||||
* Test automatically picking a browser to migrate from
|
||||
*/
|
||||
add_task(function* checkMigratorPicking() {
|
||||
Assert.throws(() => AutoMigrate.pickMigrator("firefox"),
|
||||
/Can't automatically migrate from Firefox/,
|
||||
"Should throw when explicitly picking Firefox.");
|
||||
|
||||
Assert.throws(() => AutoMigrate.pickMigrator("gobbledygook"),
|
||||
/migrator object is not available/,
|
||||
"Should throw when passing unknown migrator key");
|
||||
gShimmedMigratorKeyPicker = function() {
|
||||
return "firefox";
|
||||
};
|
||||
Assert.throws(() => AutoMigrate.pickMigrator(),
|
||||
/Can't automatically migrate from Firefox/,
|
||||
"Should throw when implicitly picking Firefox.");
|
||||
gShimmedMigratorKeyPicker = function() {
|
||||
return "gobbledygook";
|
||||
};
|
||||
Assert.throws(() => AutoMigrate.pickMigrator(),
|
||||
/migrator object is not available/,
|
||||
"Should throw when an unknown migrator is the default");
|
||||
gShimmedMigratorKeyPicker = function() {
|
||||
return "";
|
||||
};
|
||||
Assert.throws(() => AutoMigrate.pickMigrator(),
|
||||
/Could not determine default browser key/,
|
||||
"Should throw when an unknown migrator is the default");
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Test automatically picking a profile to migrate from
|
||||
*/
|
||||
add_task(function* checkProfilePicking() {
|
||||
let fakeMigrator = {sourceProfiles: [{id: "a"}, {id: "b"}]};
|
||||
Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator),
|
||||
/Don't know how to pick a profile when more/,
|
||||
"Should throw when there are multiple profiles.");
|
||||
Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator, "c"),
|
||||
/Profile specified was not found/,
|
||||
"Should throw when the profile supplied doesn't exist.");
|
||||
let profileToMigrate = AutoMigrate.pickProfile(fakeMigrator, "b");
|
||||
Assert.equal(profileToMigrate, "b", "Should return profile supplied");
|
||||
|
||||
fakeMigrator.sourceProfiles = null;
|
||||
Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator, "c"),
|
||||
/Profile specified but only a default profile found./,
|
||||
"Should throw when the profile supplied doesn't exist.");
|
||||
profileToMigrate = AutoMigrate.pickProfile(fakeMigrator);
|
||||
Assert.equal(profileToMigrate, null, "Should return default profile when that's the only one.");
|
||||
|
||||
fakeMigrator.sourceProfiles = [];
|
||||
Assert.throws(() => AutoMigrate.pickProfile(fakeMigrator),
|
||||
/No profile data found/,
|
||||
"Should throw when no profile data is present.");
|
||||
|
||||
fakeMigrator.sourceProfiles = [{id: "a"}];
|
||||
profileToMigrate = AutoMigrate.pickProfile(fakeMigrator);
|
||||
Assert.equal(profileToMigrate, "a", "Should return the only profile if only one is present.");
|
||||
});
|
||||
|
||||
/**
|
||||
* Test the complete automatic process including browser and profile selection,
|
||||
* and actual migration (which implies startup)
|
||||
*/
|
||||
add_task(function* checkIntegration() {
|
||||
gShimmedMigrator = {
|
||||
get sourceProfiles() {
|
||||
do_print("Read sourceProfiles");
|
||||
return null;
|
||||
},
|
||||
getMigrateData(profileToMigrate) {
|
||||
this._getMigrateDataArgs = profileToMigrate;
|
||||
return Ci.nsIBrowserProfileMigrator.BOOKMARKS;
|
||||
},
|
||||
migrate(types, startup, profileToMigrate) {
|
||||
this._migrateArgs = [types, startup, profileToMigrate];
|
||||
},
|
||||
};
|
||||
gShimmedMigratorKeyPicker = function() {
|
||||
return "gobbledygook";
|
||||
};
|
||||
AutoMigrate.migrate("startup");
|
||||
Assert.strictEqual(gShimmedMigrator._getMigrateDataArgs, null,
|
||||
"getMigrateData called with 'null' as a profile");
|
||||
|
||||
let {BOOKMARKS, HISTORY, FORMDATA, PASSWORDS} = Ci.nsIBrowserProfileMigrator;
|
||||
let expectedTypes = BOOKMARKS | HISTORY | FORMDATA | PASSWORDS;
|
||||
Assert.deepEqual(gShimmedMigrator._migrateArgs, [expectedTypes, "startup", null],
|
||||
"getMigrateData called with 'null' as a profile");
|
||||
});
|
|
@ -7,6 +7,7 @@ support-files =
|
|||
Library/**
|
||||
AppData/**
|
||||
|
||||
[test_automigration.js]
|
||||
[test_Chrome_cookies.js]
|
||||
skip-if = os != "mac" # Relies on ULibDir
|
||||
[test_Chrome_passwords.js]
|
||||
|
|
|
@ -312,6 +312,9 @@ BrowserGlue.prototype = {
|
|||
case "fxaccounts:onverified":
|
||||
this._showSyncStartedDoorhanger();
|
||||
break;
|
||||
case "fxaccounts:device_disconnected":
|
||||
this._onDeviceDisconnected();
|
||||
break;
|
||||
case "weave:engine:clients:display-uri":
|
||||
this._onDisplaySyncURI(subject);
|
||||
break;
|
||||
|
@ -530,6 +533,7 @@ BrowserGlue.prototype = {
|
|||
}
|
||||
os.addObserver(this, "weave:service:ready", false);
|
||||
os.addObserver(this, "fxaccounts:onverified", false);
|
||||
os.addObserver(this, "fxaccounts:device_disconnected", false);
|
||||
os.addObserver(this, "weave:engine:clients:display-uri", false);
|
||||
os.addObserver(this, "session-save", false);
|
||||
os.addObserver(this, "places-init-complete", false);
|
||||
|
@ -596,6 +600,7 @@ BrowserGlue.prototype = {
|
|||
}
|
||||
os.removeObserver(this, "weave:service:ready");
|
||||
os.removeObserver(this, "fxaccounts:onverified");
|
||||
os.removeObserver(this, "fxaccounts:device_disconnected");
|
||||
os.removeObserver(this, "weave:engine:clients:display-uri");
|
||||
os.removeObserver(this, "session-save");
|
||||
if (this._bookmarksBackupIdleTime) {
|
||||
|
@ -2505,6 +2510,19 @@ BrowserGlue.prototype = {
|
|||
}
|
||||
},
|
||||
|
||||
_onDeviceDisconnected() {
|
||||
let bundle = Services.strings.createBundle("chrome://browser/locale/accounts.properties");
|
||||
let title = bundle.GetStringFromName("deviceDisconnectedNotification.title");
|
||||
let body = bundle.GetStringFromName("deviceDisconnectedNotification.body");
|
||||
|
||||
let clickCallback = (subject, topic, data) => {
|
||||
if (topic != "alertclickcallback")
|
||||
return;
|
||||
this._openPreferences("sync");
|
||||
}
|
||||
AlertsService.showAlertNotification(null, title, body, true, null, clickCallback);
|
||||
},
|
||||
|
||||
_handleFlashHang: function() {
|
||||
++this._flashHangCount;
|
||||
if (this._flashHangCount < 2) {
|
||||
|
|
|
@ -169,7 +169,13 @@ var gSearchPane = {
|
|||
gSearchPane.remove(aEngine);
|
||||
break;
|
||||
case "engine-current":
|
||||
gSearchPane.buildDefaultEngineDropDown();
|
||||
// If the user is going through the drop down using up/down keys, the
|
||||
// dropdown may still be open (eg. on Windows) when engine-current is
|
||||
// fired, so rebuilding the list unconditionally would get in the way.
|
||||
let selectedEngine =
|
||||
document.getElementById("defaultEngine").selectedItem.engine;
|
||||
if (selectedEngine.name != aEngine.name)
|
||||
gSearchPane.buildDefaultEngineDropDown();
|
||||
break;
|
||||
case "engine-default":
|
||||
// Not relevant
|
||||
|
|
|
@ -28,3 +28,8 @@ verificationNotSentBody = We are unable to send a verification mail at this time
|
|||
# These strings are used in a notification shown after Sync is connected.
|
||||
syncStartNotification.title = Sync enabled
|
||||
syncStartNotification.body = Firefox will begin syncing momentarily.
|
||||
|
||||
# LOCALIZATION NOTE (deviceDisconnectedNotification.title, deviceDisconnectedNotification.body)
|
||||
# These strings are used in a notification shown after Sync was disconnected remotely.
|
||||
deviceDisconnectedNotification.title = Sync disconnected
|
||||
deviceDisconnectedNotification.body = This computer has been successfully disconnected from Firefox Sync.
|
||||
|
|
Двоичные данные
browser/themes/linux/Geolocation-16.png
До Ширина: | Высота: | Размер: 606 B |
Двоичные данные
browser/themes/linux/Geolocation-64.png
До Ширина: | Высота: | Размер: 7.9 KiB |
|
@ -16,8 +16,6 @@ browser.jar:
|
|||
* skin/classic/browser/browser-lightweightTheme.css
|
||||
skin/classic/browser/click-to-play-warning-stripes.png
|
||||
skin/classic/browser/content-contextmenu.svg
|
||||
skin/classic/browser/Geolocation-16.png
|
||||
skin/classic/browser/Geolocation-64.png
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/menuPanel.png
|
||||
skin/classic/browser/menuPanel@2x.png
|
||||
|
@ -34,8 +32,6 @@ browser.jar:
|
|||
* skin/classic/browser/pageInfo.css
|
||||
skin/classic/browser/pageInfo.png
|
||||
skin/classic/browser/page-livemarks.png
|
||||
skin/classic/browser/pointerLock-16.png
|
||||
skin/classic/browser/pointerLock-64.png
|
||||
skin/classic/browser/Privacy-16.png
|
||||
skin/classic/browser/privatebrowsing-mask.png
|
||||
skin/classic/browser/reload-stop-go.png
|
||||
|
|
Двоичные данные
browser/themes/linux/pointerLock-16.png
До Ширина: | Высота: | Размер: 249 B |
Двоичные данные
browser/themes/linux/pointerLock-64.png
До Ширина: | Высота: | Размер: 1.1 KiB |
|
@ -49,7 +49,7 @@
|
|||
-moz-image-region: rect(28px, 42px, 42px, 28px);
|
||||
}
|
||||
|
||||
.search-go-button:-moz-locale-dir(rtl) > .toolbarbutton-icon {
|
||||
.search-go-button:-moz-locale-dir(rtl) {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
|
@ -138,6 +138,10 @@ menuitem[cmd="cmd_clearhistory"][disabled] {
|
|||
background-position: right center;
|
||||
}
|
||||
|
||||
.searchbar-engine-one-off-item:-moz-locale-dir(rtl) {
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
.searchbar-engine-one-off-item:not(.last-row) {
|
||||
box-sizing: content-box;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
|
||||
|
|
Двоичные данные
browser/themes/osx/Geolocation-16.png
До Ширина: | Высота: | Размер: 312 B |
Двоичные данные
browser/themes/osx/Geolocation-16@2x.png
До Ширина: | Высота: | Размер: 666 B |
Двоичные данные
browser/themes/osx/Geolocation-64.png
До Ширина: | Высота: | Размер: 8.3 KiB |
Двоичные данные
browser/themes/osx/Geolocation-64@2x.png
До Ширина: | Высота: | Размер: 26 KiB |
|
@ -16,10 +16,6 @@ browser.jar:
|
|||
* skin/classic/browser/browser-lightweightTheme.css
|
||||
skin/classic/browser/click-to-play-warning-stripes.png
|
||||
skin/classic/browser/content-contextmenu.svg
|
||||
skin/classic/browser/Geolocation-16.png
|
||||
skin/classic/browser/Geolocation-16@2x.png
|
||||
skin/classic/browser/Geolocation-64.png
|
||||
skin/classic/browser/Geolocation-64@2x.png
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/keyhole-circle.png
|
||||
skin/classic/browser/keyhole-circle@2x.png
|
||||
|
@ -45,10 +41,6 @@ browser.jar:
|
|||
skin/classic/browser/page-livemarks.png
|
||||
skin/classic/browser/page-livemarks@2x.png
|
||||
skin/classic/browser/pageInfo.css
|
||||
skin/classic/browser/pointerLock-16.png
|
||||
skin/classic/browser/pointerLock-16@2x.png
|
||||
skin/classic/browser/pointerLock-64.png
|
||||
skin/classic/browser/pointerLock-64@2x.png
|
||||
skin/classic/browser/privatebrowsing-mask.png
|
||||
skin/classic/browser/privatebrowsing-mask@2x.png
|
||||
skin/classic/browser/privatebrowsing-mask-short.png
|
||||
|
|
Двоичные данные
browser/themes/osx/pointerLock-16.png
До Ширина: | Высота: | Размер: 249 B |
Двоичные данные
browser/themes/osx/pointerLock-16@2x.png
До Ширина: | Высота: | Размер: 411 B |
Двоичные данные
browser/themes/osx/pointerLock-64.png
До Ширина: | Высота: | Размер: 1.1 KiB |
Двоичные данные
browser/themes/osx/pointerLock-64@2x.png
До Ширина: | Высота: | Размер: 2.1 KiB |
|
@ -52,7 +52,7 @@
|
|||
-moz-image-region: rect(14px, 42px, 28px, 28px);
|
||||
}
|
||||
|
||||
.search-go-button:-moz-locale-dir(rtl) > .toolbarbutton-icon {
|
||||
.search-go-button:-moz-locale-dir(rtl) {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
|
@ -164,6 +164,10 @@
|
|||
background-position: right center;
|
||||
}
|
||||
|
||||
.searchbar-engine-one-off-item:-moz-locale-dir(rtl) {
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
.searchbar-engine-one-off-item:not(.last-row) {
|
||||
box-sizing: content-box;
|
||||
border-bottom: 1px solid #ccc;
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- 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/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<filter id="fill">
|
||||
<feComposite in="FillPaint" in2="SourceGraphic" operator="in"/>
|
||||
</filter>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 383 B |
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- 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/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
width="32" height="32" viewBox="0 0 32 32">
|
||||
<style>
|
||||
path:not(:target) {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<path id="camera" d="m 2,23 a 3,3 0 0 0 3,3 l 14,0 a 3,3 0 0 0 3,-3 l 0,-4 6,5.5 c 0.5,0.5 1,0.7 2,0.5 l 0,-18 c -1,-0.2 -1.5,0 -2,0.5 l -6,5.5 0,-4 a 3,3 0 0 0 -3,-3 l -14,0 a 3,3 0 0 0 -3,3 z" />
|
||||
<path id="geo-linux" d="m 2,15.9 a 14,14 0 1 1 0,0.2 z m 4,2.1 a 10,10 0 0 0 8,8 l 0,-4 4,0 0,4 a 10,10 0 0 0 8,-8 l -4,0 0,-4 4,0 a 10,10 0 0 0 -8,-8 l 0,4 -4,0 0,-4 a 10,10 0 0 0 -8,8 l 4,0 0,4 z" />
|
||||
<path id="geo-linux-detailed" d="m 2,15.9 a 14,14 0 1 1 0,0.2 z m 3,2.1 a 11,11 0 0 0 9,9 l 1,-5 2,0 1,5 a 11,11 0 0 0 9,-9 l -5,-1 0,-2 5,-1 a 11,11 0 0 0 -9,-9 l -1,5 -2,0 -1,-5 a 11,11 0 0 0 -9,9 l 5,1 0,2 z" />
|
||||
<path id="geo-osx" d="m 0,16 16,0 0,16 12,-28 z" />
|
||||
<path id="geo-windows" d="m 2,14 0,4 2,0 a 12,12 0 0 0 10,10 l 0,2 4,0 0,-2 a 12,12 0 0 0 10,-10 l 2,0 0,-4 -2,0 a 12,12 0 0 0 -10,-10 l 0,-2 -4,0 0,2 a 12,12 0 0 0 -10,10 z m 4,1.9 a 10,10 0 1 1 0,0.2 z m 4,0 a 6,6 0 1 1 0,0.2 z" />
|
||||
<path id="geo-windows-detailed" d="m 2,14.5 0,3 2,0.5 a 12,12 0 0 0 10,10 l 0.5,2 3,0 0.5,-2 a 12,12 0 0 0 10,-10 l 2,-0.5 0,-3 -2,-0.5 a 12,12 0 0 0 -10,-10 l -0.5,-2 -3,0 -0.5,2 a 12,12 0 0 0 -10,10 z m 4,1.4 a 10,10 0 1 1 0,0.2 z m 3,0 a 7,7 0 1 1 0,0.2 z" />
|
||||
<path id="indexedDB" d="m 2,24 a 4,4 0 0 0 4,4 l 2,0 0,-4 -2,0 0,-16 20,0 0,16 -2,0 0,4 2,0 a 4,4 0 0 0 4,-4 l 0,-16 a 4,4 0 0 0 -4,-4 l -20,0 a 4,4 0 0 0 -4,4 z m 8,-2 6,7 6,-7 -4,0 0,-8 -4,0 0,8 z" />
|
||||
<path id="login" d="m 2,26 0,4 6,0 0,-2 2,0 0,-2 1,0 0,-1 2,0 0,-3 2,0 2.5,-2.5 1.5,1.5 3,-3 a 8,8 0 1 0 -8,-8 l -3,3 2,2 z m 20,-18.1 a 2,2 0 1 1 0,0.2 z" />
|
||||
<path id="login-detailed" d="m 1,27 0,3.5 a 0.5,0.5 0 0 0 0.5,0.5 l 5,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-1.5 1.5,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-1.5 1,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-1 1,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-2 2,0 2.5,-2.5 q 0.5,-0.5 1,0 l 1,1 c 0.5,0.5 1,0.5 1.5,-0.5 l 1,-2 a 9,9 0 1 0 -8,-8 l -2,1 c -1,0.5 -1,1 -0.5,1.5 l 1.5,1.5 q 0.5,0.5 0,1 z m 21,-19.1 a 2,2 0 1 1 0,0.2 z" />
|
||||
<path id="microphone" d="m 8,14 0,4 a 8,8 0 0 0 6,7.7 l 0,2.3 -2,0 a 2,2 0 0 0 -2,2 l 12,0 a 2,2 0 0 0 -2,-2 l -2,0 0,-2.3 a 8,8 0 0 0 6,-7.7 l 0,-4 -2,0 0,4 a 6,6 0 0 1 -12,0 l 0,-4 z m 4,4 a 4,4 0 0 0 8,0 l 0,-12 a 4,4 0 0 0 -8,0 z" />
|
||||
<path id="microphone-detailed" d="m 8,18 a 8,8 0 0 0 6,7.7 l 0,2.3 -1,0 a 3,2 0 0 0 -3,2 l 12,0 a 3,2 0 0 0 -3,-2 l -1,0 0,-2.3 a 8,8 0 0 0 6,-7.7 l 0,-4 a 1,1 0 0 0 -2,0 l 0,4 a 6,6 0 0 1 -12,0 l 0,-4 a 1,1 0 0 0 -2,0 z m 4,0 a 4,4 0 0 0 8,0 l 0,-12 a 4,4 0 0 0 -8,0 z" />
|
||||
<path id="pointer" d="m 8,24 6,-5 5,10 4,-2 -5,-10 7,-1 -17,-14 z" />
|
||||
<path id="screen" d="m 2,18 a 2,2 0 0 0 2,2 l 2,0 0,-6 a 4,4 0 0 1 4,-4 l 14,0 0,-6 a 2,2 0 0 0 -2,-2 l -18,0 a 2,2 0 0 0 -2,2 z m 6,10 a 2,2 0 0 0 2,2 l 18,0 a 2,2 0 0 0 2,-2 l 0,-14 a 2,2 0 0 0 -2,-2 l -18,0 a 2,2 0 0 0 -2,2 z" />
|
||||
<path id="web-notifications" d="m 2,20 a 4,4 0 0 0 4,4 l 13,0 7,7 0,-7 a 4,4 0 0 0 4,-4 l 0,-12 a 4,4 0 0 0 -4,-4 l -20,0 a 4,4 0 0 0 -4,4 z m 5,-2 a 1,1 0 1 1 0,-2 l 10,0 a 1,1 0 1 1 0,2 z m 0,-4 a 1,1 0 1 1 0,-2 l 14,0 a 1,1 0 1 1 0,2 z m 0,-4 a 1,1 0 1 1 0,-2 l 18,0 a 1,1 0 1 1 0,2 z" />
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 3.4 KiB |
|
@ -54,8 +54,10 @@
|
|||
skin/classic/browser/download-blocked.svg (../shared/download-blocked.svg)
|
||||
skin/classic/browser/downloads/contentAreaDownloadsView.css (../shared/downloads/contentAreaDownloadsView.css)
|
||||
skin/classic/browser/drm-icon.svg (../shared/drm-icon.svg)
|
||||
skin/classic/browser/filters.svg (../shared/filters.svg)
|
||||
skin/classic/browser/fullscreen/insecure.svg (../shared/fullscreen/insecure.svg)
|
||||
skin/classic/browser/fullscreen/secure.svg (../shared/fullscreen/secure.svg)
|
||||
skin/classic/browser/glyphs.svg (../shared/glyphs.svg)
|
||||
skin/classic/browser/heartbeat-icon.svg (../shared/heartbeat-icon.svg)
|
||||
skin/classic/browser/heartbeat-star-lit.svg (../shared/heartbeat-star-lit.svg)
|
||||
skin/classic/browser/heartbeat-star-off.svg (../shared/heartbeat-star-off.svg)
|
||||
|
@ -133,26 +135,6 @@
|
|||
skin/classic/browser/notification-pluginAlert@2x.png (../shared/plugins/notification-pluginAlert@2x.png)
|
||||
skin/classic/browser/notification-pluginBlocked.png (../shared/plugins/notification-pluginBlocked.png)
|
||||
skin/classic/browser/notification-pluginBlocked@2x.png (../shared/plugins/notification-pluginBlocked@2x.png)
|
||||
skin/classic/browser/web-notifications-icon.svg (../shared/web-notifications-icon.svg)
|
||||
skin/classic/browser/web-notifications-tray.svg (../shared/web-notifications-tray.svg)
|
||||
skin/classic/browser/webRTC-shareDevice-16.png (../shared/webrtc/webRTC-shareDevice-16.png)
|
||||
skin/classic/browser/webRTC-shareDevice-16@2x.png (../shared/webrtc/webRTC-shareDevice-16@2x.png)
|
||||
skin/classic/browser/webRTC-shareDevice-64.png (../shared/webrtc/webRTC-shareDevice-64.png)
|
||||
skin/classic/browser/webRTC-shareDevice-64@2x.png (../shared/webrtc/webRTC-shareDevice-64@2x.png)
|
||||
skin/classic/browser/webRTC-sharingDevice-16.png (../shared/webrtc/webRTC-sharingDevice-16.png)
|
||||
skin/classic/browser/webRTC-sharingDevice-16@2x.png (../shared/webrtc/webRTC-sharingDevice-16@2x.png)
|
||||
skin/classic/browser/webRTC-shareMicrophone-16.png (../shared/webrtc/webRTC-shareMicrophone-16.png)
|
||||
skin/classic/browser/webRTC-shareMicrophone-16@2x.png (../shared/webrtc/webRTC-shareMicrophone-16@2x.png)
|
||||
skin/classic/browser/webRTC-shareMicrophone-64.png (../shared/webrtc/webRTC-shareMicrophone-64.png)
|
||||
skin/classic/browser/webRTC-shareMicrophone-64@2x.png (../shared/webrtc/webRTC-shareMicrophone-64@2x.png)
|
||||
skin/classic/browser/webRTC-sharingMicrophone-16.png (../shared/webrtc/webRTC-sharingMicrophone-16.png)
|
||||
skin/classic/browser/webRTC-sharingMicrophone-16@2x.png (../shared/webrtc/webRTC-sharingMicrophone-16@2x.png)
|
||||
skin/classic/browser/webRTC-shareScreen-16.png (../shared/webrtc/webRTC-shareScreen-16.png)
|
||||
skin/classic/browser/webRTC-shareScreen-16@2x.png (../shared/webrtc/webRTC-shareScreen-16@2x.png)
|
||||
skin/classic/browser/webRTC-shareScreen-64.png (../shared/webrtc/webRTC-shareScreen-64.png)
|
||||
skin/classic/browser/webRTC-shareScreen-64@2x.png (../shared/webrtc/webRTC-shareScreen-64@2x.png)
|
||||
skin/classic/browser/webRTC-sharingScreen-16.png (../shared/webrtc/webRTC-sharingScreen-16.png)
|
||||
skin/classic/browser/webRTC-sharingScreen-16@2x.png (../shared/webrtc/webRTC-sharingScreen-16@2x.png)
|
||||
skin/classic/browser/webRTC-camera-white-16.png (../shared/webrtc/camera-white-16.png)
|
||||
skin/classic/browser/webRTC-microphone-white-16.png (../shared/webrtc/microphone-white-16.png)
|
||||
skin/classic/browser/webRTC-screen-white-16.png (../shared/webrtc/screen-white-16.png)
|
||||
|
|
|
@ -4,14 +4,215 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
%endif
|
||||
|
||||
#notification-popup-box {
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
background-clip: padding-box;
|
||||
padding-left: 3px;
|
||||
border-width: 0 8px 0 0;
|
||||
border-style: solid;
|
||||
border-image: url("chrome://browser/skin/urlbar-arrow.png") 0 8 0 0 fill;
|
||||
margin-inline-end: -8px;
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
#notification-popup-box {
|
||||
border-image: url("chrome://browser/skin/urlbar-arrow@2x.png") 0 16 0 0 fill;
|
||||
}
|
||||
}
|
||||
|
||||
@conditionalForwardWithUrlbar@ > #forward-button[disabled] + #urlbar > #notification-popup-box {
|
||||
padding-left: calc(var(--backbutton-urlbar-overlap) + 3px);
|
||||
}
|
||||
|
||||
/* This changes the direction of the main notification box on the url bar. */
|
||||
#notification-popup-box:-moz-locale-dir(rtl),
|
||||
/* This adds a second flip for the notification anchors, as they don't switch direction
|
||||
for RTL mode. */
|
||||
.notification-anchor-icon:-moz-locale-dir(rtl) {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
/* For the anchor icons in the chat window, we don't have the notification popup box,
|
||||
so we need to cancel the RTL transform. */
|
||||
.notification-anchor-icon.chat-toolbarbutton:-moz-locale-dir(rtl) {
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* This class can be used alone or in combination with the class defining the
|
||||
type of icon displayed. This rule must be defined before the others in order
|
||||
for its list-style-image to be overridden. */
|
||||
.notification-anchor-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0 2px;
|
||||
%ifdef MOZ_WIDGET_GTK
|
||||
list-style-image: url(moz-icon://stock/gtk-dialog-info?size=16);
|
||||
%else
|
||||
list-style-image: url(chrome://global/skin/icons/information-16.png);
|
||||
%endif
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.notification-anchor-icon {
|
||||
%ifdef MOZ_WIDGET_GTK
|
||||
list-style-image: url(moz-icon://stock/gtk-dialog-info?size=dialog);
|
||||
%else
|
||||
list-style-image: url(chrome://global/skin/icons/information-32.png);
|
||||
%endif
|
||||
}
|
||||
}
|
||||
|
||||
.popup-notification-icon {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
margin-inline-end: 10px;
|
||||
}
|
||||
|
||||
/* INDIVIDUAL NOTIFICATIONS */
|
||||
|
||||
/* For the moment we apply the color filter only on the icons listed here.
|
||||
The first two selectors are used by socialchat.xml (bug 1275558). */
|
||||
.webRTC-sharingDevices-notification-icon,
|
||||
.webRTC-sharingMicrophone-notification-icon,
|
||||
.camera-icon,
|
||||
.geo-icon,
|
||||
.indexedDB-icon,
|
||||
.login-icon,
|
||||
.microphone-icon,
|
||||
.pointer-icon,
|
||||
.screen-icon,
|
||||
.web-notifications-icon,
|
||||
.popup-notification-icon[popupid="geolocation"],
|
||||
.popup-notification-icon[popupid="indexedDB-permissions-prompt"],
|
||||
.popup-notification-icon[popupid="password"],
|
||||
.popup-notification-icon[popupid="pointerLock"],
|
||||
.popup-notification-icon[popupid="webRTC-shareDevices"],
|
||||
.popup-notification-icon[popupid="webRTC-shareMicrophone"],
|
||||
.popup-notification-icon[popupid="webRTC-shareScreen"],
|
||||
.popup-notification-icon[popupid="webRTC-sharingDevices"],
|
||||
.popup-notification-icon[popupid="webRTC-sharingMicrophone"],
|
||||
.popup-notification-icon[popupid="webRTC-sharingScreen"],
|
||||
.popup-notification-icon[popupid="web-notifications"] {
|
||||
filter: url(chrome://browser/skin/filters.svg#fill);
|
||||
fill: #999;
|
||||
}
|
||||
|
||||
/* The first two selectors are used by socialchat.xml (bug 1275558). The
|
||||
notifications in the chat window are only shown when they are in use. */
|
||||
.webRTC-sharingDevices-notification-icon,
|
||||
.webRTC-sharingMicrophone-notification-icon,
|
||||
.in-use {
|
||||
fill: #fea01b;
|
||||
}
|
||||
|
||||
.geo-icon {
|
||||
%ifdef XP_MACOSX
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#geo-osx);
|
||||
%elif defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_QT)
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#geo-linux);
|
||||
%else
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#geo-windows);
|
||||
%endif
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="geolocation"] {
|
||||
list-style-image: url(chrome://browser/skin/Geolocation-64.png);
|
||||
%ifdef XP_MACOSX
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#geo-osx);
|
||||
%elif defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_QT)
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#geo-linux-detailed);
|
||||
%else
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#geo-windows-detailed);
|
||||
%endif
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="indexedDB-permissions-prompt"],
|
||||
.indexedDB-icon {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#indexedDB);
|
||||
}
|
||||
|
||||
.login-icon {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#login);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="password"] {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#login-detailed);
|
||||
}
|
||||
|
||||
#login-fill-notification-icon {
|
||||
/* Temporary solution until the capture and fill doorhangers are unified. */
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
/* The first selector is used by socialchat.xml (bug 1275558). */
|
||||
.webRTC-sharingDevices-notification-icon,
|
||||
.camera-icon,
|
||||
.popup-notification-icon[popupid="webRTC-shareDevices"],
|
||||
.popup-notification-icon[popupid="webRTC-sharingDevices"] {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#camera);
|
||||
}
|
||||
|
||||
/* The first selector is used by socialchat.xml (bug 1275558). */
|
||||
.webRTC-sharingMicrophone-notification-icon,
|
||||
.microphone-icon {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#microphone);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-shareMicrophone"],
|
||||
.popup-notification-icon[popupid="webRTC-sharingMicrophone"] {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#microphone-detailed);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-shareScreen"],
|
||||
.popup-notification-icon[popupid="webRTC-sharingScreen"],
|
||||
.screen-icon {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#screen);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="web-notifications"],
|
||||
.web-notifications-icon {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#web-notifications);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="pointerLock"],
|
||||
.pointer-icon {
|
||||
list-style-image: url(chrome://browser/skin/glyphs.svg#pointer);
|
||||
}
|
||||
|
||||
/* EME */
|
||||
|
||||
.popup-notification-icon[popupid="drmContentPlaying"],
|
||||
.drm-icon {
|
||||
list-style-image: url("chrome://browser/skin/drm-icon.svg#chains");
|
||||
}
|
||||
|
||||
.drm-icon:hover:active {
|
||||
list-style-image: url("chrome://browser/skin/drm-icon.svg#chains-pressed");
|
||||
}
|
||||
|
||||
#eme-notification-icon[firstplay=true] {
|
||||
animation: emeTeachingMoment 0.2s linear 0s 5 normal;
|
||||
}
|
||||
|
||||
@keyframes emeTeachingMoment {
|
||||
0% {transform: translateX(0); }
|
||||
25% {transform: translateX(3px) }
|
||||
75% {transform: translateX(-3px) }
|
||||
100% { transform: translateX(0); }
|
||||
}
|
||||
|
||||
/* INSTALL ADDONS */
|
||||
|
||||
.install-icon {
|
||||
list-style-image: url(chrome://browser/skin/addons/addon-install-anchor.svg#default);
|
||||
}
|
||||
|
||||
.install-icon:hover {
|
||||
list-style-image: url(chrome://browser/skin/addons/addon-install-anchor.svg#hover);
|
||||
}
|
||||
|
||||
.install-icon:hover:active {
|
||||
list-style-image: url(chrome://browser/skin/addons/addon-install-anchor.svg#active);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="xpinstall-disabled"],
|
||||
|
@ -48,125 +249,14 @@
|
|||
list-style-image: url(chrome://mozapps/skin/plugins/pluginBlocked-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="web-notifications"] {
|
||||
list-style-image: url(chrome://browser/skin/web-notifications-icon.svg);
|
||||
}
|
||||
/* OFFLINE APPS */
|
||||
|
||||
.popup-notification-icon[popupid="indexedDB-permissions-prompt"],
|
||||
.popup-notification-icon[popupid*="offline-app-requested"],
|
||||
.popup-notification-icon[popupid="offline-app-usage"] {
|
||||
list-style-image: url(chrome://global/skin/icons/question-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="password"] {
|
||||
list-style-image: url(chrome://mozapps/skin/passwordmgr/key-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingDevices"],
|
||||
.popup-notification-icon[popupid="webRTC-shareDevices"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareDevice-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingMicrophone"],
|
||||
.popup-notification-icon[popupid="webRTC-shareMicrophone"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareMicrophone-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingScreen"],
|
||||
.popup-notification-icon[popupid="webRTC-shareScreen"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareScreen-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="pointerLock"] {
|
||||
list-style-image: url(chrome://browser/skin/pointerLock-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="servicesInstall"] {
|
||||
list-style-image: url(chrome://browser/skin/social/services-64.png);
|
||||
}
|
||||
|
||||
/* Notification icon box */
|
||||
#notification-popup-box {
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
background-clip: padding-box;
|
||||
padding-left: 3px;
|
||||
border-width: 0 8px 0 0;
|
||||
border-style: solid;
|
||||
border-image: url("chrome://browser/skin/urlbar-arrow.png") 0 8 0 0 fill;
|
||||
margin-inline-end: -8px;
|
||||
}
|
||||
|
||||
@conditionalForwardWithUrlbar@ > #forward-button[disabled] + #urlbar > #notification-popup-box {
|
||||
padding-left: calc(var(--backbutton-urlbar-overlap) + 3px);
|
||||
}
|
||||
|
||||
/* This changes the direction of the main notification box on the url bar. */
|
||||
#notification-popup-box:-moz-locale-dir(rtl),
|
||||
/* This adds a second flip for the notification anchors, as they don't switch direction
|
||||
for RTL mode. */
|
||||
.notification-anchor-icon:-moz-locale-dir(rtl) {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
/* For the anchor icons in the chat window, we don't have the notification popup box,
|
||||
so we need to cancel the RTL transform. */
|
||||
.notification-anchor-icon.chat-toolbarbutton:-moz-locale-dir(rtl) {
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* This class can be used alone or in combination with the class defining the
|
||||
type of icon displayed. This rule must be defined before the others in order
|
||||
for its list-style-image to be overridden. */
|
||||
.notification-anchor-icon {
|
||||
%ifdef MOZ_WIDGET_GTK
|
||||
list-style-image: url(moz-icon://stock/gtk-dialog-info?size=16);
|
||||
%else
|
||||
list-style-image: url(chrome://global/skin/icons/information-16.png);
|
||||
%endif
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.notification-anchor-icon {
|
||||
%ifdef MOZ_WIDGET_GTK
|
||||
list-style-image: url(moz-icon://stock/gtk-dialog-info?size=dialog);
|
||||
%else
|
||||
list-style-image: url(chrome://global/skin/icons/information-32.png);
|
||||
%endif
|
||||
}
|
||||
}
|
||||
|
||||
.geo-icon {
|
||||
list-style-image: url(chrome://browser/skin/Geolocation-16.png);
|
||||
}
|
||||
|
||||
.install-icon {
|
||||
list-style-image: url(chrome://browser/skin/addons/addon-install-anchor.svg#default);
|
||||
}
|
||||
|
||||
.install-icon:hover {
|
||||
list-style-image: url(chrome://browser/skin/addons/addon-install-anchor.svg#hover);
|
||||
}
|
||||
|
||||
.install-icon:hover:active {
|
||||
list-style-image: url(chrome://browser/skin/addons/addon-install-anchor.svg#active);
|
||||
}
|
||||
|
||||
.indexedDB-icon {
|
||||
list-style-image: url(chrome://global/skin/icons/question-16.png);
|
||||
}
|
||||
|
||||
.login-icon {
|
||||
list-style-image: url(chrome://mozapps/skin/passwordmgr/key-16.png);
|
||||
}
|
||||
|
||||
#login-fill-notification-icon {
|
||||
/* Temporary solution until the capture and fill doorhangers are unified. */
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
/* PLUGINS */
|
||||
|
||||
.plugin-icon {
|
||||
list-style-image: url(chrome://browser/skin/notification-pluginNormal.png);
|
||||
|
@ -192,165 +282,8 @@
|
|||
-moz-image-region: rect(0, 48px, 16px, 32px);
|
||||
}
|
||||
|
||||
#notification-popup-box[hidden] {
|
||||
/* Override display:none to make the pluginBlockedNotification animation work
|
||||
when showing the notification repeatedly. */
|
||||
display: -moz-box;
|
||||
visibility: collapse;
|
||||
}
|
||||
|
||||
#plugins-notification-icon.plugin-blocked[showing] {
|
||||
animation: pluginBlockedNotification 500ms ease 0s 5 alternate both;
|
||||
}
|
||||
|
||||
@keyframes pluginBlockedNotification {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.camera-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16.png);
|
||||
}
|
||||
|
||||
/* The first selector is used by socialchat.xml (bug 1275558). */
|
||||
.webRTC-sharingDevices-notification-icon,
|
||||
.camera-icon.in-use {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-sharingDevice-16.png);
|
||||
}
|
||||
|
||||
.microphone-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareMicrophone-16.png);
|
||||
}
|
||||
|
||||
/* The first selector is used by socialchat.xml (bug 1275558). */
|
||||
.webRTC-sharingMicrophone-notification-icon,
|
||||
.microphone-icon.in-use {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-sharingMicrophone-16.png);
|
||||
}
|
||||
|
||||
.screen-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareScreen-16.png);
|
||||
}
|
||||
|
||||
.screen-icon.in-use {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-sharingScreen-16.png);
|
||||
}
|
||||
|
||||
.web-notifications-icon {
|
||||
list-style-image: url(chrome://browser/skin/web-notifications-tray.svg);
|
||||
-moz-image-region: rect(0, 16px, 16px, 0);
|
||||
}
|
||||
|
||||
.web-notifications-icon:hover {
|
||||
-moz-image-region: rect(0, 32px, 16px, 16px);
|
||||
}
|
||||
|
||||
.web-notifications-icon:hover:active {
|
||||
-moz-image-region: rect(0, 48px, 16px, 32px);
|
||||
}
|
||||
|
||||
.pointer-icon {
|
||||
list-style-image: url(chrome://browser/skin/pointerLock-16.png);
|
||||
}
|
||||
|
||||
.service-icon {
|
||||
list-style-image: url(chrome://browser/skin/social/services-16.png);
|
||||
}
|
||||
|
||||
.translation-icon {
|
||||
list-style-image: url(chrome://browser/skin/translation-16.png);
|
||||
-moz-image-region: rect(0px, 16px, 16px, 0px);
|
||||
}
|
||||
|
||||
.translation-icon.in-use {
|
||||
-moz-image-region: rect(0px, 32px, 16px, 16px);
|
||||
}
|
||||
|
||||
/* EME notifications */
|
||||
|
||||
.popup-notification-icon[popupid="drmContentPlaying"],
|
||||
.drm-icon {
|
||||
list-style-image: url("chrome://browser/skin/drm-icon.svg#chains");
|
||||
}
|
||||
|
||||
.drm-icon:hover:active {
|
||||
list-style-image: url("chrome://browser/skin/drm-icon.svg#chains-pressed");
|
||||
}
|
||||
|
||||
#eme-notification-icon[firstplay=true] {
|
||||
animation: emeTeachingMoment 0.2s linear 0s 5 normal;
|
||||
}
|
||||
|
||||
@keyframes emeTeachingMoment {
|
||||
0% {transform: translateX(0); }
|
||||
25% {transform: translateX(3px) }
|
||||
75% {transform: translateX(-3px) }
|
||||
100% { transform: translateX(0); }
|
||||
}
|
||||
|
||||
/* HiDPI notification icons */
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
#notification-popup-box {
|
||||
border-image: url("chrome://browser/skin/urlbar-arrow@2x.png") 0 16 0 0 fill;
|
||||
}
|
||||
|
||||
.camera-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16@2x.png);
|
||||
}
|
||||
|
||||
.camera-icon.in-use {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-sharingDevice-16@2x.png);
|
||||
}
|
||||
|
||||
.microphone-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareMicrophone-16@2x.png);
|
||||
}
|
||||
|
||||
.microphone-icon.in-use {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-sharingMicrophone-16@2x.png);
|
||||
}
|
||||
|
||||
.screen-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareScreen-16@2x.png);
|
||||
}
|
||||
|
||||
.screen-icon.in-use {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-sharingScreen-16@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingDevices"],
|
||||
.popup-notification-icon[popupid="webRTC-shareDevices"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareDevice-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingMicrophone"],
|
||||
.popup-notification-icon[popupid="webRTC-shareMicrophone"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareMicrophone-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingScreen"],
|
||||
.popup-notification-icon[popupid="webRTC-shareScreen"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareScreen-64@2x.png);
|
||||
}
|
||||
|
||||
%ifdef XP_MACOSX
|
||||
/* OSX only until we have icons for Windows and Linux */
|
||||
.geo-icon {
|
||||
list-style-image: url(chrome://browser/skin/Geolocation-16@2x.png);
|
||||
}
|
||||
|
||||
.indexedDB-icon {
|
||||
list-style-image: url(chrome://global/skin/icons/question-32.png);
|
||||
}
|
||||
|
||||
.login-icon {
|
||||
list-style-image: url(chrome://mozapps/skin/passwordmgr/key-16@2x.png);
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.plugin-icon {
|
||||
list-style-image: url(chrome://browser/skin/notification-pluginNormal@2x.png);
|
||||
}
|
||||
|
@ -374,11 +307,64 @@
|
|||
.plugin-icon:active {
|
||||
-moz-image-region: rect(0, 96px, 32px, 64px);
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
.pointer-icon {
|
||||
list-style-image: url(chrome://browser/skin/pointerLock-16@2x.png);
|
||||
#notification-popup-box[hidden] {
|
||||
/* Override display:none to make the pluginBlockedNotification animation work
|
||||
when showing the notification repeatedly. */
|
||||
display: -moz-box;
|
||||
visibility: collapse;
|
||||
}
|
||||
|
||||
#plugins-notification-icon.plugin-blocked[showing] {
|
||||
animation: pluginBlockedNotification 500ms ease 0s 5 alternate both;
|
||||
}
|
||||
|
||||
@keyframes pluginBlockedNotification {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* SOCIAL API */
|
||||
|
||||
.popup-notification-icon[popupid="servicesInstall"] {
|
||||
list-style-image: url(chrome://browser/skin/social/services-64.png);
|
||||
}
|
||||
|
||||
.service-icon {
|
||||
list-style-image: url(chrome://browser/skin/social/services-16.png);
|
||||
}
|
||||
|
||||
%ifdef XP_MACOSX
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.popup-notification-icon[popupid="servicesInstall"] {
|
||||
list-style-image: url(chrome://browser/skin/social/services-64@2x.png);
|
||||
}
|
||||
|
||||
.service-icon {
|
||||
list-style-image: url(chrome://browser/skin/social/services-16@2x.png);
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
/* TRANSLATION */
|
||||
|
||||
.translation-icon {
|
||||
list-style-image: url(chrome://browser/skin/translation-16.png);
|
||||
-moz-image-region: rect(0px, 16px, 16px, 0px);
|
||||
}
|
||||
|
||||
.translation-icon.in-use {
|
||||
-moz-image-region: rect(0px, 32px, 16px, 16px);
|
||||
}
|
||||
|
||||
%ifdef XP_MACOSX
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.translation-icon {
|
||||
list-style-image: url(chrome://browser/skin/translation-16@2x.png);
|
||||
-moz-image-region: rect(0px, 32px, 32px, 0px);
|
||||
|
@ -387,21 +373,5 @@
|
|||
.translation-icon.in-use {
|
||||
-moz-image-region: rect(0px, 64px, 32px, 32px);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="geolocation"] {
|
||||
list-style-image: url(chrome://browser/skin/Geolocation-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="pointerLock"] {
|
||||
list-style-image: url(chrome://browser/skin/pointerLock-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="servicesInstall"] {
|
||||
list-style-image: url(chrome://browser/skin/social/services-64@2x.png);
|
||||
}
|
||||
|
||||
.service-icon {
|
||||
list-style-image: url(chrome://browser/skin/social/services-16@2x.png);
|
||||
}
|
||||
%endif
|
||||
}
|
||||
%endif
|
||||
|
|
|
@ -18,5 +18,7 @@
|
|||
<path id="search-arrow-go-glyph" d="M1,7v2.2C1,9.8,1.4,10,2,10h7.5l-3,3.1c-0.4,0.3-0.4,1,0,1.4l0.8,0.8 c0.4,0.4,1,0.4,1.4,0l6.6-6.6c0.4-0.4,0.4-1,0-1.4L8.7,0.7c-0.4-0.4-1-0.4-1.4,0L6.5,1.6C6.1,2,6.1,2.6,6.5,3l3,3H2C1.4,6,1,6.4,1,7z"/>
|
||||
</defs>
|
||||
<use id="search-arrow-go" xlink:href="#search-arrow-go-glyph"/>
|
||||
<use id="search-arrow-go-rtl" transform="rotate(180 8 8)" xlink:href="#search-arrow-go-glyph"/>
|
||||
<use id="search-arrow-go-inverted" xlink:href="#search-arrow-go-glyph"/>
|
||||
<use id="search-arrow-go-rtl-inverted" transform="rotate(180 8 8)" xlink:href="#search-arrow-go-glyph"/>
|
||||
</svg>
|
||||
|
|
До Ширина: | Высота: | Размер: 926 B После Ширина: | Высота: | Размер: 1.1 KiB |
|
@ -1,6 +0,0 @@
|
|||
<!-- 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/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">
|
||||
<path fill="#a6a6a6" d="M53.6,8H10.4A6.4,6.4,0,0,0,4,14.4V41.6A6.4,6.4,0,0,0,10.4,48H12V62L26.7,48H53.6A6.4,6.4,0,0,0,60,41.6V14.4A6.4,6.4,0,0,0,53.6,8ZM34,36H14a2,2,0,0,1,0-4H34A2,2,0,0,1,34,36Zm8-8H14a2,2,0,0,1,0-4H42A2,2,0,0,1,42,28Zm8-8H14a2,2,0,0,1,0-4H50A2,2,0,0,1,50,20Z"/>
|
||||
</svg>
|
До Ширина: | Высота: | Размер: 586 B |
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- 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/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="16" viewBox="0 0 48 16">
|
||||
<defs>
|
||||
<style>
|
||||
.style-icon-notification {
|
||||
fill: #666;
|
||||
}
|
||||
.style-icon-notification.hover {
|
||||
fill: #808080;
|
||||
}
|
||||
.style-icon-notification.active {
|
||||
fill: #4d4d4d;
|
||||
}
|
||||
</style>
|
||||
<path id="shape-notifications-push" d="M13.4,2H2.6A1.6,1.6,0,0,0,1,3.6v6.8A1.6,1.6,0,0,0,2.6,12H3v3.5L6.7,12h6.7A1.6,1.6,0,0,0,15,10.4V3.6A1.6,1.6,0,0,0,13.4,2ZM8.5,9h-5a0.5,0.5,0,0,1,0-1h5A0.5,0.5,0,0,1,8.5,9Zm2-2h-7a0.5,0.5,0,0,1,0-1h7A0.5,0.5,0,0,1,10.5,7Zm2-2h-9a0.5,0.5,0,0,1,0-1h9A0.5,0.5,0,0,1,12.5,5Z"/>
|
||||
</defs>
|
||||
<use xlink:href="#shape-notifications-push" class="style-icon-notification"/>
|
||||
<use xlink:href="#shape-notifications-push" transform="translate(16)" class="style-icon-notification hover"/>
|
||||
<use xlink:href="#shape-notifications-push" transform="translate(32)" class="style-icon-notification active"/>
|
||||
</svg>
|
До Ширина: | Высота: | Размер: 1.2 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareDevice-16.png
До Ширина: | Высота: | Размер: 224 B |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareDevice-16@2x.png
До Ширина: | Высота: | Размер: 367 B |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareDevice-64.png
До Ширина: | Высота: | Размер: 1.1 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareDevice-64@2x.png
До Ширина: | Высота: | Размер: 1.6 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareMicrophone-16.png
До Ширина: | Высота: | Размер: 1.1 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareMicrophone-16@2x.png
До Ширина: | Высота: | Размер: 1.3 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareMicrophone-64.png
До Ширина: | Высота: | Размер: 2.5 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareMicrophone-64@2x.png
До Ширина: | Высота: | Размер: 5.6 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareScreen-16.png
До Ширина: | Высота: | Размер: 3.7 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareScreen-16@2x.png
До Ширина: | Высота: | Размер: 3.9 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareScreen-64.png
До Ширина: | Высота: | Размер: 4.6 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-shareScreen-64@2x.png
До Ширина: | Высота: | Размер: 5.6 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-sharingDevice-16.png
До Ширина: | Высота: | Размер: 3.8 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-sharingDevice-16@2x.png
До Ширина: | Высота: | Размер: 3.9 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-sharingMicrophone-16.png
До Ширина: | Высота: | Размер: 3.8 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-sharingMicrophone-16@2x.png
До Ширина: | Высота: | Размер: 4.0 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-sharingScreen-16.png
До Ширина: | Высота: | Размер: 3.7 KiB |
Двоичные данные
browser/themes/shared/webrtc/webRTC-sharingScreen-16@2x.png
До Ширина: | Высота: | Размер: 3.9 KiB |
Двоичные данные
browser/themes/windows/Geolocation-16.png
До Ширина: | Высота: | Размер: 704 B |
Двоичные данные
browser/themes/windows/Geolocation-64.png
До Ширина: | Высота: | Размер: 8.2 KiB |
|
@ -18,8 +18,6 @@ browser.jar:
|
|||
skin/classic/browser/caption-buttons.svg
|
||||
skin/classic/browser/click-to-play-warning-stripes.png
|
||||
skin/classic/browser/content-contextmenu.svg
|
||||
skin/classic/browser/Geolocation-16.png
|
||||
skin/classic/browser/Geolocation-64.png
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/Info-XP.png
|
||||
skin/classic/browser/keyhole-forward-mask.svg
|
||||
|
@ -49,8 +47,6 @@ browser.jar:
|
|||
skin/classic/browser/pageInfo.css
|
||||
skin/classic/browser/pageInfo.png
|
||||
skin/classic/browser/pageInfo-XP.png
|
||||
skin/classic/browser/pointerLock-16.png
|
||||
skin/classic/browser/pointerLock-64.png
|
||||
skin/classic/browser/privatebrowsing-mask-tabstrip.png
|
||||
skin/classic/browser/privatebrowsing-mask-tabstrip-XPVista7.png
|
||||
skin/classic/browser/privatebrowsing-mask-titlebar.png
|
||||
|
|
Двоичные данные
browser/themes/windows/pointerLock-16.png
До Ширина: | Высота: | Размер: 249 B |
Двоичные данные
browser/themes/windows/pointerLock-64.png
До Ширина: | Высота: | Размер: 1.0 KiB |
|
@ -44,8 +44,7 @@
|
|||
width: 14px;
|
||||
}
|
||||
|
||||
.search-go-button:-moz-locale-dir(rtl),
|
||||
.search-go-button:-moz-locale-dir(rtl) > .toolbarbutton-icon {
|
||||
.search-go-button:-moz-locale-dir(rtl) {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
|
@ -174,6 +173,10 @@
|
|||
background-position: right center;
|
||||
}
|
||||
|
||||
.searchbar-engine-one-off-item:-moz-locale-dir(rtl) {
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
.searchbar-engine-one-off-item:not(.last-row) {
|
||||
box-sizing: content-box;
|
||||
border-bottom: 1px solid #ccc;
|
||||
|
|
|
@ -54,8 +54,8 @@ function testScriptSrc(aCallback) {
|
|||
|
||||
/** <img src=""> tests **/
|
||||
var img_global = "chrome://global/skin/icons/Error.png";
|
||||
var img_mozapps = "chrome://mozapps/skin/passwordmgr/key-16.png";
|
||||
var res_mozapps = "resource://gre/chrome/toolkit/skin/classic/mozapps/passwordmgr/key-16.png";
|
||||
var img_mozapps = "chrome://mozapps/skin/plugins/contentPluginClose.png";
|
||||
var res_mozapps = "resource://gre/chrome/toolkit/skin/classic/mozapps/plugins/contentPluginClose.png";
|
||||
|
||||
var imgTests = [[img_global, "success"],
|
||||
[img_mozapps, "fail"],
|
||||
|
|
|
@ -29,8 +29,9 @@
|
|||
"mozilla/mark-test-function-used": 1,
|
||||
"mozilla/no-aArgs": 1,
|
||||
"mozilla/no-cpows-in-tests": 2,
|
||||
"mozilla/no-single-arg-cu-import": 2,
|
||||
// See bug 1224289.
|
||||
"mozilla/reject-importGlobalProperties": 1,
|
||||
"mozilla/reject-importGlobalProperties": 2,
|
||||
"mozilla/var-only-at-top-level": 1,
|
||||
|
||||
// Rules from the React plugin
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
|
||||
|
||||
var { loader, require } = Cu.import("resource://devtools/shared/Loader.jsm");
|
||||
var { loader, require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
var { Task } = require("devtools/shared/task");
|
||||
|
||||
loader.lazyRequireGetter(this, "promise");
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cu} = require("chrome");
|
||||
var {loader} = Cu.import("resource://devtools/shared/Loader.jsm");
|
||||
loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter");
|
||||
|
||||
const { LocalizationHelper } = require("devtools/client/shared/l10n");
|
||||
|
|
|
@ -5,10 +5,9 @@
|
|||
|
||||
var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
|
||||
|
||||
const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const { SideMenuWidget } = require("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
|
||||
const promise = require("promise");
|
||||
const Services = require("Services");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
|
|
|
@ -31,7 +31,7 @@ var { helpers, assert } = (function () {
|
|||
var cli = require("gcli/cli");
|
||||
var KeyEvent = require("gcli/util/util").KeyEvent;
|
||||
|
||||
const { GcliFront } = require("devtools/server/actors/gcli");
|
||||
const { GcliFront } = require("devtools/shared/fronts/gcli");
|
||||
|
||||
/**
|
||||
* See notes in helpers.checkOptions()
|
||||
|
@ -467,7 +467,7 @@ var { helpers, assert } = (function () {
|
|||
|
||||
// Send a message to add the commands to the content process
|
||||
const front = yield GcliFront.create(options.target);
|
||||
yield front._testOnly_addItemsByModule(MOCK_COMMANDS_URI);
|
||||
yield front._testOnlyAddItemsByModule(MOCK_COMMANDS_URI);
|
||||
|
||||
// This will cause the local set of commands to be updated with the
|
||||
// command proxies, wait for that to complete.
|
||||
|
@ -483,7 +483,7 @@ var { helpers, assert } = (function () {
|
|||
// Finally undo the mock commands and converters
|
||||
system.removeItems(converters);
|
||||
const removePromise = system.commands.onCommandsChange.once();
|
||||
yield front._testOnly_removeItemsByModule(MOCK_COMMANDS_URI);
|
||||
yield front._testOnlyRemoveItemsByModule(MOCK_COMMANDS_URI);
|
||||
yield removedDeferred.promise;
|
||||
|
||||
// And close everything down
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
/* 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";
|
||||
|
||||
/* import-globals-from ../../debugger-controller.js */
|
||||
|
||||
const actions = require("../actions/event-listeners");
|
||||
const { bindActionCreators } = require("devtools/client/shared/vendor/redux");
|
||||
const { Heritage, WidgetMethods } = require("devtools/client/shared/widgets/view-helpers");
|
||||
const { SideMenuWidget } = require("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
|
||||
|
||||
/**
|
||||
* Functions handling the event listeners UI.
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
/* 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/. */
|
||||
/* import-globals-from ../../debugger-controller.js */
|
||||
|
||||
"use strict";
|
||||
|
||||
/* import-globals-from ../../debugger-controller.js */
|
||||
|
||||
const utils = require("../utils");
|
||||
const {
|
||||
getSelectedSource,
|
||||
|
@ -24,6 +26,7 @@ const {
|
|||
setNamedTimeout
|
||||
} = require("devtools/client/shared/widgets/view-helpers");
|
||||
const { Task } = require("devtools/shared/task");
|
||||
const { SideMenuWidget } = require("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
|
||||
|
||||
const NEW_SOURCE_DISPLAY_DELAY = 200; // ms
|
||||
const FUNCTION_SEARCH_POPUP_POSITION = "topcenter bottomleft";
|
||||
|
|
|
@ -96,20 +96,19 @@ const FRAME_TYPE = {
|
|||
PUBLIC_CLIENT_EVAL: 3
|
||||
};
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://devtools/shared/event-emitter.js");
|
||||
Cu.import("resource://devtools/client/shared/widgets/SimpleListWidget.jsm");
|
||||
Cu.import("resource://devtools/client/shared/widgets/BreadcrumbsWidget.jsm");
|
||||
Cu.import("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
|
||||
Cu.import("resource://devtools/client/shared/widgets/VariablesView.jsm");
|
||||
Cu.import("resource://devtools/client/shared/widgets/VariablesViewController.jsm");
|
||||
|
||||
Cu.import("resource://devtools/client/shared/browser-loader.js");
|
||||
const { BrowserLoader } = Cu.import("resource://devtools/client/shared/browser-loader.js", {});
|
||||
const { require } = BrowserLoader({
|
||||
baseURI: "resource://devtools/client/debugger/",
|
||||
window,
|
||||
});
|
||||
const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
XPCOMUtils.defineConstant(this, "require", require);
|
||||
const { SimpleListWidget } = require("resource://devtools/client/shared/widgets/SimpleListWidget.jsm");
|
||||
const { BreadcrumbsWidget } = require("resource://devtools/client/shared/widgets/BreadcrumbsWidget.jsm");
|
||||
const { SideMenuWidget } = require("resource://devtools/client/shared/widgets/SideMenuWidget.jsm");
|
||||
const { VariablesView } = require("resource://devtools/client/shared/widgets/VariablesView.jsm");
|
||||
const { VariablesViewController, StackFrameUtils } = require("resource://devtools/client/shared/widgets/VariablesViewController.jsm");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const { gDevTools } = require("devtools/client/framework/devtools");
|
||||
const { ViewHelpers, Heritage, WidgetMethods, setNamedTimeout,
|
||||
clearNamedTimeout } = require("devtools/client/shared/widgets/view-helpers");
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
/* -*- 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/. */
|
||||
|
|
|
@ -28,10 +28,8 @@
|
|||
<script type="text/javascript" src="debugger-view.js"/>
|
||||
<script type="text/javascript" src="utils.js"/>
|
||||
<script type="text/javascript" src="views/workers-view.js"/>
|
||||
<script type="text/javascript" src="views/sources-view.js"/>
|
||||
<script type="text/javascript" src="views/variable-bubble-view.js"/>
|
||||
<script type="text/javascript" src="views/watch-expressions-view.js"/>
|
||||
<script type="text/javascript" src="views/event-listeners-view.js"/>
|
||||
<script type="text/javascript" src="views/global-search-view.js"/>
|
||||
<script type="text/javascript" src="views/toolbar-view.js"/>
|
||||
<script type="text/javascript" src="views/options-view.js"/>
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
var { interfaces: Ci, classes: Cc, utils: Cu } = Components;
|
||||
"use strict";
|
||||
|
||||
var { interfaces: Ci, utils: Cu } = Components;
|
||||
|
||||
function notify() {
|
||||
// Log objects so makeDebuggeeValue can get the global to use
|
||||
|
@ -9,13 +11,13 @@ function notify() {
|
|||
}
|
||||
|
||||
function startup(aParams, aReason) {
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
|
||||
let res = Services.io.getProtocolHandler("resource")
|
||||
.QueryInterface(Ci.nsIResProtocolHandler);
|
||||
res.setSubstitution("browser_dbg_addon4", aParams.resourceURI);
|
||||
|
||||
// Load a JS module
|
||||
Cu.import("resource://browser_dbg_addon4/test.jsm");
|
||||
Cu.import("resource://browser_dbg_addon4/test.jsm"); // eslint-disable-line mozilla/no-single-arg-cu-import
|
||||
// Log objects so makeDebuggeeValue can get the global to use
|
||||
console.log({ msg: "Hello from the test add-on" });
|
||||
|
||||
|
|
|
@ -2,10 +2,6 @@
|
|||
* 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/. */
|
||||
|
||||
/* FIXME: remove this globals comment and replace with import-globals-from when
|
||||
bug 1242893 is fixed */
|
||||
/* globals BrowserToolboxProcess */
|
||||
|
||||
/**
|
||||
* This XPCOM component is loaded very early.
|
||||
* It handles command line arguments like -jsconsole, but also ensures starting
|
||||
|
@ -22,7 +18,7 @@ const kDebuggerPrefs = [
|
|||
"devtools.debugger.remote-enabled",
|
||||
"devtools.chrome.enabled"
|
||||
];
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm");
|
||||
|
||||
function DevToolsStartup() {}
|
||||
|
@ -126,7 +122,7 @@ DevToolsStartup.prototype = {
|
|||
if (!this._isRemoteDebuggingEnabled()) {
|
||||
return;
|
||||
}
|
||||
Cu.import("resource://devtools/client/framework/ToolboxProcess.jsm");
|
||||
const { BrowserToolboxProcess } = Cu.import("resource://devtools/client/framework/ToolboxProcess.jsm", {});
|
||||
BrowserToolboxProcess.init();
|
||||
|
||||
if (cmdLine.state == Ci.nsICommandLine.STATE_REMOTE_AUTO) {
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
* 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");
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci} = require("chrome");
|
||||
const {rgbToHsl, rgbToColorName} =
|
||||
require("devtools/client/shared/css-color").colorUtils;
|
||||
const Telemetry = require("devtools/client/shared/telemetry");
|
||||
const {EventEmitter} = Cu.import("resource://devtools/shared/event-emitter.js");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const promise = require("promise");
|
||||
const Services = require("Services");
|
||||
|
||||
|
@ -182,7 +184,8 @@ Eyedropper.prototype = {
|
|||
* Get color of center cell in the grid.
|
||||
*/
|
||||
get centerColor() {
|
||||
let x = y = (this.centerCell * this.cellSize) + (this.cellSize / 2);
|
||||
let x, y;
|
||||
x = y = (this.centerCell * this.cellSize) + (this.cellSize / 2);
|
||||
let rgb = this._ctx.getImageData(x, y, 1, 1).data;
|
||||
return rgb;
|
||||
},
|
||||
|
@ -727,7 +730,8 @@ Eyedropper.prototype = {
|
|||
* Draw a box on the canvas to highlight the center cell.
|
||||
*/
|
||||
_drawCrosshair: function () {
|
||||
let x = y = this.centerCell * this.cellSize;
|
||||
let x, y;
|
||||
x = y = this.centerCell * this.cellSize;
|
||||
|
||||
this._ctx.lineWidth = 1;
|
||||
this._ctx.lineJoin = "miter";
|
||||
|
|
|
@ -11,8 +11,8 @@ const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
|
|||
const DBG_XUL = "chrome://devtools/content/framework/toolbox-process-window.xul";
|
||||
const CHROME_DEBUGGER_PROFILE_NAME = "chrome_debugger_profile";
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const { require, DevToolsLoader } = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "Telemetry", function () {
|
||||
return require("devtools/client/shared/telemetry");
|
||||
|
|
|
@ -7,13 +7,12 @@
|
|||
"use strict";
|
||||
|
||||
var Cu = Components.utils;
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
var {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
var {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
var Services = require("Services");
|
||||
var {gDevTools} = require("devtools/client/framework/devtools");
|
||||
var {TargetFactory} = require("devtools/client/framework/target");
|
||||
var {Toolbox} = require("devtools/client/framework/toolbox");
|
||||
var promise = require("promise");
|
||||
var {DebuggerClient} = require("devtools/shared/client/main");
|
||||
var {Task} = require("devtools/shared/task");
|
||||
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
/* -*- 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 {Cu} = require("chrome");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
"use strict";
|
||||
|
||||
var {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
var Services = require("Services");
|
||||
var {Task} = require("devtools/shared/task");
|
||||
var EventEmitter = require("devtools/shared/event-emitter");
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
/* -*- 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const { Ci, Cu } = require("chrome");
|
||||
const { Ci } = require("chrome");
|
||||
const promise = require("promise");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const Services = require("Services");
|
||||
const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
|
||||
loader.lazyRequireGetter(this, "DebuggerClient",
|
||||
"devtools/shared/client/main", true);
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
|
||||
/**
|
||||
* Check that the detached devtools window title is not updated when switching
|
||||
* the selected frame.
|
||||
* the selected frame. Also check that frames command button has 'open'
|
||||
* attribute set when the list of frames is opened.
|
||||
*/
|
||||
|
||||
var {Toolbox} = require("devtools/client/framework/toolbox");
|
||||
|
@ -35,10 +36,14 @@ add_task(function* () {
|
|||
yield waitForTick();
|
||||
|
||||
// Open frame menu and wait till it's available on the screen.
|
||||
// Also check 'open' attribute on the command button.
|
||||
let btn = toolbox.doc.getElementById("command-button-frames");
|
||||
ok(!btn.getAttribute("open"), "The open attribute must not be present");
|
||||
let menu = toolbox.showFramesMenu({target: btn});
|
||||
yield once(menu, "open");
|
||||
|
||||
is(btn.getAttribute("open"), "true", "The open attribute must be set");
|
||||
|
||||
// Verify that the frame list menu is populated
|
||||
let frames = menu.items;
|
||||
is(frames.length, 2, "We have both frames in the list");
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cu} = require("chrome");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const promise = require("promise");
|
||||
const Services = require("Services");
|
||||
Cu.import("resource://devtools/client/shared/DOMHelpers.jsm");
|
||||
const {DOMHelpers} = require("resource://devtools/client/shared/DOMHelpers.jsm");
|
||||
|
||||
loader.lazyRequireGetter(this, "system", "devtools/shared/system");
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
/* -*- 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/. */
|
||||
|
@ -26,9 +24,7 @@ var viewSource = require("devtools/client/shared/view-source");
|
|||
var { attachThread, detachThread } = require("./attach-thread");
|
||||
var Menu = require("devtools/client/framework/menu");
|
||||
var MenuItem = require("devtools/client/framework/menu-item");
|
||||
|
||||
Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm");
|
||||
Cu.import("resource://devtools/client/shared/DOMHelpers.jsm");
|
||||
var { DOMHelpers } = require("resource://devtools/client/shared/DOMHelpers.jsm");
|
||||
|
||||
const { BrowserLoader } =
|
||||
Cu.import("resource://devtools/client/shared/browser-loader.js", {});
|
||||
|
@ -1619,6 +1615,7 @@ Toolbox.prototype = {
|
|||
*/
|
||||
showFramesMenu: function (event) {
|
||||
let menu = new Menu();
|
||||
let target = event.target;
|
||||
|
||||
// Generate list of menu items from the list of frames.
|
||||
this.frameMap.forEach(frame => {
|
||||
|
@ -1636,14 +1633,22 @@ Toolbox.prototype = {
|
|||
}));
|
||||
});
|
||||
|
||||
menu.once("open").then(() => {
|
||||
target.setAttribute("open", "true");
|
||||
});
|
||||
|
||||
menu.once("close").then(() => {
|
||||
target.removeAttribute("open");
|
||||
});
|
||||
|
||||
// Show a drop down menu with frames.
|
||||
// XXX Missing menu API for specifying target (anchor)
|
||||
// and relative position to it. See also:
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/openPopup
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1274551
|
||||
let rect = event.target.getBoundingClientRect();
|
||||
let screenX = event.target.ownerDocument.defaultView.mozInnerScreenX;
|
||||
let screenY = event.target.ownerDocument.defaultView.mozInnerScreenY;
|
||||
let rect = target.getBoundingClientRect();
|
||||
let screenX = target.ownerDocument.defaultView.mozInnerScreenX;
|
||||
let screenY = target.ownerDocument.defaultView.mozInnerScreenY;
|
||||
menu.popup(rect.left + screenX, rect.bottom + screenY, this);
|
||||
|
||||
return menu;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
const {Cc, Ci} = require("chrome");
|
||||
|
||||
const ToolDefinitions = require("devtools/client/definitions").Tools;
|
||||
const {CssLogic} = require("devtools/shared/inspector/css-logic");
|
||||
|
@ -19,6 +19,7 @@ const {OutputParser} = require("devtools/client/shared/output-parser");
|
|||
const {PrefObserver, PREF_ORIG_SOURCES} = require("devtools/client/styleeditor/utils");
|
||||
const {createChild} = require("devtools/client/inspector/shared/utils");
|
||||
const {gDevTools} = require("devtools/client/framework/devtools");
|
||||
const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
loader.lazyRequireGetter(this, "overlays",
|
||||
"devtools/client/inspector/shared/style-inspector-overlays");
|
||||
|
@ -27,8 +28,6 @@ loader.lazyRequireGetter(this, "StyleInspectorMenu",
|
|||
loader.lazyRequireGetter(this, "KeyShortcuts",
|
||||
"devtools/client/shared/key-shortcuts", true);
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
|
||||
"resource://gre/modules/PluralForm.jsm");
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Cu, Ci} = require("chrome");
|
||||
const {Cc, Ci} = require("chrome");
|
||||
|
||||
// Page size for pageup/pagedown
|
||||
const PAGE_SIZE = 10;
|
||||
|
@ -49,8 +49,7 @@ const {PrefObserver} = require("devtools/client/styleeditor/utils");
|
|||
const {KeyShortcuts} = require("devtools/client/shared/key-shortcuts");
|
||||
const {template} = require("devtools/shared/gcli/templater");
|
||||
const nodeConstants = require("devtools/shared/dom-node-constants");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
loader.lazyRequireGetter(this, "CSS", "CSS");
|
||||
loader.lazyGetter(this, "DOMParser", () => {
|
||||
|
|
|
@ -6,13 +6,12 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
const {Cc, Ci} = require("chrome");
|
||||
const promise = require("promise");
|
||||
const {Rule} = require("devtools/client/inspector/rules/models/rule");
|
||||
const {promiseWarn} = require("devtools/client/inspector/shared/utils");
|
||||
const {ELEMENT_STYLE} = require("devtools/server/actors/styles");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
loader.lazyGetter(this, "PSEUDO_ELEMENTS", () => {
|
||||
return domUtils.getCSSPseudoElementNames();
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
const {Cc, Ci} = require("chrome");
|
||||
const promise = require("promise");
|
||||
const {CssLogic} = require("devtools/shared/inspector/css-logic");
|
||||
const {ELEMENT_STYLE} = require("devtools/server/actors/styles");
|
||||
|
@ -15,8 +15,7 @@ const {TextProperty} =
|
|||
const {promiseWarn} = require("devtools/client/inspector/shared/utils");
|
||||
const {parseDeclarations} = require("devtools/shared/css-parsing-utils");
|
||||
const {getCssProperties} = require("devtools/shared/fronts/css-properties");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "osString", function () {
|
||||
return Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS;
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
const {Cc, Ci} = require("chrome");
|
||||
const {escapeCSSComment} = require("devtools/shared/css-parsing-utils");
|
||||
const {getCssProperties} = require("devtools/shared/fronts/css-properties");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "domUtils", function () {
|
||||
return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"use strict";
|
||||
|
||||
// Testing navigation between nodes in search results
|
||||
var {AppConstants} = Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
const {AppConstants} = require("resource://gre/modules/AppConstants.jsm");
|
||||
|
||||
const TEST_URL = URL_ROOT + "doc_inspector_search.html";
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ define(function (require, exports, module) {
|
|||
const { JsonPanel } = createFactories(require("./json-panel"));
|
||||
const { TextPanel } = createFactories(require("./text-panel"));
|
||||
const { HeadersPanel } = createFactories(require("./headers-panel"));
|
||||
const { Tabs, TabPanel } = createFactories(require("./reps/tabs"));
|
||||
const { Tabs, TabPanel } = createFactories(require("devtools/client/shared/components/tabs/tabs"));
|
||||
|
||||
/**
|
||||
* This object represents the root application template
|
||||
|
|
|
@ -5,6 +5,5 @@
|
|||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DevToolsModules(
|
||||
'tabs.js',
|
||||
'toolbar.js',
|
||||
)
|
||||
|
|