зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to b2g-inbound. a=merge
This commit is contained in:
Коммит
daca3d1f20
2
CLOBBER
2
CLOBBER
|
@ -22,4 +22,4 @@
|
|||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
Bug 1166031 - NSS update hit needs-clobber bustage.
|
||||
Bug 1165460 - GCC changes need clobbering.
|
||||
|
|
|
@ -30,6 +30,14 @@ NSS_DISABLE_DBM=1
|
|||
MOZ_NO_EV_CERTS=1
|
||||
MOZ_DISABLE_EXPORT_JS=1
|
||||
|
||||
# Bug 1171082 - Broken on Windows B2G Desktop
|
||||
if test "$OS_TARGET" != "WINNT"; then
|
||||
MOZ_WEBSPEECH=1
|
||||
MOZ_WEBSPEECH_MODELS=1
|
||||
MOZ_WEBSPEECH_POCKETSPHINX=1
|
||||
MOZ_WEBSPEECH_TEST_BACKEND=1
|
||||
fi # !WINNT
|
||||
|
||||
if test "$OS_TARGET" = "Android"; then
|
||||
MOZ_CAPTURE=1
|
||||
MOZ_RAW=1
|
||||
|
|
|
@ -135,6 +135,9 @@
|
|||
@RESPATH@/run-mozilla.sh
|
||||
#endif
|
||||
#endif
|
||||
#ifdef MOZ_WEBSPEECH_MODELS
|
||||
@BINPATH@/models/
|
||||
#endif
|
||||
|
||||
; [Components]
|
||||
@RESPATH@/components/components.manifest
|
||||
|
|
|
@ -60,6 +60,9 @@ if CONFIG['OS_ARCH'] == 'WINNT':
|
|||
RCINCLUDE = 'splash.rc'
|
||||
DEFINES['MOZ_PHOENIX'] = True
|
||||
|
||||
for cdm in CONFIG['MOZ_EME_MODULES']:
|
||||
DEFINES['MOZ_%s_EME' % cdm.upper()] = True
|
||||
|
||||
# Control the default heap size.
|
||||
# This is the heap returned by GetProcessHeap().
|
||||
# As we use the CRT heap, the default size is too large and wastes VM.
|
||||
|
|
|
@ -1842,10 +1842,10 @@ pref("ui.key.menuAccessKeyFocuses", true);
|
|||
// Encrypted media extensions.
|
||||
pref("media.eme.enabled", true);
|
||||
pref("media.eme.apiVisible", true);
|
||||
|
||||
#ifdef XP_WIN
|
||||
pref("media.gmp-eme-adobe.enabled", true);
|
||||
pref("browser.eme.ui.enabled", true);
|
||||
|
||||
#ifdef MOZ_ADOBE_EME
|
||||
pref("media.gmp-eme-adobe.enabled", true);
|
||||
#endif
|
||||
|
||||
// Play with different values of the decay time and get telemetry,
|
||||
|
|
|
@ -636,22 +636,6 @@ window[chromehidden~="toolbar"] toolbar:not(#nav-bar):not(#TabsToolbar):not(#pri
|
|||
background-image: -moz-element(#historySwipeAnimationNextPageSnapshot);
|
||||
}
|
||||
|
||||
/* Identity UI */
|
||||
#identity-popup-content-box:not(.chromeUI) > #identity-popup-brandName,
|
||||
#identity-popup-content-box:not(.chromeUI) > #identity-popup-chromeLabel,
|
||||
#identity-popup-content-box.chromeUI > .identity-popup-label:not(#identity-popup-brandName):not(#identity-popup-chromeLabel),
|
||||
#identity-popup-content-box.chromeUI > .identity-popup-description,
|
||||
#identity-popup.chromeUI > #identity-popup-button-container,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-connectedToLabel ,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-runByLabel ,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-content-host ,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-content-owner ,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-connectedToLabel2 ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-connectedToLabel2 ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-runByLabel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Full Screen UI */
|
||||
|
||||
#fullscr-toggler {
|
||||
|
|
|
@ -6685,14 +6685,6 @@ var gIdentityHandler = {
|
|||
this._permissionList = document.getElementById("identity-popup-permission-list");
|
||||
},
|
||||
|
||||
/**
|
||||
* Handler for commands on the help button in the "identity-popup" panel.
|
||||
*/
|
||||
handleHelpCommand : function(event) {
|
||||
openHelpLink("secure-connection");
|
||||
this._identityPopup.hidePopup();
|
||||
},
|
||||
|
||||
/**
|
||||
* Handler for mouseclicks on the "More Information" button in the
|
||||
* "identity-popup" panel.
|
||||
|
@ -7051,8 +7043,6 @@ var gIdentityHandler = {
|
|||
},
|
||||
|
||||
onPopupShown : function(event) {
|
||||
document.getElementById('identity-popup-more-info-button').focus();
|
||||
|
||||
this._identityPopup.addEventListener("blur", this, true);
|
||||
this._identityPopup.addEventListener("popuphidden", this);
|
||||
},
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/devtools/common.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUIOverlay.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/browser-lightweightTheme.css" type="text/css"?>
|
||||
|
@ -406,67 +407,6 @@
|
|||
|
||||
<menupopup id="placesContext"/>
|
||||
|
||||
<!-- Popup for site identity information -->
|
||||
<panel id="identity-popup"
|
||||
type="arrow"
|
||||
hidden="true"
|
||||
noautofocus="true"
|
||||
onpopupshown="if (event.target == this)
|
||||
gIdentityHandler.onPopupShown(event);"
|
||||
orient="vertical"
|
||||
level="top">
|
||||
<hbox id="identity-popup-container" align="top">
|
||||
<image id="identity-popup-icon"/>
|
||||
<vbox id="identity-popup-content-box">
|
||||
<label id="identity-popup-brandName"
|
||||
class="identity-popup-label"
|
||||
value="&brandFullName;"/>
|
||||
<label id="identity-popup-chromeLabel"
|
||||
class="identity-popup-label"/>
|
||||
<label id="identity-popup-connectedToLabel"
|
||||
class="identity-popup-label"
|
||||
value="&identity.connectedTo;"/>
|
||||
<label id="identity-popup-connectedToLabel2"
|
||||
class="identity-popup-label"
|
||||
value="&identity.unverifiedsite2;"/>
|
||||
<description id="identity-popup-content-host"
|
||||
class="identity-popup-description"/>
|
||||
<label id="identity-popup-runByLabel"
|
||||
class="identity-popup-label"
|
||||
value="&identity.runBy;"/>
|
||||
<description id="identity-popup-content-owner"
|
||||
class="identity-popup-description"/>
|
||||
<description id="identity-popup-content-supplemental"
|
||||
class="identity-popup-description"/>
|
||||
<description id="identity-popup-content-verifier"
|
||||
class="identity-popup-description"/>
|
||||
<hbox id="identity-popup-encryption" flex="1">
|
||||
<vbox>
|
||||
<image id="identity-popup-encryption-icon"/>
|
||||
</vbox>
|
||||
<description id="identity-popup-encryption-label" flex="1"
|
||||
class="identity-popup-description"/>
|
||||
</hbox>
|
||||
<vbox id="identity-popup-permissions">
|
||||
<separator class="thin"/>
|
||||
<label class="identity-popup-label header"
|
||||
value="&identity.permissions;"/>
|
||||
<vbox id="identity-popup-permission-list" class="indent"/>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
<!-- Footer button to open security page info -->
|
||||
<hbox id="identity-popup-button-container" align="center">
|
||||
<button id="identity-popup-help-icon"
|
||||
oncommand="gIdentityHandler.handleHelpCommand(event);"
|
||||
tooltiptext="&identity.help.tooltip;"/>
|
||||
<spacer flex="1"/>
|
||||
<button id="identity-popup-more-info-button"
|
||||
label="&identity.moreInfoLinkText;"
|
||||
oncommand="gIdentityHandler.handleMoreInfoClick(event);"/>
|
||||
</hbox>
|
||||
</panel>
|
||||
|
||||
<panel id="ctrlTab-panel" class="KUI-panel" hidden="true" norestorefocus="true" level="top">
|
||||
<hbox>
|
||||
<button class="ctrlTab-preview" flex="1"/>
|
||||
|
@ -549,6 +489,7 @@
|
|||
#include popup-notifications.inc
|
||||
|
||||
#include ../../components/customizableui/content/panelUI.inc.xul
|
||||
#include ../../components/controlcenter/content/panel.inc.xul
|
||||
|
||||
<hbox id="downloads-animation-container" mousethrough="always">
|
||||
<vbox id="downloads-notification-anchor">
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
<!-- 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/. -->
|
||||
|
||||
<panel id="identity-popup"
|
||||
type="arrow"
|
||||
hidden="true"
|
||||
noautofocus="true"
|
||||
onpopupshown="if (event.target == this)
|
||||
gIdentityHandler.onPopupShown(event);"
|
||||
orient="vertical"
|
||||
level="top">
|
||||
<hbox id="identity-popup-container" align="top">
|
||||
<image id="identity-popup-icon"/>
|
||||
<vbox id="identity-popup-content-box">
|
||||
<label id="identity-popup-brandName"
|
||||
class="identity-popup-label"
|
||||
value="&brandFullName;"/>
|
||||
<label id="identity-popup-chromeLabel"
|
||||
class="identity-popup-label"/>
|
||||
<label id="identity-popup-connectedToLabel"
|
||||
class="identity-popup-label"
|
||||
value="&identity.connectedTo;"/>
|
||||
<label id="identity-popup-connectedToLabel2"
|
||||
class="identity-popup-label"
|
||||
value="&identity.unverifiedsite2;"/>
|
||||
<description id="identity-popup-content-host"
|
||||
class="identity-popup-description"/>
|
||||
<label id="identity-popup-runByLabel"
|
||||
class="identity-popup-label"
|
||||
value="&identity.runBy;"/>
|
||||
<description id="identity-popup-content-owner"
|
||||
class="identity-popup-description"/>
|
||||
<description id="identity-popup-content-supplemental"
|
||||
class="identity-popup-description"/>
|
||||
<description id="identity-popup-content-verifier"
|
||||
class="identity-popup-description"/>
|
||||
<hbox id="identity-popup-encryption" flex="1">
|
||||
<vbox>
|
||||
<image id="identity-popup-encryption-icon"/>
|
||||
</vbox>
|
||||
<description id="identity-popup-encryption-label" flex="1"
|
||||
class="identity-popup-description"/>
|
||||
</hbox>
|
||||
<vbox id="identity-popup-permissions">
|
||||
<separator class="thin"/>
|
||||
<label class="identity-popup-label header"
|
||||
value="&identity.permissions;"/>
|
||||
<vbox id="identity-popup-permission-list" class="indent"/>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
<!-- Footer button to open security page info -->
|
||||
<hbox id="identity-popup-button-container" align="center">
|
||||
<button id="identity-popup-more-info-button" flex="1"
|
||||
label="&identity.moreInfoLinkText2;"
|
||||
oncommand="gIdentityHandler.handleMoreInfoClick(event);"/>
|
||||
</hbox>
|
||||
</panel>
|
|
@ -54,3 +54,6 @@ if CONFIG['MOZ_SAFE_BROWSING']:
|
|||
|
||||
with Files('safebrowsing/*'):
|
||||
BUG_COMPONENT = ('Toolkit', 'Phishing Protection')
|
||||
|
||||
with Files('controlcenter/**'):
|
||||
BUG_COMPONENT = ('Firefox', 'General')
|
||||
|
|
|
@ -32,5 +32,10 @@ export MOZ_TELEMETRY_REPORTING=1
|
|||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Enable Adobe Primetime CDM on 32-bit Windows in Mozilla builds.
|
||||
# Enabled here on the assumption that downstream vendors will not be using
|
||||
# these build configs.
|
||||
ac_add_options --enable-eme=adobe
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
|
|
@ -12,6 +12,7 @@ support-files =
|
|||
helper_disable_cache.js
|
||||
doc_theme.css
|
||||
doc_viewsource.html
|
||||
browser_toolbox_options_enable_serviceworkers_testing_frame_script.js
|
||||
browser_toolbox_options_enable_serviceworkers_testing.html
|
||||
serviceworker.js
|
||||
|
||||
|
@ -66,7 +67,6 @@ skip-if = os == "mac" && os_version == "10.8" || os == "win" && os_version == "5
|
|||
[browser_toolbox_custom_host.js]
|
||||
[browser_toolbox_theme_registration.js]
|
||||
[browser_toolbox_options_enable_serviceworkers_testing.js]
|
||||
skip-if = true # Bug 1153407 - this test breaks subsequent tests and is not e10s compatible
|
||||
[browser_toolbox_selected_tool_unavailable.js]
|
||||
|
||||
# We want this test to run for mochitest-dt as well, so we include it here:
|
||||
|
|
|
@ -3,56 +3,8 @@
|
|||
<head>
|
||||
<title>browser_toolbox_options_enable_serviceworkers_testing.html</title>
|
||||
<meta charset="UTF-8">
|
||||
<style>
|
||||
div {
|
||||
width: 260px;
|
||||
height: 24px;
|
||||
border: 1px solid #000;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 20px
|
||||
}
|
||||
</style>
|
||||
<script type="application/javascript;version=1.8">
|
||||
function log(msg) {
|
||||
var output = document.getElementById("output");
|
||||
|
||||
output.innerHTML = msg;
|
||||
}
|
||||
|
||||
navigator.serviceWorker.register("serviceworker.js").then(
|
||||
swr => {
|
||||
var msg = "";
|
||||
var button = document.getElementById("button");
|
||||
if (swr.installing) {
|
||||
msg += "Installing worker/";
|
||||
}
|
||||
if (swr.waiting) {
|
||||
msg += "Waiting worker/";
|
||||
}
|
||||
if (swr.active) {
|
||||
msg += "Active worker/";
|
||||
}
|
||||
log(msg);
|
||||
button.click();
|
||||
},
|
||||
error => {
|
||||
var button = document.getElementById("button");
|
||||
if (error.name === "SecurityError") {
|
||||
log("SecurityError");
|
||||
}
|
||||
button.click();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Test in page</h1>
|
||||
<input id="button"
|
||||
type="button"
|
||||
value="Worker clicks here"/>
|
||||
<br>
|
||||
<div id="output">No output</div>
|
||||
<h1>SW-test</h1>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -4,13 +4,19 @@
|
|||
// Test that enabling Service Workers testing option enables the
|
||||
// mServiceWorkersTestingEnabled attribute added to nsPIDOMWindow.
|
||||
|
||||
const COMMON_FRAME_SCRIPT_URL =
|
||||
"chrome://browser/content/devtools/frame-script-utils.js";
|
||||
const ROOT_TEST_DIR =
|
||||
getRootDirectory(gTestPath);
|
||||
const FRAME_SCRIPT_URL =
|
||||
ROOT_TEST_DIR +
|
||||
"browser_toolbox_options_enable_serviceworkers_testing_frame_script.js";
|
||||
const TEST_URI = URL_ROOT +
|
||||
"browser_toolbox_options_enable_serviceworkers_testing.html";
|
||||
|
||||
const ELEMENT_ID = "devtools-enable-serviceWorkersTesting";
|
||||
|
||||
let toolbox;
|
||||
let doc;
|
||||
|
||||
function test() {
|
||||
// Note: Pref dom.serviceWorkers.testing.enabled is false since we are testing
|
||||
|
@ -19,16 +25,19 @@ function test() {
|
|||
["dom.serviceWorkers.exemptFromPerDomainMax", true],
|
||||
["dom.serviceWorkers.enabled", true],
|
||||
["dom.serviceWorkers.testing.enabled", false]
|
||||
]}, start);
|
||||
]}, init);
|
||||
}
|
||||
|
||||
function start() {
|
||||
gBrowser.selectedTab = gBrowser.addTab();
|
||||
function init() {
|
||||
let tab = gBrowser.selectedTab = gBrowser.addTab();
|
||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||
let linkedBrowser = tab.linkedBrowser;
|
||||
|
||||
linkedBrowser.messageManager.loadFrameScript(COMMON_FRAME_SCRIPT_URL, false);
|
||||
linkedBrowser.messageManager.loadFrameScript(FRAME_SCRIPT_URL, false);
|
||||
|
||||
gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
|
||||
gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
|
||||
doc = content.document;
|
||||
gDevTools.showToolbox(target).then(testSelectTool);
|
||||
}, true);
|
||||
|
||||
|
@ -37,89 +46,24 @@ function start() {
|
|||
|
||||
function testSelectTool(aToolbox) {
|
||||
toolbox = aToolbox;
|
||||
toolbox.once("options-selected", () => {
|
||||
testRegisterFails().then(testRegisterInstallingWorker);
|
||||
});
|
||||
toolbox.once("options-selected", start);
|
||||
toolbox.selectTool("options");
|
||||
}
|
||||
|
||||
function testRegisterFails() {
|
||||
let deferred = promise.defer();
|
||||
|
||||
let output = doc.getElementById("output");
|
||||
let button = doc.getElementById("button");
|
||||
|
||||
function doTheCheck() {
|
||||
info("Testing it doesn't registers correctly until enable testing");
|
||||
is(output.textContent,
|
||||
"SecurityError",
|
||||
"SecurityError expected");
|
||||
deferred.resolve();
|
||||
}
|
||||
|
||||
if (output.textContent !== "No output") {
|
||||
doTheCheck();
|
||||
}
|
||||
|
||||
button.addEventListener('click', function onClick() {
|
||||
button.removeEventListener('click', onClick);
|
||||
doTheCheck();
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
function register() {
|
||||
return executeInContent("devtools:sw-test:register");
|
||||
}
|
||||
|
||||
function testRegisterInstallingWorker() {
|
||||
toggleServiceWorkersTestingCheckbox().then(() => {
|
||||
let output = doc.getElementById("output");
|
||||
let button = doc.getElementById("button");
|
||||
|
||||
function doTheCheck() {
|
||||
info("Testing it registers correctly and there is an installing worker");
|
||||
is(output.textContent,
|
||||
"Installing worker/",
|
||||
"Installing worker expected");
|
||||
testRegisterFailsWhenToolboxCloses();
|
||||
}
|
||||
|
||||
if (output.textContent !== "No output") {
|
||||
doTheCheck();
|
||||
}
|
||||
|
||||
button.addEventListener('click', function onClick() {
|
||||
button.removeEventListener('click', onClick);
|
||||
doTheCheck();
|
||||
});
|
||||
});
|
||||
function unregister(swr) {
|
||||
return executeInContent("devtools:sw-test:unregister");
|
||||
}
|
||||
|
||||
// Workers should be turned back off when we closes the toolbox
|
||||
function testRegisterFailsWhenToolboxCloses() {
|
||||
info("Testing it disable worker when closing the toolbox");
|
||||
toolbox.destroy()
|
||||
.then(reload)
|
||||
.then(testRegisterFails)
|
||||
.then(finishUp);
|
||||
}
|
||||
|
||||
function reload() {
|
||||
let deferred = promise.defer();
|
||||
|
||||
gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
|
||||
gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
|
||||
doc = content.document;
|
||||
deferred.resolve();
|
||||
}, true);
|
||||
|
||||
let mm = getFrameScript();
|
||||
mm.sendAsyncMessage("devtools:test:reload");
|
||||
|
||||
return deferred.promise;
|
||||
function testRegisterFails(data) {
|
||||
is(data.success, false, "Register should fail with security error");
|
||||
return promise.resolve();
|
||||
}
|
||||
|
||||
function toggleServiceWorkersTestingCheckbox() {
|
||||
let deferred = promise.defer();
|
||||
|
||||
let panel = toolbox.getCurrentPanel();
|
||||
let cbx = panel.panelDoc.getElementById(ELEMENT_ID);
|
||||
|
||||
|
@ -133,11 +77,46 @@ function toggleServiceWorkersTestingCheckbox() {
|
|||
|
||||
cbx.click();
|
||||
|
||||
return reload();
|
||||
return promise.resolve();
|
||||
}
|
||||
|
||||
function reload() {
|
||||
let deferred = promise.defer();
|
||||
|
||||
gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
|
||||
gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
|
||||
deferred.resolve();
|
||||
}, true);
|
||||
|
||||
executeInContent("devtools:test:reload", {}, {}, false);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function testRegisterSuccesses(data) {
|
||||
is(data.success, true, "Register should success");
|
||||
return promise.resolve();
|
||||
}
|
||||
|
||||
function start() {
|
||||
register()
|
||||
.then(testRegisterFails)
|
||||
.then(toggleServiceWorkersTestingCheckbox)
|
||||
.then(reload)
|
||||
.then(register)
|
||||
.then(testRegisterSuccesses)
|
||||
.then(unregister)
|
||||
// Workers should be turned back off when we closes the toolbox
|
||||
.then(toolbox.destroy.bind(toolbox))
|
||||
.then(reload)
|
||||
.then(register)
|
||||
.then(testRegisterFails)
|
||||
.catch(function(e) {
|
||||
ok(false, "Some test failed with error " + e);
|
||||
}).then(finishUp);
|
||||
}
|
||||
|
||||
function finishUp() {
|
||||
gBrowser.removeCurrentTab();
|
||||
toolbox = doc = null;
|
||||
toolbox = null;
|
||||
finish();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// A helper frame-script for browser/devtools/framework service worker tests.
|
||||
|
||||
"use strict";
|
||||
|
||||
addMessageListener("devtools:sw-test:register", function(msg) {
|
||||
content.navigator.serviceWorker.register("serviceworker.js")
|
||||
.then(swr => {
|
||||
sendAsyncMessage("devtools:sw-test:register", {success: true});
|
||||
}, error => {
|
||||
sendAsyncMessage("devtools:sw-test:register", {success: false});
|
||||
});
|
||||
});
|
||||
|
||||
addMessageListener("devtools:sw-test:unregister", function(msg) {
|
||||
content.navigator.serviceWorker.getRegistration().then(swr => {
|
||||
swr.unregister().then(result => {
|
||||
sendAsyncMessage("devtools:sw-test:unregister",
|
||||
{success: result ? true : false});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -65,3 +65,47 @@ function *openScratchpadWindow () {
|
|||
});
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for a content -> chrome message on the message manager (the window
|
||||
* messagemanager is used).
|
||||
* @param {String} name The message name
|
||||
* @return {Promise} A promise that resolves to the response data when the
|
||||
* message has been received
|
||||
*/
|
||||
function waitForContentMessage(name) {
|
||||
info("Expecting message " + name + " from content");
|
||||
|
||||
let mm = gBrowser.selectedBrowser.messageManager;
|
||||
|
||||
let def = promise.defer();
|
||||
mm.addMessageListener(name, function onMessage(msg) {
|
||||
mm.removeMessageListener(name, onMessage);
|
||||
def.resolve(msg.data);
|
||||
});
|
||||
return def.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send an async message to the frame script (chrome -> content) and wait for a
|
||||
* response message with the same name (content -> chrome).
|
||||
* @param {String} name The message name. Should be one of the messages defined
|
||||
* in doc_frame_script.js
|
||||
* @param {Object} data Optional data to send along
|
||||
* @param {Object} objects Optional CPOW objects to send along
|
||||
* @param {Boolean} expectResponse If set to false, don't wait for a response
|
||||
* with the same name from the content script. Defaults to true.
|
||||
* @return {Promise} Resolves to the response data if a response is expected,
|
||||
* immediately resolves otherwise
|
||||
*/
|
||||
function executeInContent(name, data={}, objects={}, expectResponse=true) {
|
||||
info("Sending message " + name + " to content");
|
||||
let mm = gBrowser.selectedBrowser.messageManager;
|
||||
|
||||
mm.sendAsyncMessage(name, data, objects);
|
||||
if (expectResponse) {
|
||||
return waitForContentMessage(name);
|
||||
} else {
|
||||
return promise.resolve();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,17 +6,11 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Cu, Ci} = require("chrome");
|
||||
const {Cu, Ci} = require("chrome");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource:///modules/devtools/DOMHelpers.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
|
||||
const {Promise: promise} = require("resource://gre/modules/Promise.jsm");
|
||||
XPCOMUtils.defineLazyGetter(this, "DOMUtils", function () {
|
||||
return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
|
||||
});
|
||||
|
||||
const PSEUDO_CLASSES = [":hover", ":active", ":focus"];
|
||||
const ENSURE_SELECTION_VISIBLE_DELAY = 50; // ms
|
||||
const ELLIPSIS = Services.prefs.getComplexValue("intl.ellipsis", Ci.nsIPrefLocalizedString).data;
|
||||
const MAX_LABEL_LENGTH = 40;
|
||||
|
@ -29,7 +23,7 @@ const LOW_PRIORITY_ELEMENTS = {
|
|||
"META": true,
|
||||
"SCRIPT": true,
|
||||
"STYLE": true,
|
||||
"TITLE": true,
|
||||
"TITLE": true
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -51,7 +45,6 @@ function HTMLBreadcrumbs(inspector) {
|
|||
this.selection = this.inspector.selection;
|
||||
this.chromeWin = this.inspector.panelWin;
|
||||
this.chromeDoc = this.inspector.panelDoc;
|
||||
this.DOMHelpers = new DOMHelpers(this.chromeWin);
|
||||
this._init();
|
||||
}
|
||||
|
||||
|
@ -93,10 +86,11 @@ HTMLBreadcrumbs.prototype = {
|
|||
this.container._scrollButtonDown.collapsed = true;
|
||||
|
||||
this.onscrollboxreflow = () => {
|
||||
if (this.container._scrollButtonDown.collapsed)
|
||||
if (this.container._scrollButtonDown.collapsed) {
|
||||
this.container.removeAttribute("overflows");
|
||||
else
|
||||
} else {
|
||||
this.container.setAttribute("overflows", true);
|
||||
}
|
||||
};
|
||||
|
||||
this.container.addEventListener("underflow", this.onscrollboxreflow, false);
|
||||
|
@ -118,12 +112,12 @@ HTMLBreadcrumbs.prototype = {
|
|||
*/
|
||||
selectionGuard: function() {
|
||||
let selection = this.selection.nodeFront;
|
||||
return (result) => {
|
||||
return result => {
|
||||
if (selection != this.selection.nodeFront) {
|
||||
return promise.reject("selection-changed");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -204,11 +198,6 @@ HTMLBreadcrumbs.prototype = {
|
|||
}
|
||||
}
|
||||
|
||||
// XXX: Until we have pseudoclass lock in the node.
|
||||
for (let pseudo of node.pseudoClassLocks) {
|
||||
|
||||
}
|
||||
|
||||
// Figure out which element (if any) needs ellipsing.
|
||||
// Substring for that element, then clear out any extras
|
||||
// (except for pseudo elements).
|
||||
|
@ -217,11 +206,11 @@ HTMLBreadcrumbs.prototype = {
|
|||
let maxClassLength = MAX_LABEL_LENGTH - tagText.length - idText.length;
|
||||
|
||||
if (tagText.length > maxTagLength) {
|
||||
tagText = tagText.substr(0, maxTagLength) + ELLIPSIS;
|
||||
idText = classesText = "";
|
||||
tagText = tagText.substr(0, maxTagLength) + ELLIPSIS;
|
||||
idText = classesText = "";
|
||||
} else if (idText.length > maxIdLength) {
|
||||
idText = idText.substr(0, maxIdLength) + ELLIPSIS;
|
||||
classesText = "";
|
||||
idText = idText.substr(0, maxIdLength) + ELLIPSIS;
|
||||
classesText = "";
|
||||
} else if (classesText.length > maxClassLength) {
|
||||
classesText = classesText.substr(0, maxClassLength) + ELLIPSIS;
|
||||
}
|
||||
|
@ -250,19 +239,20 @@ HTMLBreadcrumbs.prototype = {
|
|||
// for inspector.selection
|
||||
this.selection.setNodeFront(node, "breadcrumbs");
|
||||
|
||||
let title = this.chromeDoc.createElement("menuitem");
|
||||
title.setAttribute("label", this.inspector.strings.GetStringFromName("breadcrumbs.siblings"));
|
||||
title.setAttribute("disabled", "true");
|
||||
|
||||
let separator = this.chromeDoc.createElement("menuseparator");
|
||||
|
||||
let items = [title, separator];
|
||||
// Build a list of extra menu items that will be appended at the end of the
|
||||
// inspector node context menu.
|
||||
let items = [this.chromeDoc.createElement("menuseparator")];
|
||||
|
||||
this.walker.siblings(node, {
|
||||
whatToShow: Ci.nsIDOMNodeFilter.SHOW_ELEMENT
|
||||
}).then(siblings => {
|
||||
let nodes = siblings.nodes;
|
||||
for (let i = 0; i < nodes.length; i++) {
|
||||
// Skip siblings of the documentElement node.
|
||||
if (nodes[i].nodeType !== Ci.nsIDOMNode.ELEMENT_NODE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let item = this.chromeDoc.createElement("menuitem");
|
||||
if (nodes[i] === node) {
|
||||
item.setAttribute("disabled", "true");
|
||||
|
@ -276,12 +266,14 @@ HTMLBreadcrumbs.prototype = {
|
|||
item.onmouseup = (function(node) {
|
||||
return function() {
|
||||
selection.setNodeFront(node, "breadcrumbs");
|
||||
}
|
||||
};
|
||||
})(nodes[i]);
|
||||
|
||||
items.push(item);
|
||||
this.inspector.showNodeMenu(button, "before_start", items);
|
||||
}
|
||||
|
||||
// Append the items to the inspector node context menu and show the menu.
|
||||
this.inspector.showNodeMenu(button, "before_start", items);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -445,8 +437,9 @@ HTMLBreadcrumbs.prototype = {
|
|||
}
|
||||
if (index > -1) {
|
||||
this.nodeHierarchy[index].button.setAttribute("checked", "true");
|
||||
if (this.hadFocus)
|
||||
if (this.hadFocus) {
|
||||
this.nodeHierarchy[index].button.focus();
|
||||
}
|
||||
}
|
||||
this.currentIndex = index;
|
||||
},
|
||||
|
@ -457,7 +450,6 @@ HTMLBreadcrumbs.prototype = {
|
|||
* @returns {Number} The index for this node or -1 if not found.
|
||||
*/
|
||||
indexOf: function(node) {
|
||||
let i = this.nodeHierarchy.length - 1;
|
||||
for (let i = this.nodeHierarchy.length - 1; i >= 0; i--) {
|
||||
if (this.nodeHierarchy[i].node === node) {
|
||||
return i;
|
||||
|
@ -492,9 +484,10 @@ HTMLBreadcrumbs.prototype = {
|
|||
|
||||
button.onkeypress = function onBreadcrumbsKeypress(e) {
|
||||
if (e.charCode == Ci.nsIDOMKeyEvent.DOM_VK_SPACE ||
|
||||
e.keyCode == Ci.nsIDOMKeyEvent.DOM_VK_RETURN)
|
||||
e.keyCode == Ci.nsIDOMKeyEvent.DOM_VK_RETURN) {
|
||||
button.click();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
button.onBreadcrumbsClick = () => {
|
||||
this.selection.setNodeFront(node, "breadcrumbs");
|
||||
|
@ -574,9 +567,8 @@ HTMLBreadcrumbs.prototype = {
|
|||
if (response.hasLast) {
|
||||
deferred.resolve(fallback);
|
||||
return;
|
||||
} else {
|
||||
moreChildren();
|
||||
}
|
||||
moreChildren();
|
||||
}).then(null, this.selectionGuardEnd);
|
||||
};
|
||||
|
||||
|
@ -594,9 +586,8 @@ HTMLBreadcrumbs.prototype = {
|
|||
let idx = this.indexOf(node);
|
||||
if (idx > -1) {
|
||||
return idx;
|
||||
} else {
|
||||
node = node.parentNode();
|
||||
}
|
||||
node = node.parentNode();
|
||||
}
|
||||
return -1;
|
||||
},
|
||||
|
@ -725,12 +716,14 @@ HTMLBreadcrumbs.prototype = {
|
|||
cmdDispatcher.focusedElement.parentNode == this.container);
|
||||
|
||||
if (!this.selection.isConnected()) {
|
||||
this.cutAfter(-1); // remove all the crumbs
|
||||
// remove all the crumbs
|
||||
this.cutAfter(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.selection.isElementNode()) {
|
||||
this.setCursor(-1); // no selection
|
||||
// no selection
|
||||
this.setCursor(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ support-files =
|
|||
|
||||
[browser_inspector_breadcrumbs.js]
|
||||
[browser_inspector_breadcrumbs_highlight_hover.js]
|
||||
[browser_inspector_breadcrumbs_menu.js]
|
||||
[browser_inspector_breadcrumbs_mutations.js]
|
||||
[browser_inspector_delete-selected-node-01.js]
|
||||
[browser_inspector_delete-selected-node-02.js]
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that the inspector node context menu appears when right-clicking on the
|
||||
// breadcrumbs nodes.
|
||||
|
||||
const TEST_URI = TEST_URL_ROOT + "doc_inspector_breadcrumbs.html";
|
||||
|
||||
add_task(function*() {
|
||||
let {inspector} = yield openInspectorForURL(TEST_URI);
|
||||
let container = inspector.panelDoc.getElementById("inspector-breadcrumbs");
|
||||
|
||||
info("Select a test node and try to right-click on the selected breadcrumb");
|
||||
yield selectNode("#i1", inspector);
|
||||
let button = container.querySelector("button[checked]");
|
||||
|
||||
let onMenuShown = once(inspector.nodemenu, "popupshown");
|
||||
button.onclick({button: 2});
|
||||
yield onMenuShown;
|
||||
|
||||
ok(true, "The context menu appeared on right-click");
|
||||
|
||||
info("Right-click on a non selected crumb (the body node)");
|
||||
button = button.previousSibling;
|
||||
onMenuShown = once(inspector.nodemenu, "popupshown");
|
||||
let onInspectorUpdated = inspector.once("inspector-updated");
|
||||
button.onclick({button: 2});
|
||||
|
||||
yield onMenuShown;
|
||||
ok(true, "The context menu appeared on right-click");
|
||||
|
||||
yield onInspectorUpdated;
|
||||
is(inspector.selection.nodeFront.tagName.toLowerCase(), "body",
|
||||
"The body node was selected when right-clicking in the breadcrumbs");
|
||||
|
||||
info("Right-click on the html node");
|
||||
button = button.previousSibling;
|
||||
onMenuShown = once(inspector.nodemenu, "popupshown");
|
||||
onInspectorUpdated = inspector.once("inspector-updated");
|
||||
button.onclick({button: 2});
|
||||
|
||||
yield onMenuShown;
|
||||
ok(true, "The context menu appeared on right-click");
|
||||
|
||||
yield onInspectorUpdated;
|
||||
is(inspector.selection.nodeFront.tagName.toLowerCase(), "html",
|
||||
"The html node was selected when right-clicking in the breadcrumbs");
|
||||
});
|
|
@ -2,6 +2,7 @@
|
|||
tags = devtools
|
||||
subsuite = devtools
|
||||
support-files =
|
||||
doc_force_gc.html
|
||||
doc_innerHTML.html
|
||||
doc_simple-test.html
|
||||
head.js
|
||||
|
@ -12,7 +13,6 @@ support-files =
|
|||
[browser_aaa-run-first-leaktest.js]
|
||||
[browser_marker-utils.js]
|
||||
[browser_markers-gc.js]
|
||||
skip-if = e10s # GC events seem unreliable in multiprocess
|
||||
[browser_markers-parse-html.js]
|
||||
[browser_markers-styles.js]
|
||||
[browser_markers-timestamp.js]
|
||||
|
|
|
@ -6,17 +6,16 @@
|
|||
*/
|
||||
|
||||
const TIME_CLOSE_TO = 10000;
|
||||
const TEST_URL = EXAMPLE_URL + "doc_force_gc.html"
|
||||
|
||||
function* spawnTest () {
|
||||
let { target, front } = yield initBackend(SIMPLE_URL);
|
||||
let { target, front } = yield initBackend(TEST_URL);
|
||||
let markers;
|
||||
|
||||
front.on("timeline-data", handler);
|
||||
let model = yield front.startRecording({ withTicks: true });
|
||||
|
||||
// Check async for markers found while GC/CCing between
|
||||
yield waitUntil(() => {
|
||||
forceCC();
|
||||
return !!markers;
|
||||
}, 100);
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<!doctype html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Performance tool + garbage collection test page</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
window.test = function () {
|
||||
SpecialPowers.Cu.forceGC();
|
||||
setTimeout(window.test, 100);
|
||||
};
|
||||
test();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -705,6 +705,10 @@ CSSCompleter.prototype = {
|
|||
// possibility of suggestions.
|
||||
switch(this.selectorState) {
|
||||
case SELECTOR_STATES.null:
|
||||
if (this.completing === ",") {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
|
||||
query += "*";
|
||||
break;
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@ const {InspectorFront} = require("devtools/server/actors/inspector");
|
|||
const AUTOCOMPLETION_PREF = "devtools.editor.autocomplete";
|
||||
const TEST_URI = "data:text/html;charset=UTF-8,<html><body><bar></bar><div id='baz'></div><body></html>";
|
||||
|
||||
const wait = (delay) => new Promise(resolve => setTimeout(resolve, delay));
|
||||
|
||||
add_task(function*() {
|
||||
yield promiseTab(TEST_URI);
|
||||
yield runTests();
|
||||
|
@ -27,6 +29,7 @@ function* runTests() {
|
|||
yield testKeyboard(ed, edWin);
|
||||
yield testKeyboardCycle(ed, edWin);
|
||||
yield testKeyboardCycleForPrefixedString(ed, edWin);
|
||||
yield testKeyboardCSSComma(ed, edWin);
|
||||
teardown(ed, win);
|
||||
}
|
||||
|
||||
|
@ -87,6 +90,22 @@ function* testKeyboardCycleForPrefixedString(ed, win) {
|
|||
is (ed.getText(), "#baz", "Editor text has been updated");
|
||||
}
|
||||
|
||||
function* testKeyboardCSSComma(ed, win) {
|
||||
ed.focus();
|
||||
ed.setText("b");
|
||||
ed.setCursor({line: 1, ch: 1});
|
||||
|
||||
let isPopupOpened = false;
|
||||
let popupOpened = ed.getAutocompletionPopup().once("popup-opened");
|
||||
popupOpened.then(() => isPopupOpened = true);
|
||||
|
||||
EventUtils.synthesizeKey(",", { }, win);
|
||||
|
||||
yield wait(500);
|
||||
|
||||
ok(!isPopupOpened, "Autocompletion shouldn't be opened");
|
||||
}
|
||||
|
||||
function* testMouse(ed, win) {
|
||||
ed.focus();
|
||||
ed.setText("b");
|
||||
|
|
|
@ -686,15 +686,10 @@ with that structure, consider a translation which ignores the preceding domain a
|
|||
just addresses the organization to follow, e.g. "This site is run by " -->
|
||||
<!ENTITY identity.runBy "which is run by">
|
||||
|
||||
<!ENTITY identity.moreInfoLinkText "More Information…">
|
||||
<!ENTITY identity.moreInfoLinkText2 "More Information">
|
||||
|
||||
<!ENTITY identity.permissions "Permissions">
|
||||
|
||||
<!-- LOCALIZATION NOTE (identity.help.tooltip) : This string should be the
|
||||
localized title of this SUMO article
|
||||
https://support.mozilla.org/kb/how-do-i-tell-if-my-connection-is-secure -->
|
||||
<!ENTITY identity.help.tooltip "How do I tell if my connection to a website is secure?">
|
||||
|
||||
<!-- Name for the tabs toolbar as spoken by screen readers.
|
||||
The word "toolbar" is appended automatically and should not be contained below! -->
|
||||
<!ENTITY tabsToolbar.label "Browser tabs">
|
||||
|
|
|
@ -1025,105 +1025,6 @@ toolbarbutton[constrain-size="true"][cui-areatype="toolbar"] > .toolbarbutton-ba
|
|||
-moz-margin-end: 1px;
|
||||
}
|
||||
|
||||
/* Identity popup icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
/* Identity popup body text */
|
||||
.identity-popup-description {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 2px 0 4px;
|
||||
}
|
||||
|
||||
.identity-popup-label {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-owner {
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-content-owner {
|
||||
font-size: 140%;
|
||||
}
|
||||
|
||||
#identity-popup-content-owner {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
#identity-popup-content-verifier {
|
||||
margin: 4px 0 2px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
|
||||
margin-top: 10px;
|
||||
-moz-margin-start: -18px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
|
||||
#identity-popup-help-icon {
|
||||
-moz-appearance: none;
|
||||
margin-left: 0px;
|
||||
border: none;
|
||||
background: none;
|
||||
min-width: 0;
|
||||
list-style-image: url("moz-icon://stock/gtk-dialog-question?size=16");
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon > .button-box > .button-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon > .button-box > .button-icon {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon:-moz-focusring {
|
||||
outline: 1px dotted;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
|
||||
#identity-popup > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#identity-popup-container {
|
||||
min-width: 280px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#identity-popup-button-container {
|
||||
background: linear-gradient(to bottom, rgba(0,0,0,0.04) 60%, transparent);
|
||||
padding: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
%include ../shared/notification-icons.inc.css
|
||||
|
||||
.popup-notification-body[popupid="addon-progress"],
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
/* 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/. */
|
||||
|
||||
%include ../../shared/controlcenter/panel.inc.css
|
||||
|
||||
/* Identity popup icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
/* Identity popup body text */
|
||||
.identity-popup-description {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 2px 0 4px;
|
||||
}
|
||||
|
||||
.identity-popup-label {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-owner {
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-content-owner {
|
||||
font-size: 140%;
|
||||
}
|
||||
|
||||
#identity-popup-content-owner {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
#identity-popup-content-verifier {
|
||||
margin: 4px 0 2px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
|
||||
margin-top: 10px;
|
||||
-moz-margin-start: -18px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
|
||||
#identity-popup > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#identity-popup-container {
|
||||
min-width: 280px;
|
||||
padding: 10px;
|
||||
}
|
|
@ -134,6 +134,7 @@ browser.jar:
|
|||
skin/classic/browser/loop/menuPanel.png (loop/menuPanel.png)
|
||||
skin/classic/browser/loop/toolbar.png (loop/toolbar.png)
|
||||
skin/classic/browser/loop/toolbar-inverted.png (loop/toolbar-inverted.png)
|
||||
* skin/classic/browser/controlcenter/panel.css (controlcenter/panel.css)
|
||||
skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
|
||||
skin/classic/browser/customizableui/customize-illustration.png (../shared/customizableui/customize-illustration.png)
|
||||
skin/classic/browser/customizableui/customize-illustration-rtl.png (../shared/customizableui/customize-illustration-rtl.png)
|
||||
|
|
|
@ -3118,140 +3118,6 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
|
|||
background-color: Highlight;
|
||||
}
|
||||
|
||||
/* Popup Icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
#identity-popup-icon {
|
||||
list-style-image: url("chrome://browser/skin/identity@2x.png");
|
||||
-moz-image-region: rect(0px, 128px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 128px, 256px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(256px, 128px, 384px, 0px);
|
||||
}
|
||||
}
|
||||
|
||||
/* Popup Body Text */
|
||||
.identity-popup-description {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 2px 0 4px;
|
||||
}
|
||||
|
||||
.identity-popup-label {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-owner {
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-content-owner {
|
||||
font-size: 140%;
|
||||
}
|
||||
|
||||
#identity-popup-content-owner {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
#identity-popup-content-verifier {
|
||||
margin: 4px 0 2px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
|
||||
margin-top: 10px;
|
||||
-moz-margin-start: -24px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
margin-top: 5px;
|
||||
list-style-image: url("chrome://browser/skin/Secure-Glyph.png");
|
||||
}
|
||||
|
||||
#identity-popup-help-icon {
|
||||
-moz-appearance: none;
|
||||
border: none;
|
||||
margin: 10px 0 0 2px;
|
||||
background: none;
|
||||
min-width: 0;
|
||||
list-style-image: url("chrome://global/skin/icons/question-16.png");
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon > .button-box > .button-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon > .button-box > .button-icon {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon:focus {
|
||||
@hudButtonFocused@
|
||||
}
|
||||
|
||||
#identity-popup-help-icon:hover:active {
|
||||
@hudButtonPressed@
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure-Glyph@2x.png");
|
||||
width: 24px;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon {
|
||||
list-style-image: url("chrome://global/skin/icons/question-32.png");
|
||||
}
|
||||
}
|
||||
|
||||
#identity-popup {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
#identity-popup > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#identity-popup-container {
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
#identity-popup-button-container {
|
||||
background-color: hsla(210,4%,10%,.07);
|
||||
border-top: 1px solid hsla(210,4%,10%,.12);
|
||||
padding: 16px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
%include ../shared/notification-icons.inc.css
|
||||
|
||||
#notification-popup-box {
|
||||
|
@ -3431,21 +3297,6 @@ notification[value="loop-sharing-notification"] .messageImage {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Popup Buttons */
|
||||
#identity-popup-more-info-button {
|
||||
@hudButton@
|
||||
margin: 10px 0 0;
|
||||
min-height: 0px;
|
||||
}
|
||||
|
||||
#identity-popup-more-info-button:focus {
|
||||
@hudButtonFocused@
|
||||
}
|
||||
|
||||
#identity-popup-more-info-button:hover:active {
|
||||
@hudButtonPressed@
|
||||
}
|
||||
|
||||
/* ::::: Keyboard UI Panel ::::: */
|
||||
|
||||
.KUI-panel {
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
/* 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/. */
|
||||
|
||||
%include ../../shared/controlcenter/panel.inc.css
|
||||
|
||||
/* Popup Icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
#identity-popup-icon {
|
||||
list-style-image: url("chrome://browser/skin/identity@2x.png");
|
||||
-moz-image-region: rect(0px, 128px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 128px, 256px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(256px, 128px, 384px, 0px);
|
||||
}
|
||||
}
|
||||
|
||||
/* Popup Body Text */
|
||||
.identity-popup-description {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 2px 0 4px;
|
||||
}
|
||||
|
||||
.identity-popup-label {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-owner {
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-content-host ,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-content-owner {
|
||||
font-size: 140%;
|
||||
}
|
||||
|
||||
#identity-popup-content-owner {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
#identity-popup-content-verifier {
|
||||
margin: 4px 0 2px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
|
||||
margin-top: 10px;
|
||||
-moz-margin-start: -24px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
margin-top: 5px;
|
||||
list-style-image: url("chrome://browser/skin/Secure-Glyph.png");
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure-Glyph@2x.png");
|
||||
width: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
#identity-popup {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
#identity-popup > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#identity-popup-container {
|
||||
padding: 16px;
|
||||
}
|
|
@ -192,6 +192,7 @@ browser.jar:
|
|||
skin/classic/browser/yosemite/loop/menuPanel@2x.png (loop/menuPanel-yosemite@2x.png)
|
||||
skin/classic/browser/yosemite/loop/toolbar.png (loop/toolbar-yosemite.png)
|
||||
skin/classic/browser/yosemite/loop/toolbar@2x.png (loop/toolbar-yosemite@2x.png)
|
||||
* skin/classic/browser/controlcenter/panel.css (controlcenter/panel.css)
|
||||
skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
|
||||
skin/classic/browser/customizableui/customize-titleBar-toggle.png (customizableui/customize-titleBar-toggle.png)
|
||||
skin/classic/browser/customizableui/customize-titleBar-toggle@2x.png (customizableui/customize-titleBar-toggle@2x.png)
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
#identity-popup-content-box:not(.chromeUI) > #identity-popup-brandName,
|
||||
#identity-popup-content-box:not(.chromeUI) > #identity-popup-chromeLabel,
|
||||
#identity-popup-content-box.chromeUI > .identity-popup-label:not(#identity-popup-brandName):not(#identity-popup-chromeLabel),
|
||||
#identity-popup-content-box.chromeUI > .identity-popup-description,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-connectedToLabel ,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-runByLabel ,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-content-host ,
|
||||
#identity-popup-content-box.unknownIdentity > #identity-popup-content-owner ,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-connectedToLabel2 ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-connectedToLabel2 ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-runByLabel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#identity-popup.chromeUI > #identity-popup-container > #identity-popup-icon {
|
||||
list-style-image: url("chrome://branding/content/icon64.png");
|
||||
}
|
||||
|
||||
#identity-popup-brandName {
|
||||
font-weight: bold;
|
||||
font-size: 1.25em;
|
||||
margin-top: .5em;
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
|
||||
#identity-popup-content-box {
|
||||
max-width: 50ch;
|
||||
}
|
||||
|
||||
#identity-popup-button-container {
|
||||
background-color: hsla(210,4%,10%,.07);
|
||||
}
|
||||
|
||||
#identity-popup-more-info-button {
|
||||
border: none;
|
||||
border-top: 1px solid hsla(210,4%,10%,.14);
|
||||
background: transparent;
|
||||
-moz-appearance: none;
|
||||
margin-top: 5px;
|
||||
padding: 1.1em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-more-info-button:hover {
|
||||
background-color: hsla(210,4%,10%,.07);
|
||||
}
|
||||
|
||||
#identity-popup-more-info-button:hover:active {
|
||||
color: inherit;
|
||||
background-color: hsla(210,4%,10%,.12);
|
||||
box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
#identity-popup.chromeUI > #identity-popup-container > #identity-popup-icon {
|
||||
list-style-image: url("chrome://branding/content/icon128.png");
|
||||
-moz-image-region: rect(0, 128px, 128px, 0);
|
||||
}
|
||||
}
|
|
@ -91,21 +91,6 @@
|
|||
opacity: 0.3;
|
||||
}
|
||||
|
||||
#identity-popup.chromeUI > #identity-popup-container > #identity-popup-icon {
|
||||
list-style-image: url("chrome://branding/content/icon64.png");
|
||||
}
|
||||
|
||||
#identity-popup-brandName {
|
||||
font-weight: bold;
|
||||
font-size: 1.25em;
|
||||
margin-top: .5em;
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
|
||||
#identity-popup-content-box {
|
||||
max-width: 50ch;
|
||||
}
|
||||
|
||||
@media not all and (min-resolution: 1.1dppx) {
|
||||
#page-proxy-favicon {
|
||||
-moz-image-region: rect(0, 16px, 16px, 0);
|
||||
|
@ -159,9 +144,4 @@
|
|||
#identity-box[open=true] > #page-proxy-favicon {
|
||||
-moz-image-region: rect(0, 96px, 32px, 64px);
|
||||
}
|
||||
|
||||
#identity-popup.chromeUI > #identity-popup-container > #identity-popup-icon {
|
||||
list-style-image: url("chrome://branding/content/icon128.png");
|
||||
-moz-image-region: rect(0, 128px, 128px, 0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -158,26 +158,33 @@
|
|||
text-shadow: 0 0 .5em white, 0 0 .5em white, 0 1px 0 rgba(255,255,255,.4);
|
||||
}
|
||||
|
||||
/* Vertical toolbar border */
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox:not(:-moz-lwtheme)::after,
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(:-moz-lwtheme),
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox:-moz-lwtheme,
|
||||
#main-window[customizing] #navigator-toolbox::after,
|
||||
#main-window[customizing] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar) {
|
||||
border-left: 1px solid @toolbarShadowColor@;
|
||||
border-right: 1px solid @toolbarShadowColor@;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
#main-window[sizemode=normal] #browser-border-start,
|
||||
#main-window[sizemode=normal] #browser-border-end {
|
||||
display: -moz-box;
|
||||
background-color: @toolbarShadowColor@;
|
||||
width: 1px;
|
||||
}
|
||||
#main-window[sizemode=normal] #browser-bottombox {
|
||||
border: 1px solid @toolbarShadowColor@;
|
||||
border-top-style: none;
|
||||
background-clip: padding-box;
|
||||
/* Show borders on vista through win8, but not on win10 and later: */
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
/* Vertical toolbar border */
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox:not(:-moz-lwtheme)::after,
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(:-moz-lwtheme),
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox:-moz-lwtheme,
|
||||
#main-window[customizing] #navigator-toolbox::after,
|
||||
#main-window[customizing] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar) {
|
||||
border-left: 1px solid @toolbarShadowColor@;
|
||||
border-right: 1px solid @toolbarShadowColor@;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
#main-window[sizemode=normal] #browser-border-start,
|
||||
#main-window[sizemode=normal] #browser-border-end {
|
||||
display: -moz-box;
|
||||
background-color: @toolbarShadowColor@;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
#main-window[sizemode=normal] #browser-bottombox {
|
||||
border: 1px solid @toolbarShadowColor@;
|
||||
border-top-style: none;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
}
|
||||
|
||||
#main-window[sizemode=normal] #TabsToolbar {
|
||||
|
|
|
@ -2138,116 +2138,6 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
|
|||
background-color: Highlight;
|
||||
}
|
||||
|
||||
/* ::::: Identity Indicator Styling ::::: */
|
||||
|
||||
/* Popup Icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
/* Popup Body Text */
|
||||
.identity-popup-description {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 2px 0 4px;
|
||||
}
|
||||
|
||||
.identity-popup-label {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-content-host,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-content-owner {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
#identity-popup-content-host {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 5px;
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-content-owner {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 0 !important;
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.verifiedDomain > #identity-popup-content-owner {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#identity-popup-content-verifier {
|
||||
margin: 4px 0 2px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
|
||||
margin-top: 10px;
|
||||
-moz-margin-start: -24px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure24.png");
|
||||
}
|
||||
|
||||
#identity-popup-help-icon {
|
||||
-moz-appearance: none;
|
||||
border: none;
|
||||
margin: 7px 0 0 -3px;
|
||||
background: none;
|
||||
min-width: 0;
|
||||
list-style-image: url("chrome://global/skin/icons/question-16.png");
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon > .button-box > .button-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#identity-popup-help-icon > .button-box > .button-icon {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
#identity-popup-more-info-button {
|
||||
margin-top: 6px;
|
||||
margin-bottom: 0;
|
||||
-moz-margin-end: 0;
|
||||
}
|
||||
|
||||
#identity-popup > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#identity-popup-container {
|
||||
min-width: 280px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#identity-popup-button-container {
|
||||
background: linear-gradient(to bottom, rgba(0,0,0,0.04) 60%, transparent);
|
||||
padding: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
%include ../shared/notification-icons.inc.css
|
||||
|
||||
.popup-notification-body[popupid="addon-progress"],
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
/* 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/. */
|
||||
|
||||
%include ../../shared/controlcenter/panel.inc.css
|
||||
|
||||
/* Popup Icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
#identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
/* Popup Body Text */
|
||||
.identity-popup-description {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 2px 0 4px;
|
||||
}
|
||||
|
||||
.identity-popup-label {
|
||||
white-space: pre-wrap;
|
||||
-moz-padding-start: 15px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#identity-popup-content-host,
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-content-owner {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
#identity-popup-content-host {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 5px;
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-content-owner {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 0 !important;
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.verifiedDomain > #identity-popup-content-owner {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#identity-popup-content-verifier {
|
||||
margin: 4px 0 2px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
|
||||
margin-top: 10px;
|
||||
-moz-margin-start: -24px;
|
||||
}
|
||||
|
||||
#identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
|
||||
#identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure24.png");
|
||||
}
|
||||
|
||||
#identity-popup > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#identity-popup-container {
|
||||
min-width: 280px;
|
||||
padding: 10px;
|
||||
}
|
|
@ -177,6 +177,7 @@ browser.jar:
|
|||
skin/classic/browser/loop/toolbar-inverted.png (loop/toolbar-inverted.png)
|
||||
skin/classic/browser/loop/toolbar-XP.png (loop/toolbar-XP.png)
|
||||
skin/classic/browser/loop/toolbar-lunaSilver.png (loop/toolbar-lunaSilver.png)
|
||||
* skin/classic/browser/controlcenter/panel.css (controlcenter/panel.css)
|
||||
skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
|
||||
skin/classic/browser/customizableui/customizeFavicon.ico (../shared/customizableui/customizeFavicon.ico)
|
||||
skin/classic/browser/customizableui/customize-illustration.png (../shared/customizableui/customize-illustration.png)
|
||||
|
|
|
@ -64,7 +64,7 @@ case "$target" in
|
|||
|
||||
kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"`
|
||||
|
||||
for version in $android_gnu_compiler_version 4.8 4.7 4.6 4.4.3; do
|
||||
for version in $android_gnu_compiler_version 4.9 4.8 4.7 4.6 4.4.3; do
|
||||
case "$target_cpu" in
|
||||
arm)
|
||||
target_name=arm-linux-androideabi-$version
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
namespace mozilla {
|
||||
|
||||
void
|
||||
OriginAttributes::CreateSuffix(nsACString& aStr)
|
||||
OriginAttributes::CreateSuffix(nsACString& aStr) const
|
||||
{
|
||||
aStr.Truncate();
|
||||
MOZ_RELEASE_ASSERT(mAppId != nsIScriptSecurityManager::UNKNOWN_APP_ID);
|
||||
|
@ -259,4 +259,29 @@ BasePrincipal::CreateCodebasePrincipal(nsIURI* aURI, OriginAttributes& aAttrs)
|
|||
return codebase.forget();
|
||||
}
|
||||
|
||||
/* static */ bool
|
||||
BasePrincipal::IsCodebasePrincipal(nsIPrincipal* aPrincipal)
|
||||
{
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
bool isNullPrincipal = true;
|
||||
nsresult rv = aPrincipal->GetIsNullPrincipal(&isNullPrincipal);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isNullPrincipal || nsContentUtils::IsSystemPrincipal(aPrincipal)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// No expanded principals.
|
||||
nsCOMPtr<nsIExpandedPrincipal> expandedPrincipal =
|
||||
do_QueryInterface(aPrincipal);
|
||||
if (expandedPrincipal) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
// Serializes non-default values into the suffix format, i.e.
|
||||
// |!key1=value1&key2=value2|. If there are no non-default attributes, this
|
||||
// returns an empty string.
|
||||
void CreateSuffix(nsACString& aStr);
|
||||
void CreateSuffix(nsACString& aStr) const;
|
||||
|
||||
void Serialize(nsIObjectOutputStream* aStream) const;
|
||||
nsresult Deserialize(nsIObjectInputStream* aStream);
|
||||
|
@ -83,6 +83,8 @@ public:
|
|||
|
||||
virtual bool IsOnCSSUnprefixingWhitelist() override { return false; }
|
||||
|
||||
static bool IsCodebasePrincipal(nsIPrincipal* aPrincipal);
|
||||
|
||||
static BasePrincipal* Cast(nsIPrincipal* aPrin) { return static_cast<BasePrincipal*>(aPrin); }
|
||||
static already_AddRefed<BasePrincipal> CreateCodebasePrincipal(nsIURI* aURI, OriginAttributes& aAttrs);
|
||||
|
||||
|
|
|
@ -40,6 +40,12 @@ if not CONFIG['MOZ_NATIVE_PNG']:
|
|||
if CONFIG['CPU_ARCH'] == 'arm':
|
||||
external_dirs += ['media/openmax_dl']
|
||||
|
||||
if CONFIG['MOZ_WEBSPEECH_POCKETSPHINX']:
|
||||
external_dirs += [
|
||||
'media/sphinxbase',
|
||||
'media/pocketsphinx',
|
||||
]
|
||||
|
||||
external_dirs += [
|
||||
'media/kiss_fft',
|
||||
'media/libcubeb',
|
||||
|
|
84
configure.in
84
configure.in
|
@ -3879,6 +3879,9 @@ MOZ_OMX_PLUGIN=
|
|||
MOZ_VPX=
|
||||
MOZ_VPX_ERROR_CONCEALMENT=
|
||||
MOZ_WEBSPEECH=1
|
||||
MOZ_WEBSPEECH_MODELS=
|
||||
MOZ_WEBSPEECH_POCKETSPHINX=
|
||||
MOZ_WEBSPEECH_TEST_BACKEND=1
|
||||
VPX_AS=
|
||||
VPX_ASFLAGS=
|
||||
VPX_AS_CONVERSION=
|
||||
|
@ -5164,6 +5167,34 @@ else
|
|||
AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Disable Speech API test backend
|
||||
dnl ========================================================
|
||||
MOZ_ARG_DISABLE_BOOL(webspeechtestbackend,
|
||||
[ --disable-webspeechtestbackend Disable support for HTML Speech API Test Backend],
|
||||
MOZ_WEBSPEECH_TEST_BACKEND=,
|
||||
MOZ_WEBSPEECH_TEST_BACKEND=1)
|
||||
|
||||
if test -n "$MOZ_WEBSPEECH_TEST_BACKEND"; then
|
||||
AC_DEFINE(MOZ_WEBSPEECH_TEST_BACKEND)
|
||||
fi
|
||||
|
||||
AC_SUBST(MOZ_WEBSPEECH_TEST_BACKEND)
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Disable Speech API pocketsphinx backend
|
||||
dnl ========================================================
|
||||
MOZ_ARG_DISABLE_BOOL(webspeechpocketsphinx,
|
||||
[ --disable-webspeechpocketsphinx Disable support for HTML Speech API Pocketsphinx Backend],
|
||||
MOZ_WEBSPEECH_POCKETSPHINX=,
|
||||
MOZ_WEBSPEECH_POCKETSPHINX=1)
|
||||
|
||||
if test -n "$MOZ_WEBSPEECH_POCKETSPHINX"; then
|
||||
AC_DEFINE(MOZ_WEBSPEECH_POCKETSPHINX)
|
||||
fi
|
||||
|
||||
AC_SUBST(MOZ_WEBSPEECH_POCKETSPHINX)
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Disable Speech API code
|
||||
dnl ========================================================
|
||||
|
@ -5178,6 +5209,20 @@ fi
|
|||
|
||||
AC_SUBST(MOZ_WEBSPEECH)
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Disable Speech API models
|
||||
dnl ========================================================
|
||||
MOZ_ARG_DISABLE_BOOL(webspeechmodels,
|
||||
[ --disable-webspeechmodels Disable support for HTML Speech API Models],
|
||||
MOZ_WEBSPEECH_MODELS=,
|
||||
MOZ_WEBSPEECH_MODELS=1)
|
||||
|
||||
if test -n "$MOZ_WEBSPEECH_MODELS"; then
|
||||
AC_DEFINE(MOZ_WEBSPEECH_MODELS)
|
||||
fi
|
||||
|
||||
AC_SUBST(MOZ_WEBSPEECH_MODELS)
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Enable Raw Codecs
|
||||
dnl ========================================================
|
||||
|
@ -5340,17 +5385,31 @@ dnl ========================================================
|
|||
dnl = EME support
|
||||
dnl ========================================================
|
||||
|
||||
MOZ_ARG_DISABLE_BOOL(eme,
|
||||
[ --disable-eme Disable support for Encrypted Media Extensions],
|
||||
MOZ_EME=,
|
||||
MOZ_EME=1)
|
||||
MOZ_ARG_ENABLE_STRING(eme,
|
||||
[ --enable-eme[=adobe] Enable support for Encrypted Media Extensions ],
|
||||
MOZ_EME_ARGS=$enableval)
|
||||
|
||||
if test "$MOZ_EME_ARGS"; then
|
||||
if test "$MOZ_EME_ARGS" = "no"; then
|
||||
dnl EME explicitly disabled with --disable-eme
|
||||
MOZ_EME=
|
||||
elif test "$MOZ_EME_ARGS" = "yes"; then
|
||||
dnl EME explicitly enabled with --enable-eme
|
||||
MOZ_EME=1
|
||||
else
|
||||
dnl EME explicitly enabled with --enable-eme=<args>
|
||||
MOZ_EME=1
|
||||
MOZ_EME_MODULES=`echo $MOZ_EME_ARGS | sed -e 's/,/ /g'`
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST_SET(MOZ_EME_MODULES)
|
||||
if test -n "$MOZ_EME"; then
|
||||
if test -z "$MOZ_FMP4"; then
|
||||
AC_MSG_ERROR([Encrypted Media Extension support requires Fragmented MP4 support])
|
||||
fi
|
||||
AC_DEFINE(MOZ_EME)
|
||||
fi;
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Enable media plugin support
|
||||
|
@ -7419,17 +7478,6 @@ dnl =
|
|||
dnl ========================================================
|
||||
MOZ_ARG_HEADER(Profiling and Instrumenting)
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Enable runtime visual profiling logger
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(visual-event-tracer,
|
||||
[ --enable-visual-event-tracer Enable visual event tracer instrumentation],
|
||||
MOZ_VISUAL_EVENT_TRACER=1,
|
||||
MOZ_VISUAL_EVENT_TRACER=)
|
||||
if test -n "$MOZ_VISUAL_EVENT_TRACER"; then
|
||||
AC_DEFINE(MOZ_VISUAL_EVENT_TRACER)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Enable TaskTracer
|
||||
dnl ========================================================
|
||||
|
@ -8614,7 +8662,9 @@ else
|
|||
# so if the file is named libsomething.so. The lib/ path is also required
|
||||
# because the unpacked file will be under the lib/ subdirectory and will
|
||||
# need to be executed from that path.
|
||||
MOZ_CHILD_PROCESS_NAME="lib/libplugin-container.so"
|
||||
MOZ_CHILD_PROCESS_NAME="libplugin-container.so"
|
||||
MOZ_CHILD_PROCESS_NAME_PIE="libplugin-container-pie.so"
|
||||
AC_SUBST(MOZ_CHILD_PROCESS_NAME_PIE)
|
||||
fi
|
||||
MOZ_CHILD_PROCESS_BUNDLE="plugin-container.app/Contents/MacOS/"
|
||||
|
||||
|
|
|
@ -17,13 +17,13 @@
|
|||
#include "mozilla/dom/TabChild.h"
|
||||
#include "mozilla/dom/ProfileTimelineMarkerBinding.h"
|
||||
#include "mozilla/dom/ToJSValue.h"
|
||||
#include "mozilla/dom/workers/ServiceWorkerManager.h"
|
||||
#include "mozilla/EventStateManager.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/StartupTimeline.h"
|
||||
#include "mozilla/Telemetry.h"
|
||||
#include "mozilla/unused.h"
|
||||
#include "mozilla/VisualEventTracer.h"
|
||||
#include "URIUtils.h"
|
||||
|
||||
#include "nsIContent.h"
|
||||
|
@ -52,7 +52,6 @@
|
|||
#include "nsIAuthPrompt2.h"
|
||||
#include "nsIChannelEventSink.h"
|
||||
#include "nsIAsyncVerifyRedirectCallback.h"
|
||||
#include "nsIServiceWorkerManager.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsIScrollableFrame.h"
|
||||
|
@ -217,6 +216,7 @@ static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
|
|||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
using mozilla::dom::workers::ServiceWorkerManager;
|
||||
|
||||
// True means sUseErrorPages has been added to preferences var cache.
|
||||
static bool gAddedPreferencesVarCache = false;
|
||||
|
@ -7499,8 +7499,6 @@ nsDocShell::EndPageLoad(nsIWebProgress* aProgress,
|
|||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
MOZ_EVENT_TRACER_DONE(this, "docshell::pageload");
|
||||
|
||||
nsCOMPtr<nsIURI> url;
|
||||
nsresult rv = aChannel->GetURI(getter_AddRefs(url));
|
||||
if (NS_FAILED(rv)) {
|
||||
|
@ -10481,13 +10479,6 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
|||
nsIURI* aBaseURI,
|
||||
nsContentPolicyType aContentPolicyType)
|
||||
{
|
||||
#ifdef MOZ_VISUAL_EVENT_TRACER
|
||||
nsAutoCString urlSpec;
|
||||
aURI->GetAsciiSpec(urlSpec);
|
||||
MOZ_EVENT_TRACER_NAME_OBJECT(this, urlSpec.BeginReading());
|
||||
MOZ_EVENT_TRACER_EXEC(this, "docshell::pageload");
|
||||
#endif
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIURILoader> uriLoader;
|
||||
|
||||
|
@ -14041,13 +14032,15 @@ nsDocShell::ShouldPrepareForIntercept(nsIURI* aURI, bool aIsNavigate,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIServiceWorkerManager> swm = services::GetServiceWorkerManager();
|
||||
nsRefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (aIsNavigate) {
|
||||
return swm->IsAvailableForURI(aURI, aShouldIntercept);
|
||||
OriginAttributes attrs(GetAppId(), GetIsInBrowserElement());
|
||||
*aShouldIntercept = swm->IsAvailable(attrs, aURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDocument> doc = GetDocument();
|
||||
|
@ -14055,13 +14048,19 @@ nsDocShell::ShouldPrepareForIntercept(nsIURI* aURI, bool aIsNavigate,
|
|||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
return swm->IsControlled(doc, aShouldIntercept);
|
||||
ErrorResult rv;
|
||||
*aShouldIntercept = swm->IsControlled(doc, rv);
|
||||
if (NS_WARN_IF(rv.Failed())) {
|
||||
return rv.StealNSResult();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel)
|
||||
{
|
||||
nsCOMPtr<nsIServiceWorkerManager> swm = services::GetServiceWorkerManager();
|
||||
nsRefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
if (!swm) {
|
||||
aChannel->Cancel();
|
||||
return NS_OK;
|
||||
|
@ -14081,7 +14080,16 @@ nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel)
|
|||
}
|
||||
|
||||
bool isReload = mLoadType & LOAD_CMD_RELOAD;
|
||||
return swm->DispatchFetchEvent(doc, aChannel, isReload);
|
||||
|
||||
OriginAttributes attrs(GetAppId(), GetIsInBrowserElement());
|
||||
|
||||
ErrorResult error;
|
||||
swm->DispatchFetchEvent(attrs, doc, aChannel, isReload, error);
|
||||
if (NS_WARN_IF(error.Failed())) {
|
||||
return error.StealNSResult();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -1336,127 +1336,127 @@ DOMInterfaces = {
|
|||
'headerFile': 'WebGLBuffer.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionCompressedTextureATC': {
|
||||
'WEBGL_compressed_texture_atc': {
|
||||
'nativeType': 'mozilla::WebGLExtensionCompressedTextureATC',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionCompressedTextureETC1': {
|
||||
'WEBGL_compressed_texture_etc1': {
|
||||
'nativeType': 'mozilla::WebGLExtensionCompressedTextureETC1',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionCompressedTexturePVRTC': {
|
||||
'WEBGL_compressed_texture_pvrtc': {
|
||||
'nativeType': 'mozilla::WebGLExtensionCompressedTexturePVRTC',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionCompressedTextureS3TC': {
|
||||
'WEBGL_compressed_texture_s3tc': {
|
||||
'nativeType': 'mozilla::WebGLExtensionCompressedTextureS3TC',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionDepthTexture': {
|
||||
'WEBGL_depth_texture': {
|
||||
'nativeType': 'mozilla::WebGLExtensionDepthTexture',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionDebugRendererInfo': {
|
||||
'WEBGL_debug_renderer_info': {
|
||||
'nativeType': 'mozilla::WebGLExtensionDebugRendererInfo',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionDebugShaders': {
|
||||
'WEBGL_debug_shaders': {
|
||||
'nativeType': 'mozilla::WebGLExtensionDebugShaders',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionElementIndexUint': {
|
||||
'OES_element_index_uint': {
|
||||
'nativeType': 'mozilla::WebGLExtensionElementIndexUint',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionFragDepth': {
|
||||
'EXT_frag_depth': {
|
||||
'nativeType': 'mozilla::WebGLExtensionFragDepth',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionLoseContext': {
|
||||
'WEBGL_lose_context': {
|
||||
'nativeType': 'mozilla::WebGLExtensionLoseContext',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionSRGB': {
|
||||
'EXT_sRGB': {
|
||||
'nativeType': 'mozilla::WebGLExtensionSRGB',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionStandardDerivatives': {
|
||||
'OES_standard_derivatives': {
|
||||
'nativeType': 'mozilla::WebGLExtensionStandardDerivatives',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionShaderTextureLod': {
|
||||
'EXT_shader_texture_lod': {
|
||||
'nativeType': 'mozilla::WebGLExtensionShaderTextureLod',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionTextureFilterAnisotropic': {
|
||||
'EXT_texture_filter_anisotropic': {
|
||||
'nativeType': 'mozilla::WebGLExtensionTextureFilterAnisotropic',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionTextureFloat': {
|
||||
'OES_texture_float': {
|
||||
'nativeType': 'mozilla::WebGLExtensionTextureFloat',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionTextureFloatLinear': {
|
||||
'OES_texture_float_linear': {
|
||||
'nativeType': 'mozilla::WebGLExtensionTextureFloatLinear',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionTextureHalfFloat': {
|
||||
'OES_texture_half_float': {
|
||||
'nativeType': 'mozilla::WebGLExtensionTextureHalfFloat',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionTextureHalfFloatLinear': {
|
||||
'OES_texture_half_float_linear': {
|
||||
'nativeType': 'mozilla::WebGLExtensionTextureHalfFloatLinear',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionColorBufferFloat': {
|
||||
'WEBGL_color_buffer_float': {
|
||||
'nativeType': 'mozilla::WebGLExtensionColorBufferFloat',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionColorBufferHalfFloat': {
|
||||
'EXT_color_buffer_half_float': {
|
||||
'nativeType': 'mozilla::WebGLExtensionColorBufferHalfFloat',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionDrawBuffers': {
|
||||
'WEBGL_draw_buffers': {
|
||||
'nativeType': 'mozilla::WebGLExtensionDrawBuffers',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionVertexArray': {
|
||||
'OES_vertex_array_object': {
|
||||
'nativeType': 'mozilla::WebGLExtensionVertexArray',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionInstancedArrays': {
|
||||
'ANGLE_instanced_arrays': {
|
||||
'nativeType': 'mozilla::WebGLExtensionInstancedArrays',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionBlendMinMax': {
|
||||
'EXT_blend_minmax': {
|
||||
'nativeType': 'mozilla::WebGLExtensionBlendMinMax',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionDisjointTimerQuery': {
|
||||
'EXT_disjoint_timer_query': {
|
||||
'nativeType': 'mozilla::WebGLExtensionDisjointTimerQuery',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
@ -1519,7 +1519,7 @@ DOMInterfaces = {
|
|||
'headerFile': 'WebGLTexture.h'
|
||||
},
|
||||
|
||||
'WebGLTimerQuery': {
|
||||
'WebGLTimerQueryEXT': {
|
||||
'nativeType': 'mozilla::WebGLTimerQuery',
|
||||
'headerFile': 'WebGLTimerQuery.h'
|
||||
},
|
||||
|
@ -1534,7 +1534,7 @@ DOMInterfaces = {
|
|||
'headerFile': 'WebGLUniformLocation.h'
|
||||
},
|
||||
|
||||
'WebGLVertexArray': {
|
||||
'WebGLVertexArrayObjectOES': {
|
||||
'nativeType': 'mozilla::WebGLVertexArray',
|
||||
'headerFile': 'WebGLVertexArray.h'
|
||||
},
|
||||
|
|
|
@ -11157,12 +11157,13 @@ def memberProperties(m, descriptor):
|
|||
props.isJsonifier = True
|
||||
elif (not m.isIdentifierLess() or m == descriptor.operations['Stringifier']):
|
||||
if not m.isStatic() and descriptor.interface.hasInterfacePrototypeObject():
|
||||
if m.returnsPromise() and descriptor.needsSpecialGenericOps():
|
||||
props.isPromiseReturningMethod = True
|
||||
if descriptor.needsSpecialGenericOps():
|
||||
if m.returnsPromise():
|
||||
props.isPromiseReturningMethod = True
|
||||
else:
|
||||
props.isGenericMethod = True
|
||||
if m.getExtendedAttribute("CrossOriginCallable"):
|
||||
props.isCrossOriginMethod = True
|
||||
elif descriptor.needsSpecialGenericOps():
|
||||
props.isGenericMethod = True
|
||||
elif m.isAttr():
|
||||
if not m.isStatic() and descriptor.interface.hasInterfacePrototypeObject():
|
||||
if m.hasLenientThis():
|
||||
|
|
|
@ -1779,7 +1779,7 @@ WebGLContext::GetSurfaceSnapshot(bool* out_premultAlpha)
|
|||
if (!srcPremultAlpha) {
|
||||
if (out_premultAlpha) {
|
||||
*out_premultAlpha = false;
|
||||
} else {
|
||||
} else if(hasAlpha) {
|
||||
gfxUtils::PremultiplyDataSurface(surf, surf);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,6 @@ WebGLExtensionBlendMinMax::IsSupported(const WebGLContext* webgl)
|
|||
return webgl->GL()->IsSupported(gl::GLFeature::blend_minmax);
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionBlendMinMax)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionBlendMinMax, EXT_blend_minmax)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -32,6 +32,6 @@ WebGLExtensionColorBufferFloat::IsSupported(const WebGLContext* webgl)
|
|||
gl->IsANGLE();
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionColorBufferFloat)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionColorBufferFloat, WEBGL_color_buffer_float)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -30,6 +30,6 @@ WebGLExtensionColorBufferHalfFloat::IsSupported(const WebGLContext* webgl)
|
|||
gl->IsANGLE();
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionColorBufferHalfFloat)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionColorBufferHalfFloat, EXT_color_buffer_half_float)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -21,6 +21,6 @@ WebGLExtensionCompressedTextureATC::~WebGLExtensionCompressedTextureATC()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureATC)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureATC, WEBGL_compressed_texture_atc)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionCompressedTextureETC1::~WebGLExtensionCompressedTextureETC1()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureETC1)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureETC1, WEBGL_compressed_texture_etc1)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -22,6 +22,6 @@ WebGLExtensionCompressedTexturePVRTC::~WebGLExtensionCompressedTexturePVRTC()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTexturePVRTC)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTexturePVRTC, WEBGL_compressed_texture_pvrtc)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -22,6 +22,6 @@ WebGLExtensionCompressedTextureS3TC::~WebGLExtensionCompressedTextureS3TC()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureS3TC)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureS3TC, WEBGL_compressed_texture_s3tc)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionDebugRendererInfo::~WebGLExtensionDebugRendererInfo()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDebugRendererInfo)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDebugRendererInfo, WEBGL_debug_renderer_info)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -38,6 +38,6 @@ WebGLExtensionDebugShaders::GetTranslatedShaderSource(WebGLShader* shader,
|
|||
mContext->GetShaderTranslatedSource(shader, retval);
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDebugShaders)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDebugShaders, WEBGL_debug_shaders)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionDepthTexture::~WebGLExtensionDepthTexture()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDepthTexture)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDepthTexture, WEBGL_depth_texture)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -242,6 +242,6 @@ WebGLExtensionDisjointTimerQuery::IsSupported(const WebGLContext* webgl)
|
|||
}
|
||||
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDisjointTimerQuery)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDisjointTimerQuery, EXT_disjoint_timer_query)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -83,6 +83,6 @@ WebGLExtensionDrawBuffers::IsSupported(const WebGLContext* webgl)
|
|||
return true;
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDrawBuffers)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDrawBuffers, WEBGL_draw_buffers)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionElementIndexUint::~WebGLExtensionElementIndexUint()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionElementIndexUint)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionElementIndexUint, OES_element_index_uint)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -29,6 +29,6 @@ WebGLExtensionFragDepth::IsSupported(const WebGLContext* webgl)
|
|||
}
|
||||
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionFragDepth)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionFragDepth, EXT_frag_depth)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -73,6 +73,6 @@ WebGLExtensionInstancedArrays::IsSupported(const WebGLContext* webgl)
|
|||
gl->IsSupported(gl::GLFeature::instanced_arrays);
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionInstancedArrays)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionInstancedArrays, ANGLE_instanced_arrays)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -31,6 +31,6 @@ WebGLExtensionLoseContext::RestoreContext()
|
|||
mContext->RestoreContext();
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionLoseContext)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionLoseContext, WEBGL_lose_context)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -39,6 +39,6 @@ WebGLExtensionSRGB::IsSupported(const WebGLContext* webgl)
|
|||
}
|
||||
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionSRGB)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionSRGB, EXT_sRGB)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionShaderTextureLod::~WebGLExtensionShaderTextureLod()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionShaderTextureLod)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionShaderTextureLod, EXT_shader_texture_lod)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionStandardDerivatives::~WebGLExtensionStandardDerivatives()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionStandardDerivatives)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionStandardDerivatives, OES_standard_derivatives)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -19,6 +19,6 @@ WebGLExtensionTextureFilterAnisotropic::~WebGLExtensionTextureFilterAnisotropic(
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureFilterAnisotropic)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureFilterAnisotropic, EXT_texture_filter_anisotropic)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -18,6 +18,6 @@ WebGLExtensionTextureFloat::~WebGLExtensionTextureFloat()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureFloat)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureFloat, OES_texture_float)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -18,6 +18,6 @@ WebGLExtensionTextureFloatLinear::~WebGLExtensionTextureFloatLinear()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureFloatLinear)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureFloatLinear, OES_texture_float_linear)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -18,6 +18,6 @@ WebGLExtensionTextureHalfFloat::~WebGLExtensionTextureHalfFloat()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureHalfFloat)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureHalfFloat, OES_texture_half_float)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -18,6 +18,6 @@ WebGLExtensionTextureHalfFloatLinear::~WebGLExtensionTextureHalfFloatLinear()
|
|||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureHalfFloatLinear)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureHalfFloatLinear, OES_texture_half_float_linear)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -70,6 +70,6 @@ WebGLExtensionVertexArray::BindVertexArrayOES(WebGLVertexArray* array)
|
|||
mContext->BindVertexArray(array);
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionVertexArray)
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionVertexArray, OES_vertex_array_object)
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -45,10 +45,10 @@ protected:
|
|||
#define DECL_WEBGL_EXTENSION_GOOP \
|
||||
virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
#define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType) \
|
||||
#define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType, WebGLBindingType)\
|
||||
JSObject* \
|
||||
WebGLExtensionType::WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) { \
|
||||
return dom::WebGLExtensionType##Binding::Wrap(cx, this, aGivenProto); \
|
||||
return dom::WebGLBindingType##Binding::Wrap(cx, this, aGivenProto); \
|
||||
}
|
||||
|
||||
class WebGLExtensionCompressedTextureATC
|
||||
|
|
|
@ -140,6 +140,8 @@ WebGLShader::WebGLShader(WebGLContext* webgl, GLenum type)
|
|||
: WebGLContextBoundObject(webgl)
|
||||
, mGLName(CreateShader(webgl->GL(), type))
|
||||
, mType(type)
|
||||
, mTranslationSuccessful(false)
|
||||
, mCompilationSuccessful(false)
|
||||
{
|
||||
mContext->mShaders.insertBack(this);
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace mozilla {
|
|||
JSObject*
|
||||
WebGLTimerQuery::WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return dom::WebGLTimerQueryBinding::Wrap(cx, this, aGivenProto);
|
||||
return dom::WebGLTimerQueryEXTBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
WebGLTimerQuery::WebGLTimerQuery(WebGLContext* webgl, GLuint aName)
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace mozilla {
|
|||
JSObject*
|
||||
WebGLVertexArray::WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return dom::WebGLVertexArrayBinding::Wrap(cx, this, aGivenProto);
|
||||
return dom::WebGLVertexArrayObjectOESBinding::Wrap(cx, this, aGivenProto);
|
||||
}
|
||||
|
||||
WebGLVertexArray::WebGLVertexArray(WebGLContext* webgl)
|
||||
|
|
|
@ -14,7 +14,7 @@ load 746813-1.html
|
|||
load 743499-negative-size.html
|
||||
skip-if(Android) load 767337-1.html
|
||||
skip-if(Android||B2G) load 780392-1.html # bug 833371 for B2G
|
||||
skip-if(Android||B2G) skip-if(gtk2Widget&&isDebugBuild) load 789933-1.html # bug 833371 for B2G, bug 1155252 for linux
|
||||
skip-if(Android||B2G) skip-if(gtkWidget&&isDebugBuild) load 789933-1.html # bug 833371 for B2G, bug 1155252 for linux
|
||||
load 794463-1.html
|
||||
load 802926-1.html
|
||||
load 896047-1.html
|
||||
|
|
|
@ -23,7 +23,7 @@ pref(webgl.force-layers-readback,true) == webgl-clear-test.html?readback wrappe
|
|||
# failures encountered when running on Try, and then targetting the Try config by
|
||||
# differences in the `sandbox` contents. That is, I'm labeling based on symptoms rather
|
||||
# than cause.
|
||||
# Lin-R-e10s: gtk2Widget && browserIsRemote
|
||||
# Lin-R-e10s: gtkWidget && browserIsRemote
|
||||
# WinXP-R: winWidget && layersGPUAccelerated && !d2d
|
||||
# Win7+-R: winWidget && layersGPUAccelerated && d2d
|
||||
# Win7+-Ru: winWidget && !layersGPUAccelerated
|
||||
|
@ -47,10 +47,10 @@ pref(webgl.force-layers-readback,true) == webgl-clear-test.html?readback wrappe
|
|||
== webgl-color-test.html?frame=1&aa&________&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
== webgl-color-test.html?frame=1&__&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
== webgl-color-test.html?frame=1&aa&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=1&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
== webgl-color-test.html?frame=1&__&________&premult&alpha wrapper.html?colors-premult.png
|
||||
== webgl-color-test.html?frame=1&aa&________&premult&alpha wrapper.html?colors-premult.png
|
||||
== webgl-color-test.html?frame=1&__&preserve&premult&alpha wrapper.html?colors-premult.png
|
||||
|
@ -64,10 +64,10 @@ fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersG
|
|||
== webgl-color-test.html?frame=6&aa&________&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
== webgl-color-test.html?frame=6&__&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
== webgl-color-test.html?frame=6&aa&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=6&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=6&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=6&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&(!layersGPUAccelerated||!d2d)) == webgl-color-test.html?frame=6&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=6&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=6&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) == webgl-color-test.html?frame=6&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&(!layersGPUAccelerated||!d2d)) == webgl-color-test.html?frame=6&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
== webgl-color-test.html?frame=6&__&________&premult&alpha wrapper.html?colors-premult.png
|
||||
== webgl-color-test.html?frame=6&aa&________&premult&alpha wrapper.html?colors-premult.png
|
||||
== webgl-color-test.html?frame=6&__&preserve&premult&alpha wrapper.html?colors-premult.png
|
||||
|
@ -81,10 +81,10 @@ fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&(!layer
|
|||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&________&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&________&premult&alpha wrapper.html?colors-premult.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&aa&________&premult&alpha wrapper.html?colors-premult.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=1&readback&__&preserve&premult&alpha wrapper.html?colors-premult.png
|
||||
|
@ -98,10 +98,10 @@ fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersG
|
|||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&________&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&preserve&premult&_____ wrapper.html?colors-no-alpha.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtk2Widget&&browserIsRemote) fails-if(winWidget&&(!layersGPUAccelerated||!d2d)) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&________&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&layersGPUAccelerated&&!d2d) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
fuzzy(1,30000) fails-if(gtkWidget&&browserIsRemote) fails-if(winWidget&&(!layersGPUAccelerated||!d2d)) pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&preserve&_______&alpha wrapper.html?colors-non-premult.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&________&premult&alpha wrapper.html?colors-premult.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&aa&________&premult&alpha wrapper.html?colors-premult.png
|
||||
pref(webgl.force-layers-readback,true) == webgl-color-test.html?frame=6&readback&__&preserve&premult&alpha wrapper.html?colors-premult.png
|
||||
|
|
|
@ -20,7 +20,7 @@ interface nsIServiceWorkerUnregisterCallback : nsISupports
|
|||
void unregisterFailed();
|
||||
};
|
||||
|
||||
[scriptable, builtinclass, uuid(8ce0d197-5740-4ddf-aa4a-e5a63e611d03)]
|
||||
[scriptable, builtinclass, uuid(103763c8-53ba-42e4-8b26-e601d5bc4afe)]
|
||||
interface nsIServiceWorkerInfo : nsISupports
|
||||
{
|
||||
readonly attribute nsIPrincipal principal;
|
||||
|
@ -33,7 +33,7 @@ interface nsIServiceWorkerInfo : nsISupports
|
|||
readonly attribute DOMString waitingCacheName;
|
||||
};
|
||||
|
||||
[scriptable, builtinclass, uuid(384c9aec-29e5-4bdb-abc2-fba10da83e17)]
|
||||
[scriptable, builtinclass, uuid(d130fcbd-1afe-4dd9-b70d-08a4b2373af5)]
|
||||
interface nsIServiceWorkerManager : nsISupports
|
||||
{
|
||||
/**
|
||||
|
@ -66,16 +66,6 @@ interface nsIServiceWorkerManager : nsISupports
|
|||
// Remove ready pending Promise
|
||||
void removeReadyPromise(in nsIDOMWindow aWindow);
|
||||
|
||||
// Returns true if a ServiceWorker is available for the scope of aURI.
|
||||
bool isAvailableForURI(in nsIURI aURI);
|
||||
|
||||
// Returns true if a given document is currently controlled by a ServiceWorker
|
||||
bool isControlled(in nsIDocument aDocument);
|
||||
|
||||
// Cause a fetch event to be dispatched to the worker global associated with the given document.
|
||||
void dispatchFetchEvent(in nsIDocument aDoc, in nsIInterceptedChannel aChannel,
|
||||
in boolean aIsReload);
|
||||
|
||||
/**
|
||||
* Call this to request that document `aDoc` be controlled by a ServiceWorker
|
||||
* if a registration exists for it's scope.
|
||||
|
@ -108,8 +98,10 @@ interface nsIServiceWorkerManager : nsISupports
|
|||
|
||||
/*
|
||||
* This implements the soft update algorithm.
|
||||
* XXXbaku this can be removed when bug 1155153 lands.
|
||||
*/
|
||||
void softUpdate(in DOMString aScope);
|
||||
[implicit_jscontext] void softUpdate(in jsval aOriginAttributes,
|
||||
in DOMString aScope);
|
||||
|
||||
/*
|
||||
* Clears ServiceWorker registrations from memory and disk for the specified
|
||||
|
@ -128,14 +120,17 @@ interface nsIServiceWorkerManager : nsISupports
|
|||
void removeAll();
|
||||
|
||||
// Testing
|
||||
DOMString getScopeForUrl(in DOMString path);
|
||||
DOMString getScopeForUrl(in nsIPrincipal aPrincipal, in DOMString aPath);
|
||||
|
||||
// This is meant to be used only by about:serviceworkers. It returns an array
|
||||
// of nsIServiceWorkerInfo.
|
||||
nsIArray getAllRegistrations();
|
||||
|
||||
void sendPushEvent(in ACString scope, in DOMString data);
|
||||
void sendPushSubscriptionChangeEvent(in ACString scope);
|
||||
[implicit_jscontext] void sendPushEvent(in jsval aOriginAttributes,
|
||||
in ACString aScope,
|
||||
in DOMString aData);
|
||||
[implicit_jscontext] void sendPushSubscriptionChangeEvent(in jsval aOriginAttributes,
|
||||
in ACString scope);
|
||||
|
||||
void updateAllRegistrations();
|
||||
};
|
||||
|
|
|
@ -768,7 +768,7 @@ void
|
|||
MediaCodecReader::TextureClientRecycleCallback(TextureClient* aClient)
|
||||
{
|
||||
MOZ_ASSERT(aClient, "aClient should not be nullptr in RecycleCallback()");
|
||||
|
||||
MOZ_ASSERT(!aClient->IsDead());
|
||||
size_t index = 0;
|
||||
|
||||
{
|
||||
|
|
|
@ -915,6 +915,7 @@ void OmxDecoder::RecycleCallbackImp(TextureClient* aClient)
|
|||
/* static */ void
|
||||
OmxDecoder::RecycleCallback(TextureClient* aClient, void* aClosure)
|
||||
{
|
||||
MOZ_ASSERT(aClient && !aClient->IsDead());
|
||||
OmxDecoder* decoder = static_cast<OmxDecoder*>(aClosure);
|
||||
decoder->RecycleCallbackImp(aClient);
|
||||
}
|
||||
|
|
|
@ -569,6 +569,7 @@ GonkVideoDecoderManager::GetColorConverterBuffer(int32_t aWidth, int32_t aHeight
|
|||
void
|
||||
GonkVideoDecoderManager::RecycleCallback(TextureClient* aClient, void* aClosure)
|
||||
{
|
||||
MOZ_ASSERT(aClient && !aClient->IsDead());
|
||||
GonkVideoDecoderManager* videoManager = static_cast<GonkVideoDecoderManager*>(aClosure);
|
||||
GrallocTextureClientOGL* client = static_cast<GrallocTextureClientOGL*>(aClient);
|
||||
aClient->ClearRecycleCallback();
|
||||
|
|
|
@ -170,6 +170,11 @@ IntelWebMVideoDecoder::Demux(nsRefPtr<VP8Sample>& aSample, bool* aEOS)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (count > 1) {
|
||||
NS_WARNING("Packet contains more than one video frame");
|
||||
return false;
|
||||
}
|
||||
|
||||
int64_t tstamp = holder->Timestamp();
|
||||
|
||||
// The end time of this frame is the start time of the next frame. Fetch
|
||||
|
@ -187,34 +192,32 @@ IntelWebMVideoDecoder::Demux(nsRefPtr<VP8Sample>& aSample, bool* aEOS)
|
|||
}
|
||||
mReader->SetLastVideoFrameTime(tstamp);
|
||||
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
unsigned char* data;
|
||||
size_t length;
|
||||
r = nestegg_packet_data(packet, i, &data, &length);
|
||||
if (r == -1) {
|
||||
return false;
|
||||
}
|
||||
unsigned char* data;
|
||||
size_t length;
|
||||
r = nestegg_packet_data(packet, 0, &data, &length);
|
||||
if (r == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vpx_codec_stream_info_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.sz = sizeof(si);
|
||||
if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP8) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
} else if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP9) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
}
|
||||
vpx_codec_stream_info_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.sz = sizeof(si);
|
||||
if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP8) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
} else if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP9) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
}
|
||||
|
||||
MOZ_ASSERT(mPlatform && mMediaDataDecoder);
|
||||
MOZ_ASSERT(mPlatform && mMediaDataDecoder);
|
||||
|
||||
aSample = new VP8Sample(tstamp,
|
||||
next_tstamp - tstamp,
|
||||
0,
|
||||
data,
|
||||
length,
|
||||
si.is_kf);
|
||||
if (!aSample->mData) {
|
||||
return false;
|
||||
}
|
||||
aSample = new VP8Sample(tstamp,
|
||||
next_tstamp - tstamp,
|
||||
0,
|
||||
data,
|
||||
length,
|
||||
si.is_kf);
|
||||
if (!aSample->mData) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -98,6 +98,11 @@ SoftwareWebMVideoDecoder::DecodeVideoFrame(bool &aKeyframeSkip,
|
|||
return false;
|
||||
}
|
||||
|
||||
if (count > 1) {
|
||||
NS_WARNING("Packet contains more than one video frame");
|
||||
return false;
|
||||
}
|
||||
|
||||
int64_t tstamp = holder->Timestamp();
|
||||
|
||||
// The end time of this frame is the start time of the next frame. Fetch
|
||||
|
@ -115,106 +120,104 @@ SoftwareWebMVideoDecoder::DecodeVideoFrame(bool &aKeyframeSkip,
|
|||
}
|
||||
mReader->SetLastVideoFrameTime(tstamp);
|
||||
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
unsigned char* data;
|
||||
size_t length;
|
||||
r = nestegg_packet_data(packet, i, &data, &length);
|
||||
if (r == -1) {
|
||||
unsigned char* data;
|
||||
size_t length;
|
||||
r = nestegg_packet_data(packet, 0, &data, &length);
|
||||
if (r == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vpx_codec_stream_info_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.sz = sizeof(si);
|
||||
if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP8) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
} else if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP9) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
}
|
||||
if (aKeyframeSkip && (!si.is_kf || tstamp < aTimeThreshold)) {
|
||||
// Skipping to next keyframe...
|
||||
a.mParsed++;
|
||||
a.mDropped++;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (aKeyframeSkip && si.is_kf) {
|
||||
aKeyframeSkip = false;
|
||||
}
|
||||
|
||||
if (vpx_codec_decode(&mVPX, data, length, nullptr, 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the timestamp of the video frame is less than
|
||||
// the time threshold required then it is not added
|
||||
// to the video queue and won't be displayed.
|
||||
if (tstamp < aTimeThreshold) {
|
||||
a.mParsed++;
|
||||
a.mDropped++;
|
||||
return true;
|
||||
}
|
||||
|
||||
vpx_codec_iter_t iter = nullptr;
|
||||
vpx_image_t *img;
|
||||
|
||||
while ((img = vpx_codec_get_frame(&mVPX, &iter))) {
|
||||
NS_ASSERTION(img->fmt == VPX_IMG_FMT_I420, "WebM image format not I420");
|
||||
|
||||
// Chroma shifts are rounded down as per the decoding examples in the SDK
|
||||
VideoData::YCbCrBuffer b;
|
||||
b.mPlanes[0].mData = img->planes[0];
|
||||
b.mPlanes[0].mStride = img->stride[0];
|
||||
b.mPlanes[0].mHeight = img->d_h;
|
||||
b.mPlanes[0].mWidth = img->d_w;
|
||||
b.mPlanes[0].mOffset = b.mPlanes[0].mSkip = 0;
|
||||
|
||||
b.mPlanes[1].mData = img->planes[1];
|
||||
b.mPlanes[1].mStride = img->stride[1];
|
||||
b.mPlanes[1].mHeight = (img->d_h + 1) >> img->y_chroma_shift;
|
||||
b.mPlanes[1].mWidth = (img->d_w + 1) >> img->x_chroma_shift;
|
||||
b.mPlanes[1].mOffset = b.mPlanes[1].mSkip = 0;
|
||||
|
||||
b.mPlanes[2].mData = img->planes[2];
|
||||
b.mPlanes[2].mStride = img->stride[2];
|
||||
b.mPlanes[2].mHeight = (img->d_h + 1) >> img->y_chroma_shift;
|
||||
b.mPlanes[2].mWidth = (img->d_w + 1) >> img->x_chroma_shift;
|
||||
b.mPlanes[2].mOffset = b.mPlanes[2].mSkip = 0;
|
||||
|
||||
nsIntRect pictureRect = mReader->GetPicture();
|
||||
IntRect picture = pictureRect;
|
||||
nsIntSize initFrame = mReader->GetInitialFrame();
|
||||
if (img->d_w != static_cast<uint32_t>(initFrame.width) ||
|
||||
img->d_h != static_cast<uint32_t>(initFrame.height)) {
|
||||
// Frame size is different from what the container reports. This is
|
||||
// legal in WebM, and we will preserve the ratio of the crop rectangle
|
||||
// as it was reported relative to the picture size reported by the
|
||||
// container.
|
||||
picture.x = (pictureRect.x * img->d_w) / initFrame.width;
|
||||
picture.y = (pictureRect.y * img->d_h) / initFrame.height;
|
||||
picture.width = (img->d_w * pictureRect.width) / initFrame.width;
|
||||
picture.height = (img->d_h * pictureRect.height) / initFrame.height;
|
||||
}
|
||||
|
||||
VideoInfo videoInfo = mReader->GetMediaInfo().mVideo;
|
||||
nsRefPtr<VideoData> v = VideoData::Create(videoInfo,
|
||||
mReader->GetDecoder()->GetImageContainer(),
|
||||
holder->Offset(),
|
||||
tstamp,
|
||||
next_tstamp - tstamp,
|
||||
b,
|
||||
si.is_kf,
|
||||
-1,
|
||||
picture);
|
||||
if (!v) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vpx_codec_stream_info_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.sz = sizeof(si);
|
||||
if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP8) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
} else if (mReader->GetVideoCodec() == NESTEGG_CODEC_VP9) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
}
|
||||
if (aKeyframeSkip && (!si.is_kf || tstamp < aTimeThreshold)) {
|
||||
// Skipping to next keyframe...
|
||||
a.mParsed++; // Assume 1 frame per chunk.
|
||||
a.mDropped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aKeyframeSkip && si.is_kf) {
|
||||
aKeyframeSkip = false;
|
||||
}
|
||||
|
||||
if (vpx_codec_decode(&mVPX, data, length, nullptr, 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the timestamp of the video frame is less than
|
||||
// the time threshold required then it is not added
|
||||
// to the video queue and won't be displayed.
|
||||
if (tstamp < aTimeThreshold) {
|
||||
a.mParsed++; // Assume 1 frame per chunk.
|
||||
a.mDropped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
vpx_codec_iter_t iter = nullptr;
|
||||
vpx_image_t *img;
|
||||
|
||||
while ((img = vpx_codec_get_frame(&mVPX, &iter))) {
|
||||
NS_ASSERTION(img->fmt == VPX_IMG_FMT_I420, "WebM image format not I420");
|
||||
|
||||
// Chroma shifts are rounded down as per the decoding examples in the SDK
|
||||
VideoData::YCbCrBuffer b;
|
||||
b.mPlanes[0].mData = img->planes[0];
|
||||
b.mPlanes[0].mStride = img->stride[0];
|
||||
b.mPlanes[0].mHeight = img->d_h;
|
||||
b.mPlanes[0].mWidth = img->d_w;
|
||||
b.mPlanes[0].mOffset = b.mPlanes[0].mSkip = 0;
|
||||
|
||||
b.mPlanes[1].mData = img->planes[1];
|
||||
b.mPlanes[1].mStride = img->stride[1];
|
||||
b.mPlanes[1].mHeight = (img->d_h + 1) >> img->y_chroma_shift;
|
||||
b.mPlanes[1].mWidth = (img->d_w + 1) >> img->x_chroma_shift;
|
||||
b.mPlanes[1].mOffset = b.mPlanes[1].mSkip = 0;
|
||||
|
||||
b.mPlanes[2].mData = img->planes[2];
|
||||
b.mPlanes[2].mStride = img->stride[2];
|
||||
b.mPlanes[2].mHeight = (img->d_h + 1) >> img->y_chroma_shift;
|
||||
b.mPlanes[2].mWidth = (img->d_w + 1) >> img->x_chroma_shift;
|
||||
b.mPlanes[2].mOffset = b.mPlanes[2].mSkip = 0;
|
||||
|
||||
nsIntRect pictureRect = mReader->GetPicture();
|
||||
IntRect picture = pictureRect;
|
||||
nsIntSize initFrame = mReader->GetInitialFrame();
|
||||
if (img->d_w != static_cast<uint32_t>(initFrame.width) ||
|
||||
img->d_h != static_cast<uint32_t>(initFrame.height)) {
|
||||
// Frame size is different from what the container reports. This is
|
||||
// legal in WebM, and we will preserve the ratio of the crop rectangle
|
||||
// as it was reported relative to the picture size reported by the
|
||||
// container.
|
||||
picture.x = (pictureRect.x * img->d_w) / initFrame.width;
|
||||
picture.y = (pictureRect.y * img->d_h) / initFrame.height;
|
||||
picture.width = (img->d_w * pictureRect.width) / initFrame.width;
|
||||
picture.height = (img->d_h * pictureRect.height) / initFrame.height;
|
||||
}
|
||||
|
||||
VideoInfo videoInfo = mReader->GetMediaInfo().mVideo;
|
||||
nsRefPtr<VideoData> v = VideoData::Create(videoInfo,
|
||||
mReader->GetDecoder()->GetImageContainer(),
|
||||
holder->Offset(),
|
||||
tstamp,
|
||||
next_tstamp - tstamp,
|
||||
b,
|
||||
si.is_kf,
|
||||
-1,
|
||||
picture);
|
||||
if (!v) {
|
||||
return false;
|
||||
}
|
||||
a.mParsed++;
|
||||
a.mDecoded++;
|
||||
NS_ASSERTION(a.mDecoded <= a.mParsed,
|
||||
"Expect only 1 frame per chunk per packet in WebM...");
|
||||
mReader->VideoQueue().Push(v);
|
||||
}
|
||||
a.mParsed++;
|
||||
a.mDecoded++;
|
||||
NS_ASSERTION(a.mDecoded <= a.mParsed,
|
||||
"Expect only 1 frame per chunk per packet in WebM...");
|
||||
mReader->VideoQueue().Push(v);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -919,40 +919,25 @@ WebMReader::DemuxPacket()
|
|||
}
|
||||
|
||||
// Figure out if this is a keyframe.
|
||||
//
|
||||
// Doing this at packet-granularity is kind of the wrong level of
|
||||
// abstraction, but timestamps are on the packet, so the only time
|
||||
// we have multiple video frames in a packet is when we have "alternate
|
||||
// reference frames", which are a compression detail and never displayed.
|
||||
// So for our purposes, we can just take the union of the is_kf values for
|
||||
// all the frames in the packet.
|
||||
bool isKeyframe = false;
|
||||
if (track == mAudioTrack) {
|
||||
isKeyframe = true;
|
||||
} else if (track == mVideoTrack) {
|
||||
unsigned int count = 0;
|
||||
r = nestegg_packet_count(packet, &count);
|
||||
unsigned char* data;
|
||||
size_t length;
|
||||
r = nestegg_packet_data(packet, 0, &data, &length);
|
||||
if (r == -1) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < count; ++i) {
|
||||
unsigned char* data;
|
||||
size_t length;
|
||||
r = nestegg_packet_data(packet, i, &data, &length);
|
||||
if (r == -1) {
|
||||
return nullptr;
|
||||
}
|
||||
vpx_codec_stream_info_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.sz = sizeof(si);
|
||||
if (mVideoCodec == NESTEGG_CODEC_VP8) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
} else if (mVideoCodec == NESTEGG_CODEC_VP9) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
}
|
||||
isKeyframe = isKeyframe || si.is_kf;
|
||||
vpx_codec_stream_info_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.sz = sizeof(si);
|
||||
if (mVideoCodec == NESTEGG_CODEC_VP8) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
} else if (mVideoCodec == NESTEGG_CODEC_VP9) {
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
}
|
||||
isKeyframe = si.is_kf;
|
||||
}
|
||||
|
||||
int64_t offset = mDecoder->GetResource()->Tell();
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
ifdef MOZ_WEBSPEECH_MODELS
|
||||
MODELSPS_KEEP_PATH := 1
|
||||
|
||||
MODELSPS_FILES := models/dict/cmu07a.dic \
|
||||
models/en-us-semi/mixture_weights \
|
||||
models/en-us-semi/feat.params \
|
||||
models/en-us-semi/mdef \
|
||||
models/en-us-semi/means \
|
||||
models/en-us-semi/noisedict \
|
||||
models/en-us-semi/sendump \
|
||||
models/en-us-semi/transition_matrices \
|
||||
models/en-us-semi/variances
|
||||
|
||||
MODELSPS_DEST := $(DIST)/bin/models
|
||||
INSTALL_TARGETS += MODELSPS
|
||||
endif
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,34 @@
|
|||
/* ====================================================================
|
||||
* Copyright (c) 2015 Alpha Cephei Inc. All rights
|
||||
* reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ALPHA CEPHEI INC. ``AS IS'' AND.
|
||||
* ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,.
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALPHA CEPHEI INC.
|
||||
* NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT.
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,.
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY.
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT.
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE.
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
This directory contains generic US english acoustic model trained with
|
||||
latest sphinxtrain.
|
|
@ -0,0 +1,12 @@
|
|||
-lowerf 130
|
||||
-upperf 3700
|
||||
-nfilt 20
|
||||
-transform dct
|
||||
-lifter 22
|
||||
-feat 1s_c_d_dd
|
||||
-svspec 0-12/13-25/26-38
|
||||
-agc none
|
||||
-cmn current
|
||||
-varnorm no
|
||||
-cmninit 40,3,-1
|
||||
-model ptm
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -0,0 +1,5 @@
|
|||
<s> SIL
|
||||
</s> SIL
|
||||
<sil> SIL
|
||||
[NOISE] +NSN+
|
||||
[SPEECH] +SPN+
|
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -19,9 +19,13 @@ EXPORTS.mozilla.dom += [
|
|||
'SpeechRecognitionResult.h',
|
||||
'SpeechRecognitionResultList.h',
|
||||
'SpeechStreamListener.h',
|
||||
'test/FakeSpeechRecognitionService.h',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WEBSPEECH_TEST_BACKEND']:
|
||||
EXPORTS.mozilla.dom += [
|
||||
'test/FakeSpeechRecognitionService.h',
|
||||
]
|
||||
|
||||
UNIFIED_SOURCES += [
|
||||
'endpointer.cc',
|
||||
'energy_endpointer.cc',
|
||||
|
@ -33,9 +37,13 @@ UNIFIED_SOURCES += [
|
|||
'SpeechRecognitionResult.cpp',
|
||||
'SpeechRecognitionResultList.cpp',
|
||||
'SpeechStreamListener.cpp',
|
||||
'test/FakeSpeechRecognitionService.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WEBSPEECH_TEST_BACKEND']:
|
||||
UNIFIED_SOURCES += [
|
||||
'test/FakeSpeechRecognitionService.cpp',
|
||||
]
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
'/dom/base',
|
||||
]
|
||||
|
|
|
@ -33,10 +33,14 @@ if CONFIG['MOZ_WEBSPEECH']:
|
|||
'SpeechSynthesis.cpp',
|
||||
'SpeechSynthesisUtterance.cpp',
|
||||
'SpeechSynthesisVoice.cpp',
|
||||
'test/FakeSynthModule.cpp',
|
||||
'test/nsFakeSynthServices.cpp'
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WEBSPEECH_TEST_BACKEND']:
|
||||
UNIFIED_SOURCES += [
|
||||
'test/FakeSynthModule.cpp',
|
||||
'test/nsFakeSynthServices.cpp'
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_SYNTH_PICO']:
|
||||
DIRS = ['pico']
|
||||
|
||||
|
|
|
@ -0,0 +1,211 @@
|
|||
/* jshint moz: true, esnext: true */
|
||||
/* 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";
|
||||
|
||||
// Don't modify this, instead set dom.push.debug.
|
||||
let gDebuggingEnabled = false;
|
||||
|
||||
function debug(s) {
|
||||
if (gDebuggingEnabled) {
|
||||
dump("-*- PushDB.jsm: " + s + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
const Cu = Components.utils;
|
||||
Cu.import("resource://gre/modules/IndexedDBHelper.jsm");
|
||||
Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
Cu.importGlobalProperties(["indexedDB"]);
|
||||
|
||||
const prefs = new Preferences("dom.push.");
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["PushDB"];
|
||||
|
||||
this.PushDB = function PushDB(dbName, dbVersion, dbStoreName, schemaFunction) {
|
||||
debug("PushDB()");
|
||||
this._dbStoreName = dbStoreName;
|
||||
this._schemaFunction = schemaFunction;
|
||||
|
||||
// set the indexeddb database
|
||||
this.initDBHelper(dbName, dbVersion,
|
||||
[dbStoreName]);
|
||||
gDebuggingEnabled = prefs.get("debug");
|
||||
prefs.observe("debug", this);
|
||||
};
|
||||
|
||||
this.PushDB.prototype = {
|
||||
__proto__: IndexedDBHelper.prototype,
|
||||
|
||||
upgradeSchema: function(aTransaction, aDb, aOldVersion, aNewVersion) {
|
||||
if (this._schemaFunction) {
|
||||
this._schemaFunction(aTransaction, aDb, aOldVersion, aNewVersion, this);
|
||||
}
|
||||
},
|
||||
|
||||
/*
|
||||
* @param aRecord
|
||||
* The record to be added.
|
||||
*/
|
||||
|
||||
put: function(aRecord) {
|
||||
debug("put()" + JSON.stringify(aRecord));
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readwrite",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
aStore.put(aRecord).onsuccess = function setTxnResult(aEvent) {
|
||||
debug("Request successful. Updated record ID: " +
|
||||
aEvent.target.result);
|
||||
};
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
/*
|
||||
* @param aKeyID
|
||||
* The ID of record to be deleted.
|
||||
*/
|
||||
delete: function(aKeyID) {
|
||||
debug("delete()");
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readwrite",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
debug("Going to delete " + aKeyID);
|
||||
aStore.delete(aKeyID);
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
clearAll: function clear() {
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readwrite",
|
||||
this._dbStoreName,
|
||||
function (aTxn, aStore) {
|
||||
debug("Going to clear all!");
|
||||
aStore.clear();
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
getByPushEndpoint: function(aPushEndpoint) {
|
||||
debug("getByPushEndpoint()");
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readonly",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
aTxn.result = undefined;
|
||||
|
||||
let index = aStore.index("pushEndpoint");
|
||||
index.get(aPushEndpoint).onsuccess = function setTxnResult(aEvent) {
|
||||
aTxn.result = aEvent.target.result;
|
||||
debug("Fetch successful " + aEvent.target.result);
|
||||
};
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
getByKeyID: function(aKeyID) {
|
||||
debug("getByKeyID()");
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readonly",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
aTxn.result = undefined;
|
||||
|
||||
aStore.get(aKeyID).onsuccess = function setTxnResult(aEvent) {
|
||||
aTxn.result = aEvent.target.result;
|
||||
debug("Fetch successful " + aEvent.target.result);
|
||||
};
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
|
||||
getByScope: function(aScope) {
|
||||
debug("getByScope() " + aScope);
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readonly",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
aTxn.result = undefined;
|
||||
|
||||
let index = aStore.index("scope");
|
||||
index.get(aScope).onsuccess = function setTxnResult(aEvent) {
|
||||
aTxn.result = aEvent.target.result;
|
||||
debug("Fetch successful " + aEvent.target.result);
|
||||
};
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
getAllKeyIDs: function() {
|
||||
debug("getAllKeyIDs()");
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readonly",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
aStore.mozGetAll().onsuccess = function(event) {
|
||||
aTxn.result = event.target.result;
|
||||
};
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
drop: function() {
|
||||
debug("drop()");
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
this.newTxn(
|
||||
"readwrite",
|
||||
this._dbStoreName,
|
||||
function txnCb(aTxn, aStore) {
|
||||
aStore.clear();
|
||||
},
|
||||
resolve,
|
||||
reject
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
observe: function observe(aSubject, aTopic, aData) {
|
||||
if ((aTopic == "nsPref:changed") && (aData == "dom.push.debug"))
|
||||
gDebuggingEnabled = prefs.get("debug");
|
||||
}
|
||||
};
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -10,9 +10,11 @@ XPCOMUtils.defineLazyServiceGetter(this,
|
|||
"nsIServiceWorkerManager");
|
||||
|
||||
addMessageListener("push", function (aMessage) {
|
||||
swm.sendPushEvent(aMessage.data.scope, aMessage.data.payload);
|
||||
swm.sendPushEvent(aMessage.data.originAttributes,
|
||||
aMessage.data.scope, aMessage.data.payload);
|
||||
});
|
||||
|
||||
addMessageListener("pushsubscriptionchange", function (aMessage) {
|
||||
swm.sendPushSubscriptionChangeEvent(aMessage.data);
|
||||
swm.sendPushSubscriptionChangeEvent(aMessage.data.originAttributes,
|
||||
aMessage.data.scope);
|
||||
});
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче