зеркало из https://github.com/mozilla/gecko-dev.git
merge fx-team to m-c
This commit is contained in:
Коммит
9015635af0
|
@ -71,6 +71,7 @@ const COMPAT = {
|
|||
const CONSOLE_API_LEVELS_TO_SEVERITIES = {
|
||||
error: "error",
|
||||
exception: "error",
|
||||
assert: "error",
|
||||
warn: "warning",
|
||||
info: "info",
|
||||
log: "log",
|
||||
|
|
|
@ -60,6 +60,7 @@ support-files =
|
|||
test-bug-869003-iframe.html
|
||||
test-bug-869003-top-window.html
|
||||
test-closures.html
|
||||
test-console-assert.html
|
||||
test-console-extras.html
|
||||
test-console-replaced-api.html
|
||||
test-console.html
|
||||
|
@ -135,6 +136,7 @@ support-files =
|
|||
[browser_warn_user_about_replaced_api.js]
|
||||
[browser_webconsole_abbreviate_source_url.js]
|
||||
[browser_webconsole_allow_mixedcontent_securityerrors.js]
|
||||
[browser_webconsole_assert.js]
|
||||
[browser_webconsole_basic_net_logging.js]
|
||||
[browser_webconsole_block_mixedcontent_securityerrors.js]
|
||||
[browser_webconsole_bug_579412_input_focus.js]
|
||||
|
@ -241,3 +243,4 @@ support-files =
|
|||
[browser_webconsole_log_file_filter.js]
|
||||
[browser_webconsole_expandable_timestamps.js]
|
||||
[browser_webconsole_autocomplete_in_debugger_stackframe.js]
|
||||
[browser_webconsole_autocomplete_popup_close_on_tab_switch.js]
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Test that console.assert() works as expected (i.e. outputs only on falsy
|
||||
// asserts). See bug 760193.
|
||||
|
||||
const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-console-assert.html";
|
||||
|
||||
function test() {
|
||||
addTab(TEST_URI);
|
||||
browser.addEventListener("load", function onLoad() {
|
||||
browser.removeEventListener("load", onLoad, true);
|
||||
openConsole(null, consoleOpened);
|
||||
}, true);
|
||||
}
|
||||
|
||||
function consoleOpened(hud) {
|
||||
waitForMessages({
|
||||
webconsole: hud,
|
||||
messages: [{
|
||||
text: "start",
|
||||
category: CATEGORY_WEBDEV,
|
||||
severity: SEVERITY_LOG,
|
||||
},
|
||||
{
|
||||
text: "false assert",
|
||||
category: CATEGORY_WEBDEV,
|
||||
severity: SEVERITY_ERROR,
|
||||
},
|
||||
{
|
||||
text: "falsy assert",
|
||||
category: CATEGORY_WEBDEV,
|
||||
severity: SEVERITY_ERROR,
|
||||
},
|
||||
{
|
||||
text: "end",
|
||||
category: CATEGORY_WEBDEV,
|
||||
severity: SEVERITY_LOG,
|
||||
}],
|
||||
}).then(() => {
|
||||
let nodes = hud.outputNode.querySelectorAll(".message");
|
||||
is(nodes.length, 4, "only four messages are displayed, no output from the true assert");
|
||||
finishTest();
|
||||
});
|
||||
|
||||
let button = content.document.querySelector("button");
|
||||
ok(button, "we have the button");
|
||||
EventUtils.sendMouseEvent({ type: "click" }, button, content);
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* 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/. */
|
||||
|
||||
// Test that the autocomplete popup closes on switching tabs. See bug 900448.
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf-8,<p>bug 900448 - autocomplete popup closes on tab switch";
|
||||
|
||||
let popup = null;
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
popup = null;
|
||||
});
|
||||
|
||||
function test() {
|
||||
addTab(TEST_URI);
|
||||
browser.addEventListener("load", function onLoad() {
|
||||
browser.removeEventListener("load", onLoad, true);
|
||||
openConsole(null, consoleOpened);
|
||||
}, true);
|
||||
}
|
||||
|
||||
function consoleOpened(HUD) {
|
||||
popup = HUD.jsterm.autocompletePopup;
|
||||
|
||||
popup._panel.addEventListener("popupshown", function popupOpened() {
|
||||
popup._panel.removeEventListener("popupshown", popupOpened, false);
|
||||
addTab("data:text/html;charset=utf-8,<p>testing autocomplete closes");
|
||||
gBrowser.selectedBrowser.addEventListener("load", tab2Loaded, true);
|
||||
}, false);
|
||||
|
||||
HUD.jsterm.setInputValue("sc");
|
||||
EventUtils.synthesizeKey("r", {});
|
||||
}
|
||||
|
||||
function tab2Loaded() {
|
||||
gBrowser.selectedBrowser.removeEventListener("load", tab2Loaded, true);
|
||||
ok(!popup.isOpen, "Popup closes on tab switch");
|
||||
gBrowser.removeCurrentTab();
|
||||
finishTest();
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html dir="ltr" xml:lang="en-US" lang="en-US">
|
||||
<head>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<meta charset="utf-8">
|
||||
<title>console.assert() test</title>
|
||||
<script type="text/javascript">
|
||||
function test() {
|
||||
console.log("start");
|
||||
console.assert(false, "false assert");
|
||||
console.assert(0, "falsy assert");
|
||||
console.assert(true, "true assert");
|
||||
console.log("end");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p>test console.assert()</p>
|
||||
<button onclick="test();">test console.assert()</button>
|
||||
</body>
|
||||
</html>
|
|
@ -5,7 +5,6 @@
|
|||
<script type="text/javascript">
|
||||
function test() {
|
||||
console.log("start");
|
||||
console.assert()
|
||||
console.clear()
|
||||
console.dirxml()
|
||||
console.profile()
|
||||
|
|
|
@ -118,6 +118,7 @@ const MESSAGE_PREFERENCE_KEYS = [
|
|||
const LEVELS = {
|
||||
error: SEVERITY_ERROR,
|
||||
exception: SEVERITY_ERROR,
|
||||
assert: SEVERITY_ERROR,
|
||||
warn: SEVERITY_WARNING,
|
||||
info: SEVERITY_INFO,
|
||||
log: SEVERITY_LOG,
|
||||
|
@ -745,7 +746,7 @@ WebConsoleFrame.prototype = {
|
|||
* Calculates the width and height of a single character of the input box.
|
||||
* This will be used in opening the popup at the correct offset.
|
||||
*
|
||||
* @private
|
||||
* @private
|
||||
*/
|
||||
_updateCharSize: function WCF__updateCharSize()
|
||||
{
|
||||
|
@ -1171,6 +1172,7 @@ WebConsoleFrame.prototype = {
|
|||
case "warn":
|
||||
case "error":
|
||||
case "exception":
|
||||
case "assert":
|
||||
case "debug": {
|
||||
let msg = new Messages.ConsoleGeneric(aMessage);
|
||||
node = msg.init(this.output).render().element;
|
||||
|
@ -2912,6 +2914,7 @@ function JSTerm(aWebConsoleFrame)
|
|||
this._inputEventHandler = this._inputEventHandler.bind(this);
|
||||
this._focusEventHandler = this._focusEventHandler.bind(this);
|
||||
this._onKeypressInVariablesView = this._onKeypressInVariablesView.bind(this);
|
||||
this._blurEventHandler = this._blurEventHandler.bind(this);
|
||||
|
||||
EventEmitter.decorate(this);
|
||||
}
|
||||
|
@ -3033,7 +3036,6 @@ JSTerm.prototype = {
|
|||
*/
|
||||
init: function JST_init()
|
||||
{
|
||||
let chromeDocument = this.hud.owner.chromeWindow.document;
|
||||
let autocompleteOptions = {
|
||||
onSelect: this.onAutocompleteSelect.bind(this),
|
||||
onClick: this.acceptProposedCompletion.bind(this),
|
||||
|
@ -3044,7 +3046,7 @@ JSTerm.prototype = {
|
|||
direction: "ltr",
|
||||
autoSelect: true
|
||||
};
|
||||
this.autocompletePopup = new AutocompletePopup(chromeDocument,
|
||||
this.autocompletePopup = new AutocompletePopup(this.hud.document,
|
||||
autocompleteOptions);
|
||||
|
||||
let doc = this.hud.document;
|
||||
|
@ -3054,6 +3056,7 @@ JSTerm.prototype = {
|
|||
this.inputNode.addEventListener("input", this._inputEventHandler, false);
|
||||
this.inputNode.addEventListener("keyup", this._inputEventHandler, false);
|
||||
this.inputNode.addEventListener("focus", this._focusEventHandler, false);
|
||||
this.hud.window.addEventListener("blur", this._blurEventHandler, false);
|
||||
|
||||
this.lastInputValue && this.setInputValue(this.lastInputValue);
|
||||
},
|
||||
|
@ -3742,6 +3745,17 @@ JSTerm.prototype = {
|
|||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* The window "blur" event handler.
|
||||
* @private
|
||||
*/
|
||||
_blurEventHandler: function JST__blurEventHandler()
|
||||
{
|
||||
if (this.autocompletePopup) {
|
||||
this.clearCompletion();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* The inputNode "keypress" event handler.
|
||||
*
|
||||
|
@ -4373,6 +4387,7 @@ JSTerm.prototype = {
|
|||
this.inputNode.removeEventListener("input", this._inputEventHandler, false);
|
||||
this.inputNode.removeEventListener("keyup", this._inputEventHandler, false);
|
||||
this.inputNode.removeEventListener("focus", this._focusEventHandler, false);
|
||||
this.hud.window.removeEventListener("blur", this._blurEventHandler, false);
|
||||
|
||||
this.hud = null;
|
||||
},
|
||||
|
|
|
@ -85,6 +85,7 @@ var BrowserUI = {
|
|||
}
|
||||
Services.prefs.addObserver(debugServerStateChanged, this, false);
|
||||
Services.prefs.addObserver(debugServerPortChanged, this, false);
|
||||
Services.prefs.addObserver("app.crashreporter.autosubmit", this, false);
|
||||
|
||||
Services.obs.addObserver(this, "handle-xul-text-link", false);
|
||||
|
||||
|
@ -264,59 +265,11 @@ var BrowserUI = {
|
|||
if (!CrashReporter.enabled) {
|
||||
return;
|
||||
}
|
||||
let lastCrashID = this.lastCrashID;
|
||||
|
||||
if (!lastCrashID || !lastCrashID.length) {
|
||||
return;
|
||||
}
|
||||
// Ensure that CrashReporter state matches pref
|
||||
CrashReporter.submitReports = Services.prefs.getBoolPref("app.crashreporter.autosubmit");
|
||||
|
||||
let shouldReport = Services.prefs.getBoolPref("app.crashreporter.autosubmit");
|
||||
let didPrompt = Services.prefs.getBoolPref("app.crashreporter.prompted");
|
||||
|
||||
if (!shouldReport && !didPrompt) {
|
||||
let crashBundle = Services.strings.createBundle("chrome://browser/locale/crashprompt.properties");
|
||||
let title = crashBundle.GetStringFromName("crashprompt.dialog.title");
|
||||
let acceptbutton = crashBundle.GetStringFromName("crashprompt.dialog.acceptbutton");
|
||||
let refusebutton = crashBundle.GetStringFromName("crashprompt.dialog.refusebutton");
|
||||
let bodyText = crashBundle.GetStringFromName("crashprompt.dialog.statement1");
|
||||
|
||||
let buttonPressed =
|
||||
Services.prompt.confirmEx(
|
||||
null,
|
||||
title,
|
||||
bodyText,
|
||||
Ci.nsIPrompt.BUTTON_POS_0 * Ci.nsIPrompt.BUTTON_TITLE_IS_STRING
|
||||
+ Ci.nsIPrompt.BUTTON_POS_1 * Ci.nsIPrompt.BUTTON_TITLE_IS_STRING
|
||||
+ Ci.nsIPrompt.BUTTON_POS_1_DEFAULT,
|
||||
acceptbutton,
|
||||
refusebutton,
|
||||
null,
|
||||
null,
|
||||
{ value: false });
|
||||
|
||||
Services.prefs.setBoolPref("app.crashreporter.prompted", true);
|
||||
|
||||
if (buttonPressed == 0) {
|
||||
Services.prefs.setBoolPref('app.crashreporter.autosubmit', true);
|
||||
BrowserUI.crashReportingPrefChanged(true);
|
||||
shouldReport = true;
|
||||
} else {
|
||||
Services.prefs.setBoolPref('app.crashreporter.autosubmit', false);
|
||||
BrowserUI.crashReportingPrefChanged(false);
|
||||
}
|
||||
}
|
||||
|
||||
// We've already prompted, return if the user doesn't want to report.
|
||||
if (!shouldReport) {
|
||||
return;
|
||||
}
|
||||
|
||||
Util.dumpLn("Submitting last crash id:", lastCrashID);
|
||||
try {
|
||||
this.CrashSubmit.submit(lastCrashID);
|
||||
} catch (ex) {
|
||||
Util.dumpLn(ex);
|
||||
}
|
||||
BrowserUI.submitLastCrashReportOrShowPrompt();
|
||||
#endif
|
||||
},
|
||||
|
||||
|
@ -632,11 +585,48 @@ var BrowserUI = {
|
|||
case debugServerPortChanged:
|
||||
this.changeDebugPort(Services.prefs.getIntPref(aData));
|
||||
break;
|
||||
case "app.crashreporter.autosubmit":
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
CrashReporter.submitReports = Services.prefs.getBoolPref(aData);
|
||||
|
||||
// The user explicitly set the autosubmit option, so there is no
|
||||
// need to prompt them about crash reporting in the future
|
||||
Services.prefs.setBoolPref("app.crashreporter.prompted", true);
|
||||
|
||||
BrowserUI.submitLastCrashReportOrShowPrompt;
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
submitLastCrashReportOrShowPrompt: function() {
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
let lastCrashID = this.lastCrashID;
|
||||
if (lastCrashID && lastCrashID.length) {
|
||||
if (Services.prefs.getBoolPref("app.crashreporter.autosubmit")) {
|
||||
Util.dumpLn("Submitting last crash id:", lastCrashID);
|
||||
let params = {};
|
||||
if (!Services.prefs.getBoolPref("app.crashreporter.submitURLs")) {
|
||||
params['extraExtraKeyVals'] = { URL: '' };
|
||||
}
|
||||
try {
|
||||
this.CrashSubmit.submit(lastCrashID, params);
|
||||
} catch (ex) {
|
||||
Util.dumpLn(ex);
|
||||
}
|
||||
} else if (!Services.prefs.getBoolPref("app.crashreporter.prompted")) {
|
||||
BrowserUI.addAndShowTab("about:crashprompt", null);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
},
|
||||
|
||||
|
||||
|
||||
/*********************************
|
||||
* Internal utils
|
||||
*/
|
||||
|
@ -1108,10 +1098,6 @@ var BrowserUI = {
|
|||
SanitizeUI.onSanitize();
|
||||
}
|
||||
},
|
||||
|
||||
crashReportingPrefChanged: function crashReportingPrefChanged(aState) {
|
||||
CrashReporter.submitReports = aState;
|
||||
}
|
||||
};
|
||||
|
||||
var PanelUI = {
|
||||
|
|
|
@ -672,7 +672,13 @@ Desktop browser's sync prefs.
|
|||
</settings>
|
||||
<setting pref="signon.rememberSignons" title="&optionsHeader.privacy.passwords.label;" type="bool"/>
|
||||
<settings id="prefs-reporting" label="&optionsHeader.reporting.title;">
|
||||
<setting pref="app.crashreporter.autosubmit" type="bool" title="&optionsHeader.reporting.crashes.label;" oncommand="BrowserUI.crashReportingPrefChanged(this.value);"/>
|
||||
<setting pref="app.crashreporter.autosubmit"
|
||||
type="bool"
|
||||
title="&optionsHeader.reporting.crashes.label;" />
|
||||
<setting pref="app.crashreporter.submitURLs"
|
||||
id="prefs-reporting-submitURLs"
|
||||
type="bool"
|
||||
title="&optionsHeader.reporting.crashes.submitURLs;" />
|
||||
</settings>
|
||||
<settings id="prefs-telemetry" label="&optionsHeader.telemetry.title;">
|
||||
<setting pref="toolkit.telemetry.enabled" type="bool" title="&optionsHeader.telemetry.label;"/>
|
||||
|
|
|
@ -44,6 +44,12 @@ let PrefsFlyoutPanel = {
|
|||
Services.prefs.addObserver("privacy.donottrackheader.enabled",
|
||||
this._prefObserver,
|
||||
false);
|
||||
Services.prefs.addObserver("app.crashreporter.autosubmit",
|
||||
this._prefObserver,
|
||||
false);
|
||||
Services.prefs.addObserver("app.crashreporter.submitURLs",
|
||||
this._prefObserver,
|
||||
false);
|
||||
}
|
||||
|
||||
this._topmostElement.show();
|
||||
|
@ -81,6 +87,29 @@ let PrefsFlyoutPanel = {
|
|||
Services.prefs.setIntPref('privacy.donottrackheader.value', -1);
|
||||
}
|
||||
break;
|
||||
|
||||
case "app.crashreporter.autosubmit":
|
||||
let autosubmit = Services.prefs.getBoolPref("app.crashreporter.autosubmit");
|
||||
if (!autosubmit) {
|
||||
// If the user has selected not to submit crash reports, the UI
|
||||
// should reflect also that URLs will not be included.
|
||||
// TODO: Ideally we would grey out the text and the toggle for
|
||||
// the "include URLs" pref, but the |setting| binding doesn't
|
||||
// appear to support enabling/disabling. In the meantime, we just
|
||||
// set the "include URLs" pref to false if the "send crash reports"
|
||||
// pref has been set to false.
|
||||
Services.prefs.setBoolPref('app.crashreporter.submitURLs', false);
|
||||
}
|
||||
break;
|
||||
|
||||
case "app.crashreporter.submitURLs":
|
||||
let submitURLs = Services.prefs.getBoolPref("app.crashreporter.submitURLs");
|
||||
if (submitURLs) {
|
||||
// If the user has selected to submit URLs, they are implicitly also
|
||||
// selecting to submit crash reports. Let's update the autosubmit pref
|
||||
Services.prefs.setBoolPref('app.crashreporter.autosubmit', true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
|
|
@ -0,0 +1,392 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!DOCTYPE html [
|
||||
<!ENTITY % htmlDTD
|
||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"DTD/xhtml1-strict.dtd">
|
||||
%htmlDTD;
|
||||
<!ENTITY % globalDTD
|
||||
SYSTEM "chrome://global/locale/global.dtd">
|
||||
%globalDTD;
|
||||
<!ENTITY % brandDTD
|
||||
SYSTEM "chrome://branding/locale/brand.dtd">
|
||||
%brandDTD;
|
||||
<!ENTITY % crashPromptDTD
|
||||
SYSTEM "chrome://browser/locale/crashprompt.dtd">
|
||||
%crashPromptDTD;
|
||||
]>
|
||||
|
||||
<!-- 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/. -->
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<base href="http://www.mozilla.org/en-US/legal/privacy/firefox.html"></base>
|
||||
<meta name="viewport" content="width=device-width; user-scalable=false;" />
|
||||
<title>&crashprompt.title;</title>
|
||||
<link rel="stylesheet" href="chrome://browser/skin/platform.css" type="text/css" media="all" />
|
||||
<link rel="stylesheet" href="chrome://browser/skin/browser.css" type="text/css" media="all" />
|
||||
<link rel="stylesheet" href="chrome://browser/content/browser.css" type="text/css" media="all" />
|
||||
<link rel="stylesheet" href="chrome://browser/skin/crashprompt.css" type="text/css" media="all" />
|
||||
<!--TODO: Do we need a favicon?-->
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
function toggleDetailsVisible() {
|
||||
var arrow = document.getElementById("detailsArrow");
|
||||
detailsArrow.classList.toggle('hidden');
|
||||
|
||||
var arrowExpanded = document.getElementById("detailsArrowExpanded");
|
||||
detailsArrowExpanded.classList.toggle('hidden');
|
||||
|
||||
var details = document.getElementById("detailsContainer");
|
||||
details.classList.toggle('hidden');
|
||||
}
|
||||
|
||||
function togglePrivacyDetails() {
|
||||
var privacyDetails = document.getElementById("lightboxBackdrop");
|
||||
privacyDetails.classList.toggle('hidden');
|
||||
}
|
||||
|
||||
function onChoseSendReports() {
|
||||
Services.prefs.setBoolPref("app.crashreporter.prompted", true);
|
||||
Services.prefs.setBoolPref("app.crashreporter.autosubmit", true);
|
||||
|
||||
var includeURLCheckbox = document.getElementById("crashpromptIncludeURLCheckbox");
|
||||
if (includeURLCheckbox.checked) {
|
||||
Services.prefs.setBoolPref("app.crashreporter.submitURLs", true);
|
||||
} else {
|
||||
Services.prefs.setBoolPref("app.crashreporter.submitURLs", false);
|
||||
}
|
||||
|
||||
// TODO: How can we access BrowserUI from here?
|
||||
// BrowserUI.startupCrashCheck();
|
||||
window.close();
|
||||
}
|
||||
|
||||
function onChoseDoNotSend() {
|
||||
Services.prefs.setBoolPref("app.crashreporter.prompted", true);
|
||||
Services.prefs.setBoolPref("app.crashreporter.autosubmit", false);
|
||||
window.close();
|
||||
}
|
||||
|
||||
|
||||
function onLoad() {
|
||||
document.getElementById("crashpromptIncludeURLCheckbox").checked =
|
||||
Services.prefs.getBoolPref("app.crashreporter.submitURLs");
|
||||
}
|
||||
]]></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body id="crashPromptPage" dir="&locale.dir;" onload="onLoad();">
|
||||
<div id="crashPromptContainer">
|
||||
<h1 id="crashPromptTitle">&crashprompt.title;</h1>
|
||||
<hr id="crashPromptSeparator" />
|
||||
<p>&crashprompt.message;</p>
|
||||
<p id="detailsGrid">
|
||||
<a href="javascript:toggleDetailsVisible();"
|
||||
id="detailsLink">
|
||||
<img id="detailsArrow"
|
||||
src="chrome://browser/skin/images/arrowbox-horiz-blue-filled.png"
|
||||
class="detailsSpacer" />
|
||||
<img id="detailsArrowExpanded"
|
||||
src="chrome://browser/skin/images/arrowbox-down-blue-filled.png"
|
||||
class="hidden detailsSpacer" />
|
||||
<label id="detailsLinkLabel">&crashprompt.detailsLink;</label>
|
||||
</a>
|
||||
<div id="detailsContainer"
|
||||
class="hidden">
|
||||
<div id="detailsSpacer" class="detailsSpacer" />
|
||||
<label id="crashpromptDetailedMessage">
|
||||
&crashprompt.detailedMessage.firstParagraph;<br />
|
||||
&crashprompt.detailedMessage.secondParagraph;<br />
|
||||
&crashprompt.detailedMessage.thirdParagraph;
|
||||
<a id="privacyPolicyLink"
|
||||
href="javascript:togglePrivacyDetails();">
|
||||
&crashprompt.privacyPolicyLink;
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
</p>
|
||||
<div id="crashpromptURLCheckboxContainer">
|
||||
<label id="crashpromptIncludeURLLabel">
|
||||
<input type="checkbox"
|
||||
id="crashpromptIncludeURLCheckbox" />
|
||||
&crashprompt.includeURLLabel;
|
||||
</label>
|
||||
</div>
|
||||
<div id="crashPromptButtonContainer">
|
||||
<button id="sendReportsButton"
|
||||
class="button-default"
|
||||
onclick="onChoseSendReports();">
|
||||
&crashprompt.acceptbutton;
|
||||
</button>
|
||||
<button id="refuseButton"
|
||||
onclick="onChoseDoNotSend();">
|
||||
&crashprompt.refusebutton;
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="lightboxBackdrop" class="hidden" onclick="javascript:togglePrivacyDetails();">
|
||||
<div id="lightbox" onclick="event.stopPropagation();">
|
||||
<div id="lightboxCloseButton"
|
||||
onclick="togglePrivacyDetails();" />
|
||||
<h2 id="privacyPolicyTitle">&crashprompt.privacyPolicy.title;</h2>
|
||||
<div id="privacyPolicyBody" onclick="event.stopPropagation();">
|
||||
<div id="content">
|
||||
<p>
|
||||
This privacy policy explains how Mozilla Corporation (“Mozilla”), a wholly-owned subsidiary of the non-profit Mozilla Foundation, collects and uses information about users of the official Mozilla Firefox® web browser (“Firefox”). It does not apply to other Mozilla websites, products, or services.
|
||||
</p>
|
||||
|
||||
<h3>Overview</h3>
|
||||
|
||||
<p>In this privacy policy, we address the following:</p>
|
||||
<ul>
|
||||
<li>Definitions of the types of information</li>
|
||||
<li>What Firefox Sends to Websites</li>
|
||||
<li>Feature-by-Feature Description of Data Practices</li>
|
||||
<li>What Mozilla Does to Secure Data</li>
|
||||
<li>Government and Court Demands for Information</li>
|
||||
<li>Overview of Other Situations Involving Possibility of Data Disclosures</li>
|
||||
<li>Mozilla’s Approach to Data Retention</li>
|
||||
<li>How Mozilla Discloses Changes to this Policy</li>
|
||||
<li>How to Contact Mozilla about this Policy</li>
|
||||
<li>Appendix of Practices relating to Prior Versions of Firefox</li>
|
||||
</ul>
|
||||
|
||||
<h3>Types of Information</h3>
|
||||
<p><em>"Personal Information"</em> is information that you provide to us that personally identifies you, such as your name, phone number, or email address. Except as described below, Mozilla does not collect or require end-users of Firefox to provide Personal Information.</p>
|
||||
|
||||
<p><em>"Non-Personal Information"</em> is information that cannot be directly associated with a specific person or entity. Non-Personal Information includes but is not limited to your computer’s configuration and the version of Firefox you use.</p>
|
||||
|
||||
<p><em>"Potentially Personal Information"</em> is information that is Non-Personal Information in and of itself but that could be used in conjunction with other information to personally identify you. For example, Uniform Resource Locators (“URLs”) (the addresses of web pages) or Internet Protocol (“IP”) addresses (the addresses of computers on the Internet), which are Non-Personal Information in and of themselves, could be Personal Information when combined with Internet service provider (“ISP”) records.</p>
|
||||
|
||||
<p><em>“Aggregate Data”</em> is information that is recorded about users and collected into groups so that it no longer reflects or references an individually identifiable user.</p>
|
||||
|
||||
<h3>Information Firefox Sends to Websites and ISPs</h3>
|
||||
<p>Like other web browsers, Firefox sends Non-Personal and Potentially Personal Information to the websites you visit when requested by the website. This may include, e.g. the type of browser you are using, the type of device you are using (desktop, mobile, touch screen), your language preference, the referring site, and your IP address. If you are viewing a video, the buffering functionality of Firefox may allow the server hosting the video to determine which sections of the video you have actually played. This information may be logged by the websites you visit and the Internet Service Provider you are using. What information is logged and how that information is used depends on the policies of each of the websites you visit and the ISPs you use.</p>
|
||||
|
||||
<p>Each website determines its own privacy practices for the distribution and use of this Non- Personal Information and Potentially Personal Information. If you are concerned about how a website will use this information, check out its privacy policy. To find out more about how Mozilla uses this information on its own websites, see the <a href="/en-US/privacy-policy.html">Mozilla Privacy Policy</a>.</p>
|
||||
|
||||
<h3>Cookies</h3>
|
||||
<p>A cookie is information stored on your computer by a website you visit. Cookies often store your settings for a website, such as your preferred language or location. When you return to the site, Firefox sends back the cookies that belong to the site. This allows the site to present you with information customized to fit your needs. Cookies can store a wide range of information, including personally identifiable information (such as your name, home address, e-mail address, or telephone number). Because of their ability to store Personal Information, or references to such information, cookies can allow websites to track the online movements of particular individuals.</p>
|
||||
|
||||
<p>Firefox itself does not set any cookies on behalf of Mozilla.</p>
|
||||
|
||||
<p>By default, the activities of storing and sending cookies are invisible to you. However, you can change your Firefox settings to allow you to approve or deny cookie storage requests, delete stored cookies automatically when you close Firefox, and more. An <a href="//support.mozilla.org/en-US/kb/Cookies">article in our Firefox Knowledge Base</a> gives you information about changing these preferences.</p>
|
||||
|
||||
<h3>Interactive Product Features</h3>
|
||||
<p><strong>Add-ons Features.</strong> One thing that makes Firefox so flexible is the ability for you to add various add-ons, extensions, and themes to Firefox, thereby creating a custom browser that fits your needs. The following features show how Firefox provides the ability both to obtain additional add- ons easily and to protect against potentially harmful add-ons.</p>
|
||||
|
||||
<dl>
|
||||
<dt style="text-decoration: underline;">Get Add-ons Page</dt>
|
||||
<dd>
|
||||
<p>Firefox offers a Get Add-ons page of the Add-ons Manager that features popular add-ons and displays personalized recommendations based on the add-ons you already have installed. This page can be accessed by clicking (or tapping on a mobile device) on the “Get Add-ons” tab of the Firefox Add-ons Manager. To display the personalized recommendations, Firefox sends certain information to Mozilla, including the list of add-ons you have installed, Firefox version information, and your IP address. This communication only happens when the Get Add-ons area is open and can be turned off at any time by following <a href="http://blog.mozilla.com/addons/how-to-opt-out-of-add-on-metadata-updates/">these instructions</a>.</p>
|
||||
</dd>
|
||||
|
||||
<dt style="text-decoration: underline;">Add-on Information and Searches</dt>
|
||||
<dd>
|
||||
<p>In order to keep the information displayed to you about your installed add-ons up to date, Firefox communicates with Mozilla once a day to update add-on descriptions, home pages, download counts, screenshots, and ratings. This communication includes the list of add-ons you have installed, Firefox version information, how long it took Firefox to start up, and your IP address. You can turn off this functionality at any time by following <a href="http://blog.mozilla.com/addons/how-to-opt-out-of-add-on-metadata-updates/">these instructions</a>.</p>
|
||||
<p>If you enter keywords into the search field for the Add-ons Manager, those keywords will be sent to Mozilla in order to perform the search, along with Potentially Personal Information (such as IP address) normally transferred to perform such functionality.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p><strong>Automated Update Service.</strong> Firefox’s automatic update feature periodically checks to see if an updated version of Firefox and installed add-ons are available from Mozilla.</p>
|
||||
|
||||
<p>This feature sends Non-Personal Information to Mozilla, including the version of Firefox you are using, build ID and target, update channel, your language preference, and your operating system. This feature also sends Potentially Personal Information to Mozilla in the form of your IP address and a cookie that contains a unique numeric value to distinguish individual Firefox installs. Mozilla uses this information to provide you with updated versions of Firefox and to understand the usage patterns of Firefox users. We use this information to improve our products and services and to support decision making regarding feature and capacity planning.</p>
|
||||
|
||||
<p>Mozilla does not collect or track any Personal Information or any information about the websites you visit, and Mozilla does not release the raw information we obtain from these Firefox features to the public. We may release reports containing Aggregate Data so that our global community can make better product and design decisions. To prevent Mozilla from obtaining this information, you can turn this feature off in Firefox’s preferences. An <a href="//support.mozilla.org/en-US/kb/Firefox%20makes%20unrequested%20connections#Auto_update_checking">article in our Firefox Knowledge Base</a> gives you information about changing your preferences in non-mobile versions of Firefox.</p>
|
||||
|
||||
<p><strong>Blocklist Feature.</strong> Firefox also offers a Blocklist feature. With this feature, once a day Firefox does a regularly scheduled, automatic check to see if you have any harmful add-ons or plug-ins installed. If so, this feature disables add-ons or plug-ins that Mozilla has determined contain known vulnerabilities or major user-facing issues or fatal bugs (e.g., Firefox crashes on startup or something causes an endless loop). You may view the <a href="/en-US/blocklist/">current list of Blocklisted items</a>. This feature sends Non-Personal Information to Mozilla, including the version of Firefox you are using, operating system version, build ID and target, update channel, and your language preference. This feature also sends Potentially Personal Information to Mozilla in the form of your IP address and a cookie. In addition, Mozilla also uses this feature to analyze Firefox usage patterns so we may improve our products and services, including planning features and capacity. Currently there is no basic user interface to disable the Blocklist feature. An <a href="http://support.mozilla.org/en-US/kb/Firefox+makes+unrequested+connections#Extension_blocklist_updating">article in our Firefox Knowledge Base</a> explains how you may disable the Blocklist feature. Disabling the Blocklist feature is not recommended as it may result in using extensions known to be untrustworthy.</p>
|
||||
|
||||
<p><strong>Crash-Reporting Feature</strong> (not applicable to Firefox for mobile). Firefox has a crash-reporting feature that sends a report to Mozilla when Firefox crashes. Mozilla uses the information in the crash reports to diagnose and correct the problems in Firefox that caused the crash. Though this feature starts automatically after Firefox crashes, it does not send information to Mozilla until you explicitly authorize it to do so. By default, this feature sends a variety of Non-Personal Information to Mozilla, including the stack trace (a detailed description of which parts of the Firefox code were active at the time of the crash) and the type of computer you are using. Additional information is collected by the crash reporting feature. Which crash reporting feature is used and what additional information collected by Firefox depends on which version of Firefox you’re using. For pre-3.x versions of Firefox, please see the end of this privacy policy.</p>
|
||||
|
||||
<dl>
|
||||
<dt style="text-decoration: underline;">Firefox 3.0 to present</dt>
|
||||
<dd>
|
||||
<p>For the current versions of Firefox, “Firefox Crash Reporter” is Firefox’s crash reporting feature. With this feature, you have the option to include Personal Information (including your email address), Potentially Personal Information (including your IP address and the URL of the site you were visiting when Firefox crashed), and a comment. Firefox Crash Reporter also sends a list of all add-ons that you were using at the time of the crash, the time since (i) the last crash, (ii) the last install, and (iii) the start-up of the program. For Firefox 3.0.0 – 3.0.5, Firefox Crash Reporter also collects Potentially Personal Information to Mozilla in the form of a unique alphanumeric value to distinguish individual Firefox installs. This value is not assigned to users of Firefox 3.0.6 and subsequent versions. Mozilla only makes Non-Personal Information (i.e., generic information about your computer, the stack trace, and any comment given by the user) available in the public reports available online at <a href="http://crash-stats.mozilla.com/">http://crash-stats.mozilla.com/</a>.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p><strong>Location-Aware Feature.</strong> Beginning with Firefox 3.5 and all versions of Firefox for mobile, Firefox offers a <a href="/en-US/firefox/geolocation/">Location-Aware Feature</a>, parts of which may be provided by <a href="/en-US/legal/privacy/firefox-third-party.html">third-party service providers</a>.</p>
|
||||
|
||||
<dl>
|
||||
<dt style="text-decoration: underline;">You Elect to Use the Location-Aware Feature</dt>
|
||||
<dd>
|
||||
<p>This feature remains inoperative until you visit a website that requests your location and you choose to opt in to the feature. If you elect not to, nothing happens. Each time you visit such a website, Firefox asks you if you want it to provide the site with your current location. Additionally, you may elect to have Firefox remember your choice to allow or not allow the feature for each site. Any such election is domain specific. You are able to opt out at any time of having Firefox remember your choice, just like any other preference setting.</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">What Information Firefox Collects</dt>
|
||||
<dd>
|
||||
<p>If you choose to allow it, the Firefox Location-Aware Feature first collects one or more of the following relevant location markers: (i) location provided by a GPS device built into or attached to your computer or device and/or geolocation services provided by the operating system; (ii) the wifi routers closest to you; (iii) cell ids of the cell phone broadcast towers closest to you; (iv) the signal strength of nearby wireless access points and/or cell phone broadcast towers; and/or (v) your computer or device’s IP address. Next, it attempts to determine your location using these location markers. Any information Firefox uses, receives or sends as part of this Location-Aware Feature is not received by any Mozilla servers or by Mozilla. Firefox does not track or remember your location. Firefox does remember a random client identifier, the temporary ID assigned by our third party provider to process your request, for two weeks.</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">Transmission of Geolocation Information to Third Parties</dt>
|
||||
<dd>
|
||||
<p>If your computer or device has a GPS unit or your operating system provides geolocation services and you have elected to use the location aware feature, Firefox will send your location information directly to the requesting website. If not, Firefox will send the other information described above, plus your user agent information (e.g., version of Firefox you’re using) and a temporary client identifier, to a third party geolocation services provider. That provider can determine your approximate location from such data (e.g., convert a set of WiFi signal strengths into latitude and longitude). This information is sent by Firefox over an encrypted connection and no cookies are used. Neither the domain name nor the URL of the site you’re visiting is sent to our service providers. Our providers estimate your location and return it to Firefox. Firefox provides your location information to the webpage that made the request.</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">Restrictions on How Third Party Providers Use the Location Information Received</dt>
|
||||
<dd>
|
||||
<p>Our policy is to require third-party providers to enter licensing agreements with Mozilla, which prohibit them from releasing Personal or Potentially Personal Information to the public. We only permit our third party providers to use this information in conjunction with the service(s) they are providing to us. They are required to ensure that any information collected on our behalf is anonymized and aggregated before they are permitted to use such information to develop new features or products and services, or to improve the overall quality of any of their products and services. For example, this means that they are required to ensure that your IP address and unique identifier of your client will be stripped out before being used by any of our third party provider’s other products or features. For more information on how our geolocation services providers use information sent by Firefox, please see the privacy policy links in our list of <a href="/en-US/legal/privacy/firefox-third-party.html">third-party service providers</a>.</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">Third Party Privacy Policies</dt>
|
||||
<dd>
|
||||
<p>Please carefully consider any website or service provider's privacy practices before agreeing to share your location.</p>
|
||||
<ul>
|
||||
<li><em>Requesting Websites</em>. For information on the use of location data sent back to the website, please see that website’s privacy policy.</li>
|
||||
<li><em>Location-Aware Service Providers</em>. For information on how our service providers use the location data sent by Firefox, see the privacy policies linked from our list of <a href="/en-US/legal/privacy/firefox-third-party.html">third-party service providers</a>.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p><strong>Panorama Feature</strong> (not applicable to Firefox for mobile). Starting with Firefox 4, Firefox provides Panorama, which manages your tab experience. Your tab usage and names are not sent to Mozilla, but rather reside locally on your device. The first time you run Panorama, a video may be presented to you explaining Panorama. The video or web page is hosted by Mozilla so Mozilla receives your IP address and date and time of receiving the video.</p>
|
||||
|
||||
<p><strong>Firefox Sync Feature</strong>. The Firefox Sync feature is included in versions of Firefox beginning with Version 4. Firefox Sync allows you to synchronize certain data between your computers, mobile phones, and other devices that have the Firefox browser installed, by utilizing the Firefox Sync Services. (You can also use Sync with a syncing service hosted on a non-Mozilla server set up by yourself or a third party, but in that case this policy doesn’t apply to your use of such syncing service.) Examples of data you can synchronize include browsing history, form history, bookmarks, saved passwords, preferences, and open tabs. This data (“Firefox Sync User Data”) is stored on, manipulated, and transmitted to and from Mozilla’s servers by means of your use of the Firefox Sync Services. Firefox Sync User Data is encrypted on your computer before it is sent to Mozilla’s servers, so it is not available to Mozilla in a readable form. Mozilla uses SSL/TLS technology to ensure your Firefox Sync User Data is encrypted during transit.</p>
|
||||
|
||||
<p>In order to utilize the Sync functionality you must register for the Firefox Sync Services. During registration you will need to provide your email address and create a username and password (collectively “Account Data”). Your Account Data will be encrypted using SSL/TLS for transit. Your password will be stored on our servers in an encrypted form called a hash. This form of encryption disguises your password on the server, but still allows us to authenticate you when you sign into the Firefox Sync Services. Certain versions of Sync also ask you to create a secret phrase. The secret phrase is stored on your computer and is not sent to the Firefox Sync servers or to Mozilla. Mozilla does not collect any other Personal Information through Firefox Sync.</p>
|
||||
|
||||
<p>Mozilla receives and uses the following Non-Personal and Potentially Personal Information for the purpose of providing and improving the Firefox Sync Services: IP address, username, date and time of accessing the Firefox Sync Services, user agent string information such as the type of client OS and Firefox version in use, and aggregated operational data such as access log data and how many bookmarks, history, or tabs users have collectively created and synced.</p>
|
||||
|
||||
<p>The Firefox Sync Services also receive the host names you have given your devices that you are syncing. These names are used to label your tabs within Firefox Sync. If you don’t want to share your devices’ names, you should consider naming your devices with fanciful names rather than your actual name. The information is transmitted using SSL. Currently, you can opt out of having your devices named in Firefox Sync by visiting the Firefox preferences pane or about:config.</p>
|
||||
|
||||
<p>You can disconnect from the Firefox Sync Services and have your Account Data and Firefox Sync User Data removed from our servers at any time. On your computer, go to the “Tools” menu, highlight “Sync,” and click “Disconnect.” Then go to <a href="https://services.mozilla.com/delete-account/">https://services.mozilla.com/delete-account/</a>, and submit the form to request deletion of your Account Data and Firefox Sync User Data from our servers. If you are transferring a synced device to another party (such as if you are sharing, reselling, or donating your laptop or phone) you may wish to disconnect and then remove your Sync data from your device to avoid sharing it with the device recipient.</p>
|
||||
|
||||
<p><strong>Personas Feature</strong>. Firefox’s Personas feature is a theme that lets you personalize the look of your browser.</p>
|
||||
|
||||
<dl>
|
||||
<dt style="text-decoration: underline;">Applying Personas</dt>
|
||||
<dd>
|
||||
<p>When you apply a Persona to your browser, Mozilla collects your IP address, the date and time you applied the Persona to your browser, and the url you used to make the application as well as the url you were visiting immediately before that (known as the “referrer” url).</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">Creating a Custom Persona</dt>
|
||||
<dd>
|
||||
<p>If you are creating a Custom Persona for your own use, Mozilla does not collect any Personal Information.</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">Contributing a Design to the Personas Gallery</dt>
|
||||
<dd>
|
||||
<p>The Personas gallery is where you can browse all the available designs. If you contribute a design or image (each a “Persona”) to the Personas gallery, Mozilla collects the following Personal Information: (1) your username and (2) your email address. Your username will be used to attribute your Persona to you and will be publicly available on the Personas gallery. You do not have to provide your real name; you can use a nickname or avatar. Mozilla will not make your email address publicly available without your consent or share it with any third parties other than Mozilla’s service providers. Mozilla will use your email address only to contact you regarding your design or to provide any additional information that you elect or opt in to receive.</p>
|
||||
</dd>
|
||||
<dt style="text-decoration: underline;">Personas’ Interactive Product Features</dt>
|
||||
<dd>
|
||||
<p>After you have selected your Persona, it is stored on your computer. Once per day the Personas service checks to see if your selected Persona has been updated. This feature sends the same information that web browsers typically transfer with any HTTP requests including user agent and your IP address.</p>
|
||||
<p>We use this information to improve our products and services and to support decision making regarding feature and capacity planning. Mozilla is an open organization that believes in sharing as much information as possible about its products, its operations, and its associations. Accordingly, we may release public reports containing Aggregate Data so that our global community and Personas partners may make better product and design decisions. For example, we think it is good for users of Personas to know which are the most popular Personas and Personas designers to know how many times their Persona was downloaded.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p><strong>Report Web Forgery Feature</strong> (not applicable to Firefox for mobile). Firefox’s Report Web Forgery feature lets you report suspected web forgeries to Mozilla’s third party service provider(s) for the web forgery protection feature when you encounter a suspected malicious “phishing” or fraudulent website that is impersonating a legitimate website. This feature sends your comments about the suspected fraudulent website to our third-party provider(s), as well as the same information that the browser sends when you visit a website. Our policy is to require each of our third-party providers to enter into written agreements with Mozilla that prohibit them from releasing Potentially Personal Information to the public. Our policy is to only permit these third party providers to use this information in conjunction with the web forgery protection service they are providing. In addition, we require each third-party provider to maintain its own privacy policy that is linked to the online form where you report a potential web forgery. To prevent the third party provider from obtaining this information, don’t use this feature to report a web forgery. (Also see <em>“Protection Against Suspected Forgery and Attack Sites Features”</em> below.)</p>
|
||||
|
||||
<p id="telemetry"><strong>Usage Statistics</strong> (also known as Telemetry). Beginning with version 7, Firefox includes functionality that sends Mozilla usage, performance, and responsiveness statistics about user interface features, memory, hardware configuration along with IP address.</p>
|
||||
|
||||
<p>
|
||||
This feature is turned off by default in general release versions of Firefox and Firefox Beta. In order to enable Aurora and Nightly testers to provide more efficient feedback, Usage Statistics are enabled by default on Aurora and Nightly. In either case, if this functionality is enabled, users can disable it in Firefox's Options/Preferences by simply deselecting the "Submit performance data" item.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Usage statistics are transmitted using SSL (a method of protecting data in transit) and help us improve future versions of Firefox. Once sent to Mozilla, usage statistics are stored in an aggregate form and made available to a broad range of developers, including both Mozilla employees and public contributors.
|
||||
</p>
|
||||
|
||||
<p><strong>Snippets </strong>Firefox's default home page (<about:home>) loads small bits of information that we think will be useful to you. We call these "snippets". You can see them right below the search bar.</p>
|
||||
|
||||
<p>Once per day, Firefox gets new snippets from Mozilla. Whenever you see a snippet, that snippet makes a request to Mozilla, so that we can count how often snippets are viewed. This request to Mozilla sends the name of the snippet and is securely transmitted over HTTPS. Aside from this and standard log data collected as a part of any web request, snippets in Firefox do not send other information to Mozilla.</p>
|
||||
|
||||
<p>To help display relevant snippets, your Firefox browser sends Mozilla a monthly request to look up your location at a country level using your IP address. We then send that country level information back to your Firefox browser, where it's stored locally. Your Firefox browser (not our web servers) will then pick snippets to show you based on the locally stored country information.</p>
|
||||
|
||||
<p>Aside from providing you with the snippets service, we use the information from these requests to estimate what fraction of Firefox users click on each snippet (broken down into general categories like Firefox version and geographic area). We will not use any of the information in this request to attempt to identify you or your web browsing activity on other websites, and we aggregate the info we receive into these general categories as soon as is practical.</p>
|
||||
|
||||
<p><strong>Feedback Button and Test Pilot for Beta Users</strong>. If you installed a Firefox 4 beta and then got the general release version of Firefox 4 by clicking an “update” button, then your Firefox still has the feedback features you received as a beta user. If you installed a beta version of Firefox 4 for computers and then got the general release version of Firefox 4 by clicking a “download” button, you still have the Test Pilot add-on as an extension to Firefox. The privacy policy for Feedback is <a href="/en-US/firefox/beta/feedbackprivacypolicy/">here</a> and for Test Pilot is <a href="https://testpilot.mozillalabs.com/privacy.php">here</a>. If you decide to remove Test Pilot or Feedback from Firefox on your computer, you can do so under the Tools menu in Firefox by selecting add-ons in the drop down menu and then uninstall. If you decide to remove Beta Tester Tools from Firefox on your mobile device, you can do so under the Add-ons Manager pane in the Browser Controls window by selecting the add-on in the extension list and clicking "Disable."</p>
|
||||
|
||||
<p id="health-report"><strong>Firefox Health Report</strong>. Firefox Health Report (“FHR”) is a Firefox feature designed to provide you with insights about your browser’s stability and performance. FHR does this by collecting data and sharing it with us in a way designed to minimize our ability to identify your browser. Our systems aggregate your data with that of other Firefox users and then send it back to your browser so you can see how your Firefox performance compares to others. FHR does not send us sites from your browsing history.</p>
|
||||
|
||||
<p>We use the data sent through FHR to provide users with FHR’s functionality, such as helping you analyze and address performance issues with your browser. We also use what we learn from the FHR data in the aggregate to make Firefox and our other products better. We may disclose aggregated FHR data openly in order to help further our mission of promoting openness, innovation and opportunity on the Web. We aim to be transparent about FHR and you can learn more about the exact data being sent to us in the feature itself. If you wish, you can choose not to share your FHR data with us in Firefox settings or the feature itself. <a href="https://support.mozilla.org/kb/firefox-health-report-understand-your-browser-perf">Learn more about FHR</a>.</p>
|
||||
|
||||
<h3>Security</h3>
|
||||
<p>Mozilla is committed to protecting your personal information from unauthorized access, alteration, disclosure, or destruction. We undertake a range of security measures including physical access restraints, technical security monitoring, and internal security reviews of the environment. We also have policies in place to prohibit employees from viewing personal information without business justification. Additionally, it is our policy to ensure that Mozilla employees and contractors are bound by confidentiality obligations.</p>
|
||||
|
||||
<p>Beginning with Firefox 2.0, Mozilla has additional security features, some of which are provided by <a href="/en-US/legal/privacy/firefox-third-party.html">third-party service providers</a>.</p>
|
||||
|
||||
<p>The security features available depend on the version of Firefox you are using. Please see the end of this privacy policy for older versions of Firefox.</p>
|
||||
|
||||
<p><strong>Secure Website Certificate Verification</strong>. When you visit a secure website, Firefox may check with any status provider mentioned in the certificate to validate that website’s certificate. Firefox sends only the certificate identification to the certificate provider, not the exact URL you are visiting. Sending these verification requests to third parties is sometimes necessary to ensure your connection to a site is secure; to help maintain your security, Firefox may block access to the site if it can't verify your connection using the third party. If the certificate is no longer valid, you will receive an error page that states why the certificate is not valid and you will not be able to access that website. The technical name for this process is OCSP or On-line Certificate Status Protocol. You may disable online certificate verification in Firefox's preferences under the encryption tab. If you do this, none of the information discussed here will be sent to any third party certificate provider. An <a href="http://support.mozilla.org/en-US/kb/Options%20window%20-%20Advanced%20panel?bl=n&s=OCSP#Certificates">article in our Firefox Knowledge Base</a> gives you information about changing your preferences. However, if you choose to disable the online verification feature, Firefox will not be able to confirm the identity of the website you are visiting, which may put you at greater risk of having your private information intercepted. In this case, Firefox will also not show the identity of the website in the URL bar.</p>
|
||||
|
||||
|
||||
<p><strong>Protection Against Suspected Forgery and Attack Sites Features</strong> (not applicable to Firefox for mobile). The Firefox forgery and attack protection feature displays a warning if the website you are visiting is suspected of impersonating a legitimate website (commonly referred to as a phishing or forgery website) or a site that infiltrates or damages a computer system without your informed consent, including, without limitation, any computer viruses, worms, trojan horses, spyware, computer contaminant and/or other malicious and unwanted software (commonly called an attack site or malware). By default, Firefox checks the web pages that you visit against a blacklist that is downloaded to your hard drive at regularly scheduled intervals (e.g., approximately twice per hour), the rate of frequency may change from time to time. The blacklist does not include the full URL of each suspicious site. Instead, each URL is hashed (obscured so it can't be read) and then broken into portions. Only a portion of each hashed URL is included on the blacklist on your hard drive. If there is a match, Firefox will check with its third party provider to ensure that the website is still on the blacklist. The information sent between Firefox and its third party provider(s) are hashed URLs. In fact, multiple hashed URLs are sent with the real hash so that the third party provider(s) will not know what site you are visiting. If there is a match, Firefox displays either a “Reported Web Forgery” or “Reported Attack Site” alert, as applicable.</p>
|
||||
|
||||
<p>You may completely turn off the forgery and/or attack site protection features in Firefox’s preferences. If you do this, none of the information discussed here will be downloaded to your hard drive or sent to any third party service provider. An <a href="http://support.mozilla.org/en-US/kb/Options%20window%20-%20Security%20panel?bl=n&s=suspected%20web%20forgery">article in our Firefox Knowledge Base</a> gives you information about changing your preferences.</p>
|
||||
|
||||
<p>Each time Firefox checks in with a third party provider to download a new blacklist, Non-Personal Information and Potentially Personal Information, such as the information that the browser sends every time you visit a website as well as the version number of the blacklist on your system, is sent to a third party provider. In order to safeguard your privacy, Firefox will not transmit the complete URL of web pages that you visit to anyone other than Mozilla and its service providers. While it is possible that a third party service provider may determine the actual URL from the hashed URL sent, Mozilla’s policy is to require its third party service providers to enter into a written agreement with Mozilla not to use any data or other information about or from users of Firefox for purposes other than to provide and maintain their service. In addition, Mozilla’s policy is to prohibit these third party service providers from correlating any Firefox user data with any other data collected through other products, services or web properties of that provider. These third party service providers may post about additional notices regarding their applicable privacy policies. (For example, see <a href="http://code.google.com/apis/safebrowsing/firefox3_privacy.html">Google Safe Browsing Service in Mozilla Firefox Version 3</a>.)</p>
|
||||
|
||||
<p>Please note that we’re not yelling at you in this paragraph. Our lawyers have advised us that we need to make sure this information is conspicuous so you’ll read it. <b>The forgery and attack site protection feature is provided “as is” and for your information as advice and guidance only. Mozilla and its contributors, licensors and partners do not guarantee that these protection features will prevent you from being deceived by a malicious website and we strongly recommend that you continue to be vigilant while online, particularly when following links sent to you in e-mail.</b></p>
|
||||
|
||||
<h3>Legal Process and Other Disclosures</h3>
|
||||
|
||||
<p>Consistent with our privacy commitments, we will scrutinize third party requests for information about you for compliance with the law, including those coming from governmental agencies or civil litigants. We may access, use, preserve or disclose information about you only when we have a good faith belief that it is reasonably necessary to do so to satisfy the applicable law, regulation, legal process or lawful governmental request of any country, or to protect the rights, property or safety of Mozilla, its users or the public. We will provide notice of legal process or governmental requests unless prohibited to do so by law or the circumstances warrant otherwise.</p>
|
||||
|
||||
|
||||
<h3>What and When We Share with Third Parties</h3>
|
||||
|
||||
<p>Mozilla’s policy is to make Personal Information, such as your name and email address, and Potentially Personal Information, such as the URL of the site you last visited, only available to its employees, contractors, and selected contributors who signed confidentiality agreements that prohibit them from using or disclosing such information other than for approved Mozilla purposes.</p>
|
||||
|
||||
<p>We also work with third parties who provide infrastructure or back-end services (like content delivery networks, bandwidth providers, and services of an administrative nature). We may share Personal Information about you with such third parties for the purpose of enabling these third parties to provide such services.</p>
|
||||
|
||||
<p>Additionally, Mozilla may need to transfer Personal Information to an affiliate or successor in the event of a change of our corporate structure or status, such as in the event of a restructuring, sale, or bankruptcy.</p>
|
||||
|
||||
<h3>Transfer of Data to the U.S.</h3>
|
||||
|
||||
<p>Mozilla is a global organization and operates in different countries. Privacy laws and common practices vary from country to country. Some countries may provide for less legal protection of your personal data; others may provide more legal protection. By using Firefox, you consent to the transfer of the information collected, as outlined by this Policy, to Mozilla or its third party service providers in the United States, the Netherlands, and other places where our distributed, third party content delivery network exists (which is in several countries around the world), which countries may provide a lesser level of data security than in your country of residence.</p>
|
||||
|
||||
<h3>Data Retention</h3>
|
||||
|
||||
<p>We will retain any information collected for the period necessary to fulfill the purposes outlined in this Policy unless a longer retention period is required by law and/or regulations.</p>
|
||||
|
||||
<h3>Privacy Policy Changes</h3>
|
||||
|
||||
<p>Mozilla may change the Firefox Privacy Policy from time to time. Any and all changes will be reflected on this page. Substantive changes may also be announced through the standard mechanisms by which Mozilla communicates with its users and community, such as Mozilla's "announce" <a href="https://lists.mozilla.org/listinfo/announce">mailing list</a> and <a href="https://lists.mozilla.org/listinfo/announce">newsgroup</a>. It is your responsibility to ensure that you understand the terms of this Privacy Policy. You should periodically check this page for any changes to the current policy.</p>
|
||||
|
||||
<h3>For More Information</h3>
|
||||
<p>You may request access, correction, or deletion of Personal Information or Potentially Personal Information, as permitted by law. We will seek to comply with such requests, provided that we have sufficient information to identify the Personal Information or Potentially Personal Information related to you.</p>
|
||||
|
||||
<p>Any such requests or other questions or concerns regarding this Policy and Mozilla's data protection practices should be addressed to:</p>
|
||||
|
||||
<p>
|
||||
Mozilla Corporation<br/>
|
||||
Attn: Legal Notices - Privacy<br/>
|
||||
650 Castro Street, Suite 300<br/>
|
||||
Mountain View, CA 94041-2072<br/>
|
||||
Phone: +1-650-903-0800<br/>
|
||||
E-mail: <a href="mailto:privacy@mozilla.com">privacy@mozilla.com</a>
|
||||
</p>
|
||||
|
||||
<h3>Appendix for Pre-Firefox 4.0</h3>
|
||||
|
||||
<dl>
|
||||
<dt>Report Broken Website Feature. -3.6.x.</dt>
|
||||
<dd>
|
||||
<p>Firefox’s Report Broken Website feature lets you notify Mozilla when a website you visit improperly displays or incorrectly functions. The feature sends the URL of the broken website to Mozilla. You may also choose to send your email address and a description of the problem. This feature also sends your IP address and a variety of Non-Personal Information to Mozilla, including but not limited to the version of Firefox you are using and your language preference. Except for your email and IP address, Mozilla makes all of this information public. This feature does not send information to Mozilla until you explicitly authorize Firefox to do so. To prevent this public release of Personal and Potentially Personal Information, don’t report a website if the website’s URL contains your Personal and Potentially Personal Information, and don’t include Personal Information in your description of the problem. To prevent the release of any information, don’t use this feature to report a broken website.</p>
|
||||
</dd>
|
||||
|
||||
<dt>Crash-Reporting Feature for Firefox 1.0-2.x.</dt>
|
||||
<dd>
|
||||
<p>For these earlier versions of Firefox, “Talkback” is Firefox’s crash reporting feature. Talkback also gives you the option to provide your Personal Information and Potentially Personal Information (including your name, email address, and the url you were visiting) and Potentially Personal Information (including your computer’s name, IP address, and the processes you were running at the time of the crash). You can selectively disable the sending of this information. Additionally, you have the option to include the URL of the site you were visiting when Firefox crashed, a comment, and your email address in the report. Mozilla only makes Non-Personal Information and Potentially Personal Information in the public reports available online at <a href="http://talkback-public.mozilla.org/">http://talkback-public.mozilla.org/</a>.</p>
|
||||
</dd>
|
||||
|
||||
<dt>Security for Firefox 2.0 to 2.x.</dt>
|
||||
<dd>
|
||||
<p><strong>Protection Against Suspected Forgery Sites</strong>. The Firefox web forgery protection feature displays a warning if the website you are visiting is suspected of impersonating a legitimate website. Firefox lets you select various levels of protection, and different information is transmitted by Firefox depending on the level you choose.</p>
|
||||
|
||||
<p>By default, Firefox checks the web pages that you visit against a list of suspected web forgeries (a “blacklist”) that is downloaded to your hard drive at regularly scheduled intervals (e.g., approximately twice per hour), the rate of frequency may change from time to time. If there is a match, Firefox displays a “Suspected Web Forgery” alert. Each time Firefox checks in with the third party provider to download a new blacklist, Non-Personal Information and Potentially Personal Information, such as the information that the browser sends every time you visit a website as well as the version number of the blacklist on your system, is sent to the third party provider. In order to safeguard your privacy, Firefox will not transmit the URL of web pages that you visit in this default mode to anyone other than Mozilla and its service providers.</p>
|
||||
|
||||
<p>You may completely turn off the web forgery protection feature in Firefox’s preferences. If you do this, none of the information discussed here will be downloaded to your hard drive or sent to any third party service provider.</p>
|
||||
|
||||
<p>Each time Firefox checks in with the third party provider to download a new blacklist, Non-Personal Information and Potentially Personal Information, such as the information that the browser sends every time you visit a website as well as the version number of the blacklist on your system, is sent to the third party provider. In order to safeguard your privacy, Firefox will not transmit the complete URL of web pages that you visit to anyone other than Mozilla and its service providers. While it is possible that a third party service provider may determine the actual URL from the hashed URL sent, Mozilla’s policy is to require its third party service providers to enter into a written agreement with Mozilla not to use any data or other information about or from users of Firefox for purposes other than to provide and maintain their service. In addition, Mozilla’s policy is to prohibit its third party service providers from correlating any Firefox user data with any other data collected through other products, services or web properties of that provider. These third party service providers may inform you about additional notices regarding their applicable privacy policies.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</div><!-- end #content div -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -11,6 +11,9 @@ chrome.jar:
|
|||
content/blockedSite.xhtml (content/pages/blockedSite.xhtml)
|
||||
content/netError.xhtml (content/pages/netError.xhtml)
|
||||
content/aboutAddons.xhtml (content/pages/aboutAddons.xhtml)
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
content/crashprompt.xhtml (content/pages/crashprompt.xhtml)
|
||||
#endif
|
||||
|
||||
content/bindings/bindings.xml (content/bindings/bindings.xml)
|
||||
content/bindings/tabs.xml (content/bindings/tabs.xml)
|
||||
|
|
|
@ -11,8 +11,7 @@ const Cc = Components.classes;
|
|||
|
||||
const CONTRACT_ID = "@mozilla.org/xre/runtime;1";
|
||||
|
||||
var gAppInfoClassID, gIncOldFactory;
|
||||
|
||||
var gAppInfoClassID, gIncOldFactory, gOldCrashSubmit, gCrashesSubmitted;
|
||||
var gMockAppInfoQueried = false;
|
||||
|
||||
function MockAppInfo() {
|
||||
|
@ -30,7 +29,6 @@ var newFactory = {
|
|||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory])
|
||||
};
|
||||
|
||||
let oldPrompt;
|
||||
function initMockAppInfo() {
|
||||
var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
|
||||
gAppInfoClassID = registrar.contractIDToCID(CONTRACT_ID);
|
||||
|
@ -40,7 +38,13 @@ function initMockAppInfo() {
|
|||
registrar.registerFactory(gAppInfoClassID, "", CONTRACT_ID, newFactory);
|
||||
gIncOldFactory = Cm.getClassObject(Cc[CONTRACT_ID], Ci.nsIFactory);
|
||||
|
||||
oldPrompt = Services.prompt;
|
||||
gCrashesSubmitted = 0;
|
||||
gOldCrashSubmit = BrowserUI.CrashSubmit;
|
||||
BrowserUI.CrashSubmit = {
|
||||
submit: function() {
|
||||
gCrashesSubmitted++;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function cleanupMockAppInfo() {
|
||||
|
@ -50,8 +54,7 @@ function cleanupMockAppInfo() {
|
|||
registrar.registerFactory(gAppInfoClassID, "", CONTRACT_ID, gIncOldFactory);
|
||||
}
|
||||
gIncOldFactory = null;
|
||||
|
||||
Services.prompt = oldPrompt;
|
||||
BrowserUI.CrashSubmit = gOldCrashSubmit;
|
||||
}
|
||||
|
||||
MockAppInfo.prototype = {
|
||||
|
@ -62,89 +65,151 @@ MockAppInfo.prototype = {
|
|||
},
|
||||
}
|
||||
|
||||
function GetAutoSubmitPref() {
|
||||
return Services.prefs.getBoolPref("app.crashreporter.autosubmit");
|
||||
}
|
||||
|
||||
function SetAutoSubmitPref(aValue) {
|
||||
Services.prefs.setBoolPref('app.crashreporter.autosubmit', aValue);
|
||||
}
|
||||
|
||||
function GetPromptedPref() {
|
||||
return Services.prefs.getBoolPref("app.crashreporter.prompted");
|
||||
}
|
||||
|
||||
function SetPromptedPref(aValue) {
|
||||
Services.prefs.setBoolPref('app.crashreporter.prompted', aValue);
|
||||
}
|
||||
|
||||
gTests.push({
|
||||
desc: "Test Crash Prompt",
|
||||
desc: "Pressing 'cancel' button on the crash reporter prompt",
|
||||
setUp: initMockAppInfo,
|
||||
tearDown: cleanupMockAppInfo,
|
||||
|
||||
get autosubmitPref() {
|
||||
return Services.prefs.getBoolPref("app.crashreporter.autosubmit");
|
||||
},
|
||||
set autosubmitPref(aValue) {
|
||||
Services.prefs.setBoolPref('app.crashreporter.autosubmit', aValue);
|
||||
},
|
||||
get promptedPref() {
|
||||
return Services.prefs.getBoolPref("app.crashreporter.prompted");
|
||||
},
|
||||
set promptedPref(aValue) {
|
||||
Services.prefs.setBoolPref('app.crashreporter.prompted', aValue);
|
||||
},
|
||||
run: function() {
|
||||
MockAppInfo.crashid = "testid";
|
||||
SetAutoSubmitPref(false);
|
||||
SetPromptedPref(false);
|
||||
|
||||
BrowserUI.startupCrashCheck();
|
||||
yield waitForCondition2(function () {
|
||||
return Browser.selectedBrowser.currentURI.spec == "about:crashprompt";
|
||||
}, "Loading crash prompt");
|
||||
|
||||
yield Browser.selectedTab.pageShowPromise;
|
||||
ok(true, "Loaded crash prompt");
|
||||
|
||||
EventUtils.sendMouseEvent({type: "click"},
|
||||
"refuseButton",
|
||||
Browser.selectedBrowser
|
||||
.contentDocument
|
||||
.defaultView);
|
||||
yield waitForCondition2(function () {
|
||||
return Browser.selectedBrowser.currentURI.spec == "about:blank";
|
||||
}, "Crash prompt dismissed");
|
||||
|
||||
ok(!GetAutoSubmitPref(), "auto-submit pref should still be false");
|
||||
ok(GetPromptedPref(), "prompted pref should now be true");
|
||||
is(gCrashesSubmitted, 0, "did not submit crash report");
|
||||
}
|
||||
});
|
||||
|
||||
gTests.push({
|
||||
desc: "Pressing 'Send Reports' button on the crash reporter prompt",
|
||||
setUp: initMockAppInfo,
|
||||
tearDown: cleanupMockAppInfo,
|
||||
|
||||
run: function() {
|
||||
MockAppInfo.crashid = "testid";
|
||||
|
||||
// For the first set of tests, we want to be able to simulate that a
|
||||
// specific button of the crash reporter prompt was pressed
|
||||
Services.prompt = {
|
||||
confirmEx: function() {
|
||||
return this.retVal;
|
||||
}
|
||||
};
|
||||
|
||||
// Test 1:
|
||||
// Pressing cancel button on the crash reporter prompt
|
||||
|
||||
// Set the crash reporter prefs to indicate that the prompt should appear
|
||||
this.autosubmitPref = false;
|
||||
this.promptedPref = false;
|
||||
|
||||
// We will simulate that "button 1" (which should be the cancel button)
|
||||
// was pressed
|
||||
Services.prompt.retVal = 1;
|
||||
SetAutoSubmitPref(false);
|
||||
SetPromptedPref(false);
|
||||
|
||||
BrowserUI.startupCrashCheck();
|
||||
ok(!this.autosubmitPref, "auto submit disabled?");
|
||||
ok(this.promptedPref, "prompted should be true");
|
||||
yield waitForCondition2(function () {
|
||||
return Browser.selectedBrowser.currentURI.spec == "about:crashprompt";
|
||||
}, "Loading crash prompt");
|
||||
|
||||
yield Browser.selectedTab.pageShowPromise;
|
||||
ok(true, "Loaded crash prompt");
|
||||
|
||||
// Test 2:
|
||||
// Pressing 'ok' button on the crash reporter prompt
|
||||
EventUtils.sendMouseEvent({type: "click"},
|
||||
"sendReportsButton",
|
||||
Browser.selectedBrowser
|
||||
.contentDocument
|
||||
.defaultView);
|
||||
yield waitForCondition2(function () {
|
||||
return Browser.selectedBrowser.currentURI.spec == "about:blank";
|
||||
}, "Crash prompt dismissed");
|
||||
|
||||
// Set the crash reporter prefs to indicate that the prompt should appear
|
||||
this.autosubmitPref = false;
|
||||
this.promptedPref = false;
|
||||
ok(GetAutoSubmitPref(), "auto-submit pref should now be true");
|
||||
ok(GetPromptedPref(), "prompted pref should now be true");
|
||||
// TODO: We don't submit a crash report when the user selects
|
||||
// 'Send Reports' but eventually we want to.
|
||||
// is(gCrashesSubmitted, 1, "submitted 1 crash report");
|
||||
}
|
||||
});
|
||||
|
||||
// should query on the first call to startupCrashCheck
|
||||
gMockAppInfoQueried = false;
|
||||
gTests.push({
|
||||
desc: "Already prompted, crash reporting disabled",
|
||||
setUp: initMockAppInfo,
|
||||
tearDown: cleanupMockAppInfo,
|
||||
|
||||
// We will simulate that "button 0" (which should be the OK button)
|
||||
// was pressed
|
||||
Services.prompt.retVal = 0;
|
||||
run: function() {
|
||||
MockAppInfo.crashid = "testid";
|
||||
SetAutoSubmitPref(false);
|
||||
SetPromptedPref(true);
|
||||
|
||||
BrowserUI.startupCrashCheck();
|
||||
ok(gMockAppInfoQueried, "id queried");
|
||||
ok(this.autosubmitPref, "auto submit enabled?");
|
||||
ok(this.promptedPref, "prompted should be true");
|
||||
is(Browser.selectedBrowser.currentURI.spec,
|
||||
"about:blank",
|
||||
"Not loading crash prompt");
|
||||
|
||||
ok(!GetAutoSubmitPref(), "auto-submit pref should still be false");
|
||||
ok(GetPromptedPref(), "prompted pref should still be true");
|
||||
is(gCrashesSubmitted, 0, "did not submit crash report");
|
||||
}
|
||||
});
|
||||
|
||||
// For the remaining tests, attempting to launch the crash reporter
|
||||
// prompt would be incorrect behavior
|
||||
Services.prompt.confirmEx = function() {
|
||||
ok(false, "Should not attempt to launch crash reporter prompt");
|
||||
};
|
||||
gTests.push({
|
||||
desc: "Already prompted, crash reporting enabled",
|
||||
setUp: initMockAppInfo,
|
||||
tearDown: cleanupMockAppInfo,
|
||||
|
||||
run: function() {
|
||||
MockAppInfo.crashid = "testid";
|
||||
SetAutoSubmitPref(true);
|
||||
SetPromptedPref(true);
|
||||
|
||||
// Test 3:
|
||||
// Prompt should not appear if pref indicates that user has already
|
||||
// been prompted
|
||||
this.autosubmitPref = false;
|
||||
this.promptedPref = true;
|
||||
BrowserUI.startupCrashCheck();
|
||||
is(Browser.selectedBrowser.currentURI.spec,
|
||||
"about:blank",
|
||||
"Not loading crash prompt");
|
||||
|
||||
ok(GetAutoSubmitPref(), "auto-submit pref should still be true");
|
||||
ok(GetPromptedPref(), "prompted pref should still be true");
|
||||
is(gCrashesSubmitted, 1, "submitted 1 crash report");
|
||||
}
|
||||
});
|
||||
|
||||
gTests.push({
|
||||
desc: "Crash reporting enabled, not prompted",
|
||||
setUp: initMockAppInfo,
|
||||
tearDown: cleanupMockAppInfo,
|
||||
|
||||
run: function() {
|
||||
MockAppInfo.crashid = "testid";
|
||||
SetAutoSubmitPref(true);
|
||||
SetPromptedPref(false);
|
||||
|
||||
// Test 4:
|
||||
// Prompt should not appear if pref indicates that autosubmit is on
|
||||
this.autosubmitPref = true;
|
||||
this.promptedPref = false;
|
||||
BrowserUI.startupCrashCheck();
|
||||
is(Browser.selectedBrowser.currentURI.spec,
|
||||
"about:blank",
|
||||
"Not loading crash prompt");
|
||||
|
||||
ok(GetAutoSubmitPref(), "auto-submit pref should still be true");
|
||||
// We don't check the "prompted" pref; it's equally correct for
|
||||
// the pref to be true or false at this point
|
||||
is(gCrashesSubmitted, 1, "submitted 1 crash report");
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
|
||||
/* 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/. */
|
||||
|
@ -39,7 +40,13 @@ let modules = {
|
|||
home: {
|
||||
uri: "about:start",
|
||||
privileged: true
|
||||
}
|
||||
},
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
crashprompt: {
|
||||
uri: "chrome://browser/content/crashprompt.xhtml",
|
||||
privileged: true
|
||||
},
|
||||
#endif
|
||||
}
|
||||
|
||||
function AboutGeneric() {}
|
||||
|
@ -64,7 +71,7 @@ AboutGeneric.prototype = {
|
|||
getService(Ci.nsIIOService);
|
||||
|
||||
var channel = ios.newChannel(moduleInfo.uri, null, null);
|
||||
|
||||
|
||||
if (!moduleInfo.privileged) {
|
||||
// Setting the owner to null means that we'll go through the normal
|
||||
// path in GetChannelPrincipal and create a codebase principal based
|
||||
|
|
|
@ -6,6 +6,9 @@ contract @mozilla.org/network/protocol/about;1?what=firefox {433d2d75-5923-49b0-
|
|||
contract @mozilla.org/network/protocol/about;1?what=rights {433d2d75-5923-49b0-854d-f37267b03dc7}
|
||||
contract @mozilla.org/network/protocol/about;1?what=certerror {433d2d75-5923-49b0-854d-f37267b03dc7}
|
||||
contract @mozilla.org/network/protocol/about;1?what=home {433d2d75-5923-49b0-854d-f37267b03dc7}
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
contract @mozilla.org/network/protocol/about;1?what=crashprompt {433d2d75-5923-49b0-854d-f37267b03dc7}
|
||||
#endif
|
||||
#ifdef MOZ_SAFE_BROWSING
|
||||
contract @mozilla.org/network/protocol/about;1?what=blocked {433d2d75-5923-49b0-854d-f37267b03dc7}
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<!-- 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/. -->
|
||||
|
||||
|
||||
<!ENTITY crashprompt.title "Would you like to send Mozilla crash reports?">
|
||||
<!ENTITY crashprompt.message "We are sorry, &brandShortName; just recovered from a crash. Sending crash reports will help Mozilla make &brandShortName; more stable and secure. You can always change your preference in Settings/Options.">
|
||||
<!ENTITY crashprompt.detailsLink "What's in a crash report?">
|
||||
<!ENTITY crashprompt.detailedMessage.firstParagraph "A crash report contains some details about the crash, your machine, as well as a snapshot of the state of your browser when it crashed.">
|
||||
<!ENTITY crashprompt.detailedMessage.secondParagraph "This may include things like open pages, text typed into forms and the content of open messages, recent browsing history, or geolocation shared with a site.">
|
||||
<!ENTITY crashprompt.detailedMessage.thirdParagraph "We use crash reports to try to fix problems and improve our products. We handle your information as we describe in our ">
|
||||
<!ENTITY crashprompt.privacyPolicyLink "&brandShortName; privacy policy">
|
||||
<!ENTITY crashprompt.includeURLLabel "Include the address of the page I was on">
|
||||
<!ENTITY crashprompt.acceptbutton "Send reports">
|
||||
<!ENTITY crashprompt.refusebutton "Don't send">
|
||||
<!ENTITY crashprompt.privacyPolicy.title "&brandShortName; privacy policy">
|
|
@ -1,13 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# LOCALIZATION NOTE (crashprompt.messagebody2): %1$S - short brand name, %2$S - vendor name
|
||||
crashprompt.messagebody2=We are sorry, %1$S just recovered from a crash. Sending crash reports will help %2$S make %1$S more stable and secure. You can always change your preference in Settings/Options.
|
||||
crashprompt.dialog.title=Would you like to send Mozilla crash reports?
|
||||
crashprompt.dialog.privacyLink=Privacy statement of crash-reporting feature
|
||||
crashprompt.dialog.acceptbutton=Send reports
|
||||
crashprompt.dialog.refusebutton=Don't send
|
||||
crashprompt.dialog.title2=Privacy statement of crash-reporting feature
|
||||
crashprompt.dialog.statement1=Firefox has a crash-reporting feature that sends a report to Mozilla when Firefox crashes. Mozilla uses information in crash reports to diagnose and correct problems in Firefox that cause crashes. Though this feature starts automatically after Firefox crashes, it does not send information to Mozilla until you explicitly authorize it to do so. By default, this feature sends a variety of Non-Personal Information to Mozilla, including the stack trace (a detailed description of which parts of the Firefox code were active at the time of the crash) and the type of computer you are using. Additional information is collected by the crash reporting feature. Which crash reporting feature is used and what additional information collected by Firefox depends on which version of Firefox you are using.
|
||||
crashprompt.dialog.statement2=For current versions of Firefox, “Firefox Crash Reporter” is Firefox’s crash reporting feature. With this feature, you may have the option to include Personal Information (including your email address), Potentially Personal Information (including your IP address and the URL of the site you were visiting when Firefox crashed), and a comment. Firefox Crash Reporter also sends a list of all add-ons that you were using at the time of the crash, the time since (i) the last crash, (ii) the last install, and (iii) the start-up of the program. Mozilla only makes Non-Personal Information (i.e., generic information about your computer, the stack trace, and any comment given by the user) available in the public reports available online at http://crash-stats.mozilla.com/.
|
|
@ -35,5 +35,6 @@
|
|||
|
||||
<!ENTITY optionsHeader.reporting.title "Crash Reporter">
|
||||
<!ENTITY optionsHeader.reporting.crashes.label "&brandShortName; submits crash reports to help Mozilla make your browser more stable and secure">
|
||||
<!ENTITY optionsHeader.reporting.crashes.submitURLs "Include the address of the page I was on">
|
||||
<!ENTITY optionsHeader.telemetry.title "Telemetry">
|
||||
<!ENTITY optionsHeader.telemetry.label "Shares usage statistics about &brandShortName; with Mozilla to help us make your browser better">
|
||||
|
|
|
@ -22,7 +22,9 @@
|
|||
locale/browser/sync.properties (%chrome/sync.properties)
|
||||
locale/browser/passwordmgr.properties (%chrome/passwordmgr.properties)
|
||||
locale/browser/phishing.dtd (%chrome/phishing.dtd)
|
||||
locale/browser/crashprompt.properties (%chrome/crashprompt.properties)
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
locale/browser/crashprompt.dtd (%chrome/crashprompt.dtd)
|
||||
#endif
|
||||
locale/browser/aboutAddons.dtd (%chrome/aboutAddons.dtd)
|
||||
|
||||
@AB_CD@.jar:
|
||||
|
|
|
@ -18,9 +18,11 @@ pref("devtools.chrome.enabled", false);
|
|||
// Automatically submit crash reports
|
||||
#ifdef RELEASE_BUILD
|
||||
pref("app.crashreporter.autosubmit", false);
|
||||
pref("app.crashreporter.submitURLs", false);
|
||||
#else
|
||||
// For Nightly and Aurora we turn this on by default
|
||||
pref("app.crashreporter.autosubmit", true);
|
||||
pref("app.crashreporter.submitURLs", false);
|
||||
#endif
|
||||
// Has the user been prompted about crash reporting?
|
||||
pref("app.crashreporter.prompted", false);
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
/* 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/. */
|
||||
|
||||
%filter substitution
|
||||
%include defines.inc
|
||||
|
||||
body {
|
||||
background-color: #F4F4F4;
|
||||
margin-left: 16%;
|
||||
margin-right: 23%;
|
||||
margin-top: 115px;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#detailsLink {
|
||||
color: black;
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
#detailsGrid {
|
||||
display: table;
|
||||
}
|
||||
|
||||
#detailsContainer {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
#detailsLinkLabel {
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.detailsSpacer {
|
||||
display: table-cell;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
#crashpromptDetailedMessage {
|
||||
font-size: @metro_font_snormal@;
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
#crashPromptTitle {
|
||||
color: #737980;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#crashPromptButtonContainer {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
#lightboxBackdrop {
|
||||
position: fixed;
|
||||
top: 0%;
|
||||
left: 0%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1001;
|
||||
background-color: rgba(0,0,0,0.7);
|
||||
}
|
||||
|
||||
#lightbox {
|
||||
position: fixed;
|
||||
top: 20%;
|
||||
left: 15%;
|
||||
width: 70%;
|
||||
height: 60%;
|
||||
padding-bottom: 1%;
|
||||
padding-top: 1%;
|
||||
background-color: white;
|
||||
z-index: 1002;
|
||||
}
|
||||
|
||||
#privacyPolicyTitle {
|
||||
margin-left: 10%;
|
||||
}
|
||||
|
||||
#privacyPolicyBody {
|
||||
margin-left: 10%;
|
||||
margin-right: 10%;
|
||||
padding-right: 20px;
|
||||
max-height: 75%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#lightboxCloseButton {
|
||||
background-image: -moz-image-rect(url("chrome://browser/skin/images/infobar-close.png"), 0, 40, 40, 0);
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
float: right;
|
||||
margin-right: 30px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
button {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
button:not([disabled]):hover {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
#refuseButton {
|
||||
background: #847F7C;
|
||||
}
|
||||
|
||||
#refuseButton:hover {
|
||||
background: #B0B0B0;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 1px solid #C7C7C7;
|
||||
}
|
||||
|
||||
#privacyPolicyLink {
|
||||
color: #649FEF;
|
||||
}
|
||||
|
||||
.button-default {
|
||||
background: #649FEF;
|
||||
border-color: #9DCFF2;
|
||||
}
|
||||
|
||||
.button-default:not([disabled]):hover {
|
||||
background: #2990D9;
|
||||
border-color: #8DBAD9;
|
||||
}
|
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 696 B |
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 1.8 KiB |
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 744 B |
Двоичный файл не отображается.
После Ширина: | Высота: | Размер: 1.9 KiB |
|
@ -10,6 +10,9 @@ chrome.jar:
|
|||
skin/aboutAddons.css (aboutAddons.css)
|
||||
skin/about.css (about.css)
|
||||
* skin/flyoutpanel.css (flyoutpanel.css)
|
||||
#ifdef MOZ_CRASHREPORTER
|
||||
* skin/crashprompt.css (crashprompt.css)
|
||||
#endif
|
||||
* skin/circularprogress.css (circularprogress.css)
|
||||
* skin/cssthrobber.css (cssthrobber.css)
|
||||
* skin/browser.css (browser.css)
|
||||
|
@ -103,6 +106,8 @@ chrome.jar:
|
|||
skin/images/arrowdowndark-16.png (images/arrowdowndark-16.png)
|
||||
skin/images/popup-bg-hdpi.png (images/popup-bg-hdpi.png)
|
||||
skin/images/popup-selected-item-hdpi.png (images/popup-selected-item-hdpi.png)
|
||||
skin/images/arrowbox-horiz-blue-filled.png (images/arrowbox-horiz-blue-filled.png)
|
||||
skin/images/arrowbox-down-blue-filled.png (images/arrowbox-down-blue-filled.png)
|
||||
skin/images/favicon-default-32.png (images/favicon-default-32.png)
|
||||
skin/images/errorpage-warning.png (images/errorpage-warning.png)
|
||||
skin/images/errorpage-warning.png (images/errorpage-warning.png)
|
||||
|
|
|
@ -462,13 +462,11 @@
|
|||
|
||||
.devtools-tabbar {
|
||||
-moz-appearance: none;
|
||||
background-image: url("background-noise-toolbar.png"),
|
||||
linear-gradient(#303840, #2d3640);
|
||||
border-color: #060a0d;
|
||||
background: #252c33;
|
||||
border-color: #434a51;
|
||||
border-style: solid;
|
||||
border-width: 1px 0;
|
||||
box-shadow: 0 1px 0 hsla(204,45%,98%,.05) inset,
|
||||
0 -1px 0 hsla(206,37%,4%,.1) inset;
|
||||
box-shadow: 0 -2px 0 rgba(0,0,0,.25) inset;
|
||||
min-height: 32px;
|
||||
padding: 0;
|
||||
}
|
||||
|
@ -490,15 +488,18 @@
|
|||
color: #b6babf;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
|
||||
linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1));
|
||||
background-size: 1px 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left, right;
|
||||
border-right: 1px solid hsla(206,37%,4%,.45);
|
||||
border-left: 1px solid #42484f;
|
||||
-moz-box-align: center;
|
||||
}
|
||||
|
||||
.devtools-tab:first-child {
|
||||
border-left-width: 0;
|
||||
}
|
||||
|
||||
.devtools-tab:last-child {
|
||||
border-right: 1px solid #5a6169;
|
||||
}
|
||||
|
||||
.devtools-tab > image {
|
||||
border: none;
|
||||
-moz-margin-end: 0;
|
||||
|
@ -526,62 +527,37 @@
|
|||
}
|
||||
|
||||
.devtools-tab:hover {
|
||||
background-image: linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
|
||||
linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
|
||||
linear-gradient(hsla(206,37%,4%,.1), hsla(206,37%,4%,.2));
|
||||
background-size: 1px 100%,
|
||||
1px 100%,
|
||||
100%;
|
||||
background-repeat: no-repeat,
|
||||
no-repeat,
|
||||
repeat-x;
|
||||
background-position: left, right;
|
||||
background-color: hsla(206,37%,4%,.2);
|
||||
color: #ced3d9;
|
||||
}
|
||||
|
||||
.devtools-tab:hover:active {
|
||||
background-color: hsla(206,37%,4%,.2);
|
||||
background-color: hsla(206,37%,4%,.4);
|
||||
color: #f5f7fa;
|
||||
}
|
||||
|
||||
.devtools-tab[selected=true] {
|
||||
#toolbox-tabs .devtools-tab[selected=true] {
|
||||
color: #f5f7fa;
|
||||
background-image: radial-gradient(farthest-corner at center top, #9fdfff, hsla(200,100%,70%,.3)),
|
||||
radial-gradient(farthest-side at center top, hsla(200,100%,70%,.4), hsla(200,100%,70%,0)),
|
||||
linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
|
||||
linear-gradient(hsla(204,45%,98%,.02), hsla(204,45%,98%,.04)),
|
||||
linear-gradient(hsla(206,37%,4%,.2), hsla(206,37%,4%,.3));
|
||||
background-size: 100% 1px,
|
||||
100% 5px,
|
||||
1px 100%,
|
||||
1px 100%,
|
||||
100%;
|
||||
background-repeat: no-repeat,
|
||||
no-repeat,
|
||||
no-repeat,
|
||||
no-repeat,
|
||||
repeat-x;
|
||||
background-position: top right, top left, left, right;
|
||||
box-shadow: 1px -1px 0 hsla(206,37%,4%,.2) inset;
|
||||
background-color: #1a4666;
|
||||
border-width: 0;
|
||||
box-shadow: 0 2px 0 #d7f1ff inset,
|
||||
0 8px 3px -5px #2b82bf inset,
|
||||
0 -2px 0 rgba(0,0,0,.2) inset;
|
||||
}
|
||||
|
||||
.devtools-tab[selected=true]:not(:first-child) {
|
||||
padding-left: 1px;
|
||||
}
|
||||
|
||||
.devtools-tab[selected=true] + .devtools-tab {
|
||||
border-left-width: 0;
|
||||
padding-left: 1px;
|
||||
}
|
||||
|
||||
.devtools-tab:not([selected=true]).highlighted {
|
||||
color: #f5f7fa;
|
||||
background-image: radial-gradient(farthest-corner at center top, #c0ff40, hsla(80,100%,63%,.5) 70%, hsla(80,100%,63%,.3) 97%),
|
||||
radial-gradient(farthest-side at center top, hsla(80,100%,35%,.5), hsla(80,100%,35%,0)),
|
||||
linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
|
||||
linear-gradient(hsla(204,45%,98%,.05), hsla(204,45%,98%,.1)),
|
||||
linear-gradient(hsla(99,100%,14%,.2), hsla(99,100%,14%,.2));
|
||||
background-size: 100% 1px,
|
||||
100% 5px,
|
||||
1px 100%,
|
||||
1px 100%,
|
||||
100%;
|
||||
background-repeat: no-repeat,
|
||||
no-repeat,
|
||||
no-repeat,
|
||||
no-repeat,
|
||||
repeat-x;
|
||||
background-position: top right, top left, left, right;
|
||||
background-color: hsla(99,100%,14%,.2);
|
||||
box-shadow: 0 2px 0 #7bc107 inset;
|
||||
}
|
||||
|
||||
.devtools-tab:not(.highlighted) > .highlighted-icon,
|
||||
|
|
|
@ -132,6 +132,12 @@ ConsoleAPI.prototype = {
|
|||
Services.obs.notifyObservers(consoleEvent, "console-api-profiler",
|
||||
null);
|
||||
},
|
||||
assert: function CA_assert() {
|
||||
let args = Array.prototype.slice.call(arguments);
|
||||
if(!args.shift()) {
|
||||
self.queueCall("assert", args);
|
||||
}
|
||||
},
|
||||
__exposedProps__: {
|
||||
log: "r",
|
||||
info: "r",
|
||||
|
@ -147,7 +153,8 @@ ConsoleAPI.prototype = {
|
|||
time: "r",
|
||||
timeEnd: "r",
|
||||
profile: "r",
|
||||
profileEnd: "r"
|
||||
profileEnd: "r",
|
||||
assert: "r"
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -174,6 +181,7 @@ ConsoleAPI.prototype = {
|
|||
timeEnd: genPropDesc('timeEnd'),
|
||||
profile: genPropDesc('profile'),
|
||||
profileEnd: genPropDesc('profileEnd'),
|
||||
assert: genPropDesc('assert'),
|
||||
__noSuchMethod__: { enumerable: true, configurable: true, writable: true,
|
||||
value: function() {} },
|
||||
__mozillaConsole__: { value: true }
|
||||
|
@ -295,6 +303,7 @@ ConsoleAPI.prototype = {
|
|||
case "error":
|
||||
case "exception":
|
||||
case "debug":
|
||||
case "assert":
|
||||
consoleEvent.arguments = this.processArguments(args);
|
||||
break;
|
||||
case "trace":
|
||||
|
|
|
@ -132,7 +132,7 @@ function testConsoleGroup(aMessageObject) {
|
|||
"expected level received");
|
||||
|
||||
is(aMessageObject.functionName, "testGroups", "functionName matches");
|
||||
ok(aMessageObject.lineNumber >= 45 && aMessageObject.lineNumber <= 48,
|
||||
ok(aMessageObject.lineNumber >= 45 && aMessageObject.lineNumber <= 49,
|
||||
"lineNumber matches");
|
||||
if (aMessageObject.level == "groupCollapsed") {
|
||||
is(aMessageObject.groupName, "a group", "groupCollapsed groupName matches");
|
||||
|
@ -258,6 +258,10 @@ function observeConsoleTest() {
|
|||
win.console.log("omg %o foo %o", obj, 4, obj2);
|
||||
yield undefined;
|
||||
|
||||
expect("assert", "message");
|
||||
win.console.assert(false, "message");
|
||||
yield undefined;
|
||||
|
||||
startTraceTest();
|
||||
yield undefined;
|
||||
|
||||
|
@ -282,6 +286,7 @@ function consoleAPISanityTest() {
|
|||
ok(win.console.groupEnd, "console.groupEnd is here");
|
||||
ok(win.console.time, "console.time is here");
|
||||
ok(win.console.timeEnd, "console.timeEnd is here");
|
||||
ok(win.console.assert, "console.assert is here");
|
||||
}
|
||||
|
||||
function startTimeTest() {
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
console.warn(str);
|
||||
console.error(str);
|
||||
console.exception(str);
|
||||
console.assert(false, str);
|
||||
}
|
||||
|
||||
function testGroups() {
|
||||
|
|
|
@ -35,6 +35,7 @@ function doTest() {
|
|||
"timeEnd": "function",
|
||||
"profile": "function",
|
||||
"profileEnd": "function",
|
||||
"assert": "function",
|
||||
"__noSuchMethod__": "function"
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче