mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-29 07:42:04 +00:00
Merge m-c to m-i
This commit is contained in:
commit
5f50d49628
@ -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">
|
||||
|
@ -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();
|
||||
}
|
||||
},
|
||||
|
@ -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"
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
});
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
55
browser/experiments/test/xpcshell/test_upgrade.js
Normal file
55
browser/experiments/test/xpcshell/test_upgrade.js
Normal 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();
|
||||
}
|
@ -21,3 +21,4 @@ generated-files =
|
||||
[test_telemetry.js]
|
||||
[test_healthreport.js]
|
||||
[test_previous_provider.js]
|
||||
[test_upgrade.js]
|
||||
|
@ -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() {
|
||||
|
@ -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
|
||||
|
@ -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 },
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -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|.
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user