Merge m-c to m-i

This commit is contained in:
Phil Ringnalda 2014-06-28 20:51:49 -07:00
commit 5f50d49628
17 changed files with 300 additions and 141 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0"?>
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1403216209000">
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1403823002000">
<emItems>
<emItem blockID="i454" id="sqlmoz@facebook.com">
<versionRange minVersion="0" maxVersion="*" severity="3">
@ -192,6 +192,12 @@
</versionRange>
<prefs>
</prefs>
</emItem>
<emItem blockID="i77" id="{fa277cfc-1d75-4949-a1f9-4ac8e41b2dfd}">
<versionRange minVersion="0" maxVersion="*">
</versionRange>
<prefs>
</prefs>
</emItem>
<emItem blockID="i40" id="{28387537-e3f9-4ed7-860c-11e69af4a8a0}">
<versionRange minVersion="0.1" maxVersion="4.3.1.00" severity="1">
@ -244,10 +250,12 @@
<prefs>
</prefs>
</emItem>
<emItem blockID="i77" id="{fa277cfc-1d75-4949-a1f9-4ac8e41b2dfd}">
<versionRange minVersion="0" maxVersion="*">
<emItem blockID="i630" id="webbooster@iminent.com">
<versionRange minVersion="0" maxVersion="*" severity="1">
</versionRange>
<prefs>
<pref>browser.startup.homepage</pref>
<pref>browser.search.defaultenginename</pref>
</prefs>
</emItem>
<emItem blockID="i174" id="info@thebflix.com">
@ -570,6 +578,14 @@
</versionRange>
<prefs>
</prefs>
</emItem>
<emItem blockID="i628" id="ffxtlbr@iminent.com">
<versionRange minVersion="0" maxVersion="*" severity="1">
</versionRange>
<prefs>
<pref>browser.startup.homepage</pref>
<pref>browser.search.defaultenginename</pref>
</prefs>
</emItem>
<emItem blockID="i228" id="crossriderapp5060@crossrider.com">
<versionRange minVersion="0" maxVersion="*" severity="1">

View File

@ -552,6 +552,10 @@ SocialShare = {
update: function() {
let shareButton = this.shareButton;
if (!shareButton)
return;
// if we got here, the button is in the window somewhere, update it's hidden
// state based on available providers.
shareButton.hidden = !SocialUI.enabled ||
[p for (p of Social.providers) if (p.shareURL)].length == 0;
let disabled = shareButton.hidden || !this.canSharePage(gBrowser.currentURI);
@ -1178,7 +1182,6 @@ SocialStatus = {
let button = widget.forWindow(window).node;
if (button) {
// we only grab the first notification, ignore all others
let place = CustomizableUI.getPlaceForItem(button);
let provider = Social._getProviderFromOrigin(origin);
let icons = provider.ambientNotificationIcons;
let iconNames = Object.keys(icons);
@ -1188,7 +1191,7 @@ SocialStatus = {
// ambient notification and profile changes.
let iconURL = provider.icon32URL || provider.iconURL;
let tooltiptext;
if (!notif || place == "palette") {
if (!notif || !widget.areaType) {
button.style.listStyleImage = "url(" + iconURL + ")";
button.setAttribute("badge", "");
button.setAttribute("aria-label", "");
@ -1245,8 +1248,12 @@ SocialMarks = {
update: function() {
// signal each button to update itself
let currentButtons = document.querySelectorAll('toolbarbutton[type="socialmark"]');
for (let elt of currentButtons)
elt.update();
for (let elt of currentButtons) {
// make sure we can call update since the xbl is not completely bound if
// the button is in overflow, until the button becomes visible.
if (elt.update)
elt.update();
}
},
updatePanelButtons: function() {
@ -1259,7 +1266,9 @@ SocialMarks = {
if (!widget)
continue;
let node = widget.forWindow(window).node;
if (node)
// xbl binding is not complete on startup when buttons are not in toolbar,
// verify update is available
if (node && node.update)
node.update();
}
},

View File

@ -935,7 +935,6 @@
<toolbarbutton id="social-share-button"
class="toolbarbutton-1 chromeclass-toolbar-additional"
hidden="true"
label="&sharePageCmd.label;"
tooltiptext="&sharePageCmd.label;"
cui-areatype="toolbar"

View File

@ -17,18 +17,27 @@
xbl:inherits="xbl:text=label,accesskey,wrap"/>
</content>
<implementation implements="nsIDOMEventListener, nsIObserver">
<field name="_useDynamicResizer">false</field>
<field name="inMenuPanel">false</field>
<constructor>
// if we overflow, we have to reset the button. unfortunately we cannot
// use a widget listener because we need to do this *after* the node is
// moved, and the event happens before the node is moved.
this.update();
</constructor>
<property name="_anchor">
<getter>
let widgetGroup = CustomizableUI.getWidget(this.getAttribute("id"));
return widgetGroup.forWindow(window).anchor;
</getter>
</property>
<property name="_useDynamicResizer">
<getter>
let provider = Social._getProviderFromOrigin(this.getAttribute("origin"));
return !provider.getPageSize("marks");
</getter>
</property>
<property name="panel">
<getter>
let widgetGroup = CustomizableUI.getWidget(this.getAttribute("id"));
let widget = widgetGroup.forWindow(window);
this.inMenuPanel = widgetGroup.areaType == CustomizableUI.TYPE_MENU_PANEL;
if (this.inMenuPanel) {
widget.node.setAttribute("closemenu", "none");
return document.getElementById("PanelUI-socialapi");
}
return document.getAnonymousElementByAttribute(this, "anonid", "panel");
</getter>
</property>
@ -41,7 +50,6 @@
let provider = Social._getProviderFromOrigin(this.getAttribute("origin"));
let size = provider.getPageSize("marks");
let {width, height} = size ? size : {width: 330, height: 100};
this._useDynamicResizer = !size;
this._frame = SharedFrame.createFrame(
notificationFrameId, /* frame name */
@ -89,8 +97,8 @@
let provider = this.provider;
// we cannot size the image when we apply it via listStyleImage, so
// use the toolbar image
let place = CustomizableUI.getPlaceForItem(this);
val = val && place != "palette";
let widgetGroup = CustomizableUI.getWidget(this.getAttribute("id"));
val = val && !!widgetGroup.areaType;
let icon = val ? provider.markedIcon : provider.unmarkedIcon;
let iconURL = icon || provider.icon32URL || provider.iconURL;
this.setAttribute("image", iconURL);
@ -112,24 +120,26 @@
// do we have a savable page loaded?
let aURI = gBrowser.currentURI;
this.disabled = !aURI || !(aURI.schemeIs('http') || aURI.schemeIs('https'));
if (this.disabled) {
let disabled = !aURI || !(aURI.schemeIs('http') || aURI.schemeIs('https'));
// when overflowed in toolbar, we must have the attribute set
if (disabled) {
this.setAttribute("disabled", "true");
this.isMarked = false;
} else {
this.removeAttribute("disabled");
Social.isURIMarked(provider.origin, aURI, (isMarked) => {
this.isMarked = isMarked;
});
}
this.content.setAttribute("origin", provider.origin);
if (!this.inMenuPanel) {
let panel = this.panel;
// if customization is currently happening, we may not have a panel
// that we can hide
if (panel.hidePopup) {
panel.hidePopup();
panel.hidden = true;
}
let panel = this.panel;
// if customization is currently happening, we may not have a panel
// that we can hide
if (panel.hidePopup) {
panel.hidePopup();
panel.hidden = true;
}
this.pageData = null;
]]></body>
@ -157,7 +167,7 @@
this._loading = false;
this.content.removeEventListener("DOMContentLoaded", DOMContentLoaded, true);
// add our resizer after the dom is ready
if (!this.inMenuPanel && this._useDynamicResizer) {
if (this._useDynamicResizer) {
let DynamicResizeWatcher = Cu.import("resource:///modules/Social.jsm", {}).DynamicResizeWatcher;
this._dynamicResizer = new DynamicResizeWatcher();
this._dynamicResizer.start(this.panel, this.content);
@ -213,27 +223,13 @@
frameIter = frameIter.nextElementSibling;
}
// if we're a slice in the hambuger, use that panel instead
let widgetGroup = CustomizableUI.getWidget(this.getAttribute("id"));
let widget = widgetGroup.forWindow(window);
let inMenuPanel = widgetGroup.areaType == CustomizableUI.TYPE_MENU_PANEL;
if (inMenuPanel) {
PanelUI.showSubView("PanelUI-socialapi", widget.node,
CustomizableUI.AREA_PANEL);
} else {
let anchor = document.getAnonymousElementByAttribute(this, "class", "toolbarbutton-icon");
let anchor = document.getAnonymousElementByAttribute(this._anchor, "class", "toolbarbutton-icon");
// Bug 849216 - open the popup in a setTimeout so we avoid the auto-rollup
// handling from preventing it being opened in some cases.
setTimeout(() => {
panel.openPopup(anchor, "bottomcenter topright", 0, 0, false, false);
this.setAttribute("open", "true");
}
if (aResetOnClose) {
let evName = inMenuPanel ? "ViewHiding": "popuphidden";
let _hidden = () => {
panel.removeEventListener(evName, _hidden);
this.update();
};
panel.addEventListener(evName, _hidden, false);
}
]]></body>
}, 0);
]]></body>
</method>
<method name="markCurrentPage">
@ -241,8 +237,7 @@
<body><![CDATA[
// we always set the src on click if it has not been set for this tab,
// but we only want to open the panel if it was previously annotated.
let openPanel = this.isMarked || aOpenPanel ||
this.inMenuPanel || !this.provider.haveLoggedInUser();
let openPanel = this.isMarked || aOpenPanel || !this.provider.haveLoggedInUser();
let src = this.content.getAttribute("src");
if (!src || src == "about:blank") {
this.loadPanel();
@ -287,13 +282,13 @@
if (!this._loading && this.contentDocument &&
this.contentDocument.readyState == "complete") {
this.dispatchPanelEvent("socialFrameShow");
if (!this.inMenuPanel && this._useDynamicResizer)
if (this._useDynamicResizer)
sizeSocialPanelToContent(this.panel, this.content);
} else {
let panelBrowserOnload = (e) => {
this.content.removeEventListener("load", panelBrowserOnload, true);
this.dispatchPanelEvent("socialFrameShow");
if (!this.inMenuPanel && this._useDynamicResizer)
if (this._useDynamicResizer)
sizeSocialPanelToContent(this.panel, this.content);
};
this.content.addEventListener("load", panelBrowserOnload, true);
@ -328,24 +323,22 @@
this.setAttribute("image", uri.spec);
}
break;
case "ViewShowing":
this.onShown();
break;
case "ViewHiding":
this.dispatchPanelEvent("socialFrameHide");
break;
}
]]></body>
</method>
</implementation>
<handlers>
<handler event="popupshowing"><![CDATA[
this._anchor.setAttribute("open", "true");
]]></handler>
<handler event="popupshown"><![CDATA[
this.onShown();
]]></handler>
<handler event="popuphidden"><![CDATA[
this.dispatchPanelEvent("socialFrameHide");
this.removeAttribute("open");
this._anchor.removeAttribute("open");
this.update();
]]></handler>
<handler event="command"><![CDATA[
this.markCurrentPage();

View File

@ -635,6 +635,22 @@ BrowserGlue.prototype = {
nb.PRIORITY_INFO_LOW, buttons);
},
_firstWindowTelemetry: function(aWindow) {
#ifdef XP_WIN
let SCALING_PROBE_NAME = "DISPLAY_SCALING_MSWIN";
#elifdef XP_MACOSX
let SCALING_PROBE_NAME = "DISPLAY_SCALING_OSX";
#elifdef XP_LINUX
let SCALING_PROBE_NAME = "DISPLAY_SCALING_LINUX";
#else
let SCALING_PROBE_NAME = "";
#endif
if (SCALING_PROBE_NAME) {
let scaling = aWindow.devicePixelRatio * 100;
Services.telemetry.getHistogramById(SCALING_PROBE_NAME).add(scaling);
}
},
// the first browser window has finished initializing
_onFirstWindowLoaded: function BG__onFirstWindowLoaded(aWindow) {
#ifdef XP_WIN
@ -663,6 +679,8 @@ BrowserGlue.prototype = {
}
this._checkForOldBuildUpdates();
this._firstWindowTelemetry(aWindow);
},
/**

View File

@ -226,7 +226,7 @@ function test() {
// Open a new window
// The previously closed window should be restored
whenNewWindowLoaded({}, function (newWin) {
is(newWin.gBrowser.browsers.length, TEST_URLS.length + 1,
is(newWin.gBrowser.browsers.length, TEST_URLS.length + 2,
"Restored window in-session with otherpopup windows around");
// Cleanup
@ -259,7 +259,7 @@ function test() {
// Exit private browsing mode again
whenNewWindowLoaded({}, function (newWin) {
is(newWin.gBrowser.browsers.length, TEST_URLS.length + 1,
is(newWin.gBrowser.browsers.length, TEST_URLS.length + 2,
"Restored after leaving private browsing again");
newWin.close();
@ -296,7 +296,7 @@ function test() {
// open a new window the previously closed window should be restored to
whenNewWindowLoaded({}, function (newWin) {
is(newWin.gBrowser.browsers.length, TEST_URLS.length + 1,
is(newWin.gBrowser.browsers.length, TEST_URLS.length + 2,
"Restored window and associated tabs in session");
// Cleanup

View File

@ -204,9 +204,22 @@ add_task(function test_design_mode() {
// Modify the document content.
yield sendMessage(browser, "ss-test:sendKeyEvent", {key: "m"});
// Duplicate the modified tab.
let tab2 = gBrowser.duplicateTab(tab);
yield promiseTabRestored(tab2);
// Close and restore the tab.
gBrowser.removeTab(tab);
tab = ss.undoCloseTab(window, 0);
browser = tab.linkedBrowser;
yield promiseTabRestored(tab);
// Check that the innerHTML value was restored.
let html = yield getInnerHTML(browser);
let expected = "<h1>Mmozilla</h1><script>document.designMode='on'</script>";
is(html, expected, "editable document has been restored correctly");
// Close and restore the tab.
gBrowser.removeTab(tab);
tab = ss.undoCloseTab(window, 0);
browser = tab.linkedBrowser;
yield promiseTabRestored(tab);
// Check that the innerHTML value was restored.
let html = yield getInnerHTML(browser);
@ -214,7 +227,6 @@ add_task(function test_design_mode() {
is(html, expected, "editable document has been restored correctly");
// Cleanup.
gBrowser.removeTab(tab2);
gBrowser.removeTab(tab);
});

View File

@ -73,7 +73,7 @@ function provideWindow(aCallback, aURL, aFeatures) {
});
}
let win = openDialog(getBrowserURL(), "", aFeatures || "chrome,all,dialog=no", aURL);
let win = openDialog(getBrowserURL(), "", aFeatures || "chrome,all,dialog=no", aURL || "about:blank");
whenWindowLoaded(win, function onWindowLoaded(aWin) {
if (!aURL) {
info("Loaded a blank window.");
@ -465,7 +465,15 @@ function closeAllButPrimaryWindow() {
* expected (e.g. reading a big session state from disk).
*/
function whenNewWindowLoaded(aOptions, aCallback) {
let win = OpenBrowserWindow(aOptions);
let features = "";
let url = "about:blank";
if (aOptions && aOptions.private || false) {
features = ",private";
url = "about:privatebrowsing";
}
let win = openDialog(getBrowserURL(), "", "chrome,all,dialog=no" + features, url);
whenDelayedStartupFinished(win, () => aCallback(win));
return win;
}

View File

@ -1453,7 +1453,7 @@ Experiments.ExperimentEntry.prototype = {
initFromCacheData: function (data) {
for (let [key, dval] of this.UPGRADE_KEYS) {
if (!(key in data)) {
data.set(key, dval);
data[key] = dval;
}
}

View File

@ -0,0 +1,55 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
Cu.import("resource:///modules/experiments/Experiments.jsm");
const SEC_IN_ONE_DAY = 24 * 60 * 60;
const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000;
let cacheData = {
_enabled: true,
_manifestData: {
id: "foobartestid",
xpiURL: "http://example.com/foo.xpi",
xpiHash: "sha256:abcde",
startTime: 0,
endTime: 2000000000,
maxActiveSeconds: 40000000,
appName: "TestApp",
channel: "test-foo",
},
_needsUpdate: false,
_randomValue: 0.5,
_failedStart: false,
_name: "Foo",
_description: "Foobar",
_homepageURL: "",
_addonId: "foo@test",
_startDate: 0,
_endDate: 2000000000,
_branch: null
};
add_task(function* test_valid() {
let e = new Experiments.ExperimentEntry();
Assert.ok(e.initFromCacheData(cacheData));
Assert.ok(e.enabled);
});
add_task(function* test_upgrade() {
let e = new Experiments.ExperimentEntry();
delete cacheData._branch;
Assert.ok(e.initFromCacheData(cacheData));
Assert.ok(e.enabled);
});
add_task(function* test_missing() {
let e = new Experiments.ExperimentEntry();
delete cacheData._name;
Assert.ok(!e.initFromCacheData(cacheData));
});
function run_test() {
run_next_test();
}

View File

@ -21,3 +21,4 @@ generated-files =
[test_telemetry.js]
[test_healthreport.js]
[test_previous_provider.js]
[test_upgrade.js]

View File

@ -112,9 +112,12 @@ let PanelFrame = {
* set up.
*/
showPopup: function(aWindow, aPanelUI, aToolbarButton, aType, aOrigin, aSrc, aSize, aCallback) {
// if we're a slice in the hamburger, use that panel instead
// if we're overflowed, our anchor needs to be the overflow button
let widgetGroup = CustomizableUI.getWidget(aToolbarButton.getAttribute("id"));
let widget = widgetGroup.forWindow(aWindow);
let anchorBtn = widget.anchor;
// if we're a slice in the hamburger, use that panel instead
let panel, showingEvent, hidingEvent;
let inMenuPanel = widgetGroup.areaType == CustomizableUI.TYPE_MENU_PANEL;
if (inMenuPanel) {
@ -156,7 +159,8 @@ let PanelFrame = {
}
panel.addEventListener(hidingEvent, function onpopuphiding() {
panel.removeEventListener(hidingEvent, onpopuphiding);
aToolbarButton.removeAttribute("open");
if (!inMenuPanel)
anchorBtn.removeAttribute("open");
if (dynamicResizer)
dynamicResizer.stop();
notificationFrame.docShell.isActive = false;
@ -178,7 +182,7 @@ let PanelFrame = {
dispatchPanelEvent(aType + "FrameShow");
};
if (!inMenuPanel)
aToolbarButton.setAttribute("open", "true");
anchorBtn.setAttribute("open", "true");
if (notificationFrame.contentDocument &&
notificationFrame.contentDocument.readyState == "complete" && wasAlive) {
initFrameShow();
@ -195,7 +199,9 @@ let PanelFrame = {
aPanelUI.showSubView("PanelUI-" + aType + "api", widget.node,
CustomizableUI.AREA_PANEL);
} else {
let anchor = aWindow.document.getAnonymousElementByAttribute(aToolbarButton, "class", "toolbarbutton-badge-container");
// in overflow, the anchor is a normal toolbarbutton, in toolbar it is a badge button
let anchor = aWindow.document.getAnonymousElementByAttribute(anchorBtn, "class", "toolbarbutton-badge-container") ||
aWindow.document.getAnonymousElementByAttribute(anchorBtn, "class", "toolbarbutton-icon");
// Bug 849216 - open the popup asynchronously so we avoid the auto-rollup
// handling from preventing it being opened in some cases.
Services.tm.mainThread.dispatch(function() {

View File

@ -1,7 +1,6 @@
admin.google.com: did not receive HSTS header (error ignored - included regardless)
adsfund.org: could not connect to host
airbnb.com: did not receive HSTS header
anycoin.me: did not receive HSTS header
api.lookout.com: could not connect to host
api.mega.co.nz: could not connect to host
api.recurly.com: did not receive HSTS header
@ -55,6 +54,7 @@ googleplex.com: could not connect to host (error ignored - included regardless)
goto.google.com: did not receive HSTS header (error ignored - included regardless)
greplin.com: did not receive HSTS header
groups.google.com: did not receive HSTS header (error ignored - included regardless)
harvestapp.com: could not connect to host
history.google.com: did not receive HSTS header (error ignored - included regardless)
hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
id.atlassian.com: did not receive HSTS header
@ -66,11 +66,12 @@ jitsi.org: did not receive HSTS header
jottit.com: did not receive HSTS header
keymaster.lookout.com: did not receive HSTS header
kiwiirc.com: max-age too low: 5256000
lastpass.com: could not connect to host
ledgerscope.net: did not receive HSTS header
liberty.lavabit.com: could not connect to host
lifeguard.aecom.com: did not receive HSTS header
lists.mayfirst.org: did not receive HSTS header
lumi.do: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 125" data: no]
lumi.do: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 124" data: no]
mail.google.com: did not receive HSTS header (error ignored - included regardless)
market.android.com: did not receive HSTS header (error ignored - included regardless)
mobilethreat.net: could not connect to host
@ -83,15 +84,17 @@ nexth.de: could not connect to host
nexth.net: did not receive HSTS header
nexth.us: could not connect to host
noexpect.org: could not connect to host
onedrive.live.com: could not connect to host
openshift.redhat.com: did not receive HSTS header
ottospora.nl: could not connect to host
paypal.com: max-age too low: 14400
payroll.xero.com: max-age too low: 3600
pixi.me: could not connect to host
platform.lookout.com: could not connect to host
play.google.com: did not receive HSTS header (error ignored - included regardless)
prodpad.com: did not receive HSTS header
profiles.google.com: did not receive HSTS header (error ignored - included regardless)
rapidresearch.me: did not receive HSTS header
rapidresearch.me: could not connect to host
riseup.net: did not receive HSTS header
sah3.net: could not connect to host
saturngames.co.uk: did not receive HSTS header
@ -101,8 +104,10 @@ semenkovich.com: did not receive HSTS header
serverdensity.io: did not receive HSTS header
shops.neonisi.com: could not connect to host
silentcircle.org: could not connect to host
simbolo.co.uk: could not connect to host
simon.butcher.name: max-age too low: 2629743
sites.google.com: did not receive HSTS header (error ignored - included regardless)
skydrive.live.com: could not connect to host
sol.io: could not connect to host
souyar.de: could not connect to host
souyar.net: could not connect to host
@ -127,7 +132,7 @@ www.developer.mydigipass.com: could not connect to host
www.elanex.biz: did not receive HSTS header
www.gmail.com: did not receive HSTS header (error ignored - included regardless)
www.googlemail.com: did not receive HSTS header (error ignored - included regardless)
www.gov.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 125" data: no]
www.gov.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 124" data: no]
www.greplin.com: could not connect to host
www.intercom.io: did not receive HSTS header
www.jitsi.org: did not receive HSTS header
@ -137,8 +142,9 @@ www.logentries.com: did not receive HSTS header
www.moneybookers.com: did not receive HSTS header
www.neonisi.com: could not connect to host
www.paycheckrecords.com: max-age too low: 86400
www.paypal.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 125" data: no]
www.paypal.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 124" data: no]
www.roddis.net: did not receive HSTS header
www.sandbox.mydigipass.com: could not connect to host
www.simbolo.co.uk: could not connect to host
www.surfeasy.com: did not receive HSTS header
zoo24.de: max-age too low: 2592000

View File

@ -8,7 +8,7 @@
/*****************************************************************************/
#include <stdint.h>
const PRTime gPreloadListExpirationTime = INT64_C(1414231604157000);
const PRTime gPreloadListExpirationTime = INT64_C(1414837778473000);
class nsSTSPreload
{
@ -18,6 +18,7 @@ class nsSTSPreload
};
static const nsSTSPreload kSTSPreloadList[] = {
{ "accounts.firefox.com", true },
{ "accounts.google.com", true },
{ "aclu.org", false },
{ "activiti.alfresco.com", false },
@ -25,6 +26,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adsfund.org", true },
{ "aladdinschools.appspot.com", false },
{ "alpha.irccloud.com", false },
{ "anycoin.me", true },
{ "api.intercom.io", false },
{ "api.simple.com", false },
{ "api.xero.com", false },

View File

@ -6446,5 +6446,29 @@
"expires_in_version": "never",
"kind": "flag",
"description": "If a master-password is enabled for this profile"
},
"DISPLAY_SCALING_OSX" : {
"expires_in_version": "never",
"kind": "linear",
"high": "500",
"n_buckets": "100",
"description": "Scaling percentage for the display where the first window is opened (OS X only)",
"cpp_guard": "XP_MACOSX"
},
"DISPLAY_SCALING_MSWIN" : {
"expires_in_version": "never",
"kind": "linear",
"high": "500",
"n_buckets": "100",
"description": "Scaling percentage for the display where the first window is opened (MS Windows only)",
"cpp_guard": "XP_WIN"
},
"DISPLAY_SCALING_LINUX" : {
"expires_in_version": "never",
"kind": "linear",
"high": "500",
"n_buckets": "100",
"description": "Scaling percentage for the display where the first window is opened (Linux only)",
"cpp_guard": "XP_LINUX"
}
}

View File

@ -226,6 +226,7 @@ let FormDataInternal = {
setTimeout(() => {
if (doc.body && doc.designMode == "on" && doc.documentURI == savedURL) {
doc.body.innerHTML = data.innerHTML;
this.fireEvent(doc.body, "input");
}
});
}
@ -311,13 +312,23 @@ let FormDataInternal = {
// Fire events for this node if applicable
if (eventType) {
let doc = aNode.ownerDocument;
let event = doc.createEvent("UIEvents");
event.initUIEvent(eventType, true, true, doc.defaultView, 0);
aNode.dispatchEvent(event);
this.fireEvent(aNode, eventType);
}
},
/**
* Dispatches an event of type |type| to the given |node|.
*
* @param node (DOMNode)
* @param type (string)
*/
fireEvent: function (node, type) {
let doc = node.ownerDocument;
let event = doc.createEvent("UIEvents");
event.initUIEvent(type, true, true, doc.defaultView, 0);
node.dispatchEvent(event);
},
/**
* Restores form data for the current frame hierarchy starting at |root|
* using the given form |data|.

View File

@ -668,6 +668,14 @@ function EM_R(aProperty) {
return gRDF.GetResource(PREFIX_NS_EM + aProperty);
}
function createAddonDetails(id, aAddon) {
return {
id: id || aAddon.id,
type: aAddon.type,
version: aAddon.version
};
}
/**
* Converts an RDF literal, resource or integer into a string.
*
@ -1954,9 +1962,8 @@ this.XPIProvider = {
if (AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_INSTALLED)
.indexOf(id) !== -1)
reason = BOOTSTRAP_REASONS.ADDON_INSTALL;
this.callBootstrapMethod(id, this.bootstrappedAddons[id].version,
this.bootstrappedAddons[id].type, file,
"startup", reason);
this.callBootstrapMethod(createAddonDetails(id, this.bootstrappedAddons[id]),
file, "startup", reason);
}
catch (e) {
logger.error("Failed to load bootstrap addon " + id + " from " +
@ -1977,8 +1984,8 @@ this.XPIProvider = {
for (let id in XPIProvider.bootstrappedAddons) {
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.persistentDescriptor = XPIProvider.bootstrappedAddons[id].descriptor;
XPIProvider.callBootstrapMethod(id, XPIProvider.bootstrappedAddons[id].version,
XPIProvider.bootstrappedAddons[id].type, file, "shutdown",
let addon = createAddonDetails(id, XPIProvider.bootstrappedAddons[id]);
XPIProvider.callBootstrapMethod(addon, file, "shutdown",
BOOTSTRAP_REASONS.APP_SHUTDOWN);
}
Services.obs.removeObserver(this, "quit-application-granted");
@ -2500,8 +2507,8 @@ this.XPIProvider = {
BOOTSTRAP_REASONS.ADDON_UPGRADE :
BOOTSTRAP_REASONS.ADDON_DOWNGRADE;
this.callBootstrapMethod(existingAddonID, oldBootstrap.version,
oldBootstrap.type, existingAddon, "uninstall", uninstallReason,
this.callBootstrapMethod(createAddonDetails(existingAddonID, oldBootstrap),
existingAddon, "uninstall", uninstallReason,
{ newVersion: newVersion });
this.unloadBootstrapScope(existingAddonID);
flushStartupCache();
@ -2530,8 +2537,8 @@ this.XPIProvider = {
if (oldBootstrap) {
// Re-install the old add-on
this.callBootstrapMethod(existingAddonID, oldBootstrap.version,
oldBootstrap.type, existingAddon, "install",
this.callBootstrapMethod(createAddonDetails(existingAddonID, oldBootstrap),
existingAddon, "install",
BOOTSTRAP_REASONS.ADDON_INSTALL);
}
continue;
@ -2786,8 +2793,7 @@ this.XPIProvider = {
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.persistentDescriptor = aAddonState.descriptor;
XPIProvider.callBootstrapMethod(newDBAddon.id, newDBAddon.version,
newDBAddon.type, file, "install",
XPIProvider.callBootstrapMethod(newDBAddon, file, "install",
installReason, { oldVersion: aOldAddon.version });
return false;
}
@ -2868,7 +2874,7 @@ this.XPIProvider = {
// The add-on is bootstrappable so call its install script
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.persistentDescriptor = aAddonState.descriptor;
XPIProvider.callBootstrapMethod(aOldAddon.id, aOldAddon.version, aOldAddon.type, file,
XPIProvider.callBootstrapMethod(aOldAddon, file,
"install",
BOOTSTRAP_REASONS.ADDON_INSTALL);
@ -3165,9 +3171,10 @@ this.XPIProvider = {
createInstance(Ci.nsIFile);
oldAddonFile.persistentDescriptor = oldBootstrap.descriptor;
XPIProvider.callBootstrapMethod(newDBAddon.id, oldBootstrap.version,
oldBootstrap.type, oldAddonFile, "uninstall",
installReason, { newVersion: newDBAddon.version });
XPIProvider.callBootstrapMethod(createAddonDetails(newDBAddon.id, oldBootstrap),
oldAddonFile, "uninstall", installReason,
{ newVersion: newDBAddon.version });
XPIProvider.unloadBootstrapScope(newDBAddon.id);
// If the new add-on is bootstrapped then we must flush the caches
@ -3182,7 +3189,7 @@ this.XPIProvider = {
// Visible bootstrapped add-ons need to have their install method called
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.persistentDescriptor = aAddonState.descriptor;
XPIProvider.callBootstrapMethod(newDBAddon.id, newDBAddon.version, newDBAddon.type, file,
XPIProvider.callBootstrapMethod(newDBAddon, file,
"install", installReason, extraParams);
if (!newDBAddon.active)
XPIProvider.unloadBootstrapScope(newDBAddon.id);
@ -4218,12 +4225,8 @@ this.XPIProvider = {
/**
* Calls a bootstrap method for an add-on.
*
* @param aId
* The ID of the add-on
* @param aVersion
* The version of the add-on
* @param aType
* The type for the add-on
* @param aAddon
* An object representing the add-on, with `id`, `type` and `version`
* @param aFile
* The nsIFile for the add-on
* @param aMethod
@ -4234,12 +4237,16 @@ this.XPIProvider = {
* An object of additional key/value pairs to pass to the method in
* the params argument
*/
callBootstrapMethod: function XPI_callBootstrapMethod(aId, aVersion, aType, aFile,
aMethod, aReason, aExtraParams) {
callBootstrapMethod: function XPI_callBootstrapMethod(aAddon, aFile, aMethod, aReason, aExtraParams) {
// Never call any bootstrap methods in safe mode
if (Services.appinfo.inSafeMode)
return;
if (!aAddon.id || !aAddon.version || !aAddon.type) {
logger.error(new Error("aAddon must include an id, version, and type"));
return;
}
let timeStart = new Date();
if (aMethod == "startup") {
logger.debug("Registering manifest for " + aFile.path);
@ -4248,21 +4255,21 @@ this.XPIProvider = {
try {
// Load the scope if it hasn't already been loaded
if (!(aId in this.bootstrapScopes))
this.loadBootstrapScope(aId, aFile, aVersion, aType);
if (!(aAddon.id in this.bootstrapScopes))
this.loadBootstrapScope(aAddon.id, aFile, aAddon.version, aAddon.type);
// Nothing to call for locales
if (aType == "locale")
if (aAddon.type == "locale")
return;
if (!(aMethod in this.bootstrapScopes[aId])) {
logger.warn("Add-on " + aId + " is missing bootstrap method " + aMethod);
if (!(aMethod in this.bootstrapScopes[aAddon.id])) {
logger.warn("Add-on " + aAddon.id + " is missing bootstrap method " + aMethod);
return;
}
let params = {
id: aId,
version: aVersion,
id: aAddon.id,
version: aAddon.version,
installPath: aFile.clone(),
resourceURI: getURIForResourceInFile(aFile, "")
};
@ -4273,13 +4280,13 @@ this.XPIProvider = {
}
}
logger.debug("Calling bootstrap method " + aMethod + " on " + aId + " version " +
aVersion);
logger.debug("Calling bootstrap method " + aMethod + " on " + aAddon.id + " version " +
aAddon.version);
try {
this.bootstrapScopes[aId][aMethod](params, aReason);
this.bootstrapScopes[aAddon.id][aMethod](params, aReason);
}
catch (e) {
logger.warn("Exception running bootstrap method " + aMethod + " on " + aId, e);
logger.warn("Exception running bootstrap method " + aMethod + " on " + aAddon.id, e);
}
}
finally {
@ -4287,7 +4294,7 @@ this.XPIProvider = {
logger.debug("Removing manifest for " + aFile.path);
Components.manager.removeBootstrappedManifestLocation(aFile);
}
this.setTelemetry(aId, aMethod + "_MS", new Date() - timeStart);
this.setTelemetry(aAddon.id, aMethod + "_MS", new Date() - timeStart);
}
},
@ -4390,7 +4397,7 @@ this.XPIProvider = {
if (isDisabled) {
if (aAddon.bootstrap) {
let file = aAddon._installLocation.getLocationForID(aAddon.id);
this.callBootstrapMethod(aAddon.id, aAddon.version, aAddon.type, file, "shutdown",
this.callBootstrapMethod(aAddon, file, "shutdown",
BOOTSTRAP_REASONS.ADDON_DISABLE);
this.unloadBootstrapScope(aAddon.id);
}
@ -4399,7 +4406,7 @@ this.XPIProvider = {
else {
if (aAddon.bootstrap) {
let file = aAddon._installLocation.getLocationForID(aAddon.id);
this.callBootstrapMethod(aAddon.id, aAddon.version, aAddon.type, file, "startup",
this.callBootstrapMethod(aAddon, file, "startup",
BOOTSTRAP_REASONS.ADDON_ENABLE);
}
AddonManagerPrivate.callAddonListeners("onEnabled", wrapper);
@ -4475,11 +4482,11 @@ this.XPIProvider = {
if (aAddon.bootstrap) {
let file = aAddon._installLocation.getLocationForID(aAddon.id);
XPIProvider.callBootstrapMethod(aAddon.id, aAddon.version, aAddon.type, file,
XPIProvider.callBootstrapMethod(aAddon, file,
"install", BOOTSTRAP_REASONS.ADDON_INSTALL);
if (aAddon.active) {
XPIProvider.callBootstrapMethod(aAddon.id, aAddon.version, aAddon.type, file,
XPIProvider.callBootstrapMethod(aAddon, file,
"startup", BOOTSTRAP_REASONS.ADDON_INSTALL);
}
else {
@ -4510,13 +4517,11 @@ this.XPIProvider = {
if (aAddon.bootstrap) {
let file = aAddon._installLocation.getLocationForID(aAddon.id);
if (aAddon.active) {
this.callBootstrapMethod(aAddon.id, aAddon.version, aAddon.type, file,
"shutdown",
this.callBootstrapMethod(aAddon, file, "shutdown",
BOOTSTRAP_REASONS.ADDON_UNINSTALL);
}
this.callBootstrapMethod(aAddon.id, aAddon.version, aAddon.type, file,
"uninstall",
this.callBootstrapMethod(aAddon, file, "uninstall",
BOOTSTRAP_REASONS.ADDON_UNINSTALL);
this.unloadBootstrapScope(aAddon.id);
flushStartupCache();
@ -5587,16 +5592,12 @@ AddonInstall.prototype = {
let file = this.existingAddon._installLocation
.getLocationForID(this.existingAddon.id);
if (this.existingAddon.active) {
XPIProvider.callBootstrapMethod(this.existingAddon.id,
this.existingAddon.version,
this.existingAddon.type, file,
XPIProvider.callBootstrapMethod(this.existingAddon, file,
"shutdown", reason,
{ newVersion: this.addon.version });
}
XPIProvider.callBootstrapMethod(this.existingAddon.id,
this.existingAddon.version,
this.existingAddon.type, file,
XPIProvider.callBootstrapMethod(this.existingAddon, file,
"uninstall", reason,
{ newVersion: this.addon.version });
XPIProvider.unloadBootstrapScope(this.existingAddon.id);
@ -5637,8 +5638,7 @@ AddonInstall.prototype = {
}
if (this.addon.bootstrap) {
XPIProvider.callBootstrapMethod(this.addon.id, this.addon.version,
this.addon.type, file, "install",
XPIProvider.callBootstrapMethod(this.addon, file, "install",
reason, extraParams);
}
@ -5653,8 +5653,7 @@ AddonInstall.prototype = {
if (this.addon.bootstrap) {
if (this.addon.active) {
XPIProvider.callBootstrapMethod(this.addon.id, this.addon.version,
this.addon.type, file, "startup",
XPIProvider.callBootstrapMethod(this.addon, file, "startup",
reason, extraParams);
}
else {