Merge mozilla-central to mozilla-inbound

This commit is contained in:
Carsten "Tomcat" Book 2015-05-18 13:48:26 +02:00
Родитель dd632f0b5d 09631fba2e
Коммит 72a871bbf8
54 изменённых файлов: 1143 добавлений и 1030 удалений

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

@ -515,6 +515,8 @@
@RESPATH@/components/RILSystemMessengerHelper.manifest
@RESPATH@/components/TelephonyAudioService.js
@RESPATH@/components/TelephonyAudioService.manifest
@RESPATH@/components/USSDReceivedWrapper.js
@RESPATH@/components/USSDReceivedWrapper.manifest
#ifndef DISABLE_MOZ_RIL_GEOLOC
@RESPATH@/components/TelephonyService.js
@RESPATH@/components/TelephonyService.manifest

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

@ -1406,6 +1406,8 @@ pref("devtools.inspector.showUserAgentStyles", false);
pref("devtools.inspector.showAllAnonymousContent", false);
// Enable the MDN docs tooltip
pref("devtools.inspector.mdnDocsTooltip.enabled", true);
// Show the new animation inspector UI
pref("devtools.inspector.animationInspectorV3", false);
// DevTools default color unit
pref("devtools.defaultColorUnit", "hex");

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

@ -38,7 +38,7 @@
onselect="AboutPermissions.onSitesListSelect(event);">
<richlistitem id="all-sites-item"
class="site"
value="&sites.allSites;"/>
value="&sites.allSites;"/>
</richlistbox>
</vbox>
@ -63,217 +63,220 @@
</hbox>
</deck>
<!-- Passwords -->
<hbox id="password-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="password"/>
<vbox>
<label class="pref-title" value="&password.label;"/>
<hbox align="center">
<menulist id="password-menulist"
class="pref-menulist"
type="password"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="password-1" value="1" label="&permission.allow;"/>
<menuitem id="password-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
<button id="passwords-manage-all-button"
label="&password.manage;"
oncommand="AboutPermissions.managePasswords();"/>
</hbox>
<hbox id="passwords-count" align="center">
<label id="passwords-label"/>
<button id="passwords-manage-button"
label="&password.manage;"
oncommand="AboutPermissions.managePasswords();"/>
</hbox>
</vbox>
</hbox>
<vbox id="permissions-list" flex="1">
<!-- Geolocation -->
<hbox id="geo-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="geo"/>
<vbox>
<label class="pref-title" value="&geo.label;"/>
<hbox>
<menulist id="geo-menulist"
class="pref-menulist"
type="geo"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="geo-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="geo-1" value="1" label="&permission.allow;"/>
<menuitem id="geo-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Passwords -->
<hbox id="password-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="password"/>
<vbox>
<label class="pref-title" value="&password.label;"/>
<hbox align="center">
<menulist id="password-menulist"
class="pref-menulist"
type="password"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="password-1" value="1" label="&permission.allow;"/>
<menuitem id="password-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
<button id="passwords-manage-all-button"
label="&password.manage;"
oncommand="AboutPermissions.managePasswords();"/>
</hbox>
<hbox id="passwords-count" align="center">
<label id="passwords-label"/>
<button id="passwords-manage-button"
label="&password.manage;"
oncommand="AboutPermissions.managePasswords();"/>
</hbox>
</vbox>
</hbox>
<!-- Camera -->
<hbox id="camera-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="camera"/>
<vbox>
<label class="pref-title" value="&camera.label;"/>
<hbox align="center">
<menulist id="camera-menulist"
class="pref-menulist"
type="camera"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="camera-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="camera-1" value="1" label="&permission.allow;"/>
<menuitem id="camera-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Geolocation -->
<hbox id="geo-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="geo"/>
<vbox>
<label class="pref-title" value="&geo.label;"/>
<hbox>
<menulist id="geo-menulist"
class="pref-menulist"
type="geo"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="geo-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="geo-1" value="1" label="&permission.allow;"/>
<menuitem id="geo-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Microphone -->
<hbox id="microphone-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="microphone"/>
<vbox>
<label class="pref-title" value="&microphone.label;"/>
<hbox align="center">
<menulist id="microphone-menulist"
class="pref-menulist"
type="microphone"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="microphone-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="microphone-1" value="1" label="&permission.allow;"/>
<menuitem id="microphone-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Camera -->
<hbox id="camera-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="camera"/>
<vbox>
<label class="pref-title" value="&camera.label;"/>
<hbox align="center">
<menulist id="camera-menulist"
class="pref-menulist"
type="camera"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="camera-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="camera-1" value="1" label="&permission.allow;"/>
<menuitem id="camera-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Cookies -->
<hbox id="cookie-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="cookie"/>
<vbox>
<label class="pref-title" value="&cookie.label;"/>
<hbox align="center">
<menulist id="cookie-menulist"
class="pref-menulist"
type="cookie"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="cookie-1" value="1" label="&permission.allow;"/>
<menuitem id="cookie-8" value="8" label="&permission.allowForSession;"/>
<menuitem id="cookie-9" value="9" label="&permission.allowFirstPartyOnly;"/>
<menuitem id="cookie-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
<button id="cookies-clear-all-button"
label="&cookie.removeAll;"
oncommand="Services.cookies.removeAll();"/>
<button id="cookies-manage-all-button"
label="&cookie.manage;"
oncommand="AboutPermissions.manageCookies();"/>
</hbox>
<hbox id="cookies-count" align="center">
<label id="cookies-label"/>
<button id="cookies-clear-button"
label="&cookie.remove;"
oncommand="AboutPermissions.clearCookies();"/>
<button id="cookies-manage-button"
label="&cookie.manage;"
oncommand="AboutPermissions.manageCookies();"/>
</hbox>
</vbox>
</hbox>
<!-- Microphone -->
<hbox id="microphone-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="microphone"/>
<vbox>
<label class="pref-title" value="&microphone.label;"/>
<hbox align="center">
<menulist id="microphone-menulist"
class="pref-menulist"
type="microphone"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="microphone-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="microphone-1" value="1" label="&permission.allow;"/>
<menuitem id="microphone-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Pop-up Blocking -->
<hbox id="popup-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="popup"/>
<vbox>
<label class="pref-title" value="&popup.label;"/>
<hbox>
<menulist id="popup-menulist"
class="pref-menulist"
type="popup"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="popup-1" value="1" label="&permission.allow;"/>
<menuitem id="popup-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Cookies -->
<hbox id="cookie-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="cookie"/>
<vbox>
<label class="pref-title" value="&cookie.label;"/>
<hbox align="center">
<menulist id="cookie-menulist"
class="pref-menulist"
type="cookie"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="cookie-1" value="1" label="&permission.allow;"/>
<menuitem id="cookie-8" value="8" label="&permission.allowForSession;"/>
<menuitem id="cookie-9" value="9" label="&permission.allowFirstPartyOnly;"/>
<menuitem id="cookie-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
<button id="cookies-clear-all-button"
label="&cookie.removeAll;"
oncommand="Services.cookies.removeAll();"/>
<button id="cookies-manage-all-button"
label="&cookie.manage;"
oncommand="AboutPermissions.manageCookies();"/>
</hbox>
<hbox id="cookies-count" align="center">
<label id="cookies-label"/>
<button id="cookies-clear-button"
label="&cookie.remove;"
oncommand="AboutPermissions.clearCookies();"/>
<button id="cookies-manage-button"
label="&cookie.manage;"
oncommand="AboutPermissions.manageCookies();"/>
</hbox>
</vbox>
</hbox>
<!-- IndexedDB Storage -->
<hbox id="indexedDB-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="indexedDB"/>
<vbox>
<label class="pref-title" value="&indexedDB.label;"/>
<hbox>
<menulist id="indexedDB-menulist"
class="pref-menulist"
type="indexedDB"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="indexedDB-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="indexedDB-1" value="1" label="&permission.allow;"/>
<menuitem id="indexedDB-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Pop-up Blocking -->
<hbox id="popup-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="popup"/>
<vbox>
<label class="pref-title" value="&popup.label;"/>
<hbox>
<menulist id="popup-menulist"
class="pref-menulist"
type="popup"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="popup-1" value="1" label="&permission.allow;"/>
<menuitem id="popup-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Fullscreen -->
<hbox id="fullscreen-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="fullscreen"/>
<vbox>
<label class="pref-title" value="&fullscreen.label;"/>
<hbox align="center">
<menulist id="fullscreen-menulist"
class="pref-menulist"
type="fullscreen"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="fullscreen-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="fullscreen-1" value="1" label="&permission.allow;"/>
<menuitem id="fullscreen-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- IndexedDB Storage -->
<hbox id="indexedDB-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="indexedDB"/>
<vbox>
<label class="pref-title" value="&indexedDB.label;"/>
<hbox>
<menulist id="indexedDB-menulist"
class="pref-menulist"
type="indexedDB"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="indexedDB-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="indexedDB-1" value="1" label="&permission.allow;"/>
<menuitem id="indexedDB-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Push Notifications -->
<hbox id="push-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="push"/>
<vbox>
<label class="pref-title" value="&push.label;"/>
<hbox align="center">
<menulist id="push-menulist"
class="pref-menulist"
type="push"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="push-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="push-1" value="1" label="&permission.allow;"/>
<menuitem id="push-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Fullscreen -->
<hbox id="fullscreen-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="fullscreen"/>
<vbox>
<label class="pref-title" value="&fullscreen.label;"/>
<hbox align="center">
<menulist id="fullscreen-menulist"
class="pref-menulist"
type="fullscreen"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="fullscreen-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="fullscreen-1" value="1" label="&permission.allow;"/>
<menuitem id="fullscreen-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
<!-- Push Notifications -->
<hbox id="push-pref-item"
class="pref-item" align="top">
<image class="pref-icon" type="push"/>
<vbox>
<label class="pref-title" value="&push.label;"/>
<hbox align="center">
<menulist id="push-menulist"
class="pref-menulist"
type="push"
oncommand="AboutPermissions.onPermissionCommand(event);">
<menupopup>
<menuitem id="push-0" value="0" label="&permission.alwaysAsk;"/>
<menuitem id="push-1" value="1" label="&permission.allow;"/>
<menuitem id="push-2" value="2" label="&permission.block;"/>
</menupopup>
</menulist>
</hbox>
</vbox>
</hbox>
</vbox>
</vbox>
</hbox>

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

@ -1,17 +1,9 @@
/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
let tempScope = {};
let {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
let TargetFactory = devtools.TargetFactory;
let TEST_URI = "http://mochi.test:8888/browser/browser/devtools/fontinspector/test/browser_fontinspector.html";
let view, viewDoc;
const BASE_URI = "http://mochi.test:8888/browser/browser/devtools/fontinspector/test/"
const TEST_URI = BASE_URI + "browser_fontinspector.html";
const FONTS = [
{name: "Ostrich Sans Medium", remote: true, url: BASE_URI + "ostrich-regular.ttf",
format: "truetype", cssName: "bar"},
@ -24,33 +16,17 @@ const FONTS = [
];
add_task(function*() {
yield loadTab(TEST_URI);
let {toolbox, inspector} = yield openInspector();
let { inspector, fontInspector } = yield openFontInspectorForURL(TEST_URI);
ok(!!fontInspector, "Font inspector document is alive.");
info("Selecting the test node");
yield selectNode("body", inspector);
let viewDoc = fontInspector.chromeDoc;
let updated = inspector.once("fontinspector-updated");
inspector.sidebar.select("fontinspector");
yield updated;
info("Font Inspector ready");
view = inspector.sidebar.getWindowForTab("fontinspector");
viewDoc = view.document;
ok(!!view.fontInspector, "Font inspector document is alive.");
yield testBodyFonts(inspector);
yield testDivFonts(inspector);
yield testShowAllFonts(inspector);
view = viewDoc = null;
yield testBodyFonts(inspector, viewDoc);
yield testDivFonts(inspector, viewDoc);
yield testShowAllFonts(inspector, viewDoc);
});
function* testBodyFonts(inspector) {
function* testBodyFonts(inspector, viewDoc) {
let s = viewDoc.querySelectorAll("#all-fonts > section");
is(s.length, 5, "Found 5 fonts");
@ -89,7 +65,7 @@ function* testBodyFonts(inspector) {
"Arial", "local font has right css name");
}
function* testDivFonts(inspector) {
function* testDivFonts(inspector, viewDoc) {
let updated = inspector.once("fontinspector-updated");
yield selectNode("div", inspector);
yield updated;
@ -100,7 +76,7 @@ function* testDivFonts(inspector) {
"The DIV font has the right name");
}
function* testShowAllFonts(inspector) {
function* testShowAllFonts(inspector, viewDoc) {
info("testing showing all fonts");
let updated = inspector.once("fontinspector-updated");

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

@ -13,6 +13,8 @@ const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {})
let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
let TargetFactory = devtools.TargetFactory;
const BASE_URI = "http://mochi.test:8888/browser/browser/devtools/fontinspector/test/"
// All test are asynchronous
waitForExplicitFinish();
@ -98,6 +100,52 @@ let openInspector = Task.async(function*(cb) {
}
});
/**
* Adds a new tab with the given URL, opens the inspector and selects the
* font-inspector tab.
*
* @return Object
* {
* toolbox,
* inspector,
* fontInspector
* }
*/
let openFontInspectorForURL = Task.async(function* (url) {
info("Opening tab " + url);
yield loadTab(url);
let { toolbox, inspector } = yield openInspector();
/**
* Call selectNode to trigger font-inspector update so that we don't timeout
* if following conditions hold
* a) the initial 'fontinspector-updated' was emitted while we were waiting
* for openInspector to resolve
* b) the font-inspector tab was selected by default which means the call to
* select will not trigger another update.
*
* selectNode calls setNodeFront which always emits 'new-node' which calls
* FontInspector.update that emits the 'fontinspector-updated' event.
*/
let updated = inspector.once("fontinspector-updated");
yield selectNode("body", inspector);
inspector.sidebar.select("fontinspector");
info("Waiting for font-inspector to update.");
yield updated;
info("Font Inspector ready.");
let { fontInspector } = inspector.sidebar.getWindowForTab("fontinspector");
return {
fontInspector,
inspector,
toolbox
};
});
/**
* Select a node in the inspector given its selector.
*/

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

@ -573,9 +573,86 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, {
let selected = this.selectedItem.attachment;
let params = nsIURL(selected.url).query.split("&");
let string = params.join(Services.appinfo.OS === "WINNT" ? "\r\n" : "\n");
clipboardHelper.copyString(params.join("\n"), document);
clipboardHelper.copyString(string, document);
},
/**
* Extracts any urlencoded form data sections (e.g. "?foo=bar&baz=42") from a
* POST request.
*
* @param object aHeaders
* The "requestHeaders".
* @param object aUploadHeaders
* The "requestHeadersFromUploadStream".
* @param object aPostData
* The "requestPostData".
* @return array
* A promise that is resolved with the extracted form data.
*/
_getFormDataSections: Task.async(function*(aHeaders, aUploadHeaders, aPostData) {
let formDataSections = [];
let { headers: requestHeaders } = aHeaders;
let { headers: payloadHeaders } = aUploadHeaders;
let allHeaders = [...payloadHeaders, ...requestHeaders];
let contentTypeHeader = allHeaders.find(e => e.name.toLowerCase() == "content-type");
let contentTypeLongString = contentTypeHeader ? contentTypeHeader.value : "";
let contentType = yield gNetwork.getString(contentTypeLongString);
if (contentType.includes("x-www-form-urlencoded")) {
let postDataLongString = aPostData.postData.text;
let postData = yield gNetwork.getString(postDataLongString);
for (let section of postData.split(/\r\n|\r|\n/)) {
// Before displaying it, make sure this section of the POST data
// isn't a line containing upload stream headers.
if (payloadHeaders.every(header => !section.startsWith(header.name))) {
formDataSections.push(section);
}
}
}
return formDataSections;
}),
/**
* Copy the request form data parameters (or raw payload) from the currently selected item.
*/
copyPostData: Task.async(function*() {
let selected = this.selectedItem.attachment;
let view = this;
// Try to extract any form data parameters.
let formDataSections = yield view._getFormDataSections(
selected.requestHeaders,
selected.requestHeadersFromUploadStream,
selected.requestPostData);
let params = [];
formDataSections.forEach(section => {
let paramsArray = parseQueryString(section);
if (paramsArray) {
params = [...params, ...paramsArray];
}
});
let string = params
.map(param => param.name + (param.value ? "=" + param.value : ""))
.join(Services.appinfo.OS === "WINNT" ? "\r\n" : "\n");
// Fall back to raw payload.
if (!string) {
let postData = selected.requestPostData.postData.text;
string = yield gNetwork.getString(postData);
if (Services.appinfo.OS !== "WINNT") {
string = string.replace(/\r/g, "");
}
}
clipboardHelper.copyString(string, document);
}),
/**
* Copy a cURL command from the currently selected item.
*/
@ -1843,6 +1920,9 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, {
let copyUrlParamsElement = $("#request-menu-context-copy-url-params");
copyUrlParamsElement.hidden = !selectedItem || !nsIURL(selectedItem.attachment.url).query;
let copyPostDataElement = $("#request-menu-context-copy-post-data");
copyPostDataElement.hidden = !selectedItem || !selectedItem.attachment.requestPostData;
let copyAsCurlElement = $("#request-menu-context-copy-as-curl");
copyAsCurlElement.hidden = !selectedItem || !selectedItem.attachment.responseContent;
@ -2450,19 +2530,19 @@ NetworkDetailsView.prototype = {
/**
* Sets the network request headers shown in this view.
*
* @param object aHeadersResponse
* @param object aHeaders
* The "requestHeaders" message received from the server.
* @param object aHeadersFromUploadStream
* @param object aUploadHeaders
* The "requestHeadersFromUploadStream" inferred from the POST payload.
* @return object
* A promise that resolves when request headers are set.
*/
_setRequestHeaders: Task.async(function*(aHeadersResponse, aHeadersFromUploadStream) {
if (aHeadersResponse && aHeadersResponse.headers.length) {
yield this._addHeaders(this._requestHeaders, aHeadersResponse);
_setRequestHeaders: Task.async(function*(aHeaders, aUploadHeaders) {
if (aHeaders && aHeaders.headers.length) {
yield this._addHeaders(this._requestHeaders, aHeaders);
}
if (aHeadersFromUploadStream && aHeadersFromUploadStream.headers.length) {
yield this._addHeaders(this._requestHeadersFromUpload, aHeadersFromUploadStream);
if (aUploadHeaders && aUploadHeaders.headers.length) {
yield this._addHeaders(this._requestHeadersFromUpload, aUploadHeaders);
}
}),
@ -2590,40 +2670,28 @@ NetworkDetailsView.prototype = {
/**
* Sets the network request post params shown in this view.
*
* @param object aHeadersResponse
* @param object aHeaders
* The "requestHeaders" message received from the server.
* @param object aHeadersFromUploadStream
* @param object aUploadHeaders
* The "requestHeadersFromUploadStream" inferred from the POST payload.
* @param object aPostDataResponse
* @param object aPostData
* The "requestPostData" message received from the server.
* @return object
* A promise that is resolved when the request post params are set.
*/
_setRequestPostParams: Task.async(function*(aHeadersResponse, aHeadersFromUploadStream, aPostDataResponse) {
if (!aHeadersResponse || !aHeadersFromUploadStream || !aPostDataResponse) {
_setRequestPostParams: Task.async(function*(aHeaders, aUploadHeaders, aPostData) {
if (!aHeaders || !aUploadHeaders || !aPostData) {
return;
}
let { headers: requestHeaders } = aHeadersResponse;
let { headers: payloadHeaders } = aHeadersFromUploadStream;
let allHeaders = [...payloadHeaders, ...requestHeaders];
let formDataSections = yield RequestsMenuView.prototype._getFormDataSections(
aHeaders, aUploadHeaders, aPostData);
let contentTypeHeader = allHeaders.find(e => e.name.toLowerCase() == "content-type");
let contentTypeLongString = contentTypeHeader ? contentTypeHeader.value : "";
let postDataLongString = aPostDataResponse.postData.text;
let postData = yield gNetwork.getString(postDataLongString);
let contentType = yield gNetwork.getString(contentTypeLongString);
// Handle query strings (e.g. "?foo=bar&baz=42").
if (contentType.includes("x-www-form-urlencoded")) {
for (let section of postData.split(/\r\n|\r|\n/)) {
// Before displaying it, make sure this section of the POST data
// isn't a line containing upload stream headers.
if (payloadHeaders.every(header => !section.startsWith(header.name))) {
this._addParams(this._paramsFormData, section);
}
}
// Handle urlencoded form data sections (e.g. "?foo=bar&baz=42").
if (formDataSections.length > 0) {
formDataSections.forEach(section => {
this._addParams(this._paramsFormData, section);
});
}
// Handle actual forms ("multipart/form-data" content type).
else {
@ -2637,6 +2705,9 @@ NetworkDetailsView.prototype = {
$("#request-post-data-textarea-box").hidden = false;
let editor = yield NetMonitorView.editor("#request-post-data-textarea");
let postDataLongString = aPostData.postData.text;
let postData = yield gNetwork.getString(postDataLongString);
// Most POST bodies are usually JSON, so they can be neatly
// syntax highlighted as JS. Otheriwse, fall back to plain text.
try {

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

@ -32,6 +32,10 @@
label="&netmonitorUI.context.copyUrlParams;"
accesskey="&netmonitorUI.context.copyUrlParams.accesskey;"
oncommand="NetMonitorView.RequestsMenu.copyUrlParams();"/>
<menuitem id="request-menu-context-copy-post-data"
label="&netmonitorUI.context.copyPostData;"
accesskey="&netmonitorUI.context.copyPostData.accesskey;"
oncommand="NetMonitorView.RequestsMenu.copyPostData();"/>
<menuitem id="request-menu-context-copy-as-curl"
label="&netmonitorUI.context.copyAsCurl;"
accesskey="&netmonitorUI.context.copyAsCurl.accesskey;"

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

@ -18,31 +18,44 @@ function test() {
yield waitForNetworkEvents(aMonitor, 1, 6);
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(0);
testCopyUrlParamsHidden(false);
testCopyUrlParams("a");
yield testCopyUrlParamsHidden(false);
yield testCopyUrlParams("a");
yield testCopyPostDataHidden(false);
yield testCopyPostData("{ \"foo\": \"bar\" }");
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(1);
testCopyUrlParamsHidden(false);
testCopyUrlParams("a=b");
yield testCopyUrlParamsHidden(false);
yield testCopyUrlParams("a=b");
yield testCopyPostDataHidden(false);
yield testCopyPostData("{ \"foo\": \"bar\" }");
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(2);
testCopyUrlParamsHidden(false);
testCopyUrlParams("a=b");
yield testCopyUrlParamsHidden(false);
yield testCopyUrlParams("a=b");
yield testCopyPostDataHidden(false);
yield testCopyPostData("foo=bar");
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(3);
testCopyUrlParamsHidden(false);
testCopyUrlParams("a");
yield testCopyUrlParamsHidden(false);
yield testCopyUrlParams("a");
yield testCopyPostDataHidden(false);
yield testCopyPostData("{ \"foo\": \"bar\" }");
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(4);
testCopyUrlParamsHidden(false);
testCopyUrlParams("a=b");
yield testCopyUrlParamsHidden(false);
yield testCopyUrlParams("a=b");
yield testCopyPostDataHidden(false);
yield testCopyPostData("{ \"foo\": \"bar\" }");
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(5);
testCopyUrlParamsHidden(false);
testCopyUrlParams("a=b");
yield testCopyUrlParamsHidden(false);
yield testCopyUrlParams("a=b");
yield testCopyPostDataHidden(false);
yield testCopyPostData("?foo=bar");
RequestsMenu.selectedItem = RequestsMenu.getItemAtIndex(6);
testCopyUrlParamsHidden(true);
yield testCopyUrlParamsHidden(true);
yield testCopyPostDataHidden(true);
yield teardown(aMonitor);
finish();
@ -50,12 +63,27 @@ function test() {
function testCopyUrlParamsHidden(aHidden) {
RequestsMenu._onContextShowing();
is(document.querySelector("#request-menu-context-copy-url-params").hidden, aHidden, "The \"Copy URL Params\" context menu item should" + (aHidden ? " " : " not ") + "be hidden.");
is(document.querySelector("#request-menu-context-copy-url-params").hidden,
aHidden, "The \"Copy URL Parameters\" context menu item should" + (aHidden ? " " : " not ") + "be hidden.");
}
function testCopyUrlParams(aQueryString) {
RequestsMenu.copyUrlParams();
is(SpecialPowers.getClipboardData("text/unicode"), aQueryString, "The url query string copied from the selected item is correct.");
is(SpecialPowers.getClipboardData("text/unicode"),
aQueryString, "The url query string copied from the selected item is correct.");
}
function testCopyPostDataHidden(aHidden) {
RequestsMenu._onContextShowing();
is(document.querySelector("#request-menu-context-copy-post-data").hidden,
aHidden, "The \"Copy POST Data\" context menu item should" + (aHidden ? " " : " not ") + "be hidden.");
}
function testCopyPostData(aPostData) {
return RequestsMenu.copyPostData().then(() => {
is(SpecialPowers.getClipboardData("text/unicode"),
aPostData, "The post data string copied from the selected item is correct.");
});
}
aDebuggee.performRequests();

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

@ -112,7 +112,7 @@
#add-filter {
-moz-appearance: none;
background: url(chrome://browser/skin/devtools/add.svg);
background-size: 18px;
background-size: cover;
border: none;
width: 16px;
height: 16px;

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

@ -45,6 +45,8 @@
type="search" placeholder="&filterStylesPlaceholder;"/>
<button id="ruleview-searchinput-clear" class="devtools-searchinput-clear"></button>
</div>
<!-- TODO : Bug 1165122 : Show this button by default -->
<button hidden="true" id="ruleview-add-rule-button" title="&addRuleButtonTooltip;" class="devtools-button"></button>
</div>
</div>

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

@ -1135,6 +1135,7 @@ function CssRuleView(aInspector, aDoc, aStore, aPageStyle) {
this._onFilterTextboxContextMenu = this._onFilterTextboxContextMenu.bind(this);
this.element = this.doc.getElementById("ruleview-container");
this.addRuleButton = this.doc.getElementById("ruleview-add-rule-button");
this.searchField = this.doc.getElementById("ruleview-searchbox");
this.searchClearButton = this.doc.getElementById("ruleview-searchinput-clear");
@ -1142,6 +1143,7 @@ function CssRuleView(aInspector, aDoc, aStore, aPageStyle) {
this.element.addEventListener("copy", this._onCopy);
this.element.addEventListener("contextmenu", this._onContextMenu);
this.addRuleButton.addEventListener("click", this._onAddRule);
this.searchField.addEventListener("input", this._onFilterStyles);
this.searchField.addEventListener("keypress", this._onFilterKeyPress);
this.searchField.addEventListener("contextmenu", this._onFilterTextboxContextMenu);
@ -1197,8 +1199,8 @@ CssRuleView.prototype = {
this._contextmenu.id = "rule-view-context-menu";
this.menuitemAddRule = createMenuItem(this._contextmenu, {
label: "ruleView.contextmenu.addRule",
accesskey: "ruleView.contextmenu.addRule.accessKey",
label: "ruleView.contextmenu.addNewRule",
accesskey: "ruleView.contextmenu.addNewRule.accessKey",
command: this._onAddRule
});
this.menuitemSelectAll = createMenuItem(this._contextmenu, {
@ -1749,6 +1751,7 @@ CssRuleView.prototype = {
// Remove bound listeners
this.element.removeEventListener("copy", this._onCopy);
this.element.removeEventListener("contextmenu", this._onContextMenu);
this.addRuleButton.removeEventListener("click", this._onAddRule);
this.searchField.removeEventListener("input", this._onFilterStyles);
this.searchField.removeEventListener("keypress", this._onFilterKeyPress);
this.searchField.removeEventListener("contextmenu",

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

@ -27,42 +27,24 @@ const TEST_DATA = [
];
add_task(function*() {
yield addTab("data:text/html;charset=utf-8,test rule view add rule");
info("Creating the test document");
content.document.body.innerHTML = PAGE_CONTENT;
yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(PAGE_CONTENT));
info("Opening the rule-view");
let {toolbox, inspector, view} = yield openRuleView();
info("Iterating over the test data");
for (let data of TEST_DATA) {
yield runTestData(inspector, view, data);
yield runTestData(inspector, view, data, "context-menu");
yield runTestData(inspector, view, data, "button");
}
});
function* runTestData(inspector, view, data) {
function* runTestData(inspector, view, data, method) {
let {node, expected} = data;
info("Selecting the test element");
yield selectNode(node, inspector);
info("Waiting for context menu to be shown");
let onPopup = once(view._contextmenu, "popupshown");
let win = view.doc.defaultView;
EventUtils.synthesizeMouseAtCenter(view.element,
{button: 2, type: "contextmenu"}, win);
yield onPopup;
ok(!view.menuitemAddRule.hidden, "Add rule is visible");
info("Waiting for rule view to change");
let onRuleViewChanged = once(view, "ruleview-changed");
info("Adding the new rule");
view.menuitemAddRule.click();
yield onRuleViewChanged;
view._contextmenu.hidePopup();
yield addNewRule(inspector, view, method);
yield testNewRule(view, expected, 1);
@ -70,6 +52,31 @@ function* runTestData(inspector, view, data) {
content.document.body.innerHTML = PAGE_CONTENT;
}
function* addNewRule(inspector, view, method) {
if (method == "context-menu") {
info("Waiting for context menu to be shown");
let onPopup = once(view._contextmenu, "popupshown");
let win = view.doc.defaultView;
EventUtils.synthesizeMouseAtCenter(view.element,
{button: 2, type: "contextmenu"}, win);
yield onPopup;
ok(!view.menuitemAddRule.hidden, "Add rule is visible");
info("Adding the new rule");
view.menuitemAddRule.click();
view._contextmenu.hidePopup();
}
else {
info("Adding the new rule using the button");
view.addRuleButton.click();
}
info("Waiting for rule view to change");
let onRuleViewChanged = once(view, "ruleview-changed");
yield onRuleViewChanged;
}
function* testNewRule(view, expected, index) {
let idRuleEditor = getRuleViewRuleEditor(view, index);
let editor = idRuleEditor.selectorText.ownerDocument.activeElement;
@ -88,4 +95,4 @@ function* testNewRule(view, expected, index) {
let lastRule = textProps[textProps.length - 1];
is(lastRule.name, "font-weight", "Last rule name is font-weight");
is(lastRule.value, "bold", "Last rule value is bold");
}
}

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

@ -18,10 +18,7 @@ let PAGE_CONTENT = [
].join("\n");
add_task(function*() {
yield addTab("data:text/html;charset=utf-8,test rule view add rule");
info("Creating the test document");
content.document.body.innerHTML = PAGE_CONTENT;
yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(PAGE_CONTENT));
info("Opening the rule-view");
let {toolbox, inspector, view} = yield openRuleView();
@ -29,23 +26,13 @@ add_task(function*() {
info("Selecting the test element");
yield selectNode("#testid", inspector);
info("Waiting for context menu to be shown");
let onPopup = once(view._contextmenu, "popupshown");
let win = view.doc.defaultView;
EventUtils.synthesizeMouseAtCenter(view.element,
{button: 2, type: "contextmenu"}, win);
yield onPopup;
ok(!view.menuitemAddRule.hidden, "Add rule is visible");
info("Waiting for rule view to change");
let onRuleViewChanged = once(view, "ruleview-changed");
info("Adding the new rule");
view.menuitemAddRule.click();
view.addRuleButton.click();
yield onRuleViewChanged;
view._contextmenu.hidePopup();
yield testEditSelector(view, "span");

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

@ -18,10 +18,7 @@ let PAGE_CONTENT = [
].join("\n");
add_task(function*() {
yield addTab("data:text/html;charset=utf-8,test rule view add rule");
info("Creating the test document");
content.document.body.innerHTML = PAGE_CONTENT;
yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(PAGE_CONTENT));
info("Opening the rule-view");
let {toolbox, inspector, view} = yield openRuleView();
@ -29,23 +26,13 @@ add_task(function*() {
info("Selecting the test element");
yield selectNode("#testid", inspector);
info("Waiting for context menu to be shown");
let onPopup = once(view._contextmenu, "popupshown");
let win = view.doc.defaultView;
EventUtils.synthesizeMouseAtCenter(view.element,
{button: 2, type: "contextmenu"}, win);
yield onPopup;
ok(!view.menuitemAddRule.hidden, "Add rule is visible");
info("Waiting for rule view to change");
let onRuleViewChanged = once(view, "ruleview-changed");
info("Adding the new rule");
view.menuitemAddRule.click();
view.addRuleButton.click();
yield onRuleViewChanged;
view._contextmenu.hidePopup();
info("Adding new properties to the new rule");
yield testNewRule(view, "#testid", 1);

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

@ -18,13 +18,14 @@ Object.defineProperty(this, "TiltManager", {
exports.items = [
{
name: 'tilt',
name: "tilt",
description: l10n.lookup("tiltDesc"),
manual: l10n.lookup("tiltManual"),
hidden: true
},
{
name: 'tilt open',
name: "tilt open",
runAt: "client",
description: l10n.lookup("tiltOpenDesc"),
manual: l10n.lookup("tiltOpenManual"),
hidden: true,
@ -42,6 +43,7 @@ exports.items = [
},
{
name: "tilt toggle",
runAt: "client",
buttonId: "command-button-tilt",
buttonClass: "command-button command-button-invertable",
tooltipText: l10n.lookup("tiltToggleTooltip"),
@ -82,7 +84,8 @@ exports.items = [
}
},
{
name: 'tilt translate',
name: "tilt translate",
runAt: "client",
description: l10n.lookup("tiltTranslateDesc"),
manual: l10n.lookup("tiltTranslateManual"),
hidden: true,
@ -115,7 +118,8 @@ exports.items = [
}
},
{
name: 'tilt rotate',
name: "tilt rotate",
runAt: "client",
description: l10n.lookup("tiltRotateDesc"),
manual: l10n.lookup("tiltRotateManual"),
hidden: true,
@ -155,7 +159,8 @@ exports.items = [
}
},
{
name: 'tilt zoom',
name: "tilt zoom",
runAt: "client",
description: l10n.lookup("tiltZoomDesc"),
manual: l10n.lookup("tiltZoomManual"),
hidden: true,
@ -181,7 +186,8 @@ exports.items = [
}
},
{
name: 'tilt reset',
name: "tilt reset",
runAt: "client",
description: l10n.lookup("tiltResetDesc"),
manual: l10n.lookup("tiltResetManual"),
hidden: true,
@ -199,7 +205,8 @@ exports.items = [
}
},
{
name: 'tilt close',
name: "tilt close",
runAt: "client",
description: l10n.lookup("tiltCloseDesc"),
manual: l10n.lookup("tiltCloseManual"),
hidden: true,

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

@ -264,6 +264,14 @@
- for the Copy URL Parameters menu item displayed in the context menu for a request -->
<!ENTITY netmonitorUI.context.copyUrlParams.accesskey "P">
<!-- LOCALIZATION NOTE (netmonitorUI.context.copyPostData): This is the label displayed
- on the context menu that copies the selected request's post data -->
<!ENTITY netmonitorUI.context.copyPostData "Copy POST Data">
<!-- LOCALIZATION NOTE (netmonitorUI.context.copyPostData.accesskey): This is the access key
- for the Copy POST Data menu item displayed in the context menu for a request -->
<!ENTITY netmonitorUI.context.copyPostData.accesskey "D">
<!-- LOCALIZATION NOTE (netmonitorUI.context.copyAsCurl): This is the label displayed
- on the context menu that copies the selected request as a cURL command.
- The capitalization is part of the official name and should be used throughout all languages.

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

@ -17,6 +17,11 @@
- the search box when no search term has been entered. -->
<!ENTITY filterStylesPlaceholder "Filter Styles">
<!-- LOCALIZATION NOTE (addRuleButtonTooltip): This is the tooltip shown when
- hovering the `Add new rule` button in the rules view toolbar. This should
- match ruleView.contextmenu.addNewRule in styleinspector.properties -->
<!ENTITY addRuleButtonTooltip "Add new rule">
<!-- LOCALIZATION NOTE (selectedElementLabel): This is the label for the path of
- the highlighted element in the web page. This path is based on the document
- tree. -->

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

@ -2,13 +2,16 @@
* 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 url("chrome://global/skin/inContentUI.css");
@import url("chrome://global/skin/in-content/common.css");
#permissions-content {
padding-top: 48px;
-moz-padding-end: 0; /* no padding to move the scroll bar to the edge */
}
/* sites box */
#sites-box {
padding: 10px;
width: 25em;
}
@ -39,13 +42,17 @@
/* permissions box */
#permissions-box {
padding-top: 10px;
-moz-padding-start: 10px;
}
#permissions-list {
overflow-y: auto;
padding-top: 5px;
-moz-padding-end: 44px;
}
#site-description {
font-size: 125%;
-moz-margin-start: 6px; /* to match button margin */
}
#site-label {
@ -57,7 +64,15 @@
#defaults-description {
font-size: 125%;
font-weight: bold;
-moz-margin-start: 6px;
}
#header-deck {
-moz-margin-end: 44px;
}
#site-header,
#defaults-header {
margin-bottom: 1px;
}
.pref-item {
@ -109,11 +124,16 @@
.pref-title {
font-size: 125%;
-moz-margin-start: 4px;
margin-bottom: 0;
font-weight: bold;
}
.pref-menulist {
margin-left: 6px;
margin-right: 6px;
min-width: 10em;
}
#cookies-label,
#passwords-label {
-moz-margin-start: 4px; /* align with the menulists */
}

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

@ -2,13 +2,16 @@
* 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 url("chrome://global/skin/inContentUI.css");
@import url("chrome://global/skin/in-content/common.css");
#permissions-content {
padding-top: 48px;
-moz-padding-end: 0; /* no padding to move the scroll bar to the edge */
}
/* sites box */
#sites-box {
padding: 10px;
width: 25em;
}
@ -17,10 +20,6 @@
}
#sites-list {
-moz-appearance: none;
border: 1px solid rgba(60,73,97,0.5);
box-shadow: inset 0 1px 1px rgba(0,0,0,0.15), 0 1px rgba(255,255,255,0.25);
background: linear-gradient(rgba(255,255,255,0.2), rgba(255,255,255,0.3));
margin: 5px 0 0 0;
}
@ -49,13 +48,17 @@
/* permissions box */
#permissions-box {
padding: 10px;
-moz-padding-start: 10px;
}
#permissions-list {
overflow-y: auto;
padding-top: 5px;
-moz-padding-end: 44px;
}
#site-description {
font-size: 125%;
-moz-margin-start: 6px; /* to match button margin */
}
#site-label {
@ -64,10 +67,22 @@
margin-bottom: 0;
}
#site-visit-count {
margin-bottom: 4px;
}
#defaults-description {
font-size: 125%;
font-weight: bold;
-moz-margin-start: 6px;
}
#header-deck {
-moz-margin-end: 44px;
}
#site-header,
#defaults-header {
margin-bottom: 1px;
}
.pref-item {
@ -125,11 +140,16 @@
.pref-title {
font-size: 125%;
-moz-margin-start: 2px; /* align with the menulists */
margin-bottom: 0;
font-weight: bold;
}
.pref-menulist {
margin-left: 6px;
margin-right: 6px;
min-width: 10em;
}
#cookies-label,
#passwords-label {
-moz-margin-start: 2px; /* align with the menulists */
}

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

@ -1,49 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="48"
height="16"
viewBox="0 0 16 16">
<style>
g:not(:target) {
display: none;
}
</style>
<!-- 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="16" height="16" viewBox="0 0 16 16">
<defs>
<style type="text/css">
<![CDATA[
.style-icon-notification {
fill: #666666;
<style>
use:not(:target) {
display: none;
}
.style-icon-notification {
fill: #666;
}
.style-icon-notification.hover {
fill: #808080;
}
.style-icon-notification.active {
fill: #4d4d4d;
}
]]>
</style>
<path id="shape-notifcations-addons" d="M10,15c0.5,0,1-0.4,1-1v-3c0,0,0-0.8,0.8-0.8c0.6,0,0.6,0.8,1.8,0.8c0.6,0,1.5-0.2,1.5-2c0-1.8-0.9-2-1.5-2 c-1.1,0-1.1,0.7-1.8,0.7C11,7.7,11,7,11,7V6c0-0.6-0.5-1-1-1H8c0,0-0.8,0-0.8-0.8C7.2,3.6,8,3.6,8,2.5C8,1.9,7.8,1,6,1 C4.2,1,4,1.9,4,2.5c0,1.1,0.8,1.1,0.8,1.8C4.8,5,4,5,4,5H2C1.5,5,1,5.4,1,6l0,1.5c0,0-0.1,1,1.1,1c0.8,0,0.9-1,1.9-1 C4.5,7.4,5,8,5,9c0,1-0.5,1.6-1,1.6c-1,0-1.1-1.1-1.9-1.1C0.9,9.5,1,10.8,1,10.8V14c0,0.6,0.5,1,1,1l2.6,0c0,0,1.1,0,1.1-1 c0-0.8-1-0.1-1-1.1c0-0.5,0.7-1.2,1.8-1.2s1.8,0.7,1.8,1.2c0,1-1.1,0.3-1.1,1.1c0,1,1.2,1,1.2,1H10z"/>
</defs>
<g id="default">
<use xlink:href="#shape-notifcations-addons" class="style-icon-notification" />
</g>
<g id="hover">
<use xlink:href="#shape-notifcations-addons" class="style-icon-notification hover" />
</g>
<g id="active">
<use xlink:href="#shape-notifcations-addons" class="style-icon-notification active" />
</g>
<use id="default" xlink:href="#shape-notifcations-addons" class="style-icon-notification"/>
<use id="hover" xlink:href="#shape-notifcations-addons" class="style-icon-notification hover"/>
<use id="active" xlink:href="#shape-notifcations-addons" class="style-icon-notification active"/>
</svg>

До

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

После

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

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

@ -1,54 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
}
.style-badge-shadow {
fill: #0d131a;
fill: #0d131a;
fill-opacity: .15;
}
.style-badge-background {
fill: #fff;
fill: #fff;
}
.style-badge-inside {
fill: #e62117;
fill: #e62117;
}
.style-badge-icon {
fill: #fff;
fill: #fff;
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#999999" stop-opacity="1"/>
<stop offset="100%" stop-color="#8c8c8c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg id="badge-state" width="32" height="32" x="32" y="0">
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg width="32" height="32" x="32" y="0">
<ellipse class="style-badge-shadow" rx="14" ry="15" cx="16" cy="17" />
<circle class="style-badge-background" r="15" cy="15" cx="16" />
<circle class="style-badge-inside" r="12" cy="15" cx="16" />
<rect class="style-badge-icon" x="9" y="13" width="14" height="4" rx="1" ry="1" />
</svg>
</svg>

До

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

После

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

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

@ -1,31 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#66cc52" stop-opacity="1"/>
<stop offset="100%" stop-color="#60bf4c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
</svg>

До

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

После

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

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

@ -1,54 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
}
.style-badge-shadow {
fill: #0d131a;
fill: #0d131a;
fill-opacity: .15;
}
.style-badge-background {
fill: #fff;
fill: #fff;
}
.style-badge-inside {
fill: #55cc3d;
fill: #55cc3d;
}
.style-badge-icon {
fill: #fff;
fill: #fff;
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#66cc52" stop-opacity="1"/>
<stop offset="100%" stop-color="#60bf4c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg id="badge-state" width="32" height="32" x="32" y="0">
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg width="32" height="32" x="32" y="0">
<ellipse class="style-badge-shadow" rx="14" ry="15" cx="16" cy="17" />
<circle class="style-badge-background" r="15" cy="15" cx="16" />
<circle class="style-badge-inside" r="12" cy="15" cx="16" />
<path class="style-badge-icon" d="M22.7,16.1l-5.6,5.5C16.8,21.9,16.4,22,16,22c-0.4,0-0.7-0.1-1-0.4 l-5.6-5.5C8.8,15.5,8.9,15,9.8,15l3.2,0V9c0-0.6,0.5-1,1.1-1h4c0.6,0,1,0.4,1,1v6h3.2C23.1,15,23.3,15.5,22.7,16.1z"/>
</svg>
</svg>

До

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

После

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

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

@ -1,54 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
}
.style-badge-shadow {
fill: #0d131a;
fill: #0d131a;
fill-opacity: .15;
}
.style-badge-background {
fill: #fff;
fill: #fff;
}
.style-badge-inside {
fill: #e62117;
fill: #e62117;
}
.style-badge-icon {
fill: #fff;
fill: #fff;
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#999999" stop-opacity="1"/>
<stop offset="100%" stop-color="#8c8c8c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg id="badge-state" width="32" height="32" x="32" y="0">
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg width="32" height="32" x="32" y="0">
<ellipse class="style-badge-shadow" rx="14" ry="15" cx="16" cy="17" />
<circle class="style-badge-background" r="15" cy="15" cx="16" />
<circle class="style-badge-inside" r="12" cy="15" cx="16" />
<path class="style-badge-icon" d="M14.9,16.2c0,0,0.1,0.8,1.1,0.8c1,0,1.1-0.8,1.1-0.8 s0.7-3.5,0.8-5.2C18,9.3,18.4,7,16,7s-2,2.4-1.9,4C14.2,12.7,14.9,16.2,14.9,16.2z M16,19c-1.1,0-2,0.9-2,2c0,1.1,0.9,2,2,2 c1.1,0,2-0.9,2-2C18,19.9,17.1,19,16,19z" />
</svg>
</svg>

До

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

После

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

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

@ -1,54 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
}
.style-badge-shadow {
fill: #0d131a;
fill: #0d131a;
fill-opacity: .15;
}
.style-badge-background {
fill: #fff;
fill: #fff;
}
.style-badge-inside {
fill: #55cc3d;
fill: #55cc3d;
}
.style-badge-icon {
fill: #fff;
fill: #fff;
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#66cc52" stop-opacity="1"/>
<stop offset="100%" stop-color="#60bf4c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg id="badge-state" width="32" height="32" x="32" y="0">
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg width="32" height="32" x="32" y="0">
<ellipse class="style-badge-shadow" rx="14" ry="15" cx="16" cy="17" />
<circle class="style-badge-background" r="15" cy="15" cx="16" />
<circle class="style-badge-inside" r="12" cy="15" cx="16" />
<path class="style-badge-icon" d="M22.8,12.3c0,0-6.7,8.1-6.9,8.3c-0.4,0.5-1.5,0.3-1.7,0 c-0.2-0.3-5-5.8-5-5.8c-0.3-0.3-0.3-0.7,0-1l1-1c0.4-0.4,0.9,0,1.2,0.3c0.3,0.4,3.4,3.8,3.4,3.8s5.2-6.1,5.4-6.4 c0.5-0.8,1.6-0.8,1.9-0.5l0.7,0.6C23.1,11.1,23.1,12,22.8,12.3z" />
</svg>
</svg>

До

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

После

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

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

@ -1,64 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
fill-opacity: .25;
}
.style-puzzle-piece-outline {
fill: none;
stroke-width: 2;
stroke: #52b33e;
stroke-dasharray: 4 2;
}
.style-badge-shadow {
fill: #0d131a;
fill: #0d131a;
fill-opacity: .15;
}
.style-badge-background {
fill: #fff;
fill: #fff;
}
.style-badge-inside {
fill: #00a1e5;
fill: #00a1e5;
}
.style-badge-icon {
fill: #fff;
fill: #fff;
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#66cc52" stop-opacity="1"/>
<stop offset="100%" stop-color="#60bf4c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<!-- <path id="puzzle-piece-outline" class="style-puzzle-piece-outline" d="M23.6,2.5c6.8,0,7.8,3.4,7.8,5.4c0,2.4-1.1,3.4-2.2,4.4c-0.8,0.7-1.6,1.5-1.6,2.7c0,2.8,3.7,3.5,3.9,3.5l0,0 h0H42c1.9,0,3.5,1.6,3.5,3.5l0,5.9c0,0.2,0.4,4.2,3.3,4.2c1.3,0,1.9-0.8,2.6-1.6c0.9-1,1.7-2.1,4.1-2.1c3.8,0,5.7,2.5,5.7,7.4 c0,2.3-0.6,7.7-5.7,7.7c-2.4,0-3.3-1.1-4.1-2.2c-0.7-0.8-1.3-1.7-2.6-1.7c-2.9,0-3.3,3.9-3.3,4.2l0,14.2c0,1.9-1.5,3.5-3.5,3.5 l-5.3,0c0,0-0.1,0-0.3,0c-4.9,0-5.4-2.8-5.4-3.9c0-1.2,0.7-2,1.6-2.9c1.1-1.1,2.3-2.4,2.3-4.7c0-2.4-2.9-5-7.1-5 c-3.3,0-6.9,1.9-6.9,5c0,2.4,1.2,3.6,2.3,4.7c0.9,0.9,1.6,1.7,1.6,2.9c0,1.2-0.5,3.9-5.4,3.9c-0.2,0-0.3,0-0.4,0H6 c-1.9,0-3.5-1.6-3.5-3.5l0-12.3c0,0-0.2-2.7,1.2-4.2c0.6-0.7,1.6-1.1,2.7-1.1c1.2,0,1.9,0.7,2.7,1.7c1,1.1,2.2,2.4,4.6,2.4 c3,0,4.5-3.4,4.5-6.8c0-4.5-2.3-6.5-4.5-6.5c-2.4,0-3.5,1.3-4.6,2.4c-0.8,0.9-1.5,1.7-2.7,1.7c-1.1,0-2-0.3-2.6-1 c-1.5-1.6-1.3-4.4-1.3-4.5l0-7.8c0-1.9,1.5-3.5,3.5-3.5h9.7h0l0,0c0.2,0,3.9-0.7,3.9-3.5c0-1.2-0.7-2-1.5-2.7c-0.9-0.9-2-2-2-4.4 C16.1,4.3,18.6,2.5,23.6,2.5"/> -->
<path id="puzzle-piece-outline" class="style-puzzle-piece-outline" d="M23.6,3c6.3,0,7.3,3,7.3,4.9c0,2.2-1,3.1-2,4c-0.8,0.8-1.8,1.6-1.8,3.1c0,2.6,2.7,3.7,4.3,4l0.1,0h0.1H42 c1.7,0,3,1.4,3,3v5.8v0l0,0c0.2,1.7,1.2,4.7,3.8,4.7c1.5,0,2.3-0.9,3-1.8c0.8-1,1.6-1.9,3.7-1.9c3.5,0,5.2,2.2,5.2,6.9 c0,6.2-3.2,7.2-5.2,7.2c-2.1,0-2.9-1-3.7-2c-0.7-0.9-1.5-1.9-3-1.9c-2.6,0-3.6,2.9-3.8,4.6l0,0l0,0L45,58c0,1.6-1.3,3-3,3h-5.2l0,0 l0,0c0,0-0.1,0-0.3,0c-4.5,0-4.9-2.4-4.9-3.4c0-1,0.5-1.6,1.5-2.6c1.1-1.1,2.4-2.5,2.4-5.1c0-3.3-3.9-5.5-7.6-5.5 c-4.6,0-7.4,2.8-7.4,5.5c0,2.6,1.4,4,2.5,5.1c1,1,1.5,1.6,1.5,2.6c0,3.1-3.4,3.4-4.9,3.4c-0.2,0-0.3,0-0.3,0l0,0h0H6 c-1.6,0-3-1.3-3-3l0-12.2l0,0l0,0c0,0-0.1-2.5,1.1-3.9c0.6-0.6,1.3-0.9,2.3-0.9c0.9,0,1.5,0.5,2.3,1.5c1,1.2,2.3,2.6,4.9,2.6 c3.3,0,5-3.6,5-7.3c0-3.4-1.6-7-5-7c-2.6,0-3.9,1.4-4.9,2.6c-0.9,1-1.4,1.5-2.3,1.5c-1,0-1.7-0.3-2.3-0.9C2.8,32.6,3,29.9,3,29.9 l0,0l0,0L3,22c0-1.7,1.3-3,3-3h9.7h0.1l0.1,0c1.6-0.3,4.3-1.4,4.3-4c0-1.4-0.9-2.3-1.6-3.1c-0.9-1-1.8-1.9-1.8-4.1 C16.6,4.6,18.9,3,23.6,3"/>
<svg id="badge-state" width="32" height="32" x="32" y="0">
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<path class="style-puzzle-piece-outline" d="M23.6,3c6.3,0,7.3,3,7.3,4.9c0,2.2-1,3.1-2,4c-0.8,0.8-1.8,1.6-1.8,3.1c0,2.6,2.7,3.7,4.3,4l0.1,0h0.1H42 c1.7,0,3,1.4,3,3v5.8v0l0,0c0.2,1.7,1.2,4.7,3.8,4.7c1.5,0,2.3-0.9,3-1.8c0.8-1,1.6-1.9,3.7-1.9c3.5,0,5.2,2.2,5.2,6.9 c0,6.2-3.2,7.2-5.2,7.2c-2.1,0-2.9-1-3.7-2c-0.7-0.9-1.5-1.9-3-1.9c-2.6,0-3.6,2.9-3.8,4.6l0,0l0,0L45,58c0,1.6-1.3,3-3,3h-5.2l0,0 l0,0c0,0-0.1,0-0.3,0c-4.5,0-4.9-2.4-4.9-3.4c0-1,0.5-1.6,1.5-2.6c1.1-1.1,2.4-2.5,2.4-5.1c0-3.3-3.9-5.5-7.6-5.5 c-4.6,0-7.4,2.8-7.4,5.5c0,2.6,1.4,4,2.5,5.1c1,1,1.5,1.6,1.5,2.6c0,3.1-3.4,3.4-4.9,3.4c-0.2,0-0.3,0-0.3,0l0,0h0H6 c-1.6,0-3-1.3-3-3l0-12.2l0,0l0,0c0,0-0.1-2.5,1.1-3.9c0.6-0.6,1.3-0.9,2.3-0.9c0.9,0,1.5,0.5,2.3,1.5c1,1.2,2.3,2.6,4.9,2.6 c3.3,0,5-3.6,5-7.3c0-3.4-1.6-7-5-7c-2.6,0-3.9,1.4-4.9,2.6c-0.9,1-1.4,1.5-2.3,1.5c-1,0-1.7-0.3-2.3-0.9C2.8,32.6,3,29.9,3,29.9 l0,0l0,0L3,22c0-1.7,1.3-3,3-3h9.7h0.1l0.1,0c1.6-0.3,4.3-1.4,4.3-4c0-1.4-0.9-2.3-1.6-3.1c-0.9-1-1.8-1.9-1.8-4.1 C16.6,4.6,18.9,3,23.6,3"/>
<svg width="32" height="32" x="32" y="0">
<ellipse class="style-badge-shadow" rx="14" ry="15" cx="16" cy="17" />
<circle class="style-badge-background" r="15" cy="15" cx="16" />
<circle class="style-badge-inside" r="12" cy="15" cx="16" />
<path class="style-badge-icon" d="M21,15h-6l2.4-2.4c-0.6-0.4-1.2-0.6-1.9-0.6c-2,0-3.5,1.6-3.5,3.5 c0,2,1.6,3.5,3.5,3.5c1,0,2-0.5,2.6-1.2l1.7,1c-1,1.3-2.6,2.1-4.3,2.1c-3,0-5.5-2.5-5.5-5.5c0-3,2.5-5.5,5.5-5.5 c1.3,0,2.4,0.4,3.3,1.2L21,9V15z"/>
</svg>
</svg>

До

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

После

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

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

@ -1,54 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="64"
height="64"
viewBox="0 0 64 64">
<!-- 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="64" height="64" viewBox="0 0 64 64">
<defs>
<style type="text/css">
<![CDATA[
<style>
.style-puzzle-piece {
fill: url('#gradient-linear-puzzle-piece');
}
.style-badge-shadow {
fill: #0d131a;
fill: #0d131a;
fill-opacity: .15;
}
.style-badge-background {
fill: #fff;
fill: #fff;
}
.style-badge-inside {
fill: #ffcd02;
fill: #ffcd02;
}
.style-badge-icon {
fill: #fff;
fill: #fff;
}
]]>
</style>
<linearGradient id="gradient-linear-puzzle-piece" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#999999" stop-opacity="1"/>
<stop offset="100%" stop-color="#8c8c8c" stop-opacity="1"/>
</linearGradient>
</defs>
<path id="puzzle-piece" class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg id="badge-state" width="32" height="32" x="32" y="0">
<path class="style-puzzle-piece" d="M42,62c2.2,0,4-1.8,4-4l0-14.2c0,0,0.4-3.7,2.8-3.7c2.4,0,2.2,3.9,6.7,3.9c2.3,0,6.2-1.2,6.2-8.2 c0-7-3.9-7.9-6.2-7.9c-4.5,0-4.3,3.7-6.7,3.7c-2.4,0-2.8-3.8-2.8-3.8V22c0-2.2-1.8-4-4-4H31.5c0,0-3.4-0.6-3.4-3 c0-2.4,3.8-2.6,3.8-7.1c0-2.3-1.3-5.9-8.3-5.9s-8,3.6-8,5.9c0,4.5,3.4,4.7,3.4,7.1c0,2.4-3.4,3-3.4,3H6c-2.2,0-4,1.8-4,4l0,7.8 c0,0-0.4,6,4.4,6c3.1,0,3.2-4.1,7.3-4.1c2,0,4,1.9,4,6c0,4.2-2,6.3-4,6.3c-4,0-4.2-4.1-7.3-4.1c-4.8,0-4.4,5.8-4.4,5.8L2,58 c0,2.2,1.8,4,4,4H19c0,0,6.3,0.4,6.3-4.4c0-3.1-4-3.6-4-7.7c0-2,2.2-4.5,6.4-4.5c4.2,0,6.6,2.5,6.6,4.5c0,4-3.9,4.6-3.9,7.7 c0,4.9,6.3,4.4,6.3,4.4H42z"/>
<svg width="32" height="32" x="32" y="0">
<path class="style-badge-shadow" d="M29.5,25.8L18.7,4c-0.6-1.2-1.6-2-2.7-2c-1.1,0-2.1,0.7-2.7,2L2.5,25.8 c-0.6,1.2-0.6,2.5-0.1,3.6C2.9,30.4,4,31,5.2,31h21.6c1.2,0,2.3-0.6,2.8-1.6C30.2,28.4,30.1,27.1,29.5,25.8z" />
<path class="style-badge-background" d="M16,0c-1.7,0-3.2,1-4.1,2.7L1.7,21.9c-0.9,1.7-0.9,3.4,0,4.8C2.5,28.2,4.1,29,5.9,29H26 c1.9,0,3.4-0.8,4.3-2.2c0.9-1.4,0.8-3.2,0-4.8L20.1,2.7C19.2,1,17.7,0,16,0L16,0z" />
<path class="style-badge-inside" d="M5.9,26c-1.7,0-2.4-1.2-1.6-2.7L14.6,4.1c0.8-1.5,2.1-1.5,2.8,0l10.3,19.3 c0.8,1.5,0.1,2.7-1.6,2.7H5.9z" />
<path class="style-badge-icon" d="M14.9,17.6c0,0,0.1,0.7,1.1,0.7c1,0,1.1-0.7,1.1-0.7 s0.7-2.9,0.8-4.2c0.1-1.3,0.5-3.2-1.9-3.2c-2.4,0-2,1.9-1.9,3.2C14.2,14.8,14.9,17.6,14.9,17.6z M16,20c-1.1,0-2,0.9-2,2 c0,1.1,0.9,2,2,2c1.1,0,2-0.9,2-2C18,20.9,17.1,20,16,20z" />
</svg>
</svg>

До

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

После

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

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

@ -183,9 +183,9 @@ body {
.computedview-colorswatch {
border-radius: 50%;
width: 1em;
height: 1em;
vertical-align: text-top;
width: 0.9em;
height: 0.9em;
vertical-align: middle;
-moz-margin-end: 5px;
display: inline-block;
position: relative;

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

@ -1,3 +1,9 @@
<svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<polygon fill="#EEF0F2" points="4,7 8,7 8,3 10,3 10,7 14,7 14,9 10,9 10,13 8,13 8,9 4,9 4,7"></polygon>
</svg>
<!-- 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 width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g fill="#edf0f1">
<rect x="2" y="7" width="12" height="2" />
<rect x="7" y="2" width="2" height="12" />
</g>
</svg>

До

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

После

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

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

@ -160,9 +160,9 @@
.ruleview-swatch {
cursor: pointer;
border-radius: 50%;
width: 1em;
height: 1em;
vertical-align: text-top;
width: 0.9em;
height: 0.9em;
vertical-align: middle;
-moz-margin-end: 5px;
display: inline-block;
position: relative;
@ -264,3 +264,8 @@
.ruleview-selectorhighlighter.highlighted {
background-position: -16px 0;
}
#ruleview-add-rule-button::before {
background-image: url("chrome://browser/skin/devtools/add.svg");
background-size: cover;
}

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

@ -339,10 +339,6 @@
list-style-image: url(chrome://global/skin/icons/question-32.png);
}
#addons-notification-icon {
list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric.png);
}
#login-fill-notification-icon,
#password-notification-icon {
list-style-image: url(chrome://mozapps/skin/passwordmgr/key-16@2x.png);

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

@ -2,13 +2,16 @@
* 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 url("chrome://global/skin/inContentUI.css");
@import url("chrome://global/skin/in-content/common.css");
#permissions-content {
padding-top: 48px;
-moz-padding-end: 0; /* no padding to move the scroll bar to the edge */
}
/* sites box */
#sites-box {
padding: 10px;
width: 25em;
}
@ -17,9 +20,6 @@
}
#sites-list {
-moz-appearance: none;
border: 1px solid rgba(0, 0, 0, 0.32);
background-color: rgba(255, 255, 255, 0.4);
margin: 5px 0 0 0;
}
@ -42,13 +42,17 @@
/* permissions box */
#permissions-box {
padding-top: 10px;
-moz-padding-start: 10px;
}
#permissions-list {
overflow-y: auto;
padding-top: 5px;
-moz-padding-end: 44px;
}
#site-description {
font-size: 125%;
-moz-margin-start: 6px; /* to match button margin */
}
#site-label {
@ -57,10 +61,22 @@
margin-bottom: 0;
}
#site-visit-count {
margin-bottom: 0;
}
#defaults-description {
font-size: 125%;
font-weight: bold;
-moz-margin-start: 6px;
}
#header-deck {
-moz-margin-end: 44px;
}
#site-header,
#defaults-header {
margin-bottom: 1px;
}
.pref-item {
@ -112,12 +128,16 @@
.pref-title {
font-size: 125%;
-moz-margin-start: 4px;
margin-bottom: 0;
font-weight: bold;
}
.pref-menulist {
margin-left: 6px;
margin-right: 6px;
min-width: 10em; /* native menulists ellipsize their longest entries by default on many themes */
min-width: 10em;
}
#cookies-label,
#passwords-label {
-moz-margin-start: 4px; /* align with the menulists */
}

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

@ -2286,6 +2286,11 @@ BluetoothServiceBluedroid::AdapterStateChangedNotification(bool aState)
BluetoothA2dpManager::DeinitA2dpInterface
};
// Set discoverable cache to default value after state becomes BT_STATE_OFF.
if (sAdapterDiscoverable) {
sAdapterDiscoverable = false;
}
// Cleanup bluetooth interfaces after BT state becomes BT_STATE_OFF.
nsRefPtr<ProfileDeinitResultHandler> res =
new ProfileDeinitResultHandler(MOZ_ARRAY_LENGTH(sDeinitManager));
@ -2369,11 +2374,16 @@ BluetoothServiceBluedroid::AdapterPropertiesNotification(
BT_APPEND_NAMED_VALUE(propertiesArray, "Name", sAdapterBdName);
} else if (p.mType == PROPERTY_ADAPTER_SCAN_MODE) {
sAdapterDiscoverable =
(p.mScanMode == SCAN_MODE_CONNECTABLE_DISCOVERABLE);
BT_APPEND_NAMED_VALUE(propertiesArray, "Discoverable",
sAdapterDiscoverable);
// If BT is not enabled, Bluetooth scan mode should be non-discoverable
// by defalut. 'AdapterStateChangedNotification' would set the default
// properties to bluetooth backend once Bluetooth is enabled.
if (IsEnabled()) {
sAdapterDiscoverable =
(p.mScanMode == SCAN_MODE_CONNECTABLE_DISCOVERABLE);
BT_APPEND_NAMED_VALUE(propertiesArray, "Discoverable",
sAdapterDiscoverable);
}
} else if (p.mType == PROPERTY_ADAPTER_BONDED_DEVICES) {
// We have to cache addresses of bonded devices. Unlike BlueZ,
// Bluedroid would not send another PROPERTY_ADAPTER_BONDED_DEVICES
@ -2429,7 +2439,10 @@ BluetoothServiceBluedroid::AdapterPropertiesNotification(
} else if (p.mType == PROPERTY_ADAPTER_SCAN_MODE) {
BluetoothScanMode newMode = p.mScanMode;
if (newMode == SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
// If BT is not enabled, Bluetooth scan mode should be non-discoverable
// by defalut. 'AdapterStateChangedNotification' would set the default
// properties to bluetooth backend once Bluetooth is enabled.
if (newMode == SCAN_MODE_CONNECTABLE_DISCOVERABLE && IsEnabled()) {
propertyValue = sAdapterDiscoverable = true;
} else {
propertyValue = sAdapterDiscoverable = false;
@ -2477,7 +2490,6 @@ BluetoothServiceBluedroid::AdapterPropertiesNotification(
BluetoothValue(props)));
// Send reply for SetProperty
if (!sSetPropertyRunnableArray.IsEmpty()) {
DispatchBluetoothReply(sSetPropertyRunnableArray[0],
BluetoothValue(true), EmptyString());

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

@ -482,6 +482,60 @@ Icc.prototype = {
aCallback.notifySuccessWithBoolean(aResponse.result);
});
},
iccOpenChannel: function(aAid, aCallback) {
this._radioInterface.sendWorkerMessage("iccOpenChannel",
{ aid: aAid },
(aResponse) => {
if (aResponse.errorMsg) {
aCallback.notifyError(aResponse.errorMsg);
return;
}
aCallback.notifyOpenChannelSuccess(aResponse.channel);
});
},
iccExchangeAPDU: function(aChannel, aCla, aIns, aP1, aP2, aP3, aData, aCallback) {
if (!aData) {
if (DEBUG) debug('data is not set , aP3 : ' + aP3);
}
let apdu = {
cla: aCla,
command: aIns,
p1: aP1,
p2: aP2,
p3: aP3,
data: aData
};
this._radioInterface.sendWorkerMessage("iccExchangeAPDU",
{ channel: aChannel, apdu: apdu },
(aResponse) => {
if (aResponse.errorMsg) {
aCallback.notifyError(aResponse.errorMsg);
return;
}
aCallback.notifyExchangeAPDUResponse(aResponse.sw1,
aResponse.sw2,
aResponse.simResponse);
});
},
iccCloseChannel: function(aChannel, aCallback) {
this._radioInterface.sendWorkerMessage("iccCloseChannel",
{ channel: aChannel },
(aResponse) => {
if (aResponse.errorMsg) {
aCallback.notifyError(aResponse.errorMsg);
return;
}
aCallback.notifyCloseChannelSuccess();
});
}
};

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

@ -6,51 +6,12 @@
interface nsIDOMDOMRequest;
interface nsIDOMWindow;
interface nsIIccInfo;
interface nsIIccListener;
[scriptable, uuid(6136acab-b50e-494a-a86d-df392a032897)]
interface nsIIccChannelCallback : nsISupports
{
/**
* Callback function to notify on successfully opening a logical channel.
*
* @param channel
* The Channel Number/Handle that is successfully opened.
*/
void notifyOpenChannelSuccess(in long channel);
/**
* Callback function to notify on successfully closing the logical channel.
*
*/
void notifyCloseChannelSuccess();
/**
* Callback function to notify the status of 'iccExchangeAPDU' command.
*
* @param sw1
* Response's First Status Byte
* @param sw2
* Response's Second Status Byte
* @param data
* Response's data
*/
void notifyExchangeAPDUResponse(in octet sw1,
in octet sw2,
in DOMString data);
/**
* Callback function to notify error
*
*/
void notifyError(in DOMString error);
};
/**
* XPCOM component (in the content process) that provides the ICC information.
*/
[scriptable, uuid(7dd6e186-b007-11e4-9b7e-7717d7863cb8)]
[scriptable, uuid(2fbacfc4-f52d-11e4-9667-33b72f279d14)]
interface nsIIccProvider : nsISupports
{
/**
@ -91,32 +52,4 @@ interface nsIIccProvider : nsISupports
in unsigned long contactType,
in jsval contact,
in DOMString pin2);
/**
* Secure Card Icc communication channel
*/
void iccOpenChannel(in unsigned long clientId,
in DOMString aid,
in nsIIccChannelCallback callback);
/**
* Exchange Command APDU (C-APDU) with SIM on the given logical channel.
* Note that 'P3' parameter could be Le/Lc depending on command APDU case.
* For Case 1 scenario (when only command header is present), the value
* of 'P3' should be set to '-1' explicitly.
* Refer to 3G TS 31.101 , 10.2 'Command APDU Structure' for all the cases.
*/
void iccExchangeAPDU(in unsigned long clientId,
in long channel,
in octet cla,
in octet ins,
in octet p1,
in octet p2,
in short p3,
in DOMString data,
in nsIIccChannelCallback callback);
void iccCloseChannel(in unsigned long clientId,
in long channel,
in nsIIccChannelCallback callback);
};

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

@ -63,6 +63,44 @@ interface nsIIccCallback : nsISupports
void notifyCardLockError(in DOMString aErrorMsg, in long aRetryCount);
};
[scriptable, uuid(6136acab-b50e-494a-a86d-df392a032897)]
interface nsIIccChannelCallback : nsISupports
{
/**
* Callback function to notify on successfully opening a logical channel.
*
* @param channel
* The Channel Number/Handle that is successfully opened.
*/
void notifyOpenChannelSuccess(in long channel);
/**
* Callback function to notify on successfully closing the logical channel.
*
*/
void notifyCloseChannelSuccess();
/**
* Callback function to notify the status of 'iccExchangeAPDU' command.
*
* @param sw1
* Response's First Status Byte
* @param sw2
* Response's Second Status Byte
* @param data
* Response's data
*/
void notifyExchangeAPDUResponse(in octet sw1,
in octet sw2,
in DOMString data);
/**
* Callback function to notify error
*
*/
void notifyError(in DOMString error);
};
%{C++
#define ICC_SERVICE_CID \
{ 0xbab0277a, 0x900e, 0x11e4, { 0x80, 0xc7, 0xdb, 0xd7, 0xad, 0x05, 0x24, 0x01 } }
@ -97,7 +135,7 @@ NS_CreateIccService();
/**
* XPCOM component that provides the access to the selected ICC.
*/
[scriptable, uuid(20a99186-e4cb-11e4-a5f9-938abcf7c826)]
[scriptable, uuid(6ad6b686-f52d-11e4-942d-db2884bd9242)]
interface nsIIcc : nsISupports
{
/**
@ -331,4 +369,61 @@ interface nsIIcc : nsISupports
*/
void getServiceStateEnabled(in unsigned long aService,
in nsIIccCallback aCallback);
/**
* Open Secure Card Icc communication channel
*
* @param aAid
* Card Application Id in this UICC.
* @param aCallback
* An instance of nsIIccChannelCallback.
* nsIIccChannelCallback::notifyOpenChannelSuccess() if success.
* nsIIccChannelCallback::notifyError(), otherwise.
*/
void iccOpenChannel(in DOMString aAid,
in nsIIccChannelCallback aCallback);
/**
* Exchange Command APDU (C-APDU) with UICC on the given logical channel.
* Note that 'P3' parameter could be Le/Lc depending on command APDU case.
* For Case 1 scenario (when only command header is present), the value
* of 'P3' should be set to '-1' explicitly.
* Refer to 3G TS 31.101 , 10.2 'Command APDU Structure' for all the cases.
*
* @param aChannel
* given logical channel.
* @param aCla
* APDU class.
* @param aIns
* Instruction code.
* @param aP1, aP2, aP3
* P1, P2, P3 parameters in APDU.
* @param aData
* The hex data to be sent by this PDU.
* @param aCallback
* An instance of nsIIccChannelCallback.
* nsIIccChannelCallback::notifyExchangeAPDUResponse() if success.
* nsIIccChannelCallback::notifyError(), otherwise.
*/
void iccExchangeAPDU(in long aChannel,
in octet aCla,
in octet aIns,
in octet aP1,
in octet aP2,
in short aP3,
in DOMString aData,
in nsIIccChannelCallback aCallback);
/**
* Close Secure Card Icc communication channel
*
* @param aChannel
* Channel to be closed.
* @param aCallback
* An instance of nsIIccChannelCallback.
* nsIIccChannelCallback::notifyCloseChannelSuccess() if success.
* nsIIccChannelCallback::notifyError(), otherwise.
*/
void iccCloseChannel(in long aChannel,
in nsIIccChannelCallback aCallback);
};

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

@ -265,6 +265,26 @@ IccChild::GetServiceStateEnabled(uint32_t aService,
? NS_OK : NS_ERROR_FAILURE;
}
NS_IMETHODIMP
IccChild::IccOpenChannel(const nsAString& aAid, nsIIccChannelCallback* aCallback)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
IccChild::IccExchangeAPDU(int32_t aChannel, uint8_t aCla, uint8_t aIns, uint8_t aP1,
uint8_t aP2, int16_t aP3, const nsAString & aData,
nsIIccChannelCallback* aCallback)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
IccChild::IccCloseChannel(int32_t aChannel, nsIIccChannelCallback* aCallback)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
/**
* PIccRequestChild Implementation.
*/

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

@ -18,7 +18,7 @@
"use strict";
/* globals Components, XPCOMUtils, SE, dump, libcutils, Services,
iccProvider, iccService, SEUtils */
iccService, SEUtils */
const { interfaces: Ci, utils: Cu, results: Cr } = Components;
@ -43,10 +43,6 @@ function debug(s) {
XPCOMUtils.defineLazyModuleGetter(this, "SEUtils",
"resource://gre/modules/SEUtils.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "iccProvider",
"@mozilla.org/ril/content-helper;1",
"nsIIccProvider");
XPCOMUtils.defineLazyServiceGetter(this, "iccService",
"@mozilla.org/icc/iccservice;1",
"nsIIccService");
@ -65,7 +61,7 @@ const PREFERRED_UICC_CLIENTID =
libcutils.property_get("ro.moz.se.def_client_id", "0");
/**
* 'UiccConnector' object is a wrapper over iccProvider's channel management
* 'UiccConnector' object is a wrapper over iccService's channel management
* related interfaces that implements nsISecureElementConnector interface.
*/
function UiccConnector() {
@ -174,8 +170,8 @@ UiccConnector.prototype = {
_doIccExchangeAPDU: function(channel, cla, ins, p1, p2, p3,
data, appendResp, callback) {
iccProvider.iccExchangeAPDU(PREFERRED_UICC_CLIENTID, channel, cla & 0xFC,
ins, p1, p2, p3, data, {
let icc = iccService.getIccByServiceId(PREFERRED_UICC_CLIENTID);
icc.iccExchangeAPDU(channel, cla & 0xFC, ins, p1, p2, p3, data, {
notifyExchangeAPDUResponse: (sw1, sw2, response) => {
debug("sw1 : " + sw1 + ", sw2 : " + sw2 + ", response : " + response);
@ -242,7 +238,8 @@ UiccConnector.prototype = {
// some erroneous conditions such as gecko restart /, crash it can read
// the persistent storage to check if there are any held resources
// (opened channels) and close them.
iccProvider.iccOpenChannel(PREFERRED_UICC_CLIENTID, aid, {
let icc = iccService.getIccByServiceId(PREFERRED_UICC_CLIENTID);
icc.iccOpenChannel(aid, {
notifyOpenChannelSuccess: (channel) => {
this._doGetOpenResponse(channel, 0x00, function(result) {
if (callback) {
@ -299,7 +296,8 @@ UiccConnector.prototype = {
return;
}
iccProvider.iccCloseChannel(PREFERRED_UICC_CLIENTID, channel, {
let icc = iccService.getIccByServiceId(PREFERRED_UICC_CLIENTID);
icc.iccCloseChannel(channel, {
notifyCloseChannelSuccess: function() {
debug("closeChannel successfully closed the channel # : " + channel);
if (callback) {

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

@ -46,9 +46,6 @@ const RILCONTENTHELPER_CID =
const RIL_IPC_MSG_NAMES = [
"RIL:StkCommand",
"RIL:StkSessionEnd",
"RIL:IccOpenChannel",
"RIL:IccCloseChannel",
"RIL:IccExchangeAPDU",
"RIL:ReadIccContacts",
"RIL:UpdateIccContact",
];
@ -89,7 +86,6 @@ function RILContentHelper() {
this.initDOMRequestHelper(/* aWindow */ null, RIL_IPC_MSG_NAMES);
this._windowsMap = [];
this._iccListeners = [];
this._iccChannelCallback = [];
Services.obs.addObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
@ -173,60 +169,6 @@ RILContentHelper.prototype = {
});
},
iccOpenChannel: function(clientId, aid, callback) {
let requestId = UUIDGenerator.generateUUID().toString();
this._addIccChannelCallback(requestId, callback);
cpmm.sendAsyncMessage("RIL:IccOpenChannel", {
clientId: clientId,
data: {
requestId: requestId,
aid: aid
}
});
},
iccExchangeAPDU: function(clientId, channel, cla, ins, p1, p2, p3, data, callback) {
let requestId = UUIDGenerator.generateUUID().toString();
this._addIccChannelCallback(requestId, callback);
if (!data) {
if (DEBUG) debug('data is not set , p3 : ' + p3);
}
let apdu = {
cla: cla,
command: ins,
p1: p1,
p2: p2,
p3: p3,
data: data
};
//Potentially you need serialization here and can't pass the jsval through
cpmm.sendAsyncMessage("RIL:IccExchangeAPDU", {
clientId: clientId,
data: {
requestId: requestId,
channel: channel,
apdu: apdu
}
});
},
iccCloseChannel: function(clientId, channel, callback) {
let requestId = UUIDGenerator.generateUUID().toString();
this._addIccChannelCallback(requestId, callback);
cpmm.sendAsyncMessage("RIL:IccCloseChannel", {
clientId: clientId,
data: {
requestId: requestId,
channel: channel
}
});
},
readContacts: function(clientId, window, contactType) {
if (window == null) {
throw Components.Exception("Can't get window object",
@ -330,24 +272,6 @@ RILContentHelper.prototype = {
}
},
_iccChannelCallback: null,
_addIccChannelCallback: function(requestId, channelCb) {
let cbInterfaces = this._iccChannelCallback;
if (!cbInterfaces[requestId] && channelCb) {
cbInterfaces[requestId] = channelCb;
return;
}
if (DEBUG) debug("Unable to add channelCbInterface for requestId : " + requestId);
},
_getIccChannelCallback: function(requestId) {
let cb = this._iccChannelCallback[requestId];
delete this._iccChannelCallback[requestId];
return cb;
},
registerIccMsg: function(clientId, listener) {
if (DEBUG) debug("Registering for ICC related messages");
this.registerListener("_iccListeners", clientId, listener);
@ -454,15 +378,6 @@ RILContentHelper.prototype = {
case "RIL:StkSessionEnd":
this._deliverEvent(clientId, "_iccListeners", "notifyStkSessionEnd", null);
break;
case "RIL:IccOpenChannel":
this.handleIccOpenChannel(data);
break;
case "RIL:IccCloseChannel":
this.handleIccCloseChannel(data);
break;
case "RIL:IccExchangeAPDU":
this.handleIccExchangeAPDU(data);
break;
case "RIL:ReadIccContacts":
this.handleReadIccContacts(data);
break;
@ -472,48 +387,6 @@ RILContentHelper.prototype = {
}
},
handleSimpleRequest: function(requestId, errorMsg, result) {
if (errorMsg) {
this.fireRequestError(requestId, errorMsg);
} else {
this.fireRequestSuccess(requestId, result);
}
},
handleIccOpenChannel: function(message) {
let requestId = message.requestId;
let callback = this._getIccChannelCallback(requestId);
if (!callback) {
return;
}
return !message.errorMsg ? callback.notifyOpenChannelSuccess(message.channel) :
callback.notifyError(message.errorMsg);
},
handleIccCloseChannel: function(message) {
let requestId = message.requestId;
let callback = this._getIccChannelCallback(requestId);
if (!callback) {
return;
}
return !message.errorMsg ? callback.notifyCloseChannelSuccess() :
callback.notifyError(message.errorMsg);
},
handleIccExchangeAPDU: function(message) {
let requestId = message.requestId;
let callback = this._getIccChannelCallback(requestId);
if (!callback) {
return;
}
return !message.errorMsg ?
callback.notifyExchangeAPDUResponse(message.sw1, message.sw2, message.simResponse) :
callback.notifyError(message.errorMsg);
},
handleReadIccContacts: function(message) {
if (message.errorMsg) {
this.fireRequestError(message.requestId, message.errorMsg);

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

@ -93,9 +93,6 @@ const RIL_IPC_ICCMANAGER_MSG_NAMES = [
"RIL:SendStkMenuSelection",
"RIL:SendStkTimerExpiration",
"RIL:SendStkEventDownload",
"RIL:IccOpenChannel",
"RIL:IccExchangeAPDU",
"RIL:IccCloseChannel",
"RIL:ReadIccContacts",
"RIL:UpdateIccContact",
"RIL:RegisterIccMsg",
@ -1732,15 +1729,6 @@ RadioInterface.prototype = {
case "RIL:SendStkEventDownload":
this.workerMessenger.send("sendStkEventDownload", msg.json.data);
break;
case "RIL:IccOpenChannel":
this.workerMessenger.sendWithIPCMessage(msg, "iccOpenChannel");
break;
case "RIL:IccCloseChannel":
this.workerMessenger.sendWithIPCMessage(msg, "iccCloseChannel");
break;
case "RIL:IccExchangeAPDU":
this.workerMessenger.sendWithIPCMessage(msg, "iccExchangeAPDU");
break;
case "RIL:ReadIccContacts":
this.workerMessenger.sendWithIPCMessage(msg, "readICCContacts");
break;

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

@ -1699,37 +1699,4 @@ TelephonyService.prototype = {
}
};
/**
* This implements nsISystemMessagesWrapper.wrapMessage(), which provides a
* plugable way to wrap a "ussd-received" type system message.
*
* Please see SystemMessageManager.js to know how it customizes the wrapper.
*/
function USSDReceivedWrapper() {
if (DEBUG) debug("USSDReceivedWrapper()");
}
USSDReceivedWrapper.prototype = {
// nsISystemMessagesWrapper implementation.
wrapMessage: function(aMessage, aWindow) {
if (DEBUG) debug("wrapMessage: " + JSON.stringify(aMessage));
let session = aMessage.sessionEnded ? null :
new aWindow.USSDSession(aMessage.serviceId);
let event = new aWindow.USSDReceivedEvent("ussdreceived", {
serviceId: aMessage.serviceId,
message: aMessage.message,
session: session
});
return event;
},
classDescription: "USSDReceivedWrapper",
classID: Components.ID("{d03684ed-ede4-4210-8206-f4f32772d9f5}"),
contractID: "@mozilla.org/dom/system-messages/wrapper/ussd-received;1",
QueryInterface: XPCOMUtils.generateQI([Ci.nsISystemMessagesWrapper])
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TelephonyService,
USSDReceivedWrapper]);
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TelephonyService]);

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

@ -1,5 +1,3 @@
component {67d26434-d063-4d28-9f48-5b3189788155} TelephonyService.js
contract @mozilla.org/telephony/gonktelephonyservice;1 {67d26434-d063-4d28-9f48-5b3189788155}
component {d03684ed-ede4-4210-8206-f4f32772d9f5} TelephonyService.js
contract @mozilla.org/dom/system-messages/wrapper/ussd-received;1 {d03684ed-ede4-4210-8206-f4f32772d9f5}

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

@ -0,0 +1,82 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
const NS_PREFBRANCH_PREFCHANGE_TOPIC_ID = "nsPref:changed";
const kPrefRilDebuggingEnabled = "ril.debugging.enabled";
let DEBUG;
function debug(s) {
dump("USSDReceivedWrapper: " + s + "\n");
}
XPCOMUtils.defineLazyGetter(this, "RIL", function () {
let obj = {};
Cu.import("resource://gre/modules/ril_consts.js", obj);
return obj;
});
/**
* This implements nsISystemMessagesWrapper.wrapMessage(), which provides a
* plugable way to wrap a "ussd-received" type system message.
*
* Please see SystemMessageManager.js to know how it customizes the wrapper.
*/
function USSDReceivedWrapper() {
this._updateDebugFlag();
Services.prefs.addObserver(kPrefRilDebuggingEnabled, this, false);
if (DEBUG) debug("USSDReceivedWrapper()");
}
USSDReceivedWrapper.prototype = {
_updateDebugFlag: function() {
try {
DEBUG = RIL.DEBUG_RIL ||
Services.prefs.getBoolPref(kPrefRilDebuggingEnabled);
} catch (e) {}
},
/**
* nsIObserver interface.
*/
observe: function(aSubject, aTopic, aData) {
switch (aTopic) {
case NS_PREFBRANCH_PREFCHANGE_TOPIC_ID:
if (aData === kPrefRilDebuggingEnabled) {
this._updateDebugFlag();
}
break;
}
},
// nsISystemMessagesWrapper implementation.
wrapMessage: function(aMessage, aWindow) {
if (DEBUG) debug("wrapMessage: " + JSON.stringify(aMessage));
let session = aMessage.sessionEnded ? null :
new aWindow.USSDSession(aMessage.serviceId);
let event = new aWindow.USSDReceivedEvent("ussdreceived", {
serviceId: aMessage.serviceId,
message: aMessage.message,
session: session
});
return event;
},
classDescription: "USSDReceivedWrapper",
classID: Components.ID("{d03684ed-ede4-4210-8206-f4f32772d9f5}"),
contractID: "@mozilla.org/dom/system-messages/wrapper/ussd-received;1",
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
Ci.nsISystemMessagesWrapper])
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([USSDReceivedWrapper]);

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

@ -0,0 +1,2 @@
component {d03684ed-ede4-4210-8206-f4f32772d9f5} USSDReceivedWrapper.js
contract @mozilla.org/dom/system-messages/wrapper/ussd-received;1 {d03684ed-ede4-4210-8206-f4f32772d9f5}

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

@ -63,6 +63,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']:
EXTRA_COMPONENTS += [
'gonk/TelephonyAudioService.js',
'gonk/TelephonyAudioService.manifest',
'gonk/USSDReceivedWrapper.js',
'gonk/USSDReceivedWrapper.manifest',
]
if not CONFIG['DISABLE_MOZ_RIL_GEOLOC']:
EXTRA_COMPONENTS += [

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

@ -1,5 +1,5 @@
[DEFAULT]
skip-if = buildapp == 'mulet'
support-files =
MockServices.js
NotificationTest.js

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

@ -44,60 +44,20 @@
var theWindow = window;
var useJSTransfer = false;
try {
// This method throws an exception if the old Download Manager is disabled.
Services.downloads.activeDownloadCount;
} catch (ex) {
useJSTransfer = true;
}
if (useJSTransfer) {
var Downloads = SpecialPowers.Cu.import("resource://gre/modules/Downloads.jsm").Downloads;
Downloads.getList(Downloads.PUBLIC).then(list => {
list = SpecialPowers.wrap(list);
list.addView({
onDownloadAdded: function (aDownload) {
list.removeView(this);
SpecialPowers.wrap(aDownload).whenSucceeded().then(() => {
list.removeFinished();
theWindow.location = "bug383369step2.html";
});
},
});
window.location = "download.auto";
}).then(null, SpecialPowers.Cu.reportError);
return;
}
var downloadManager = SpecialPowers.Cc["@mozilla.org/download-manager;1"]
.getService(SpecialPowers.Ci.nsIDownloadManager);
var observer = {
observe: function(subject, topic, data) {
switch (topic) {
case "dl-done":
case "dl-failed":
case "dl-blocked":
case "dl-dirty":
downloadManager.cleanUp();
theWindow.location = "bug383369step2.html";
observerService.removeObserver(this, "dl-done");
observerService.removeObserver(this, "dl-failed");
observerService.removeObserver(this, "dl-blocked");
observerService.removeObserver(this, "dl-dirty");
break;
}
}
};
var observerService = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
.getService(SpecialPowers.Ci.nsIObserverService);
observerService.addObserver(observer, "dl-done", false);
observerService.addObserver(observer, "dl-failed", false);
observerService.addObserver(observer, "dl-blocked", false);
observerService.addObserver(observer, "dl-dirty", false);
window.location = "download.auto";
var Downloads = SpecialPowers.Cu.import("resource://gre/modules/Downloads.jsm").Downloads;
Downloads.getList(Downloads.PUBLIC).then(list => {
list = SpecialPowers.wrap(list);
list.addView({
onDownloadAdded: function (aDownload) {
list.removeView(this);
SpecialPowers.wrap(aDownload).whenSucceeded().then(() => {
list.removeFinished();
theWindow.location = "bug383369step2.html";
});
},
});
window.location = "download.auto";
}).then(null, SpecialPowers.Cu.reportError);
}
function afterNavigationTest()

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

@ -1184,7 +1184,7 @@
"description": "Whether a HTTP transaction routed via Alt-Svc was scheme=http"
},
"HTTP_WAP_CONTENT_TYPE_RECEIVED": {
"expires_in_version": "40",
"expires_in_version": "45",
"kind": "boolean",
"description": "Whether a WAP content type response is served to the browser."
},

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

@ -109,6 +109,8 @@ const IDLE_TIMEOUT_SECONDS = 5 * 60;
// in case of aborted sessions (currently 5 minutes).
const ABORTED_SESSION_UPDATE_INTERVAL_MS = 5 * 60 * 1000;
const TOPIC_CYCLE_COLLECTOR_BEGIN = "cycle-collector-begin";
var gLastMemoryPoll = null;
let gWasDebuggerAttached = false;
@ -1400,15 +1402,23 @@ let Impl = {
attachObservers: function attachObservers() {
if (!this._initialized)
return;
Services.obs.addObserver(this, "cycle-collector-begin", false);
Services.obs.addObserver(this, "idle-daily", false);
if (Telemetry.canRecordExtended) {
Services.obs.addObserver(this, TOPIC_CYCLE_COLLECTOR_BEGIN, false);
}
},
detachObservers: function detachObservers() {
if (!this._initialized)
return;
Services.obs.removeObserver(this, "idle-daily");
Services.obs.removeObserver(this, "cycle-collector-begin");
try {
// Tests may flip Telemetry.canRecordExtended on and off. Just try to remove this
// observer and catch if it fails because the observer was not added.
Services.obs.removeObserver(this, TOPIC_CYCLE_COLLECTOR_BEGIN);
} catch (e) {
this._log.warn("detachObservers - Failed to remove " + TOPIC_CYCLE_COLLECTOR_BEGIN, e);
}
},
/**
@ -1724,7 +1734,10 @@ let Impl = {
this._log = Log.repository.getLoggerWithMessagePrefix(LOGGER_NAME, LOGGER_PREFIX);
}
this._log.trace("observe - " + aTopic + " notified.");
// Prevent the cycle collector begin topic from cluttering the log.
if (aTopic != TOPIC_CYCLE_COLLECTOR_BEGIN) {
this._log.trace("observe - " + aTopic + " notified.");
}
switch (aTopic) {
case "profile-after-change":
@ -1742,7 +1755,7 @@ let Impl = {
this.sendContentProcessPing(REASON_SAVED_SESSION);
}
break;
case "cycle-collector-begin":
case TOPIC_CYCLE_COLLECTOR_BEGIN:
let now = new Date();
if (!gLastMemoryPoll
|| (TELEMETRY_INTERVAL <= now - gLastMemoryPoll)) {

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

@ -18,6 +18,8 @@
<link rel="icon" type="image/png" id="favicon"
href="chrome://branding/content/icon32.png"/>
<link rel="stylesheet" href="chrome://global/skin/in-content/common.css"
type="text/css"/>
<link rel="stylesheet" href="chrome://global/skin/aboutSupport.css"
type="text/css"/>

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

@ -112,13 +112,14 @@ ruleView.contextmenu.showMdnDocs=Show MDN docs
# the rule view context menu "Show MDN docs" entry.
ruleView.contextmenu.showMdnDocs.accessKey=D
# LOCALIZATION NOTE (ruleView.contextmenu.addRule): Text displayed in the
# LOCALIZATION NOTE (ruleView.contextmenu.addNewRule): Text displayed in the
# rule view context menu for adding a new rule to the element.
ruleView.contextmenu.addRule=Add rule
# This should match addRuleButton.tooltip in styleinspector.dtd
ruleView.contextmenu.addNewRule=Add new rule
# LOCALIZATION NOTE (ruleView.contextmenu.addRule.accessKey): Access key for
# the rule view context menu "Add rule" entry.
ruleView.contextmenu.addRule.accessKey=R
ruleView.contextmenu.addNewRule.accessKey=R
# LOCALIZATION NOTE (computedView.contextmenu.selectAll): Text displayed in the
# computed view context menu.

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

@ -78,7 +78,7 @@ xul|description {
xul|*.text-link:-moz-focusring,
xul|*.inline-link:-moz-focusring {
color: #ff9500;
color: var(--in-content-link-highlight);
text-decoration: underline;
box-shadow: none;
}

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

@ -3,15 +3,12 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
html {
background-color: -moz-Field;
color: -moz-FieldText;
font: message-box;
--aboutSupport-table-background: #ebebeb;
background-color: var(--in-content-page-background);
}
body {
width: 90%;
margin-left: 5%;
margin-right: 5%;
margin: 40px 48px;
}
.page-subtitle {
@ -26,19 +23,24 @@ body {
font-weight: bold;
}
button {
-moz-margin-start: 0;
-moz-margin-end: 8px;
}
table {
background-color: -moz-Dialog;
color: -moz-DialogText;
background-color: var(--aboutSupport-table-background);
color: var(--in-content-text-color);
font: message-box;
text-align: start;
width: 100%;
border: 1px solid ThreeDShadow;
border: 1px solid var(--in-content-table-border-color);
border-spacing: 0px;
}
th, td {
border: 1px dotted ThreeDShadow;
padding: 3px;
border: 1px solid var(--in-content-table-border-color);
padding: 4px;
}
thead th {
@ -47,8 +49,8 @@ thead th {
th {
text-align: start;
background-color: Highlight;
color: HighlightText;
background-color: var(--in-content-table-header-background);
color: var(--in-content-selected-text);
}
th.column {
@ -58,7 +60,7 @@ th.column {
td {
text-align: start;
border-top: 1px dotted ThreeDShadow;
border-color: var(--in-content-table-border-dark-color);
}
.prefs-table {
@ -79,9 +81,9 @@ td {
}
#action-box {
background-color: -moz-Dialog;
border: 1px solid ThreeDShadow;
color: -moz-DialogText;
background-color: var(--aboutSupport-table-background);
border: 1px solid var(--in-content-table-border-color);
color: var(--in-content-text-color);
float: right;
margin-top: 2em;
margin-bottom: 20px;

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

@ -6,13 +6,49 @@
@namespace html "http://www.w3.org/1999/xhtml";
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
*|*:root {
--in-content-page-color: #424e5a;
--in-content-page-background: #fbfbfb;
--in-content-text-color: #333;
--in-content-selected-text: #fff;
--in-content-header-border-color: #c8c8c8;
--in-content-box-background: #fff;
--in-content-box-background-hover: #ebebeb;
--in-content-box-background-active: #dadada;
--in-content-box-border-color: #c1c1c1;
--in-content-item-hover: rgba(0,149,221,0.25);
--in-content-item-selected: #0095dd;
--in-content-border-highlight: #ff9500;
--in-content-border-focus: #0095dd;
--in-content-category-text: #c1c1c1;
--in-content-category-border-focus: 1px dotted #fff;
--in-content-category-text-selected: #f2f2f2;
--in-content-category-background: #424f5a;
--in-content-category-background-hover: #5e6972;
--in-content-category-background-active: #343f48;
--in-content-tab-color: #424f5a;
--in-content-link-color: #0095dd;
--in-content-link-color-hover: #178ce5;
--in-content-link-color-active: #ff9500;
--in-content-link-color-visited: #551a8b;
--in-content-primary-button-background: #0095dd;
--in-content-primary-button-background-hover: #008acb;
--in-content-primary-button-background-active: #006b9d;
--in-content-table-border-color: #c1c1c1;
--in-content-table-border-dark-color: #d1d1d1;
--in-content-table-header-background: #0095dd;
--in-content-help-button-background: #ffcb00;
--in-content-help-button-background-hover: #f4c200;
--in-content-help-button-background-active: #eaba00;
}
html|body,
xul|page,
xul|window {
font: message-box;
-moz-appearance: none;
background-color: #fbfbfb;
color: #424e5a;
background-color: var(--in-content-page-background);
color: var(--in-content-page-color);
}
html|body {
@ -25,14 +61,14 @@ html|h1 {
font-size: 2.5em;
font-weight: lighter;
line-height: 1.2;
color: #333;
color: var(--in-content-text-color);
margin: 0;
margin-bottom: .5em;
}
html|hr {
border-style: solid none none none;
border-color: #c1c1c1;
border-color: var(--in-content-table-border-color);
}
xul|caption {
@ -92,9 +128,9 @@ xul|tabpanels {
xul|tabs {
margin-bottom: 15px;
border-top: 1px solid #c1c1c1;
border-bottom: 1px solid #c1c1c1;
background-color: #fbfbfb;
border-top: 1px solid var(--in-content-box-border-color);
border-bottom: 1px solid var(--in-content-box-border-color);
background-color: var(--in-content-page-background);
}
xul|*.tabs-left,
@ -107,20 +143,20 @@ xul|tab {
margin-top: 0;
padding: 4px 20px;
min-height: 44px;
color: #424f5a;
background-color: #fbfbfb;
color: var(--in-content-tab-color);
background-color: var(--in-content-page-background);
border-width: 0;
transition: background-color 50ms ease 0s;
}
xul|tab:hover {
background-color: #ebebeb;
background-color: var(--in-content-box-background-hover);
}
xul|tab[selected] {
background-color: #ebebeb;
background-color: var(--in-content-box-background-hover);
padding-bottom: 0; /* compensate the 4px border */
border-bottom: 4px solid #ff9500;
border-bottom: 4px solid var(--in-content-border-highlight);
}
xul|*.tab-text {
@ -143,29 +179,29 @@ xul|colorpicker[type="button"],
xul|menulist {
-moz-appearance: none;
height: 30px;
color: #333;
color: var(--in-content-text-color);
line-height: 20px;
border: 1px solid #c1c1c1;
border: 1px solid var(--in-content-box-border-color);
-moz-border-top-colors: none !important;
-moz-border-right-colors: none !important;
-moz-border-bottom-colors: none !important;
-moz-border-left-colors: none !important;
border-radius: 2px;
background-color: #fbfbfb;
background-color: var(--in-content-page-background);
}
html|button:enabled:hover,
xul|button:not([disabled="true"]):hover,
xul|colorpicker[type="button"]:not([disabled="true"]):hover,
xul|menulist:not([disabled="true"]):hover {
background-color: #ebebeb;
background-color: var(--in-content-box-background-hover);
}
html|button:enabled:hover:active,
xul|button:not([disabled="true"]):hover:active,
xul|colorpicker[type="button"]:not([disabled="true"]):hover:active,
xul|menulist[open="true"]:not([disabled="true"]) {
background-color: #dadada;
background-color: var(--in-content-box-background-active);
}
html|button:disabled,
@ -177,19 +213,19 @@ xul|menulist[disabled="true"] {
}
*|button.primary {
background-color: #0095dd;
background-color: var(--in-content-primary-button-background);
border-color: transparent;
color: #fff;
color: var(--in-content-selected-text);
}
html|button.primary:enabled:hover,
xul|button.primary:not([disabled="true"]):hover {
background-color: #008acb;
background-color: var(--in-content-primary-button-background-hover);
}
html|button.primary:enabled:hover:active,
xul|button.primary:not([disabled="true"]):hover:active {
background-color: #006b9d;
background-color: var(--in-content-primary-button-background-active);
}
xul|colorpicker[type="button"] {
@ -223,19 +259,19 @@ xul|*.help-button {
min-width: 30px;
border-radius: 2px;
border-width: 0;
background-color: #ffcb00;
background-color: var(--in-content-help-button-background);
background-image: none;
box-shadow: none;
list-style-image: url("chrome://global/skin/in-content/help-glyph.svg");
}
xul|*.help-button:not([disabled="true"]):hover {
background-color: #f4c200;
background-color: var(--in-content-help-button-background-hover);
background-image: none;
}
xul|*.help-button:not([disabled="true"]):hover:active {
background-color: #eaba00;
background-color: var(--in-content-help-button-background-active);
background-image: none;
}
@ -312,9 +348,9 @@ xul|menulist[disabled="true"]:not([editable="true"]) > xul|*.menulist-dropmarker
xul|menulist > xul|menupopup,
xul|button[type="menu"] > xul|menupopup {
-moz-appearance: none;
border: 1px solid #c1c1c1;
border: 1px solid var(--in-content-box-border-color);
border-radius: 2px;
background-color: #fff;
background-color: var(--in-content-box-background);
}
xul|menulist > xul|menupopup xul|menu,
@ -323,7 +359,7 @@ xul|button[type="menu"] > xul|menupopup xul|menu,
xul|button[type="menu"] > xul|menupopup xul|menuitem {
-moz-appearance: none;
font-size: 1em;
color: #333;
color: var(--in-content-text-color);
padding-top: 0.2em;
padding-bottom: 0.2em;
-moz-padding-start: 10px;
@ -334,16 +370,16 @@ xul|menulist > xul|menupopup > xul|menu:not([disabled="true"])[_moz-menuactive="
xul|menulist > xul|menupopup > xul|menuitem:not([disabled="true"])[_moz-menuactive="true"],
xul|button[type="menu"] > xul|menupopup > xul|menu:not([disabled="true"])[_moz-menuactive="true"],
xul|button[type="menu"] > xul|menupopup > xul|menuitem:not([disabled="true"])[_moz-menuactive="true"] {
color: #333;
background-color: rgba(0,149,221,0.25);
color: var(--in-content-text-color);
background-color: var(--in-content-item-hover);
}
xul|menulist > xul|menupopup > xul|menu:not([disabled="true"])[selected="true"],
xul|menulist > xul|menupopup > xul|menuitem:not([disabled="true"])[selected="true"],
xul|button[type="menu"] > xul|menupopup > xul|menu:not([disabled="true"])[selected="true"],
xul|button[type="menu"] > xul|menupopup > xul|menuitem:not([disabled="true"])[selected="true"] {
color: #fff;
background-color: #0095dd;
color: var(--in-content-selected-text);
background-color: var(--in-content-item-selected);
}
xul|menulist > xul|menupopup > xul|menu[disabled="true"],
@ -361,7 +397,7 @@ xul|button[type="menu"] > xul|menupopup xul|menuseparator {
-moz-appearance: none;
margin: 0;
padding: 0;
border-top: 1px solid #c1c1c1;
border-top: 1px solid var(--in-content-box-border-color);
border-bottom: none;
}
@ -370,22 +406,22 @@ xul|button[type="menu"] > xul|menupopup xul|menuseparator {
*|textbox {
-moz-appearance: none;
height: 30px;
color: #333;
color: var(--in-content-text-color);
line-height: 20px;
padding-right: 10px;
padding-left: 10px;
border: 1px solid #c1c1c1;
border: 1px solid var(--in-content-box-border-color);
-moz-border-top-colors: none !important;
-moz-border-right-colors: none !important;
-moz-border-bottom-colors: none !important;
-moz-border-left-colors: none !important;
border-radius: 2px;
background-color: #fff;
background-color: var(--in-content-box-background);
}
html|textbox:focus,
xul|textbox[focused] {
border-color: #0095dd;
border-color: var(--in-content-border-focus);
}
html|textbox:disabled,
@ -398,25 +434,25 @@ xul|textbox[disabled="true"] {
html|a,
.text-link,
.inline-link {
color: #0095dd;
color: var(--in-content-link-color);
text-decoration: none;
}
html|a:hover,
.text-link:hover,
.inline-link:hover {
color: #178ce5;
color: var(--in-content-link-color-hover);
text-decoration: underline;
}
html|a:visited {
color: #551a8b;
color: var(--in-content-link-color-visited);
}
html|a:hover:active,
.text-link:hover:active,
.inline-link:hover:active {
color: #ff9500;
color: var(--in-content-link-color-active);
text-decoration: none;
}
@ -449,7 +485,7 @@ html|input[type="checkbox"] + html|label:before {
width: 23px;
height: 23px;
border-radius: 2px;
border: 1px solid #c1c1c1;
border: 1px solid var(--in-content-box-border-color);
-moz-margin-end: 10px;
background-color: #f1f1f1;
/* !important needed to override toolkit checked !important rule */
@ -461,7 +497,7 @@ html|input[type="checkbox"] + html|label:before {
xul|checkbox:not([disabled="true"]):hover > xul|*.checkbox-check,
html|input[type="checkbox"]:not(:disabled) + html|label:hover:before {
border-color: #0095dd;
border-color: var(--in-content-border-focus);
}
xul|*.checkbox-check[checked] {
@ -494,7 +530,7 @@ xul|*.radio-check {
-moz-appearance: none;
width: 23px;
height: 23px;
border: 1px solid #c1c1c1;
border: 1px solid var(--in-content-box-border-color);
border-radius: 50%;
-moz-margin-end: 10px;
background-color: #f1f1f1;
@ -503,7 +539,7 @@ xul|*.radio-check {
}
xul|radio:not([disabled="true"]):hover > xul|*.radio-check {
border-color: #0095dd;
border-color: var(--in-content-border-focus);
}
xul|*.radio-check[selected] {
@ -524,7 +560,7 @@ xul|*.radio-label-box {
xul|*#categories {
-moz-appearance: none;
background-color: #424f5a;
background-color: var(--in-content-category-background);
padding-top: 39px;
margin: 0;
border-width: 0;
@ -532,7 +568,7 @@ xul|*#categories {
xul|*.category {
-moz-appearance: none;
color: #c1c1c1;
color: var(--in-content-category-text);
-moz-border-end-width: 0;
-moz-padding-start: 15px;
-moz-padding-end: 21px;
@ -541,19 +577,19 @@ xul|*.category {
}
xul|*.category:hover {
background-color: #5e6972;
background-color: var(--in-content-category-background-hover);
}
xul|*.category[selected] {
background-color: #343f48;
color: #f2f2f2;
background-color: var(--in-content-category-background-active);
color: var(--in-content-category-text-selected);
-moz-padding-start: 11px; /* compensate the 4px border */
-moz-border-start: solid 4px #ff9500;
-moz-border-start: solid 4px var(--in-content-border-highlight);
}
xul|*#categories[keyboard-navigation="true"]:-moz-focusring > xul|*.category[current] {
border-top: 1px #ffffff dotted;
border-bottom: 1px #ffffff dotted;
border-top: var(--in-content-category-border-focus);
border-bottom: var(--in-content-category-border-focus);
}
*|*.category-name {
@ -573,7 +609,7 @@ xul|*#categories[keyboard-navigation="true"]:-moz-focusring > xul|*.category[cur
/* header */
*|*.header {
border-bottom: 1px solid #c8c8c8;
border-bottom: 1px solid var(--in-content-header-border-color);
-moz-margin-end: 4px; /* add the 4px end-margin of other elements */
margin-bottom: 15px;
padding-bottom: 15px;
@ -637,9 +673,9 @@ xul|richlistbox,
xul|listbox {
-moz-appearance: none;
-moz-margin-start: 0;
background-color: #fff;
border: 1px solid #c1c1c1;
color: #333;
background-color: var(--in-content-box-background);
border: 1px solid var(--in-content-box-border-color);
color: var(--in-content-text-color);
}
xul|treechildren::-moz-tree-row,
@ -653,13 +689,13 @@ xul|listbox xul|listitem {
xul|treechildren::-moz-tree-row(hover),
xul|listbox xul|listitem:hover {
background-color: rgba(0,149,221,0.25);
background-color: var(--in-content-item-hover);
}
xul|treechildren::-moz-tree-row(selected),
xul|listbox xul|listitem[selected="true"] {
background-color: #0095dd;
color: #fff;
background-color: var(--in-content-item-selected);
color: var(--in-content-selected-text);
}
/* Trees */
@ -667,19 +703,19 @@ xul|listbox xul|listitem[selected="true"] {
xul|tree {
-moz-appearance: none;
font-size: 1em;
border: 1px solid #c1c1c1;
border: 1px solid var(--in-content-box-border-color);
}
xul|tree:-moz-focusring,
xul|richlistbox:-moz-focusring {
border: 1px dotted #0095dd;
border: 1px dotted var(--in-content-border-focus);
}
xul|listheader,
xul|treecols {
-moz-appearance: none;
border: none;
border-bottom: 1px solid #c1c1c1;
border-bottom: 1px solid var(--in-content-table-border-color);
padding: 0;
}
@ -687,22 +723,22 @@ xul|treecol:not([hideheader="true"]),
xul|treecolpicker {
-moz-appearance: none;
border: none;
background-color: #ebebeb;
background-color: var(--in-content-box-background-hover);
color: #808080;
padding: 5px 10px;
}
xul|treecol:not([hideheader="true"]):not([sortable="false"]):hover,
xul|treecolpicker:hover {
background-color: #dadada;
color: #333;
background-color: var(--in-content-box-background-active);
color: var(--in-content-text-color);
}
xul|treecol:not([hideheader="true"]):not(:first-child),
xul|treecolpicker {
-moz-border-start-width: 1px;
-moz-border-start-style: solid;
border-image: linear-gradient(transparent 0%, transparent 20%, #c1c1c1 20%, #c1c1c1 80%, transparent 80%, transparent 100%) 1 1;
border-image: linear-gradient(transparent 0%, transparent 20%, var(--in-content-table-border-color) 20%, var(--in-content-table-border-color) 80%, transparent 80%, transparent 100%) 1 1;
}
xul|treecol:not([hideheader="true"]) > xul|*.treecol-sortdirection[sortDirection] {
@ -722,9 +758,9 @@ xul|treechildren::-moz-tree-row {
/* Color needs to be set on tree cell in order to be applied */
xul|treechildren::-moz-tree-cell-text {
color: #333;
color: var(--in-content-text-color);
}
xul|treechildren::-moz-tree-cell-text(selected) {
color: #fff;
color: var(--in-content-selected-text);
}