merge fx-team to mozilla-inbound a=merge

This commit is contained in:
Carsten "Tomcat" Book 2016-06-10 15:34:37 +02:00
Родитель c3467fda07 c7b3a300d9
Коммит 9878cdd37a
276 изменённых файлов: 3563 добавлений и 1564 удалений

Просмотреть файл

@ -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

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 224 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 367 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.6 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.3 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 2.5 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 5.6 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 3.7 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 3.9 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 4.6 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 5.6 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 3.8 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 3.9 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 3.8 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 4.0 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 3.7 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 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',
)

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше