author | Ryan VanderMeulen <ryanvm@gmail.com> |
Tue, 06 Aug 2013 17:08:14 -0400 | |
changeset 141690 | c3b23d6af64f79ae649cce603a57f9d4500f8a63 |
parent 141689 | 97a40e4da22c86c9e3edcc460f4d68906be8ac3b (current diff) |
parent 141585 | 1fb5d14e8348b16014fafa5d746e0a8823df8187 (diff) |
child 141691 | 360a47186e212b644ad7d1483d2d29cd5a10fe97 |
push id | 32205 |
push user | emorley@mozilla.com |
push date | Wed, 07 Aug 2013 23:19:13 +0000 |
treeherder | mozilla-inbound@56912957f3e9 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 26.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/base/content/content.js +++ b/browser/base/content/content.js @@ -6,16 +6,18 @@ let Cc = Components.classes; let Ci = Components.interfaces; let Cu = Components.utils; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "LoginManagerContent", "resource://gre/modules/LoginManagerContent.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, + "InsecurePasswordUtils", "resource://gre/modules/InsecurePasswordUtils.jsm"); // Bug 671101 - directly using webNavigation in this context // causes docshells to leak this.__defineGetter__("webNavigation", function () { return docShell.QueryInterface(Ci.nsIWebNavigation); }); addMessageListener("WebNavigation:LoadURI", function (message) { @@ -33,15 +35,18 @@ addMessageListener("Browser:HideSessionR container.hidden = true; } }); if (!Services.prefs.getBoolPref("browser.tabs.remote")) { addEventListener("DOMContentLoaded", function(event) { LoginManagerContent.onContentLoaded(event); }); + addEventListener("DOMFormHasPassword", function(event) { + InsecurePasswordUtils.checkForInsecurePasswords(event.target); + }); addEventListener("DOMAutoComplete", function(event) { LoginManagerContent.onUsernameInput(event); }); addEventListener("blur", function(event) { LoginManagerContent.onUsernameInput(event); }); }
--- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -169,16 +169,20 @@ // Force a style flush to ensure that our binding is attached. findBar.clientTop; findBar.browser = browser; findBar._findField.value = this._lastFindValue; aTab._findBar = findBar; + let event = document.createEvent("Events"); + event.initEvent("TabFindInitialized", true, false); + aTab.dispatchEvent(event); + return findBar; ]]></body> </method> <method name="updateWindowResizers"> <body><![CDATA[ if (!window.gShowPageResizers) return;
--- a/browser/base/content/test/browser_bug537013.js +++ b/browser/base/content/test/browser_bug537013.js @@ -39,36 +39,44 @@ function test() { gBrowser.selectedTab = tabs[0]; setFindString(texts[0]); // Turn on highlight for testing bug 891638 gFindBar.getElement("highlight").checked = true; // Make sure the second tab is correct, then set it up gBrowser.selectedTab = tabs[1]; + gBrowser.selectedTab.addEventListener("TabFindInitialized", continueTests1); + // Initialize the findbar + gFindBar; +} +function continueTests1() { + gBrowser.selectedTab.removeEventListener("TabFindInitialized", + continueTests1); + ok(true, "'TabFindInitialized' event properly dispatched!"); ok(gFindBar.hidden, "Second tab doesn't show find bar!"); gFindBar.open(); is(gFindBar._findField.value, texts[0], "Second tab kept old find value for new initialization!"); setFindString(texts[1]); // Confirm the first tab is still correct, ensure re-hiding works as expected gBrowser.selectedTab = tabs[0]; ok(!gFindBar.hidden, "First tab shows find bar!"); is(gFindBar._findField.value, texts[0], "First tab persists find value!"); ok(gFindBar.getElement("highlight").checked, "Highlight button state persists!"); // While we're here, let's test bug 253793 gBrowser.reload(); - gBrowser.addEventListener("DOMContentLoaded", continueTests, true); + gBrowser.addEventListener("DOMContentLoaded", continueTests2, true); } -function continueTests() { - gBrowser.removeEventListener("DOMContentLoaded", continueTests, true); +function continueTests2() { + gBrowser.removeEventListener("DOMContentLoaded", continueTests2, true); ok(!gFindBar.getElement("highlight").checked, "Highlight button reset!"); gFindBar.close(); ok(gFindBar.hidden, "First tab doesn't show find bar!"); gBrowser.selectedTab = tabs[1]; ok(!gFindBar.hidden, "Second tab shows find bar!"); // Test for bug 892384 is(gFindBar._findField.getAttribute("focused"), "true", "Open findbar refocused on tab change!");
--- a/browser/devtools/styleeditor/StyleEditorDebuggee.jsm +++ b/browser/devtools/styleeditor/StyleEditorDebuggee.jsm @@ -118,17 +118,17 @@ StyleEditorDebuggee.prototype = { }, /** * request baseURIObject information from the document */ _getBaseURI: function() { let message = { type: "getBaseURI" }; this._sendRequest(message, (response) => { - this.baseURI = response.baseURI; + this.baseURI = Services.io.newURI(response.baseURI, null, null); }); }, /** * Handler for document load, forward event with * all the stylesheets available on load. * * @param {string} type
--- a/browser/devtools/webconsole/test/Makefile.in +++ b/browser/devtools/webconsole/test/Makefile.in @@ -140,16 +140,18 @@ MOCHITEST_BROWSER_FILES = \ browser_console_keyboard_accessibility.js \ browser_console_filters.js \ browser_console_dead_objects.js \ browser_console_iframe_messages.js \ browser_console_variables_view_while_debugging_and_inspecting.js \ browser_webconsole_bug_686937_autocomplete_JSTerm_helpers.js \ browser_webconsole_cached_autocomplete.js \ browser_console_navigation_marker.js \ + browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js \ + browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js \ head.js \ $(NULL) ifeq ($(OS_ARCH), Darwin) MOCHITEST_BROWSER_FILES += \ browser_webconsole_bug_804845_ctrl_key_nav.js \ $(NULL) endif @@ -239,15 +241,19 @@ MOCHITEST_BROWSER_FILES += \ test-bug-821877-csperrors.html^headers^ \ test-bug-846918-hsts-invalid-headers.html \ test-bug-846918-hsts-invalid-headers.html^headers^ \ test-eval-in-stackframe.html \ test-bug-859170-longstring-hang.html \ test-bug-837351-security-errors.html \ test-bug-869003-top-window.html \ test-bug-869003-iframe.html \ + test-iframe-762593-insecure-form-action.html \ + test-iframe-762593-insecure-frame.html \ + test-bug-762593-insecure-passwords-web-console-warning.html \ + test-bug-762593-insecure-passwords-about-blank-web-console-warning.html \ test-consoleiframes.html \ test-iframe1.html \ test-iframe2.html \ test-iframe3.html \ $(NULL) include $(topsrcdir)/config/rules.mk
new file mode 100644 --- /dev/null +++ b/browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js @@ -0,0 +1,29 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +/* + * Tests that errors about insecure passwords are logged + * to the web console + */ + +const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html"; +const INSECURE_PASSWORD_MSG = "Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen."; + +function test() { + addTab(TEST_URI); + browser.addEventListener("load", function onLoad(aEvent) { + browser.removeEventListener(aEvent.type, onLoad, true); + openConsole(null, function testInsecurePasswordErrorLogged (hud) { + waitForMessages({ + webconsole: hud, + messages: [ + { + name: "Insecure password error displayed successfully", + text: INSECURE_PASSWORD_MSG, + category: CATEGORY_SECURITY, + severity: SEVERITY_WARNING + }, + ], + }).then(finishTest); + }); + }, true); +}
new file mode 100644 --- /dev/null +++ b/browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js @@ -0,0 +1,68 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +/* + * Tests that errors about insecure passwords are logged + * to the web console + */ + +const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html"; +const INSECURE_PASSWORD_MSG = "Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen."; +const INSECURE_FORM_ACTION_MSG = "Password fields present in a form with an insecure (http://) form action. This is a security risk that allows user login credentials to be stolen."; +const INSECURE_IFRAME_MSG = "Password fields present on an insecure (http://) iframe. This is a security risk that allows user login credentials to be stolen."; +const INSECURE_PASSWORDS_URI = "https://developer.mozilla.org/en-US/docs/Security/InsecurePasswords"; + +function test() { + addTab(TEST_URI); + browser.addEventListener("load", function onLoad(aEvent) { + browser.removeEventListener(aEvent.type, onLoad, true); + openConsole(null, function testInsecurePasswordErrorLogged (hud) { + waitForMessages({ + webconsole: hud, + messages: [ + { + name: "Insecure password error displayed successfully", + text: INSECURE_PASSWORD_MSG, + category: CATEGORY_SECURITY, + severity: SEVERITY_WARNING + }, + { + name: "Insecure iframe error displayed successfully", + text: INSECURE_IFRAME_MSG, + category: CATEGORY_SECURITY, + severity: SEVERITY_WARNING + }, + { + name: "Insecure form action error displayed successfully", + text: INSECURE_FORM_ACTION_MSG, + category: CATEGORY_SECURITY, + severity: SEVERITY_WARNING + }, + ], + }).then( () => testClickOpenNewTab(hud)); + }); + }, true); +} + +function testClickOpenNewTab(hud) { + let warningNode = hud.outputNode.querySelector( + ".webconsole-msg-body .webconsole-learn-more-link"); + + /* + * Invoke the click event and check if a new tab would open to the correct + * page + */ + let linkOpened = false; + let oldOpenUILinkIn = window.openUILinkIn; + window.openUILinkIn = function(aLink) { + if (aLink == INSECURE_PASSWORDS_URI) { + linkOpened = true; + } + } + + EventUtils.synthesizeMouse(warningNode, 2, 2, {}, + warningNode.ownerDocument.defaultView); + ok(linkOpened, "Clicking the Insecure Passwords Warning node opens the desired page"); + window.openUILinkIn = oldOpenUILinkIn; + + finishTest(); +}
new file mode 100644 --- /dev/null +++ b/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html @@ -0,0 +1,28 @@ +<!doctype html> +<html> + <head> + <meta charset="utf8"> + <title>Bug 762593 - Add warning/error Message to Web Console when the + page includes Insecure Password fields</title> + <!-- Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ --> + + <!-- This test tests the scenario where a javascript adds password fields to + an about:blank iframe inside an insecure web page. It ensures that + insecure password fields like those are detected and a warning is sent to + the web console. --> + </head> + <body> + <p>This insecure page is served with an about:blank iframe. A script then adds a + password field to it.</p> + <iframe id = "myiframe" width = "300" height="300" > + </iframe> + <script> + var doc = window.document; + var myIframe = doc.getElementById("myiframe"); + myIframe.contentDocument.open(); + myIframe.contentDocument.write("<form><input type = 'password' name='pwd' value='test'> </form>"); + myIframe.contentDocument.close(); + </script> + </body> +</html>
new file mode 100644 --- /dev/null +++ b/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html @@ -0,0 +1,16 @@ +<!doctype html> +<html> + <head> + <meta charset="utf8"> + <title>Bug 762593 - Add warning/error Message to Web Console when the + page includes Insecure Password fields</title> + <!-- Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ --> + </head> + <body> + <p>This page is served with an iframe with insecure password field.</p> + <iframe src + ="http://example.com/browser/browser/devtools/webconsole/test/test-iframe-762593-insecure-frame.html"> + </iframe> + </body> +</html>
new file mode 100644 --- /dev/null +++ b/browser/devtools/webconsole/test/test-iframe-762593-insecure-form-action.html @@ -0,0 +1,15 @@ +<!doctype html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> + <!-- Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ --> + </head> + <body> + <h1>iframe 2</h1> + <p>This frame contains a password field inside a form with insecure action.</p> + <form action="http://test"> + <input type="password" name="pwd"> + </form> + </body> +</html>
new file mode 100644 --- /dev/null +++ b/browser/devtools/webconsole/test/test-iframe-762593-insecure-frame.html @@ -0,0 +1,15 @@ +<!doctype html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> + <!-- Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ --> + </head> + <body> + <h1>iframe 1</h1> + <p>This frame is served with an insecure password field.</p> + <iframe src= + "http://example.com/browser/browser/devtools/webconsole/test/test-iframe-762593-insecure-form-action.html"> + </iframe> + </body> +</html>
--- a/browser/devtools/webconsole/webconsole.js +++ b/browser/devtools/webconsole/webconsole.js @@ -34,16 +34,18 @@ const STRINGS_URI = "chrome://browser/lo let l10n = new WebConsoleUtils.l10n(STRINGS_URI); // The XUL namespace. const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; const MIXED_CONTENT_LEARN_MORE = "https://developer.mozilla.org/en/Security/MixedContent"; +const INSECURE_PASSWORDS_LEARN_MORE = "https://developer.mozilla.org/en-US/docs/Security/InsecurePasswords"; + const HELP_URL = "https://developer.mozilla.org/docs/Tools/Web_Console/Helpers"; const VARIABLES_VIEW_URL = "chrome://browser/content/devtools/widgets/VariablesView.xul"; const CONSOLE_DIR_VIEW_HEIGHT = 0.6; const IGNORED_SOURCE_URLS = ["debugger eval code", "self-hosted"]; @@ -1236,16 +1238,22 @@ WebConsoleFrame.prototype = { errorMessage = errorMessage.initial; } let node = this.createMessageNode(aCategory, severity, errorMessage, aScriptError.sourceName, aScriptError.lineNumber, null, null, aScriptError.timeStamp); + + // Select the body of the message node that is displayed in the console + let msgBody = node.querySelector(".webconsole-msg-body"); + // Add the more info link node to messages that belong to certain categories + this.addMoreInfoLink(msgBody, aScriptError); + if (aScriptError.private) { node.setAttribute("private", true); } if (objectActors.size > 0) { node._objectActors = objectActors; } @@ -1407,16 +1415,69 @@ WebConsoleFrame.prototype = { mixedContentWarningNode.addEventListener("click", function(aEvent) { this.owner.openLink(MIXED_CONTENT_LEARN_MORE); aEvent.preventDefault(); aEvent.stopPropagation(); }.bind(this)); }, /** + * Adds a more info link node to messages based on the nsIScriptError object + * that we need to report to the console + * + * @param aNode + * The node to which we will be adding the more info link node + * @param aScriptError + * The script error object that we are reporting to the console + */ + addMoreInfoLink: function WCF_addMoreInfoLink(aNode, aScriptError) + { + // We have a single category for now, but more are to be + // expected soon + if (aScriptError.category == "Insecure Password Field") { + this.addInsecurePasswordsWarningNode(aNode); + } + }, + + /* + * Appends a clickable insecure passwords warning node to the node passed + * as a parameter to the function. When a user clicks on the appended + * warning node, the browser navigates to a page where the user can learn + * more about security issues associated with insecure passwords. + */ + addInsecurePasswordsWarningNode: + function WCF_addInsecurePasswordsWarningNode(aNode) + { + let moreInfoLabel = + "[" + l10n.getStr("webConsoleMoreInfoLabel") + "]"; + + // The node that holds the clickable warning node. + let linkNode = this.document.createElementNS(XUL_NS, "hbox"); + linkNode.flex = 1; + linkNode.classList.add("webconsole-msg-body-piece"); + linkNode.classList.add("webconsole-msg-link"); + aNode.appendChild(linkNode); + + // Create the actual insecure passwords warning node and make it clickable + let warningNode = this.document.createElement("label"); + warningNode.setAttribute("value", moreInfoLabel); + warningNode.setAttribute("title", moreInfoLabel); + warningNode.classList.add("hud-clickable"); + warningNode.classList.add("webconsole-learn-more-link"); + + warningNode.addEventListener("click", function(aEvent) { + this.owner.openLink(INSECURE_PASSWORDS_LEARN_MORE); + aEvent.preventDefault(); + aEvent.stopPropagation(); + }.bind(this)); + + linkNode.appendChild(warningNode); + }, + + /** * Log file activity. * * @param string aFileURI * The file URI that was loaded. * @return nsIDOMElement|undefined * The message element to display in the Web Console output. */ logFileActivity: function WCF_logFileActivity(aFileURI) @@ -4467,16 +4528,17 @@ var Utils = { switch (aScriptError.category) { case "CSS Parser": case "CSS Loader": return CATEGORY_CSS; case "Mixed Content Blocker": case "CSP": case "Invalid HSTS Headers": + case "Insecure Password Field": return CATEGORY_SECURITY; default: return CATEGORY_JS; } }, /**
--- a/browser/installer/removed-files.in +++ b/browser/installer/removed-files.in @@ -1,96 +1,1554 @@ # 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/. - -# The removed-files.in file specifies files and directories to be removed during -# an application update that are not automatically removed by the application -# update process. The application update process handles the vast majority of -# file and directory removals automatically so this file should not be used in -# the vast majority of cases. - -# When to use removed-files.in file to remove files and directories: -# * Files and directories located in the installation's "distribution/" and -# "extensions/" directories that were added before Firefox 26. Files and -# directories located in these directories were not included in the -# application update file removals for a complete update prior to Firefox 26. -# * Empty directories that were accidentally added to the installation -# directory. -# * Third party files and directories that were added to the installation -# directory. Under normal circumstances this should only be done after release -# drivers have approved the removal of these third party files. - -# If you are not sure whether a file or directory should be removed using the -# removed-files.in file please contact one of the developers that work on -# application update. - -# Note: the "distribution/" and "browser/extensions/" directories should never -# be removed recursively since these directories are used by Partner builds and -# custom installations. - -# To specify a file to be removed add the path to the file. -# * If the file doesn't exist the update will succeed. -# * If the file exists and can't be removed (e.g. the file is locked) the -# update will fail. -# -# Example: path/to/file - -# To specify a directory to be removed only if it is empty add the path to the -# directory with a trailing forward slash. -# * If the directory doesn't exist the update will succeed. -# * If the directory can't be removed (e.g. the directory is locked, contains -# files, etc.) the update will succeed. -# -# Example: path/to/dir/ - -# To specify a directory that should be recursively removed add the path to the -# directory with a trailing forward slash and "*". -# * If the directory doesn't exist the update will succeed. -# * If all of the files the directory contains can be removed but the directory -# or a subdirectory can't be removed (e.g. the directory is locked) the update -# will succeed. -# * If a file within the directory can't be removed the update will fail. -# -# Example: path/to/dir/* - -# File Removals -# This is located under the "distribution/" directory and it was added before -# Firefox 26 +# Removed-files.in is processed at build time to create a list of files that +# should be removed during an application update. +# These files are in alphabetical order, except that files removed only on +# certain platforms are after all of the regular files and obsolete Talkback and +# Inspector files are at the very end. +.autoreg +@DLL_PREFIX@jsj@DLL_SUFFIX@ +@DLL_PREFIX@sqlite3@DLL_SUFFIX@ +@DLL_PREFIX@xpcom_compat@DLL_SUFFIX@ +@DLL_PREFIX@xpistub@DLL_SUFFIX@ +@DLL_PREFIX@zlib@DLL_SUFFIX@ +@DLL_PREFIX@jemalloc@DLL_SUFFIX@ +@DLL_PREFIX@mozutils@DLL_SUFFIX@ +#ifdef MOZ_STATIC_JS +@DLL_PREFIX@mozjs@DLL_SUFFIX@ +#endif +#ifdef MOZ_FOLD_LIBS +@DLL_PREFIX@nspr4@DLL_SUFFIX@ +@DLL_PREFIX@plds4@DLL_SUFFIX@ +@DLL_PREFIX@plc4@DLL_SUFFIX@ +@DLL_PREFIX@ssl3@DLL_SUFFIX@ +@DLL_PREFIX@smime3@DLL_SUFFIX@ +@DLL_PREFIX@nssutil3@DLL_SUFFIX@ +@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@ +#endif +@DLL_PREFIX@xpcom@DLL_SUFFIX@ +LICENSE +browserconfig.properties +chrome/US.jar +chrome/app-chrome.manifest +chrome/browser.manifest +chrome/chrome.rdf +chrome/chromelist.txt +chrome/classic.jar +chrome/classic.manifest +chrome/comm.jar +chrome/comm.manifest +chrome/en-win.jar +chrome/help.jar +chrome/installed-chrome.txt +chrome/m3ffxtbr.jar +chrome/m3ffxtbr.manifest +chrome/overlayinfo/ +chrome/pippki.manifest +chrome/reporter.jar +chrome/reporter.manifest +chrome/toolkit.manifest +component.reg +components/browser.manifest +components/components.list +components/@DLL_PREFIX@browserdirprovider@DLL_SUFFIX@ +components/@DLL_PREFIX@brwsrdir@DLL_SUFFIX@ +components/@DLL_PREFIX@myspell@DLL_SUFFIX@ +components/@DLL_PREFIX@spellchecker@DLL_SUFFIX@ +components/@DLL_PREFIX@spellchk@DLL_SUFFIX@ +#ifdef XP_MACOSX +components/libalerts.dylib +components/libalerts_s.dylib +#endif +components/aboutCertError.js +components/aboutPrivateBrowsing.js +components/aboutRights.js +components/aboutRobots.js +components/aboutSessionRestore.js +components/autocomplete.xpt +components/airbag.xpt +components/bookmarks.xpt +components/compreg.dat +components/history.xpt +components/microsummaries.xpt +components/myspell/en-US.aff +components/myspell/en-US.dic +components/nsAddonRepository.js +components/nsBackgroundUpdateService.js +components/nsBookmarkTransactionManager.js +components/nsCloseAllWindows.js +components/nsDictionary.js +components/nsExtensionManager.js +components/nsInterfaceInfoToIDL.js +components/nsScriptableIO.js +components/nsUrlClassifierTable.js +components/nsXmlRpcClient.js +components/pluginGlue.js +components/sidebar.xpt +#ifdef MOZ_B2G_RIL +components/dom_telephony.xpt +components/dom_wifi.xpt +components/dom_system_b2g.xpt +#endif +components/dom_sms.xpt +components/dom_webspeech.xpt +components/uconvd.dll +components/WeaveCrypto.js +components/WeaveCrypto.manifest +components/xmlextras.xpt +components/xpcom.xpt +components/xpti.dat +components/xptitemp.dat +components/nsMicrosummaryService.js +components/nsProxyAutoConfig.manifest +components/nsProxyAutoConfig.js +D3DCompiler_42.dll +d3dx9_42.dll +d3dx9_43.dll +defaults/pref/all.js +defaults/pref/bug259708.js +defaults/pref/bug307259.js +defaults/pref/reporter.js +defaults/pref/security-prefs.js +defaults/pref/services-aitc.js +defaults/pref/winpref.js +defaults/pref/xpinstall.js +defaults/preferences/services-aitc.js +defaults/preferences/services-notifications.js +defaults/preferences/services-sync.js +defaults/preferences/healthreport-prefs.js +defaults/profile/US/ +defaults/profile/extensions/ +defaults/profile/extensions/Extensions.rdf +defaults/profile/extensions/installed-extensions.txt +defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/ +defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf +defaults/profile/search.rdf +#ifndef SHIP_FEEDBACK +# In the average case, this directory is only used by Test Pilot, and will get +# removed by the updater. In some cases (eg, partner builds), distribution/ +# will have other files and/or directories in it. In these cases, the updater +# will print a non-fatal error and continue on, because we're not appending +# '*' to force a recursive removal. +distribution/ +distribution/extensions/ distribution/extensions/testpilot@labs.mozilla.com.xpi - -# Directory removals -chrome/ +#endif +extensions/talkback@mozilla.org/ +extensions/talkback@mozilla.org/chrome.manifest +extensions/talkback@mozilla.org/components/@DLL_PREFIX@qfaservices@DLL_SUFFIX@ +extensions/talkback@mozilla.org/components/qfaservices.xpt +extensions/talkback@mozilla.org/install.rdf +extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/ +extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/install.rdf +extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png +extensions/testpilot@labs.mozilla.com/chrome.manifest +extensions/testpilot@labs.mozilla.com/components/TestPilot.js +extensions/testpilot@labs.mozilla.com/content/all-studies-window.js +extensions/testpilot@labs.mozilla.com/content/all-studies-window.xul +extensions/testpilot@labs.mozilla.com/content/browser.css +extensions/testpilot@labs.mozilla.com/content/browser.js +extensions/testpilot@labs.mozilla.com/content/debug.html +extensions/testpilot@labs.mozilla.com/content/experiment-page.js +extensions/testpilot@labs.mozilla.com/content/feedback-browser.xul +extensions/testpilot@labs.mozilla.com/content/flot/jquery.colorhelpers.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.colorhelpers.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.crosshair.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.crosshair.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.image.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.image.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.navigate.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.navigate.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.selection.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.selection.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.stack.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.stack.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.threshold.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.threshold.min.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.js +extensions/testpilot@labs.mozilla.com/content/flot/jquery.min.js +extensions/testpilot@labs.mozilla.com/content/raw-data-dialog.js +extensions/testpilot@labs.mozilla.com/content/raw-data-dialog.xul +extensions/testpilot@labs.mozilla.com/content/screen.css +extensions/testpilot@labs.mozilla.com/content/status-quit.html +extensions/testpilot@labs.mozilla.com/content/status.html +extensions/testpilot@labs.mozilla.com/content/survey-generator.js +extensions/testpilot@labs.mozilla.com/content/take-survey.html +extensions/testpilot@labs.mozilla.com/content/tp-browser.xul +extensions/testpilot@labs.mozilla.com/content/welcome-page.js +extensions/testpilot@labs.mozilla.com/content/welcome.html +extensions/testpilot@labs.mozilla.com/content/window-utils.js +extensions/testpilot@labs.mozilla.com/defaults/preferences/preferences.js +extensions/testpilot@labs.mozilla.com/install.rdf +extensions/testpilot@labs.mozilla.com/instrument/chrome.manifest +extensions/testpilot@labs.mozilla.com/instrument/install.rdf +extensions/testpilot@labs.mozilla.com/instrument/instrument.jsm +extensions/testpilot@labs.mozilla.com/instrument/instrument.xul +extensions/testpilot@labs.mozilla.com/modules/dbutils.js +extensions/testpilot@labs.mozilla.com/modules/experiment_data_store.js +extensions/testpilot@labs.mozilla.com/modules/extension-update.js +extensions/testpilot@labs.mozilla.com/modules/feedback.js +extensions/testpilot@labs.mozilla.com/modules/jar-code-store.js +extensions/testpilot@labs.mozilla.com/modules/lib/cuddlefish.js +extensions/testpilot@labs.mozilla.com/modules/lib/memory.js +extensions/testpilot@labs.mozilla.com/modules/lib/observer-service.js +extensions/testpilot@labs.mozilla.com/modules/lib/plain-text-console.js +extensions/testpilot@labs.mozilla.com/modules/lib/preferences-service.js +extensions/testpilot@labs.mozilla.com/modules/lib/securable-module.js +extensions/testpilot@labs.mozilla.com/modules/lib/timer.js +extensions/testpilot@labs.mozilla.com/modules/lib/traceback.js +extensions/testpilot@labs.mozilla.com/modules/lib/unit-test.js +extensions/testpilot@labs.mozilla.com/modules/lib/unload.js +extensions/testpilot@labs.mozilla.com/modules/lib/url.js +extensions/testpilot@labs.mozilla.com/modules/log4moz.js +extensions/testpilot@labs.mozilla.com/modules/metadata.js +extensions/testpilot@labs.mozilla.com/modules/Observers.js +extensions/testpilot@labs.mozilla.com/modules/remote-experiment-loader.js +extensions/testpilot@labs.mozilla.com/modules/setup.js +extensions/testpilot@labs.mozilla.com/modules/string_sanitizer.js +extensions/testpilot@labs.mozilla.com/modules/tasks.js +extensions/testpilot@labs.mozilla.com/skin/all/badge-default.png +extensions/testpilot@labs.mozilla.com/skin/all/bg.jpg +extensions/testpilot@labs.mozilla.com/skin/all/css/screen-standalone.css +extensions/testpilot@labs.mozilla.com/skin/all/dino_32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/images/bg-status.jpg +extensions/testpilot@labs.mozilla.com/skin/all/images/callout.png +extensions/testpilot@labs.mozilla.com/skin/all/images/callout_continue.png +extensions/testpilot@labs.mozilla.com/skin/all/images/data1.jpg +extensions/testpilot@labs.mozilla.com/skin/all/images/data2.jpg +extensions/testpilot@labs.mozilla.com/skin/all/images/home_comments.png +extensions/testpilot@labs.mozilla.com/skin/all/images/home_computer.png +extensions/testpilot@labs.mozilla.com/skin/all/images/home_continue.png +extensions/testpilot@labs.mozilla.com/skin/all/images/home_quit.png +extensions/testpilot@labs.mozilla.com/skin/all/images/home_results.png +extensions/testpilot@labs.mozilla.com/skin/all/images/home_twitter.png +extensions/testpilot@labs.mozilla.com/skin/all/images/home_upcoming.png +extensions/testpilot@labs.mozilla.com/skin/all/logo.png +extensions/testpilot@labs.mozilla.com/skin/all/mozilla-logo.png +extensions/testpilot@labs.mozilla.com/skin/all/status-completed.png +extensions/testpilot@labs.mozilla.com/skin/all/status-ejected.png +extensions/testpilot@labs.mozilla.com/skin/all/status-missed.png +extensions/testpilot@labs.mozilla.com/skin/all/testpilot_16x16.png +extensions/testpilot@labs.mozilla.com/skin/all/testPilot_200x200.png +extensions/testpilot@labs.mozilla.com/skin/all/testpilot_32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-completedstudies-32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-currentstudies-32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-generic-32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-learned-32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-results-48x48.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-settings-32x32.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-study-48x48.png +extensions/testpilot@labs.mozilla.com/skin/all/tp-submit-48x48.png +extensions/testpilot@labs.mozilla.com/skin/linux/close_button.png +extensions/testpilot@labs.mozilla.com/skin/linux/feedback-frown-16x16.png +extensions/testpilot@labs.mozilla.com/skin/linux/feedback-smile-16x16.png +extensions/testpilot@labs.mozilla.com/skin/linux/feedback.css +extensions/testpilot@labs.mozilla.com/skin/mac/close_button.png +extensions/testpilot@labs.mozilla.com/skin/mac/feedback-frown-16x16.png +extensions/testpilot@labs.mozilla.com/skin/mac/feedback-smile-16x16.png +extensions/testpilot@labs.mozilla.com/skin/mac/feedback.css +extensions/testpilot@labs.mozilla.com/skin/mac/notification-tail-down.png +extensions/testpilot@labs.mozilla.com/skin/mac/notification-tail-up.png +extensions/testpilot@labs.mozilla.com/skin/win/close_button.png +extensions/testpilot@labs.mozilla.com/skin/win/feedback-frown-16x16.png +extensions/testpilot@labs.mozilla.com/skin/win/feedback-smile-16x16.png +extensions/testpilot@labs.mozilla.com/skin/win/feedback.css +extensions/testpilot@labs.mozilla.com/skin/win/notification-tail-down.png +extensions/testpilot@labs.mozilla.com/skin/win/notification-tail-up.png +extensions/testpilot@labs.mozilla.com/tests/test_data_store.js +extensions/uriloader@pdf.js.xpi +greprefs/all.js +greprefs/security-prefs.js +greprefs/xpinstall.js +install.rdf +modules/JSON.jsm +modules/SpatialNavigation.js +modules/utils.js +mozilla-runtime@BIN_SUFFIX@ +old-homepage-default.properties +README.txt +res/arrow.gif +res/arrowd.gif +res/broken-image.gif +res/broken-image.png +res/charsetData.properties +res/charsetalias.properties +res/cmessage.txt +res/fonts/fontEncoding.properties +res/fonts/fontNameMap.properties +res/fonts/mathfontCMEX10.properties +res/fonts/mathfontCMSY10.properties +res/fonts/mathfontMTExtra.properties +res/fonts/mathfontMath1.properties +res/fonts/mathfontMath2.properties +res/fonts/mathfontMath4.properties +res/fonts/mathfontPUA.properties +res/fonts/pangoFontEncoding.properties +res/forms.css +res/full-screen-override.css +res/hiddenWindow.html +res/html.css +res/html/gopher-audio.gif +res/html/gopher-binary.gif +res/html/gopher-find.gif +res/html/gopher-image.gif +res/html/gopher-menu.gif +res/html/gopher-movie.gif +res/html/gopher-sound.gif +res/html/gopher-telnet.gif +res/html/gopher-text.gif +res/html/gopher-unknown.gif +res/loading-image.gif +res/loading-image.png +res/maccharset.properties +res/mathml.css +res/os2charset.properties +res/quirk.css +res/ua.css +res/unixcharset.properties +res/viewsource.css +res/wincharset.properties +#ifdef XP_MACOSX +run-mozilla.sh +#endif +searchplugins/DRAE.gif +searchplugins/DRAE.png +searchplugins/DRAE.src +searchplugins/MediaDICO-fr.gif +searchplugins/MediaDICO-fr.png +searchplugins/MediaDICO-fr.src +searchplugins/allegro-pl.gif +searchplugins/allegro-pl.png +searchplugins/allegro-pl.src +searchplugins/amazon-de.gif +searchplugins/amazon-de.png +searchplugins/amazon-de.src +searchplugins/amazon-en-GB.gif +searchplugins/amazon-en-GB.png +searchplugins/amazon-en-GB.src +searchplugins/amazon-france.gif +searchplugins/amazon-france.png +searchplugins/amazon-france.src +searchplugins/amazon-jp.gif +searchplugins/amazon-jp.png +searchplugins/amazon-jp.src +searchplugins/amazondotcom-zh-TW.gif +searchplugins/amazondotcom-zh-TW.png +searchplugins/amazondotcom-zh-TW.src +searchplugins/amazondotcom.gif +searchplugins/amazondotcom.png +searchplugins/amazondotcom.png +searchplugins/amazondotcom.src +searchplugins/amazondotcom.src +searchplugins/answers.gif +searchplugins/answers.png +searchplugins/answers.png +searchplugins/answers.src +searchplugins/answers.src +searchplugins/atlas-sk.gif +searchplugins/atlas-sk.png +searchplugins/atlas-sk.src +searchplugins/baidu.gif +searchplugins/baidu.png +searchplugins/baidu.src +searchplugins/bluu.xml +searchplugins/bok-NO.gif +searchplugins/bok-NO.png +searchplugins/bok-NO.src +searchplugins/bolcom-nl.gif +searchplugins/bolcom-nl.png +searchplugins/bolcom-nl.src +searchplugins/bookplus-fi.gif +searchplugins/bookplus-fi.png +searchplugins/bookplus-fi.src +searchplugins/caplex-NO.gif +searchplugins/caplex-NO.png +searchplugins/caplex-NO.src +searchplugins/centrum-cz.gif +searchplugins/centrum-cz.png +searchplugins/centrum-cz.src +searchplugins/centrum-cz.xml +searchplugins/creativecommons-fi.gif +searchplugins/creativecommons-fi.png +searchplugins/creativecommons-fi.src +searchplugins/creativecommons-it.gif +searchplugins/creativecommons-it.png +searchplugins/creativecommons-it.src +searchplugins/creativecommons-zh-TW.gif +searchplugins/creativecommons-zh-TW.png +searchplugins/creativecommons-zh-TW.src +searchplugins/creativecommons.gif +searchplugins/creativecommons.png +searchplugins/creativecommons.png +searchplugins/creativecommons.src +searchplugins/creativecommons.src +searchplugins/daum-ko.gif +searchplugins/daum-ko.png +searchplugins/daum-ko.src +searchplugins/demauro-it.gif +searchplugins/demauro-it.png +searchplugins/demauro-it.src +searchplugins/dictionary-en-GB.gif +searchplugins/dictionary-en-GB.png +searchplugins/dictionary-en-GB.src +searchplugins/dictionary.png +searchplugins/dictionary.src +searchplugins/dunaj-sk.gif +searchplugins/dunaj-sk.png +searchplugins/dunaj-sk.src +searchplugins/eBay-de.gif +searchplugins/eBay-de.png +searchplugins/eBay-de.src +searchplugins/eBay-en-GB.gif +searchplugins/eBay-en-GB.png +searchplugins/eBay-en-GB.src +searchplugins/eBay-france.gif +searchplugins/eBay-france.png +searchplugins/eBay-france.src +searchplugins/eBay-fy-NL.xml +searchplugins/eBay-gu.gif +searchplugins/eBay-gu.png +searchplugins/eBay-gu.src +searchplugins/eBay-nl.gif +searchplugins/eBay-nl.png +searchplugins/eBay-nl.src +searchplugins/eBay-nl.xml +searchplugins/eBay-zh-CN.gif +searchplugins/eBay-zh-CN.png +searchplugins/eBay-zh-CN.src +searchplugins/eBay-zh-CN.xml +searchplugins/eBay-zh-TW.gif +searchplugins/eBay-zh-TW.png +searchplugins/eBay-zh-TW.src +searchplugins/eBay-zh-TW.xml +searchplugins/eBay.gif +searchplugins/eBay.gif +searchplugins/eBay.png +searchplugins/eBay.src +searchplugins/eBay.src +searchplugins/ebay-it.gif +searchplugins/ebay-it.png +searchplugins/ebay-it.src +searchplugins/filesearchru.gif +searchplugins/filesearchru.png +searchplugins/filesearchru.src +searchplugins/filesearchru.xml +searchplugins/goo.gif +searchplugins/goo.png +searchplugins/goo.src +searchplugins/goo.xml +searchplugins/google-NO.gif +searchplugins/google-NO.png +searchplugins/google-NO.src +searchplugins/google-ar.gif +searchplugins/google-ar.png +searchplugins/google-ar.src +searchplugins/google-ar.xml +searchplugins/google-bg.gif +searchplugins/google-bg.png +searchplugins/google-bg.src +searchplugins/google-ca.gif +searchplugins/google-ca.png +searchplugins/google-ca.src +searchplugins/google-de.gif +searchplugins/google-de.png +searchplugins/google-de.src +searchplugins/google-dk.gif +searchplugins/google-dk.png +searchplugins/google-dk.src +searchplugins/google-en-GB.gif +searchplugins/google-en-GB.png +searchplugins/google-en-GB.src +searchplugins/google-es-ES.gif +searchplugins/google-es-ES.png +searchplugins/google-es-ES.src +searchplugins/google-eu.gif +searchplugins/google-eu.png +searchplugins/google-eu.src +searchplugins/google-fi.gif +searchplugins/google-fi.png +searchplugins/google-fi.src +searchplugins/google-ga-IE.gif +searchplugins/google-ga-IE.png +searchplugins/google-ga-IE.src +searchplugins/google-gu.gif +searchplugins/google-gu.png +searchplugins/google-gu.src +searchplugins/google-it.gif +searchplugins/google-it.png +searchplugins/google-it.src +searchplugins/google-jp.gif +searchplugins/google-jp.png +searchplugins/google-jp.src +searchplugins/google-ko.gif +searchplugins/google-ko.png +searchplugins/google-ko.src +searchplugins/google-lt.gif +searchplugins/google-lt.png +searchplugins/google-lt.src +searchplugins/google-nl.gif +searchplugins/google-nl.png +searchplugins/google-nl.src +searchplugins/google-pl.gif +searchplugins/google-pl.png +searchplugins/google-pl.src +searchplugins/google-pt-BR.gif +searchplugins/google-pt-BR.png +searchplugins/google-pt-BR.src +searchplugins/google-ro.gif +searchplugins/google-ro.png +searchplugins/google-ro.src +searchplugins/google-ru.gif +searchplugins/google-ru.png +searchplugins/google-ru.src +searchplugins/google-sl.gif +searchplugins/google-sl.png +searchplugins/google-sl.src +searchplugins/google-zh-TW.gif +searchplugins/google-zh-TW.png +searchplugins/google-zh-TW.src +searchplugins/google.gif +searchplugins/google.gif +searchplugins/google.png +searchplugins/google.src +searchplugins/google.src +searchplugins/grandiccionari.gif +searchplugins/grandiccionari.png +searchplugins/grandiccionari.src +searchplugins/grandiccionari.xml +searchplugins/huuto-fi.gif +searchplugins/huuto-fi.png +searchplugins/huuto-fi.src +searchplugins/jyxo-cz.gif +searchplugins/jyxo-cz.png +searchplugins/jyxo-cz.src +searchplugins/lingvo.yandex.ru.gif +searchplugins/lingvo.yandex.ru.png +searchplugins/lingvo.yandex.ru.src +searchplugins/lingvo.yandex.ru.xml +searchplugins/llibres.gif +searchplugins/llibres.png +searchplugins/llibres.src +searchplugins/mall-cz.gif +searchplugins/mall-cz.png +searchplugins/mall-cz.src +searchplugins/mercadolivre-com-br.gif +searchplugins/mercadolivre-com-br.png +searchplugins/mercadolivre-com-br.src +searchplugins/merlin-pl.gif +searchplugins/merlin-pl.png +searchplugins/merlin-pl.src +searchplugins/najdi-si.gif +searchplugins/najdi-si.png +searchplugins/najdi-si.src +searchplugins/nana.xml +searchplugins/naver-ko.gif +searchplugins/naver-ko.png +searchplugins/naver-ko.src +searchplugins/netex.xml +searchplugins/nosaltres.gif +searchplugins/nosaltres.png +searchplugins/nosaltres.src +searchplugins/nosaltres.xml +searchplugins/pbi-pl.gif +searchplugins/pbi-pl.png +searchplugins/pbi-pl.src +searchplugins/pbi-pl.xml +searchplugins/priceru.gif +searchplugins/priceru.png +searchplugins/priceru.src +searchplugins/pwn-pl.gif +searchplugins/pwn-pl.png +searchplugins/pwn-pl.src +searchplugins/qxl-NO.gif +searchplugins/qxl-NO.png +searchplugins/qxl-NO.src +searchplugins/rakuten.gif +searchplugins/rakuten.png +searchplugins/rakuten.src +searchplugins/rambler.xml +searchplugins/seznam-cz.gif +searchplugins/seznam-cz.png +searchplugins/seznam-cz.src +searchplugins/sigov-gov-si.gif +searchplugins/sigov-gov-si.png +searchplugins/sigov-gov-si.src +searchplugins/slunecnice-cz.gif +searchplugins/slunecnice-cz.png +searchplugins/slunecnice-cz.src +searchplugins/submarino-com-br.gif +searchplugins/submarino-com-br.png +searchplugins/submarino-com-br.src +searchplugins/taobao.gif +searchplugins/taobao.png +searchplugins/taobao.src +searchplugins/taobao.xml +searchplugins/telefonkatalogen-NO.gif +searchplugins/telefonkatalogen-NO.png +searchplugins/telefonkatalogen-NO.src +searchplugins/termiadur.xml +searchplugins/universal-pt.gif +searchplugins/universal-pt.png +searchplugins/universal-pt.src +searchplugins/vandale-nl.gif +searchplugins/vandale-nl.png +searchplugins/vandale-nl.src +searchplugins/walla_sites.gif +searchplugins/walla_sites.png +searchplugins/walla_sites.src +searchplugins/wikipedia-bg.gif +searchplugins/wikipedia-bg.png +searchplugins/wikipedia-bg.src +searchplugins/wikipedia-ca.gif +searchplugins/wikipedia-ca.png +searchplugins/wikipedia-ca.src +searchplugins/wikipedia-de.gif +searchplugins/wikipedia-de.png +searchplugins/wikipedia-de.src +searchplugins/wikipedia-en-CN.xml +searchplugins/wikipedia-es-ES.gif +searchplugins/wikipedia-es-ES.png +searchplugins/wikipedia-es-ES.src +searchplugins/wikipedia-eu.gif +searchplugins/wikipedia-eu.png +searchplugins/wikipedia-eu.src +searchplugins/wikipedia-fi.gif +searchplugins/wikipedia-fi.png +searchplugins/wikipedia-fi.src +searchplugins/wikipedia-fr.gif +searchplugins/wikipedia-fr.png +searchplugins/wikipedia-fr.src +searchplugins/wikipedia-fy.gif +searchplugins/wikipedia-fy.png +searchplugins/wikipedia-fy.src +searchplugins/wikipedia-he.gif +searchplugins/wikipedia-he.png +searchplugins/wikipedia-he.src +searchplugins/wikipedia-it.gif +searchplugins/wikipedia-it.png +searchplugins/wikipedia-it.src +searchplugins/wikipedia-lt.gif +searchplugins/wikipedia-lt.png +searchplugins/wikipedia-lt.src +searchplugins/wikipedia-nl.gif +searchplugins/wikipedia-nl.png +searchplugins/wikipedia-nl.src +searchplugins/wikipedia-pl.gif +searchplugins/wikipedia-pl.png +searchplugins/wikipedia-pl.src +searchplugins/wikipedia-ru.gif +searchplugins/wikipedia-ru.png +searchplugins/wikipedia-ru.src +searchplugins/wikipedia-sk.gif +searchplugins/wikipedia-sk.png +searchplugins/wikipedia-sk.src +searchplugins/wikipedia-zh.xml +searchplugins/wp-pl.gif +searchplugins/wp-pl.png +searchplugins/wp-pl.src +searchplugins/yahoo-NO.gif +searchplugins/yahoo-NO.png +searchplugins/yahoo-NO.src +searchplugins/yahoo-ar.gif +searchplugins/yahoo-ar.png +searchplugins/yahoo-ar.src +searchplugins/yahoo-ca.gif +searchplugins/yahoo-ca.png +searchplugins/yahoo-ca.src +searchplugins/yahoo-cn.gif +searchplugins/yahoo-cn.png +searchplugins/yahoo-cn.src +searchplugins/yahoo-de.gif +searchplugins/yahoo-de.png +searchplugins/yahoo-de.src +searchplugins/yahoo-dk.gif +searchplugins/yahoo-dk.png +searchplugins/yahoo-dk.src +searchplugins/yahoo-en-GB.gif +searchplugins/yahoo-en-GB.png +searchplugins/yahoo-en-GB.src +searchplugins/yahoo-es-ES.gif +searchplugins/yahoo-es-ES.png +searchplugins/yahoo-es-ES.src +searchplugins/yahoo-fi.gif +searchplugins/yahoo-fi.png +searchplugins/yahoo-fi.src +searchplugins/yahoo-france.gif +searchplugins/yahoo-france.png +searchplugins/yahoo-france.src +searchplugins/yahoo-gu.gif +searchplugins/yahoo-gu.png +searchplugins/yahoo-gu.src +searchplugins/yahoo-it.gif +searchplugins/yahoo-it.png +searchplugins/yahoo-it.src +searchplugins/yahoo-jp-auctions.gif +searchplugins/yahoo-jp-auctions.png +searchplugins/yahoo-jp-auctions.src +searchplugins/yahoo-jp-shopping.gif +searchplugins/yahoo-jp-shopping.png +searchplugins/yahoo-jp-shopping.src +searchplugins/yahoo-jp-shopping.xml +searchplugins/yahoo-jp.gif +searchplugins/yahoo-jp.png +searchplugins/yahoo-jp.src +searchplugins/yahoo-kr.gif +searchplugins/yahoo-kr.png +searchplugins/yahoo-kr.src +searchplugins/yahoo-nl.gif +searchplugins/yahoo-nl.png +searchplugins/yahoo-nl.src +searchplugins/yahoo-pt-BR.gif +searchplugins/yahoo-pt-BR.png +searchplugins/yahoo-pt-BR.src +searchplugins/yahoo-ru.xml +searchplugins/yahoo-tw.gif +searchplugins/yahoo-tw.png +searchplugins/yahoo-tw.src +searchplugins/yahoo-zh-CN.xml +searchplugins/yahoo.gif +searchplugins/yahoo.gif +searchplugins/yahoo.png +searchplugins/yahoo.src +searchplugins/yahoo.src +searchplugins/yandex.gif +searchplugins/yandex.png +searchplugins/yandex.src +searchplugins/zoznam-sk.gif +searchplugins/zoznam-sk.png +searchplugins/zoznam-sk.src +uninstall/UninstallDeerPark.exe +uninstall/UninstallFirefox.exe +uninstall/uninst.exe +uninstall/uninstall.exe +#ifndef MOZ_UPDATER + #ifdef XP_MACOSX + updater.app/ + #else + updater@BIN_SUFFIX@ + #endif + updater.ini +#endif +xpicleanup@BIN_SUFFIX@ +#ifdef MOZ_OMNIJAR + update.locale + omni.jar + chrome/af.jar + chrome/af.manifest + chrome/ar.jar + chrome/ar.manifest + chrome/as.jar + chrome/as.manifest + chrome/ast.jar + chrome/ast.manifest + chrome/be.jar + chrome/be.manifest + chrome/bg.jar + chrome/bg.manifest + chrome/bn-BD.jar + chrome/bn-BD.manifest + chrome/bn-IN.jar + chrome/bn-IN.manifest + chrome/ca.jar + chrome/ca.manifest + chrome/cs.jar + chrome/cs.manifest + chrome/cy.jar + chrome/cy.manifest + chrome/da.jar + chrome/da.manifest + chrome/de.jar + chrome/de.manifest + chrome/el.jar + chrome/el.manifest + chrome/en-GB.jar + chrome/en-GB.manifest + chrome/en-US.jar + chrome/en-US.manifest + chrome/eo.jar + chrome/eo.manifest + chrome/es-AR.jar + chrome/es-AR.manifest + chrome/es-CL.jar + chrome/es-CL.manifest + chrome/es-ES.jar + chrome/es-ES.manifest + chrome/es-MX.jar + chrome/es-MX.manifest + chrome/et.jar + chrome/et.manifest + chrome/eu.jar + chrome/eu.manifest + chrome/fa.jar + chrome/fa.manifest + chrome/fi.jar + chrome/fi.manifest + chrome/fr.jar + chrome/fr.manifest + chrome/fy-NL.jar + chrome/fy-NL.manifest + chrome/ga-IE.jar + chrome/ga-IE.manifest + chrome/gd.jar + chrome/gd.manifest + chrome/gl.jar + chrome/gl.manifest + chrome/gu-IN.jar + chrome/gu-IN.manifest + chrome/he.jar + chrome/he.manifest + chrome/hi-IN.jar + chrome/hi-IN.manifest + chrome/hr.jar + chrome/hr.manifest + chrome/hu.jar + chrome/hu.manifest + chrome/id.jar + chrome/id.manifest + chrome/is.jar + chrome/is.manifest + chrome/it.jar + chrome/it.manifest + chrome/ja-JP-mac.jar + chrome/ja-JP-mac.manifest + chrome/ja.jar + chrome/ja.manifest + chrome/ka.jar + chrome/ka.manifest + chrome/kk.jar + chrome/kk.manifest + chrome/kn.jar + chrome/kn.manifest + chrome/ko.jar + chrome/ko.manifest + chrome/ku.jar + chrome/ku.manifest + chrome/lt.jar + chrome/lt.manifest + chrome/lv.jar + chrome/lv.manifest + chrome/mk.jar + chrome/mk.manifest + chrome/ml.jar + chrome/ml.manifest + chrome/mn.jar + chrome/mn.manifest + chrome/mr.jar + chrome/mr.manifest + chrome/nb-NO.jar + chrome/nb-NO.manifest + chrome/nl.jar + chrome/nl.manifest + chrome/nn-NO.jar + chrome/nn-NO.manifest + chrome/oc.jar + chrome/oc.manifest + chrome/or.jar + chrome/or.manifest + chrome/pa-IN.jar + chrome/pa-IN.manifest + chrome/pl.jar + chrome/pl.manifest + chrome/pt-BR.jar + chrome/pt-BR.manifest + chrome/pt-PT.jar + chrome/pt-PT.manifest + chrome/rm.jar + chrome/rm.manifest + chrome/ro.jar + chrome/ro.manifest + chrome/ru.jar + chrome/ru.manifest + chrome/si.jar + chrome/si.manifest + chrome/sk.jar + chrome/sk.manifest + chrome/sl.jar + chrome/sl.manifest + chrome/sq.jar + chrome/sq.manifest + chrome/sr.jar + chrome/sr.manifest + chrome/sv-SE.jar + chrome/sv-SE.manifest + chrome/ta-LK.jar + chrome/ta-LK.manifest + chrome/ta.jar + chrome/ta.manifest + chrome/te.jar + chrome/te.manifest + chrome/th.jar + chrome/th.manifest + chrome/tr.jar + chrome/tr.manifest + chrome/uk.jar + chrome/uk.manifest + chrome/vi.jar + chrome/vi.manifest + chrome/zh-CN.jar + chrome/zh-CN.manifest + chrome/zh-TW.jar + chrome/zh-TW.manifest + chrome/browser.jar + chrome/localized.manifest + chrome/nonlocalized.manifest + chrome/pippki.jar + chrome/toolkit.jar + components/addonManager.js + components/Aitc.js + components/AitcComponents.manifest + components/amContentHandler.js + components/amWebInstallListener.js + components/binary.manifest + components/browser.xpt + components/BrowserElementParent.js + components/BrowserElementParent.manifest + components/BrowserElementPromptService.jsm + components/BrowserElementParent.jsm + components/contentAreaDropListener.js + components/contentSecurityPolicy.js + components/crypto-SDR.js + components/FeedConverter.js + components/FeedProcessor.js + components/FeedWriter.js + components/fuelApplication.js + components/GPSDGeolocationProvider.js + components/interfaces.manifest + components/jsconsole-clhandler.js + components/MetricsCollectionService.js + components/NetworkGeolocationProvider.js + components/NotificationsComponents.manifest + components/nsBadCertHandler.js + components/nsBlocklistService.js + components/nsBrowserContentHandler.js + components/nsBrowserGlue.js + components/nsContentDispatchChooser.js + components/nsContentPrefService.js + components/nsDefaultCLH.js + components/nsDownloadManagerUI.js + #ifdef XP_UNIX + #ifndef XP_MACOSX + components/nsFilePicker.js + #endif + #endif + components/nsFormAutoComplete.js + components/nsFormHistory.js + components/nsHandlerService.js + components/nsHelperAppDlg.js + components/nsINIProcessor.js + components/nsLivemarkService.js + components/nsLoginInfo.js + components/nsLoginManager.js + components/nsLoginManagerPrompter.js + components/nsPlacesAutoComplete.js + components/nsPlacesDBFlush.js + components/nsPlacesExpiration.js + components/nsPrivateBrowsingService.js + components/nsPrompter.js + components/nsProxyAutoConfig.manifest + components/nsProxyAutoConfig.js + components/nsSafebrowsingApplication.js + components/nsSearchService.js + components/nsSearchSuggestions.js + components/nsSessionStartup.js + components/nsSessionStore.js + components/nsSetDefaultBrowser.js + components/nsSidebar.js + components/nsTaggingService.js + components/nsTryToClose.js + components/nsUpdateService.js + components/nsUpdateServiceStub.js + components/nsUpdateTimerManager.js + components/nsUrlClassifierLib.js + components/nsUrlClassifierListManager.js + components/nsURLFormatter.js + components/nsWebHandlerApp.js + components/PlacesProtocolHandler.js + components/storage-Legacy.js + components/storage-mozStorage.js +#ifdef MOZ_B2G_RIL + components/nsTelephonyWorker.manifest + components/nsTelephonyWorker.js + components/Telephony.manifest + components/Telephony.js + components/WifiWorker.js + components/WifiWorker.manifest + components/DOMWifiManager.js + components/DOMWifiManager.manifest +#endif + components/txEXSLTRegExFunctions.js + components/Weave.js + components/Webapps.js + components/Webapps.manifest + components/WebContentConverter.js + defaults/autoconfig/platform.js + defaults/autoconfig/prefcalls.js + defaults/pref/firefox-branding.js + defaults/pref/firefox.js + defaults/pref/firefox-l10n.js + defaults/pref/services-sync.js + defaults/profile/bookmarks.html + defaults/profile/chrome/userChrome-example.css + defaults/profile/chrome/userContent-example.css + defaults/profile/localstore.rdf + defaults/profile/mimeTypes.rdf + defaults/profile/prefs.js + greprefs.js + hyphenation/ + hyphenation/hyph_af.dic + hyphenation/hyph_bg.dic + hyphenation/hyph_ca.dic + hyphenation/hyph_cy.dic + hyphenation/hyph_da.dic + hyphenation/hyph_de-1901.dic + hyphenation/hyph_de-1996.dic + hyphenation/hyph_de-CH.dic + hyphenation/hyph_en_US.dic + hyphenation/hyph_eo.dic + hyphenation/hyph_es.dic + hyphenation/hyph_et.dic + hyphenation/hyph_fi.dic + hyphenation/hyph_fr.dic + hyphenation/hyph_gl.dic + hyphenation/hyph_hr.dic + hyphenation/hyph_hsb.dic + hyphenation/hyph_hu.dic + hyphenation/hyph_ia.dic + hyphenation/hyph_is.dic + hyphenation/hyph_it.dic + hyphenation/hyph_kmr.dic + hyphenation/hyph_la.dic + hyphenation/hyph_lt.dic + hyphenation/hyph_mn.dic + hyphenation/hyph_nb.dic + hyphenation/hyph_nl.dic + hyphenation/hyph_nn.dic + hyphenation/hyph_pt.dic + hyphenation/hyph_ru.dic + hyphenation/hyph_sh.dic + hyphenation/hyph_sl.dic + hyphenation/hyph_sv.dic + hyphenation/hyph_tr.dic + hyphenation/hyph_uk.dic + modules/AddonLogging.jsm + modules/AddonManager.jsm + modules/AddonRepository.jsm + modules/AddonUpdateChecker.jsm + modules/CertUtils.jsm + modules/CrashSubmit.jsm + modules/CSPUtils.jsm + modules/ctypes.jsm + modules/debug.js + modules/distribution.js + modules/DownloadLastDir.jsm + modules/DownloadPaths.jsm + #ifdef XP_WIN + modules/DownloadTaskbarProgress.jsm + #endif + modules/DownloadUtils.jsm + modules/FileUtils.jsm + modules/Geometry.jsm + modules/HUDService.jsm + modules/InlineSpellChecker.jsm + modules/ISO8601DateUtils.jsm + modules/LightweightThemeConsumer.jsm + modules/LightweightThemeManager.jsm + modules/Microformats.js + modules/NetUtil.jsm + modules/NetworkPrioritizer.jsm + modules/openLocationLastURL.jsm + modules/PerfMeasurement.jsm + modules/PlacesDBUtils.jsm + modules/PlacesUIUtils.jsm + modules/PlacesUtils.jsm + modules/PluginProvider.jsm + modules/PluralForm.jsm + modules/PopupNotifications.jsm + modules/reflect.jsm + modules/Services.jsm + modules/services-common/async.js + modules/services-common/log4moz.js + modules/services-common/observers.js + modules/services-common/preferences.js + modules/services-common/rest.js + modules/services-common/stringbundle.js + modules/services-common/utils.js + modules/services-notifications/service.js + modules/services-sync/auth.js + modules/services-sync/base_records/collection.js + modules/services-sync/base_records/crypto.js + modules/services-sync/base_records/keys.js + modules/services-sync/base_records/wbo.js + modules/services-sync/constants.js + modules/services-sync/engines/bookmarks.js + modules/services-sync/engines/clients.js + modules/services-sync/engines/forms.js + modules/services-sync/engines/history.js + modules/services-sync/engines.js + modules/services-sync/engines/passwords.js + modules/services-sync/engines/prefs.js + modules/services-sync/engines/tabs.js + modules/services-sync/ext/Observers.js + modules/services-sync/ext/Preferences.js + modules/services-sync/ext/StringBundle.js + modules/services-sync/ext/Sync.js + modules/services-sync/identity.js + modules/services-sync/log4moz.js + modules/services-sync/notifications.js + modules/services-sync/resource.js + modules/services-sync/service.js + modules/services-sync/status.js + modules/services-sync/stores.js + modules/services-sync/trackers.js + modules/services-sync/type_records/bookmark.js + modules/services-sync/type_records/clients.js + modules/services-sync/type_records/forms.js + modules/services-sync/type_records/history.js + modules/services-sync/type_records/passwords.js + modules/services-sync/type_records/prefs.js + modules/services-sync/type_records/tabs.js + modules/services-sync/util.js + modules/stylePanel.jsm + modules/tabview/AllTabs.jsm + modules/tabview/groups.jsm + modules/tabview/utils.jsm + modules/Webapps.jsm + modules/WindowDraggingUtils.jsm + #ifdef XP_WIN + modules/WindowsJumpLists.jsm + modules/WindowsPreviewPerTab.jsm + #endif + modules/XPCOMUtils.jsm + modules/XPIProvider.jsm + res/contenteditable.css + res/designmode.css + res/dtd/mathml.dtd + res/dtd/xhtml11.dtd + res/EditorOverride.css + res/entityTables/html40Latin1.properties + res/entityTables/html40Special.properties + res/entityTables/html40Symbols.properties + res/entityTables/htmlEntityVersions.properties + res/entityTables/mathml20.properties + res/entityTables/transliterate.properties + res/fonts/mathfont.properties + res/fonts/mathfontStandardSymbolsL.properties + res/fonts/mathfontSTIXNonUnicode.properties + res/fonts/mathfontSTIXSize1.properties + res/fonts/mathfontSTIXSizeOneSym.properties + #ifdef XP_WIN + res/fonts/mathfontSymbol.properties + #endif + res/fonts/mathfontUnicode.properties + res/grabber.gif + res/html/folder.png + res/langGroups.properties + res/language.properties + res/svg.css + res/table-add-column-after-active.gif + res/table-add-column-after.gif + res/table-add-column-after-hover.gif + res/table-add-column-before-active.gif + res/table-add-column-before.gif + res/table-add-column-before-hover.gif + res/table-add-row-after-active.gif + res/table-add-row-after.gif + res/table-add-row-after-hover.gif + res/table-add-row-before-active.gif + res/table-add-row-before.gif + res/table-add-row-before-hover.gif + res/table-remove-column-active.gif + res/table-remove-column.gif + res/table-remove-column-hover.gif + res/table-remove-row-active.gif + res/table-remove-row.gif + res/table-remove-row-hover.gif +#else + components/binary.manifest + omni.jar + omni.ja +#endif +#ifdef XP_MACOSX + ../Plug-Ins/PrintPDE.plugin/Contents/Info.plist + ../Plug-Ins/PrintPDE.plugin/Contents/MacOS/PrintPDE + ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/Localizable.strings + ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/classes.nib + ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/info.nib + ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/objects.xib + ../Resources/firefox-bin.rsrc + components/accessibility.xpt + components/alerts.xpt + components/appshell.xpt + components/appstartup.xpt + components/autoconfig.xpt + components/browser-feeds.xpt + components/browsercompsbase.xpt + components/browsersearch.xpt + components/caps.xpt + components/chardet.xpt + components/chrome.xpt + components/commandhandler.xpt + components/commandlines.xpt + components/composer.xpt + components/content.xpt + components/content_base.xpt + components/content_html.xpt + components/content_htmldoc.xpt + components/content_xmldoc.xpt + components/content_xslt.xpt + components/content_xtf.xpt + components/contentprefs.xpt + components/cookie.xpt + components/crashreporter.xpt + components/directory.xpt + components/docshell.xpt + components/dom.xpt + components/dom_apps.xpt + components/dom_base.xpt +#ifdef MOZ_B2G_RIL + components/dom_telephony.xpt + components/dom_wifi.xpt + components/dom_system_b2g.xpt +#endif + components/dom_canvas.xpt + components/dom_core.xpt + components/dom_css.xpt + components/dom_events.xpt + components/dom_geolocation.xpt + components/dom_devicestorage.xpt + components/dom_html.xpt + components/dom_json.xpt + components/dom_loadsave.xpt + components/dom_offline.xpt + components/dom_push.xpt + components/dom_range.xpt + components/dom_sidebar.xpt + components/dom_smil.xpt + components/dom_storage.xpt + components/dom_stylesheets.xpt + components/dom_svg.xpt + components/dom_threads.xpt + components/dom_traversal.xpt + components/dom_views.xpt + components/dom_xbl.xpt + components/dom_xpath.xpt + components/dom_xul.xpt + components/downloads.xpt + components/editor.xpt + components/embed_base.xpt + components/extensions.xpt + components/exthandler.xpt + components/exthelper.xpt + components/fastfind.xpt + components/feeds.xpt + components/find.xpt + components/firefox.xpt + components/fuel.xpt + components/gfx.xpt + components/gksvgrenderer.xpt + components/html5.xpt + components/htmlparser.xpt + components/imgicon.xpt + components/imglib2.xpt + components/inspector.xpt + components/intl.xpt + components/jar.xpt + components/jsconsole.xpt + components/jsdservice.xpt + components/layout_base.xpt + components/layout_printing.xpt + components/layout_xul.xpt + components/layout_xul_tree.xpt + components/locale.xpt + components/loginmgr.xpt + components/lwbrk.xpt + components/migration.xpt + components/mimetype.xpt + components/mozbrwsr.xpt + components/mozfind.xpt + components/necko.xpt + components/necko_about.xpt + components/necko_cache.xpt + components/necko_cookie.xpt + components/necko_data.xpt + components/necko_dns.xpt + components/necko_file.xpt + components/necko_ftp.xpt + components/necko_http.xpt + components/necko_res.xpt + components/necko_socket.xpt + components/necko_strconv.xpt + components/necko_viewsource.xpt + components/necko_wifi.xpt + components/nsKillAll.js + components/nsProgressDialog.js + components/nsResetPref.js + components/oji.xpt + components/parentalcontrols.xpt + components/passwordmgr.xpt + components/pipboot.xpt + components/pipnss.xpt + components/pippki.xpt + components/places.xpt + components/plugin.xpt + components/pref.xpt + components/prefetch.xpt + components/profile.xpt + components/progressDlg.xpt + components/proxyObjInst.xpt + components/rdf.xpt + components/safebrowsing.xpt + components/satchel.xpt + components/saxparser.xpt + components/search.xpt + components/sessionstore.xpt + components/shellservice.xpt + components/shistory.xpt + components/spellchecker.xpt + components/storage.xpt + components/toolkitprofile.xpt + components/toolkitsearch.xpt + components/txmgr.xpt + components/txtsvc.xpt + components/uconv.xpt + components/unicharutil.xpt + components/update.xpt + components/uriloader.xpt + components/url-classifier.xpt + components/urlformatter.xpt + components/webBrowser_core.xpt + components/webbrowserpersist.xpt + components/webshell_idls.xpt + components/websrvcs.xpt + components/widget.xpt + components/widget_cocoa.xpt + components/widget_mac.xpt + components/windowds.xpt + components/windowwatcher.xpt + components/xml-rpc.xpt + components/xpcom_base.xpt + components/xpcom_components.xpt + components/xpcom_ds.xpt + components/xpcom_io.xpt + components/xpcom_obsolete.xpt + components/xpcom_system.xpt + components/xpcom_threads.xpt + components/xpcom_xpti.xpt + components/xpconnect.xpt + components/xpinstall.xpt + components/xulapp.xpt + components/xuldoc.xpt + components/xultmpl.xpt + components/zipwriter.xpt + extensions/inspector@mozilla.org/chrome/chromelist.txt + init.d/README + libwidget.rsrc + plugin-container + plugins/Default Plugin.plugin/Contents/Info.plist + plugins/Default Plugin.plugin/Contents/MacOS/Default Plugin + plugins/Default Plugin.plugin/Contents/PkgInfo + plugins/Default Plugin.plugin/Contents/Resources/Default Plugin.rsrc + plugins/Default Plugin.plugin/Contents/Resources/English.lproj/InfoPlist.strings + plugins/DefaultPlugin.plugin/Contents/Info.plist + plugins/DefaultPlugin.plugin/Contents/MacOS/DefaultPlugin + plugins/DefaultPlugin.plugin/Contents/Resources/English.lproj/InfoPlist.strings + plugins/DefaultPlugin.plugin/Contents/Resources/plugin.png + plugins/JavaEmbeddingPlugin.bundle/Contents/Info.plist + plugins/JavaEmbeddingPlugin.bundle/Contents/MacOS/JavaEmbeddingPlugin + plugins/JavaEmbeddingPlugin.bundle/Contents/MacOS/JavaEmbeddingPlugin.policy + plugins/JavaEmbeddingPlugin.bundle/Contents/PkgInfo + plugins/JavaEmbeddingPlugin.bundle/Contents/Resources/English.lproj/InfoPlist.strings + plugins/JavaEmbeddingPlugin.bundle/Contents/Resources/Java/JavaEmbeddingPlugin.jar + plugins/MRJPlugin.plugin/Contents/Info.plist + plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin + plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.jar + plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.policy + plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.properties + plugins/MRJPlugin.plugin/Contents/PkgInfo + plugins/MRJPlugin.plugin/Contents/Resources/English.lproj/InfoPlist.strings + plugins/MRJPlugin.plugin/Contents/Resources/MRJPlugin.rsrc + redo-prebinding.sh + res/bloatcycle.html + res/cursors/arrowN.tiff + res/cursors/arrowS.tiff + res/cursors/colResize.tiff + res/cursors/help.tiff + res/cursors/rowResize.tiff + res/cursors/sizeNE.tiff + res/cursors/sizeNESW.tiff + res/cursors/sizeNS.tiff + res/cursors/sizeNW.tiff + res/cursors/sizeNWSE.tiff + res/cursors/sizeSE.tiff + res/cursors/sizeSW.tiff + res/cursors/spin1.tiff + res/cursors/spin2.tiff + res/cursors/spin3.tiff + res/cursors/spin4.tiff + res/cursors/vtIBeam.tiff + res/cursors/zoomIn.tiff + res/cursors/zoomOut.tiff + res/cursors/CVS/Entries + res/cursors/CVS/Repository + res/cursors/CVS/Root + res/cursors/CVS/Tag + res/viewer.properties + updater.app/Contents/MacOS/updater.ini +#endif #ifdef XP_UNIX #ifndef XP_MACOSX - chrome/icons/ - chrome/icons/default/ + chrome/icons/default/default.xpm + components/libimgicon.so + dictionaries/PL.aff + dictionaries/PL.dic + icons/document.png + icons/mozicon16.xpm + icons/mozicon50.xpm + plugins/libnullplugin.so + readme.txt #endif #endif -chrome/overlayinfo/ -components/ -defaults/autoconfig/ -defaults/profile/ -defaults/profile/chrome/ -defaults/profile/US/* -defaults/profile/extensions/ -defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/* -distribution/ -distribution/extensions/ -extensions/ -extensions/inspector@mozilla.org/* -extensions/reporter@mozilla.org/* -extensions/talkback@mozilla.org/* -extensions/testpilot@labs.mozilla.com/* -extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/* -extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/* -greprefs/ +#ifndef XP_WIN + res/fonts/mathfontSymbol.properties +#endif +#ifdef XP_WIN + components/brwsrcmp.dll + components/jsd3250.dll + components/nsPostUpdateWin.js + js3250.dll + mozcpp19.dll + mozcrt19.dll + #if MOZ_MSVC_REDIST != 1400 + Microsoft.VC80.CRT.manifest + msvcm80.dll + msvcp80.dll + msvcr80.dll + #endif + #if MOZ_MSVC_REDIST != 1500 + Microsoft.VC90.CRT.manifest + msvcm90.dll + msvcp90.dll + msvcr90.dll + #endif + #if MOZ_MSVC_REDIST != 1600 + msvcp100.dll + msvcr100.dll + #endif + #if MOZ_MSVC_REDIST != 1700 + msvcp110.dll + msvcr110.dll + #ifdef MOZ_METRO + vccorlib110.dll + #endif + #endif + #if MOZ_MSVC_REDIST != 1800 + msvcp120.dll + msvcr120.dll + #ifdef MOZ_METRO + vccorlib120.dll + #endif + #endif + plugins/npnul32.dll +#endif +@DLL_PREFIX@xpcom_core@DLL_SUFFIX@ +components/@DLL_PREFIX@jar50@DLL_SUFFIX@ +#ifdef XP_WIN + components/xpinstal.dll +#else + components/@DLL_PREFIX@jsd@DLL_SUFFIX@ + components/@DLL_PREFIX@xpinstall@DLL_SUFFIX@ +#endif +#ifndef MOZ_UPDATER + components/nsUpdateService.js + components/nsUpdateServiceStub.js +#endif +#Talkback +#ifdef XP_WIN + extensions/talkback@mozilla.org/components/BrandRes.dll + extensions/talkback@mozilla.org/components/fullsoft.dll + extensions/talkback@mozilla.org/components/master.ini + extensions/talkback@mozilla.org/components/talkback-l10n.ini + extensions/talkback@mozilla.org/components/talkback.cnt + extensions/talkback@mozilla.org/components/talkback.exe + extensions/talkback@mozilla.org/components/talkback.hlp + extensions/talkback@mozilla.org/InstallDisabled +#else + #ifdef XP_MACOSX + extensions/talkback@mozilla.org/components/talkback/master.ini + extensions/talkback@mozilla.org/components/talkback/talkback@DLL_SUFFIX@ + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Info.plist + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/MacOS/Talkback + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/pbdevelopment.plist + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/PkgInfo + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/delete.tiff + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/disable.tiff + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/enable.tiff + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib/classes.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib/info.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib/objects.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/InfoPlist.strings + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib/classes.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib/info.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib/objects.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/Localizable.strings + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib/info.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib/objects.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib/classes.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib/info.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib/objects.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib/classes.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib/info.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib/objects.nib + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/KeyInfoKeys.plist + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/KeyInfoSections.plist + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/send.tiff + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/sort_ascending.tiff + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/sort_descending.tiff + extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/Talkback.icns + #else + extensions/talkback@mozilla.org/components/talkback/talkback + extensions/talkback@mozilla.org/components/talkback/XTalkback.ad + extensions/talkback@mozilla.org/components/talkback/master.ini + extensions/talkback@mozilla.org/components/talkback/talkback.so + #endif +#endif +#Remove Talkback files from old location (in case user updates from 1.0.x) +components/BrandRes.dll +components/fullsoft.dll +components/master.ini +components/qfaservices.dll +components/qfaservices.xpt +components/talkback-l10n.ini +components/talkback.cnt +components/talkback.exe +components/talkback.hlp +components/libqfaservices.so +components/talkback/master.ini +components/talkback/talkback +components/talkback/talkback.so +components/talkback/XTalkback.ad +extensions/reporter@mozilla.org/install.rdf +extensions/reporter@mozilla.org/chrome.manifest +extensions/reporter@mozilla.org/chrome/reporter.jar +extensions/reporter@mozilla.org/defaults/preferences/reporter.js +#Remove Inspector (present from upgrades from Fx2/Fx3b3) +extensions/inspector@mozilla.org/install.rdf +extensions/inspector@mozilla.org/components/inspector-cmdline.js +extensions/inspector@mozilla.org/chrome.manifest +extensions/inspector@mozilla.org/chrome/inspector.jar +extensions/inspector@mozilla.org/defaults/preferences/inspector.js +extensions/inspector@mozilla.org/platform/WINNT/chrome/icons/default/winInspectorMain.ico +extensions/inspector@mozilla.org/components/inspector.xpt +extensions/inspector@mozilla.org/components/@DLL_PREFIX@inspector@DLL_SUFFIX@ +extensions/inspector@mozilla.org/chrome/icons/default/winInspectorMain.ico +components/nsPlacesTransactionsService.js +components/browserplaces.xpt +components/nsPlacesDBFlush.js +#ifndef MOZ_MAINTENANCE_SERVICE +maintenanceservice.exe +maintenanceservice_installer.exe +#endif jssubloader/ -modules/ -#ifdef XP_MACOSX - plugins/Default Plugin.plugin/* - plugins/JavaEmbeddingPlugin.bundle/* - plugins/MRJPlugin.plugin/* - ../Plug-Ins/PrintPDE.plugin/* -#endif -res/* -searchplugins/* -webapprt/components/
--- a/browser/locales/en-US/chrome/browser/devtools/webconsole.properties +++ b/browser/locales/en-US/chrome/browser/devtools/webconsole.properties @@ -70,16 +70,20 @@ ConsoleAPIDisabled=The Web Console loggi # the URL the correct direction. Parameters: %S is the web page URL. webConsoleWindowTitleAndURL=Web Console - %S # LOCALIZATION NOTE (webConsoleMixedContentWarning): the message displayed # after a URL in the Web Console that has been flagged for Mixed Content (i.e. # http content in an https page). webConsoleMixedContentWarning=Mixed Content +# LOCALIZATION NOTE (webConsoleMoreInfoLabel): the more info tag displayed +# after security related web console messages. +webConsoleMoreInfoLabel=Learn More + # LOCALIZATION NOTE (scratchpad.linkText): the text used in the right hand # side of the Web Console command line when JavaScript is being entered, to # indicate how to jump into scratchpad mode. scratchpad.linkText=Shift+RETURN - Open in Scratchpad # LOCALIZATION NOTE (gcliterm.instanceLabel): the console displays objects # using their type (from the constructor function) in this descriptive string. # Parameters: %S is the object type.
--- a/browser/metro/base/content/browser.xul +++ b/browser/metro/base/content/browser.xul @@ -286,25 +286,23 @@ <toolbarbutton id="reload-button" class="urlbar-button" oncommand="CommandUpdater.doCommand( event.shiftKey ? 'cmd_forceReload' : 'cmd_reload');"/> <toolbarbutton id="stop-button" class="urlbar-button" command="cmd_stop"/> </hbox> - <circularprogressindicator id="download-progress" - oncommand="Appbar.onDownloadButton()"/> <stack id="toolbar-contextual"> <observes element="bcast_windowState" attribute="*"/> <observes element="bcast_urlbarState" attribute="*"/> <hbox id="toolbar-context-page" pack="end"> - <toolbarbutton id="download-button" class="appbar-secondary" - oncommand="Appbar.onDownloadButton()"/> + <circularprogressindicator id="download-progress" + oncommand="Appbar.onDownloadButton()"/> <toolbarbutton id="star-button" class="appbar-primary" type="checkbox" oncommand="Appbar.onStarButton()"/> <toolbarbutton id="pin-button" class="appbar-primary" type="checkbox" oncommand="Appbar.onPinButton()"/> <toolbarbutton id="menu-button" class="appbar-primary" oncommand="Appbar.onMenuButton(event)"/> @@ -716,21 +714,21 @@ </deck> </hbox> </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);"/> </settings> <settings id="prefs-telemetry" label="&optionsHeader.telemetry.title;"> - <setting pref="toolkit.telemetry.enabled" type="bool" title="&optionsHeader.telemetry.label;" oncommand="FlyoutPanelsUI.PrefsFlyoutPanel.onTelemetryPreferenceChanged(this.value);"/> + <setting pref="toolkit.telemetry.enabled" type="bool" title="&optionsHeader.telemetry.label;"/> </settings> <settings id="prefs-dnt" label="&doNotTrack.title;"> <description>&doNotTrack.desc;</description> - <setting id="prefs-dnt-value" pref="privacy.donottrackheader.value" onpreferencechanged="FlyoutPanelsUI.PrefsFlyoutPanel.onDNTPreferenceChanged();" type="radio" > + <setting id="prefs-dnt-value" pref="privacy.donottrackheader.value" type="radio" > <radiogroup id="prefs-dnt-options"> <radio id="prefs-dnt-notrack" label="&doNotTrack.options.trackingNotOkay;" value="1"/> <radio id="prefs-dnt-nopref" label="&doNotTrack.options.noPreference;" value="-1"/> <radio id="prefs-dnt-oktrack" label="&doNotTrack.options.trackingOkay;" value="0"/> </radiogroup> </setting> </settings> </flyoutpanel>
--- a/browser/metro/base/content/flyoutpanels/FlyoutPanelsUI.js +++ b/browser/metro/base/content/flyoutpanels/FlyoutPanelsUI.js @@ -47,17 +47,17 @@ let FlyoutPanelsUI = { if (this._currentFlyout == this[aToShow]) { return; } else { this.hide(); } } this._currentFlyout = this[aToShow]; - if (this._currentFlyout.show) { + if (this._currentFlyout._show) { this._currentFlyout._show(); } else { this._currentFlyout._topmostElement.show(); } DialogUI.pushPopup(this, this._currentFlyout._topmostElement); }, onBackButton: function() {
--- a/browser/metro/base/content/flyoutpanels/PrefsFlyoutPanel.js +++ b/browser/metro/base/content/flyoutpanels/PrefsFlyoutPanel.js @@ -17,40 +17,70 @@ let PrefsFlyoutPanel = { Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); this._isInitialized = true; let self = this; this._elements = {}; [ ['PrefsFlyoutPanel', 'prefs-flyoutpanel'], - ['dntNoPref', 'prefs-dnt-nopref'], - ['telemetryPref','prefs-telemetry'], ].forEach(function(aElement) { let [name, id] = aElement; XPCOMUtils.defineLazyGetter(self._elements, name, function() { return document.getElementById(id); }); }); + this._prefObserver(null, null, "privacy.donottrackheader.value"); this._topmostElement = this._elements.PrefsFlyoutPanel; }, _show: function() { if (!this._hasShown) { SanitizeUI.init(); this._hasShown = true; + + Services.prefs.addObserver("privacy.donottrackheader.value", + this._prefObserver, + false); + Services.prefs.addObserver("privacy.donottrackheader.enabled", + this._prefObserver, + false); } - this._elements.PrefsFlyoutPanel.show(); + this._topmostElement.show(); }, - onDNTPreferenceChanged: function onDNTPreferenceChanged() { - let selected = this._elements.dntNoPref.selected; + _prefObserver: function(subject, topic, data) { + let value = -1; + try { + value = Services.prefs.getIntPref("privacy.donottrackheader.value"); + } catch(e) { + } + + let isEnabled = Services.prefs.getBoolPref("privacy.donottrackheader.enabled"); - // When "tell sites nothing about my preferences" is selected, disable do not track. - Services.prefs.setBoolPref("privacy.donottrackheader.enabled", !selected); + switch (data) { + case "privacy.donottrackheader.value": + // If the user has selected to explicitly tell sites that tracking + // is OK, or if the user has selected to explicitly tell sites that + // tracking is NOT OK, we must enable sending the dnt header + if (((1 == value) || (0 == value)) && !isEnabled) { + Services.prefs.setBoolPref('privacy.donottrackheader.enabled', true); + } + + // If the user has made no selection about whether tracking + // is OK or not, we must diable the dnt header + if (((1 != value) && (0 != value)) && isEnabled) { + Services.prefs.setBoolPref('privacy.donottrackheader.enabled', false); + } + break; + + case "privacy.donottrackheader.enabled": + // If someone or something modifies this pref, we should update the + // other pref as well so our UI doesn't give false information + if (((1 == value) || (0 == value)) && !isEnabled) { + Services.prefs.setIntPref('privacy.donottrackheader.value', -1); + } + break; + } }, - - onTelemetryPreferenceChanged: function onTelemetryPreferenceChanged(aBool) { - Services.prefs.setBoolPref("toolkit.telemetry.enabled", aBool); - } };
--- a/browser/themes/linux/devtools/debugger.css +++ b/browser/themes/linux/devtools/debugger.css @@ -52,25 +52,27 @@ .side-menu-widget-item-checkbox:not([checked]) ~ .side-menu-widget-item-contents > .dbg-breakpoint { display: none; } /* Black box message */ #black-boxed-message { - padding: 100px 50px; - background-color: rgb(61, 69, 76); + /* Prevent the container deck from aquiring the height from this message. */ + min-height: 1px; + background-color: rgb(61,69,76); + padding: 25vh 0; color: white; } #black-boxed-message-label, #black-boxed-message-button { text-align: center; - font-size: 150%; + font-size: 120%; } #black-boxed-message-button { margin-top: 1em; padding: .25em; } /* ListWidget items */
--- a/browser/themes/osx/devtools/debugger.css +++ b/browser/themes/osx/devtools/debugger.css @@ -54,25 +54,27 @@ .side-menu-widget-item-checkbox:not([checked]) ~ .side-menu-widget-item-contents > .dbg-breakpoint { display: none; } /* Black box message */ #black-boxed-message { - padding: 100px 50px; - background-color: rgb(61, 69, 76); + /* Prevent the container deck from aquiring the height from this message. */ + min-height: 1px; + background-color: rgb(61,69,76); + padding: 25vh 0; color: white; } #black-boxed-message-label, #black-boxed-message-button { text-align: center; - font-size: 150%; + font-size: 120%; } #black-boxed-message-button { margin-top: 1em; padding: .25em; } /* ListWidget items */
--- a/browser/themes/shared/devtools/webconsole.inc.css +++ b/browser/themes/shared/devtools/webconsole.inc.css @@ -74,16 +74,21 @@ color: #FF0000; } .webconsole-mixed-content-link { color: #0000EE; margin: 0; } +.webconsole-learn-more-link { + color: #0000EE; + margin: 0 0 0 4px; +} + .hud-msg-node[selected="true"] > .webconsole-timestamp, .hud-msg-node[selected="true"] > .webconsole-location { color: inherit; } .jsterm-input-container { background: white; }
--- a/browser/themes/windows/devtools/debugger.css +++ b/browser/themes/windows/devtools/debugger.css @@ -52,25 +52,27 @@ .side-menu-widget-item-checkbox:not([checked]) ~ .side-menu-widget-item-contents > .dbg-breakpoint { display: none; } /* Black box message */ #black-boxed-message { - padding: 100px 50px; - background-color: rgb(61, 69, 76); + /* Prevent the container deck from aquiring the height from this message. */ + min-height: 1px; + background-color: rgb(61,69,76); + padding: 25vh 0; color: white; } #black-boxed-message-label, #black-boxed-message-button { text-align: center; - font-size: 150%; + font-size: 120%; } #black-boxed-message-button { margin-top: 1em; padding: .25em; } /* ListWidget items */
--- a/config/createprecomplete.py +++ b/config/createprecomplete.py @@ -6,33 +6,38 @@ # longer present in a complete update. The current working directory is used for # the location to enumerate and to create the precomplete file. import sys import os def get_build_entries(root_path): """ Iterates through the root_path, creating a list for each file and - directory. Excludes any file paths ending with channel-prefs.js. + directory. Excludes any path starting with extensions or distribution + and paths ending with channel-prefs.js. """ rel_file_path_set = set() rel_dir_path_set = set() for root, dirs, files in os.walk(root_path): for file_name in files: parent_dir_rel_path = root[len(root_path)+1:] rel_path_file = os.path.join(parent_dir_rel_path, file_name) rel_path_file = rel_path_file.replace("\\", "/") - if not (rel_path_file.endswith("channel-prefs.js")): + if not (rel_path_file.startswith("distribution/") or + rel_path_file.startswith("extensions/") or + rel_path_file.endswith("channel-prefs.js")): rel_file_path_set.add(rel_path_file) for dir_name in dirs: parent_dir_rel_path = root[len(root_path)+1:] rel_path_dir = os.path.join(parent_dir_rel_path, dir_name) rel_path_dir = rel_path_dir.replace("\\", "/")+"/" - rel_dir_path_set.add(rel_path_dir) + if not (rel_path_dir.startswith("distribution/") or + rel_path_dir.startswith("extensions/")): + rel_dir_path_set.add(rel_path_dir) rel_file_path_list = list(rel_file_path_set) rel_file_path_list.sort(reverse=True) rel_dir_path_list = list(rel_dir_path_set) rel_dir_path_list.sort(reverse=True) return rel_file_path_list, rel_dir_path_list
--- a/dom/locales/en-US/chrome/security/security.properties +++ b/dom/locales/en-US/chrome/security/security.properties @@ -6,8 +6,11 @@ BlockMixedActiveContent = Blocked loadin # CSP ReportOnlyCSPIgnored=Report-only CSP policy will be ignored because there are other non-report-only CSP policies applied. # LOCALIZATION NOTE: Do not translate "X-Content-Security-Policy", "X-Content-Security-Policy-Report-Only", "Content-Security-Policy" or "Content-Security-Policy-Report-Only" OldCSPHeaderDeprecated=The X-Content-Security-Policy and X-Content-Security-Report-Only headers will be deprecated in the future. Please use the Content-Security-Policy and Content-Security-Report-Only headers with CSP spec compliant syntax instead. # LOCALIZATION NOTE: Do not translate "X-Content-Security-Policy/Report-Only" or "Content-Security-Policy/Report-Only" BothCSPHeadersPresent=This site specified both an X-Content-Security-Policy/Report-Only header and a Content-Security-Policy/Report-Only header. The X-Content-Security-Policy/Report-Only header(s) will be ignored. # LOCALIZATION NOTE: Do not translate "Strict-Transport-Security" or "HSTS" InvalidSTSHeaders=The site specified an invalid Strict-Transport-Security header. +InsecurePasswordsPresentOnPage=Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen. +InsecureFormActionPasswordsPresent=Password fields present in a form with an insecure (http://) form action. This is a security risk that allows user login credentials to be stolen. +InsecurePasswordsPresentOnIframe=Password fields present on an insecure (http://) iframe. This is a security risk that allows user login credentials to be stolen.
--- a/layout/base/nsDocumentViewer.cpp +++ b/layout/base/nsDocumentViewer.cpp @@ -423,16 +423,17 @@ protected: unsigned mStopped : 1; unsigned mLoaded : 1; unsigned mDeferredWindowClose : 1; // document management data // these items are specific to markup documents (html and xml) // may consider splitting these out into a subclass unsigned mIsSticky : 1; unsigned mInPermitUnload : 1; + unsigned mInPermitUnloadPrompt: 1; #ifdef NS_PRINTING unsigned mClosingWhilePrinting : 1; #if NS_PRINT_PREVIEW unsigned mPrintPreviewZoomed : 1; // These data members support delayed printing when the document is loading @@ -1085,17 +1086,20 @@ nsDocumentViewer::LoadComplete(nsresult return rv; } NS_IMETHODIMP nsDocumentViewer::PermitUnload(bool aCallerClosesWindow, bool *aPermitUnload) { *aPermitUnload = true; - if (!mDocument || mInPermitUnload || mCallerIsClosingWindow) { + if (!mDocument + || mInPermitUnload + || mCallerIsClosingWindow + || mInPermitUnloadPrompt) { return NS_OK; } // First, get the script global object from the document... nsPIDOMWindow *window = mDocument->GetWindow(); if (!window) { // This is odd, but not fatal @@ -1178,19 +1182,21 @@ nsDocumentViewer::PermitUnload(bool aCal // bool values through XPConnect. bool dummy = false; int32_t buttonPressed = 0; uint32_t buttonFlags = (nsIPrompt::BUTTON_POS_0_DEFAULT | (nsIPrompt::BUTTON_TITLE_IS_STRING * nsIPrompt::BUTTON_POS_0) | (nsIPrompt::BUTTON_TITLE_IS_STRING * nsIPrompt::BUTTON_POS_1)); nsAutoSyncOperation sync(mDocument); + mInPermitUnloadPrompt = true; rv = prompt->ConfirmEx(title, message, buttonFlags, leaveLabel, stayLabel, nullptr, nullptr, &dummy, &buttonPressed); + mInPermitUnloadPrompt = false; NS_ENSURE_SUCCESS(rv, rv); // Button 0 == leave, button 1 == stay *aPermitUnload = (buttonPressed == 0); } } if (docShellNode) {
--- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -686,17 +686,17 @@ abstract public class GeckoApp GeckoAppShell.uninstallWebApp(origin); } else if (event.equals("Share:Text")) { String text = message.getString("text"); GeckoAppShell.openUriExternal(text, "text/plain", "", "", Intent.ACTION_SEND, ""); } else if (event.equals("Share:Image")) { String src = message.getString("url"); String type = message.getString("mime"); GeckoAppShell.shareImage(src, type); - } else if (event.equals("Wallpaper:Set")) { + } else if (event.equals("Image:SetAs")) { String src = message.getString("url"); setImageAs(src); } else if (event.equals("Sanitize:ClearHistory")) { handleClearHistory(); } else if (event.equals("Update:Check")) { startService(new Intent(UpdateServiceHelper.ACTION_CHECK_FOR_UPDATE, null, this, UpdateService.class)); } else if (event.equals("Update:Download")) { startService(new Intent(UpdateServiceHelper.ACTION_DOWNLOAD_UPDATE, null, this, UpdateService.class)); @@ -1494,17 +1494,17 @@ abstract public class GeckoApp registerEventListener("Shortcut:Remove"); registerEventListener("WebApps:Open"); registerEventListener("WebApps:PreInstall"); registerEventListener("WebApps:PostInstall"); registerEventListener("WebApps:Install"); registerEventListener("WebApps:Uninstall"); registerEventListener("Share:Text"); registerEventListener("Share:Image"); - registerEventListener("Wallpaper:Set"); + registerEventListener("Image:SetAs"); registerEventListener("Sanitize:ClearHistory"); registerEventListener("Update:Check"); registerEventListener("Update:Download"); registerEventListener("Update:Install"); registerEventListener("PrivateBrowsing:Data"); registerEventListener("Contact:Add"); if (SmsManager.getInstance() != null) { @@ -2048,17 +2048,17 @@ abstract public class GeckoApp unregisterEventListener("Shortcut:Remove"); unregisterEventListener("WebApps:Open"); unregisterEventListener("WebApps:PreInstall"); unregisterEventListener("WebApps:PostInstall"); unregisterEventListener("WebApps:Install"); unregisterEventListener("WebApps:Uninstall"); unregisterEventListener("Share:Text"); unregisterEventListener("Share:Image"); - unregisterEventListener("Wallpaper:Set"); + unregisterEventListener("Image:SetAs"); unregisterEventListener("Sanitize:ClearHistory"); unregisterEventListener("Update:Check"); unregisterEventListener("Update:Download"); unregisterEventListener("Update:Install"); unregisterEventListener("PrivateBrowsing:Data"); unregisterEventListener("Contact:Add"); deleteTempFiles();
--- a/mobile/android/chrome/content/browser.js +++ b/mobile/android/chrome/content/browser.js @@ -595,17 +595,17 @@ var BrowserApp = { aTarget.ownerDocument); }); NativeWindow.contextmenus.add(Strings.browser.GetStringFromName("contextmenu.setImageAs"), NativeWindow.contextmenus.imageSaveableContext, function(aTarget) { let src = aTarget.src; sendMessageToJava({ - type: "Wallpaper:Set", + type: "Image:SetAs", url: src }); }); NativeWindow.contextmenus.add( function(aTarget) { if (aTarget instanceof HTMLVideoElement) { // If a video element is zero width or height, its essentially
new file mode 100644 --- /dev/null +++ b/toolkit/components/passwordmgr/InsecurePasswordUtils.jsm @@ -0,0 +1,146 @@ +/* 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/. */ + +this.EXPORTED_SYMBOLS = [ "InsecurePasswordUtils" ]; + +const Ci = Components.interfaces; +const Cu = Components.utils; +const Cc = Components.classes; + +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "devtools", + "resource://gre/modules/devtools/Loader.jsm"); + +Object.defineProperty(this, "WebConsoleUtils", { + get: function() { + return devtools.require("devtools/toolkit/webconsole/utils").Utils; + }, + configurable: true, + enumerable: true +}); + +const STRINGS_URI = "chrome://global/locale/security/security.properties"; +let l10n = new WebConsoleUtils.l10n(STRINGS_URI); + +this.InsecurePasswordUtils = { + + _sendWebConsoleMessage : function (messageTag, domDoc) { + /* + * All web console messages are warnings for now so I decided to set the + * flag here and save a bit of the flag creation in the callers. + * It's easy to expose this later if needed + */ + + let windowId = WebConsoleUtils.getInnerWindowId(domDoc.defaultView); + let category = "Insecure Password Field"; + let flag = Ci.nsIScriptError.warningFlag; + let message = l10n.getStr(messageTag); + let consoleMsg = Cc["@mozilla.org/scripterror;1"] + .createInstance(Ci.nsIScriptError); + + consoleMsg.initWithWindowID( + message, "", 0, 0, 0, flag, category, windowId); + + Services.console.logMessage(consoleMsg); + }, + + /* + * Checks whether the passed uri is secure + * Check Protocol Flags to determine if scheme is secure: + * URI_DOES_NOT_RETURN_DATA - e.g. + * "mailto" + * URI_IS_LOCAL_RESOURCE - e.g. + * "data", + * "resource", + * "moz-icon" + * URI_INHERITS_SECURITY_CONTEXT - e.g. + * "javascript" + * URI_SAFE_TO_LOAD_IN_SECURE_CONTEXT - e.g. + * "https", + * "moz-safe-about" + * + * The use of this logic comes directly from nsMixedContentBlocker.cpp + * At the time it was decided to include these protocols since a secure + * uri for mixed content blocker means that the resource can't be + * easily tampered with because 1) it is sent over an encrypted channel or + * 2) it is a local resource that never hits the network + * or 3) it is a request sent without any response that could alter + * the behavior of the page. It was decided to include the same logic + * here both to be consistent with MCB and to make sure we cover all + * "safe" protocols. Eventually, the code here and the code in MCB + * will be moved to a common location that will be referenced from + * both places. Look at + * https://bugzilla.mozilla.org/show_bug.cgi?id=899099 for more info. + */ + _checkIfURIisSecure : function(uri) { + let isSafe = false; + let netutil = Cc["@mozilla.org/network/util;1"].getService(Ci.nsINetUtil); + let ph = Ci.nsIProtocolHandler; + + if (netutil.URIChainHasFlags(uri, ph.URI_IS_LOCAL_RESOURCE) || + netutil.URIChainHasFlags(uri, ph.URI_DOES_NOT_RETURN_DATA) || + netutil.URIChainHasFlags(uri, ph.URI_INHERITS_SECURITY_CONTEXT) || + netutil.URIChainHasFlags(uri, ph.URI_SAFE_TO_LOAD_IN_SECURE_CONTEXT)) { + + isSafe = true; + } + + return isSafe; + }, + + /* + * Checks whether the passed nested document is insecure + * or is inside an insecure parent document. + * + * We check the chain of frame ancestors all the way until the top document + * because MITM attackers could replace https:// iframes if they are nested inside + * http:// documents with their own content, thus creating a security risk + * and potentially stealing user data. Under such scenario, a user might not + * get a Mixed Content Blocker message, if the main document is served over HTTP + * and framing an HTTPS page as it would under the reverse scenario (http + * inside https). + */ + _checkForInsecureNestedDocuments : function(domDoc) { + let uri = domDoc.documentURIObject; + if (domDoc.defaultView == domDoc.defaultView.parent) { + // We are at the top, nothing to check here + return false; + } + if (!this._checkIfURIisSecure(uri)) { + // We are insecure + return true; + } + // I am secure, but check my parent + return this._checkForInsecureNestedDocuments(domDoc.defaultView.parent.document); + }, + + + /* + * Checks if there are insecure password fields present on the form's document + * i.e. passwords inside forms with http action, inside iframes with http src, + * or on insecure web pages. If insecure password fields are present, + * a log message is sent to the web console to warn developers. + */ + checkForInsecurePasswords : function (aForm) { + var domDoc = aForm.ownerDocument; + let pageURI = domDoc.defaultView.top.document.documentURIObject; + let isSafePage = this._checkIfURIisSecure(pageURI); + + if (!isSafePage) { + this._sendWebConsoleMessage("InsecurePasswordsPresentOnPage", domDoc); + } + + // Check if we are on an iframe with insecure src, or inside another + // insecure iframe or document. + if (this._checkForInsecureNestedDocuments(domDoc)) { + this._sendWebConsoleMessage("InsecurePasswordsPresentOnIframe", domDoc); + } + + if (aForm.action.match(/^http:\/\//)) { + this._sendWebConsoleMessage("InsecureFormActionPasswordsPresent", domDoc); + } + }, +};
--- a/toolkit/components/passwordmgr/moz.build +++ b/toolkit/components/passwordmgr/moz.build @@ -27,10 +27,11 @@ EXTRA_COMPONENTS += [ 'storage-Legacy.js', ] EXTRA_PP_COMPONENTS += [ 'storage-mozStorage.js', ] EXTRA_JS_MODULES += [ + 'InsecurePasswordUtils.jsm', 'LoginManagerContent.jsm', ]
--- a/toolkit/components/printing/content/printUtils.js +++ b/toolkit/components/printing/content/printUtils.js @@ -211,16 +211,23 @@ var PrintUtils = { if (printPreviewTB) { printPreviewTB.updateToolbar(); var browser = this._callback.getPrintPreviewBrowser(); browser.collapsed = false; browser.contentWindow.focus(); return; } + // Set the original window as an active window so any mozPrintCallbacks can + // run without delayed setTimeouts. + var docShell = originalWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebNavigation) + .QueryInterface(Ci.nsIDocShell); + docShell.isActive = true; + // show the toolbar after we go into print preview mode so // that we can initialize the toolbar with total num pages var XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; printPreviewTB = document.createElementNS(XUL_NS, "toolbar"); printPreviewTB.setAttribute("printpreview", true); printPreviewTB.id = "print-preview-toolbar"; printPreviewTB.className = "toolbar-primary";
--- a/toolkit/devtools/Loader.jsm +++ b/toolkit/devtools/Loader.jsm @@ -46,16 +46,17 @@ var BuiltinProvider = { "toolkit/loader": loader }, paths: { "": "resource://gre/modules/commonjs/", "main": "resource:///modules/devtools/main.js", "devtools": "resource:///modules/devtools", "devtools/server": "resource://gre/modules/devtools/server", "devtools/toolkit/webconsole": "resource://gre/modules/devtools/toolkit/webconsole", + "devtools/styleinspector/css-logic": "resource://gre/modules/devtools/styleinspector/css-logic", // Allow access to xpcshell test items from the loader. "xpcshell-test": "resource://test" }, globals: loaderGlobals }); return promise.resolve(undefined); @@ -80,26 +81,29 @@ var SrcdirProvider = { let srcdir = Services.prefs.getComplexValue("devtools.loader.srcdir", Ci.nsISupportsString); srcdir = OS.Path.normalize(srcdir.data.trim()); let devtoolsDir = OS.Path.join(srcdir, "browser", "devtools"); let devtoolsURI = this.fileURI(devtoolsDir); let toolkitURI = this.fileURI(OS.Path.join(srcdir, "toolkit", "devtools")); let serverURI = this.fileURI(OS.Path.join(srcdir, "toolkit", "devtools", "server")); let webconsoleURI = this.fileURI(OS.Path.join(srcdir, "toolkit", "devtools", "webconsole")); + let cssLogicURI = this.fileURI(OS.Path.join(toolkitURI, "styleinspector", "css-logic")); + let mainURI = this.fileURI(OS.Path.join(srcdir, "browser", "devtools", "main.js")); this.loader = new loader.Loader({ modules: { "toolkit/loader": loader }, paths: { "": "resource://gre/modules/commonjs/", "devtools/server": serverURI, "devtools/toolkit/webconsole": webconsoleURI, "devtools": devtoolsURI, + "devtools/styleinspector/css-logic": cssLogicURI, "main": mainURI }, globals: loaderGlobals }); return this._writeManifest(devtoolsDir).then(null, Cu.reportError); },
--- a/toolkit/devtools/moz.build +++ b/toolkit/devtools/moz.build @@ -5,10 +5,11 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. PARALLEL_DIRS += [ 'server', 'client', 'gcli', 'sourcemap', 'webconsole', - 'apps' + 'apps', + 'styleinspector' ]
--- a/toolkit/devtools/server/actors/inspector.js +++ b/toolkit/devtools/server/actors/inspector.js @@ -133,31 +133,35 @@ var NodeActor = protocol.ActorClass({ /** * Instead of storing a connection object, the NodeActor gets its connection * from its associated walker. */ get conn() this.walker.conn, // Returns the JSON representation of this object over the wire. form: function(detail) { + if (detail === "actorid") { + return this.actorID; + } + let parentNode = this.walker.parentNode(this); // Estimate the number of children. let numChildren = this.rawNode.childNodes.length; if (numChildren === 0 && (this.rawNode.contentDocument || this.rawNode.getSVGDocument)) { // This might be an iframe with virtual children. numChildren = 1; } let form = { actor: this.actorID, parent: parentNode ? parentNode.actorID : undefined, nodeType: this.rawNode.nodeType, - namespaceURI: this.namespaceURI, + namespaceURI: this.rawNode.namespaceURI, nodeName: this.rawNode.nodeName, numChildren: numChildren, // doctype attributes name: this.rawNode.name, publicId: this.rawNode.publicId, systemId: this.rawNode.systemId, @@ -303,16 +307,20 @@ let NodeFront = protocol.FrontClass(Node this._observer = null; } protocol.Front.prototype.destroy.call(this); }, // Update the object given a form representation off the wire. form: function(form, detail, ctx) { + if (detail === "actorid") { + this.actorID = form; + return; + } // Shallow copy of the form. We could just store a reference, but // eventually we'll want to update some of the data. this._form = object.merge(form); this._form.attrs = this._form.attrs ? this._form.attrs.slice() : []; if (form.parent) { // Get the owner actor for this actor (the walker), and find the // parent node of this actor from it, creating a standin node if
--- a/toolkit/devtools/server/actors/styleeditor.js +++ b/toolkit/devtools/server/actors/styleeditor.js @@ -99,17 +99,17 @@ StyleEditorActor.prototype = { }, /** * Get the BaseURI for the document. * * @return {object} JSON message to with BaseURI */ onGetBaseURI: function() { - return { baseURI: this.document.baseURIObject }; + return { baseURI: this.document.baseURIObject.spec }; }, /** * Called when target navigates to a new document. * Adds load listeners to document. */ onNewDocument: function() { // delete previous document's actors
new file mode 100644 --- /dev/null +++ b/toolkit/devtools/styleinspector/Makefile.in @@ -0,0 +1,15 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +include $(topsrcdir)/config/rules.mk + +libs:: + $(INSTALL) $(IFLAGS1) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/styleinspector
rename from browser/devtools/styleinspector/css-logic.js rename to toolkit/devtools/styleinspector/css-logic.js
new file mode 100644 --- /dev/null +++ b/toolkit/devtools/styleinspector/moz.build @@ -0,0 +1,5 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/.
--- a/toolkit/mozapps/extensions/content/setting.xml +++ b/toolkit/mozapps/extensions/content/setting.xml @@ -458,21 +458,25 @@ break; case Ci.nsIPrefBranch.PREF_BOOL: val = Services.prefs.getBoolPref(this.pref).toString(); break; default: return; } - for (let i = 0; i < this.control.itemCount; i++) { - if (this.control.getItemAtIndex(i).value == val) { - this.control.selectedIndex = i; - break; + if ("itemCount" in this.control) { + for (let i = 0; i < this.control.itemCount; i++) { + if (this.control.getItemAtIndex(i).value == val) { + this.control.selectedIndex = i; + break; + } } + } else { + this.control.setAttribute("value", val); } ]]> </body> </method> <method name="valueToPreference"> <body> <![CDATA[
--- a/toolkit/mozapps/extensions/test/browser/browser_inlinesettings.js +++ b/toolkit/mozapps/extensions/test/browser/browser_inlinesettings.js @@ -134,17 +134,17 @@ function end_test() { Services.prefs.clearUserPref("extensions.inlinesettings3.radioBool"); Services.prefs.clearUserPref("extensions.inlinesettings3.radioInt"); Services.prefs.clearUserPref("extensions.inlinesettings3.radioString"); Services.prefs.clearUserPref("extensions.inlinesettings3.menulist"); MockFilePicker.cleanup(); close_manager(gManagerWindow, function() { - observer.checkHidden("inlinesettings2@tests.mozilla.org"); + observer.checkHidden("inlinesettings3@tests.mozilla.org"); Services.obs.removeObserver(observer, AddonManager.OPTIONS_NOTIFICATION_HIDDEN); AddonManager.getAddonByID("inlinesettings1@tests.mozilla.org", function(aAddon) { aAddon.uninstall(); finish(); }); }); @@ -570,8 +570,106 @@ add_test(function() { button = gManagerWindow.document.getElementById("detail-enable-btn"); button.focus(); // make sure it's in view EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow); observer.checkNotDisplayed(); gCategoryUtilities.openType("extension", run_next_test); }); }); + +// Tests bindings with existing prefs. +add_test(function() { + observer.checkHidden("inlinesettings2@tests.mozilla.org"); + + // Ensure these prefs are set. They should be set above, but somebody might + // change the tests above. + var profD = Services.dirsvc.get("ProfD", Ci.nsIFile); + Services.prefs.setBoolPref("extensions.inlinesettings1.bool", false); + Services.prefs.setIntPref("extensions.inlinesettings1.boolint", 1); + Services.prefs.setIntPref("extensions.inlinesettings1.integer", 12); + Services.prefs.setCharPref("extensions.inlinesettings1.string", "bar/"); + Services.prefs.setCharPref("extensions.inlinesettings1.color", "#FF9900"); + Services.prefs.setCharPref("extensions.inlinesettings1.file", profD.path); + Services.prefs.setCharPref("extensions.inlinesettings1.directory", profD.path); + + var addon = get_addon_element(gManagerWindow, "inlinesettings1@tests.mozilla.org"); + addon.parentNode.ensureElementIsVisible(addon); + + var button = gManagerWindow.document.getAnonymousElementByAttribute(addon, "anonid", "preferences-btn"); + EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + observer.checkDisplayed("inlinesettings1@tests.mozilla.org"); + + var grid = gManagerWindow.document.getElementById("detail-grid"); + var settings = grid.querySelectorAll("rows > setting"); + + var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[0], "anonid", "input"); + is(input.checked, false, "Checkbox should have initial value"); + + var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[1], "anonid", "input"); + is(input.checked, true, "Checkbox should have initial value"); + + var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[2], "anonid", "input"); + is(input.value, "12", "Number box should have initial value"); + + var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[3], "anonid", "input"); + is(input.value, "bar/", "Text box should have initial value"); + + input = gManagerWindow.document.getAnonymousElementByAttribute(settings[5], "anonid", "input"); + is(input.color, "#FF9900", "Color picker should have initial value"); + + input = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "input"); + is(input.value, profD.path, "Label should have initial value"); + is(input.tooltipText, profD.path, "Label tooltip should have initial value"); + + input = gManagerWindow.document.getAnonymousElementByAttribute(settings[7], "anonid", "input"); + is(input.value, profD.path, "Label value should have initial value"); + is(input.tooltipText, profD.path, "Label tooltip should have initial value"); + + gCategoryUtilities.openType("extension", run_next_test); + }); +}); + +// Tests bindings with existing prefs. +add_test(function() { + observer.checkHidden("inlinesettings1@tests.mozilla.org"); + + // Ensure these prefs are set. They should be set above, but somebody might + // change the tests above. + Services.prefs.setBoolPref("extensions.inlinesettings3.radioBool", false); + Services.prefs.setIntPref("extensions.inlinesettings3.radioInt", 6); + Services.prefs.setCharPref("extensions.inlinesettings3.radioString", "kilo"); + Services.prefs.setIntPref("extensions.inlinesettings3.menulist", 9); + + var addon = get_addon_element(gManagerWindow, "inlinesettings3@tests.mozilla.org"); + addon.parentNode.ensureElementIsVisible(addon); + + var button = gManagerWindow.document.getAnonymousElementByAttribute(addon, "anonid", "preferences-btn"); + EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + observer.checkDisplayed("inlinesettings3@tests.mozilla.org"); + + var grid = gManagerWindow.document.getElementById("detail-grid"); + var settings = grid.querySelectorAll("rows > setting"); + + var radios = settings[0].getElementsByTagName("radio"); + isnot(radios[0].selected, true, "Correct radio button should be selected"); + is(radios[1].selected, true, "Correct radio button should be selected"); + + var radios = settings[1].getElementsByTagName("radio"); + isnot(radios[0].selected, true, "Correct radio button should be selected"); + isnot(radios[1].selected, true, "Correct radio button should be selected"); + is(radios[2].selected, true, "Correct radio button should be selected"); + + var radios = settings[2].getElementsByTagName("radio"); + isnot(radios[0].selected, true, "Correct radio button should be selected"); + isnot(radios[1].selected, true, "Correct radio button should be selected"); + is(radios[2].selected, true, "Correct radio button should be selected"); + + var input = settings[3].firstElementChild; + is(input.value, "9", "Menulist should have initial value"); + + gCategoryUtilities.openType("extension", run_next_test); + }); +});
--- a/widget/gtk2/nsWindow.cpp +++ b/widget/gtk2/nsWindow.cpp @@ -130,16 +130,17 @@ using mozilla::layers::LayerManagerOGL; // Don't put more than this many rects in the dirty region, just fluff // out to the bounding-box if there are more #define MAX_RECTS_IN_REGION 100 const gint kEvents = GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | + GDK_SCROLL_MASK | #ifdef MOZ_PLATFORM_MAEMO GDK_POINTER_MOTION_HINT_MASK | #endif GDK_POINTER_MOTION_MASK; /* utility functions */ static bool is_mouse_in_window(GdkWindow* aWindow, gdouble aMouseX, gdouble aMouseY);