Merge mozilla-central to mozilla-inbound
@ -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="µphone.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="µphone.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>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 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>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 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>
|
Before Width: | Height: | Size: 220 B After Width: | Height: | Size: 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}
|
||||
|
82
dom/telephony/gonk/USSDReceivedWrapper.js
Normal file
@ -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]);
|
2
dom/telephony/gonk/USSDReceivedWrapper.manifest
Normal file
@ -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);
|
||||
}
|
||||
|