зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla inbound to mozilla-central a=merge
This commit is contained in:
Коммит
1d5dc33cfd
|
@ -166,7 +166,7 @@ CustomizeMode.prototype = {
|
|||
},
|
||||
|
||||
_updateLWThemeButtonIcon() {
|
||||
let lwthemeButton = this.document.getElementById("customization-lwtheme-button");
|
||||
let lwthemeButton = this.$("customization-lwtheme-button");
|
||||
let lwthemeIcon = this.document.getAnonymousElementByAttribute(lwthemeButton,
|
||||
"class", "button-icon");
|
||||
lwthemeIcon.style.backgroundImage = LightweightThemeManager.currentTheme ?
|
||||
|
@ -262,7 +262,7 @@ CustomizeMode.prototype = {
|
|||
|
||||
// Always disable the reset button at the start of customize mode, it'll be re-enabled
|
||||
// if necessary when we finish entering:
|
||||
let resetButton = this.document.getElementById("customization-reset-button");
|
||||
let resetButton = this.$("customization-reset-button");
|
||||
resetButton.setAttribute("disabled", "true");
|
||||
|
||||
(async () => {
|
||||
|
@ -398,8 +398,8 @@ CustomizeMode.prototype = {
|
|||
this.togglePong(false);
|
||||
|
||||
// Disable the reset and undo reset buttons while transitioning:
|
||||
let resetButton = this.document.getElementById("customization-reset-button");
|
||||
let undoResetButton = this.document.getElementById("customization-undo-reset-button");
|
||||
let resetButton = this.$("customization-reset-button");
|
||||
let undoResetButton = this.$("customization-undo-reset-button");
|
||||
undoResetButton.hidden = resetButton.disabled = true;
|
||||
|
||||
this._transitioning = true;
|
||||
|
@ -653,7 +653,7 @@ CustomizeMode.prototype = {
|
|||
}
|
||||
}
|
||||
if (gCosmeticAnimationsEnabled) {
|
||||
let overflowButton = this.document.getElementById("nav-bar-overflow-button");
|
||||
let overflowButton = this.$("nav-bar-overflow-button");
|
||||
BrowserUtils.setToolbarButtonHeightProperty(overflowButton).then(() => {
|
||||
overflowButton.setAttribute("animate", "true");
|
||||
overflowButton.addEventListener("animationend", function onAnimationEnd(event) {
|
||||
|
@ -949,7 +949,7 @@ CustomizeMode.prototype = {
|
|||
toolbarItem.setAttribute("command", commandID);
|
||||
|
||||
// XXX Bug 309953 - toolbarbuttons aren't in sync with their commands after customizing
|
||||
let command = this.document.getElementById(commandID);
|
||||
let command = this.$(commandID);
|
||||
if (command && command.hasAttribute("disabled")) {
|
||||
toolbarItem.setAttribute("disabled", command.getAttribute("disabled"));
|
||||
}
|
||||
|
@ -1017,7 +1017,7 @@ CustomizeMode.prototype = {
|
|||
_addDragHandlers(aTarget) {
|
||||
// Allow dropping on the padding of the arrow panel.
|
||||
if (aTarget.id == CustomizableUI.AREA_FIXED_OVERFLOW_PANEL) {
|
||||
aTarget = this.document.getElementById("customization-panelHolder");
|
||||
aTarget = this.$("customization-panelHolder");
|
||||
}
|
||||
aTarget.addEventListener("dragstart", this, true);
|
||||
aTarget.addEventListener("dragover", this, true);
|
||||
|
@ -1038,7 +1038,7 @@ CustomizeMode.prototype = {
|
|||
// Remove handler from different target if it was added to
|
||||
// allow dropping on the padding of the arrow panel.
|
||||
if (aTarget.id == CustomizableUI.AREA_FIXED_OVERFLOW_PANEL) {
|
||||
aTarget = this.document.getElementById("customization-panelHolder");
|
||||
aTarget = this.$("customization-panelHolder");
|
||||
}
|
||||
aTarget.removeEventListener("dragstart", this, true);
|
||||
aTarget.removeEventListener("dragover", this, true);
|
||||
|
@ -1085,7 +1085,7 @@ CustomizeMode.prototype = {
|
|||
reset() {
|
||||
this.resetting = true;
|
||||
// Disable the reset button temporarily while resetting:
|
||||
let btn = this.document.getElementById("customization-reset-button");
|
||||
let btn = this.$("customization-reset-button");
|
||||
BrowserUITelemetry.countCustomizationEvent("reset");
|
||||
btn.disabled = true;
|
||||
return (async () => {
|
||||
|
@ -1200,7 +1200,7 @@ CustomizeMode.prototype = {
|
|||
},
|
||||
|
||||
onWidgetDestroyed(aWidgetId) {
|
||||
let wrapper = this.document.getElementById("wrapper-" + aWidgetId);
|
||||
let wrapper = this.$("wrapper-" + aWidgetId);
|
||||
if (wrapper) {
|
||||
wrapper.remove();
|
||||
}
|
||||
|
@ -1210,7 +1210,7 @@ CustomizeMode.prototype = {
|
|||
// If the node was added to an area, we would have gotten an onWidgetAdded notification,
|
||||
// plus associated DOM change notifications, so only do stuff for the palette:
|
||||
if (!aArea) {
|
||||
let widgetNode = this.document.getElementById(aWidgetId);
|
||||
let widgetNode = this.$(aWidgetId);
|
||||
if (widgetNode) {
|
||||
this.wrapToolbarItem(widgetNode, "palette");
|
||||
} else {
|
||||
|
@ -1462,8 +1462,8 @@ CustomizeMode.prototype = {
|
|||
},
|
||||
|
||||
_clearLWThemesMenu(panel) {
|
||||
let footer = this.document.getElementById("customization-lwtheme-menu-footer");
|
||||
let recommendedLabel = this.document.getElementById("customization-lwtheme-menu-recommended");
|
||||
let footer = this.$("customization-lwtheme-menu-footer");
|
||||
let recommendedLabel = this.$("customization-lwtheme-menu-recommended");
|
||||
for (let element of [footer, recommendedLabel]) {
|
||||
while (element.previousSibling &&
|
||||
element.previousSibling.localName == "toolbarbutton") {
|
||||
|
@ -1487,7 +1487,7 @@ CustomizeMode.prototype = {
|
|||
|
||||
_updateEmptyPaletteNotice() {
|
||||
let paletteItems = this.visiblePalette.getElementsByTagName("toolbarpaletteitem");
|
||||
let whimsyButton = this.document.getElementById("whimsy-button");
|
||||
let whimsyButton = this.$("whimsy-button");
|
||||
|
||||
if (paletteItems.length == 1 &&
|
||||
paletteItems[0].id.includes("wrapper-customizableui-special-spring")) {
|
||||
|
@ -1499,12 +1499,12 @@ CustomizeMode.prototype = {
|
|||
},
|
||||
|
||||
_updateResetButton() {
|
||||
let btn = this.document.getElementById("customization-reset-button");
|
||||
let btn = this.$("customization-reset-button");
|
||||
btn.disabled = CustomizableUI.inDefaultState;
|
||||
},
|
||||
|
||||
_updateUndoResetButton() {
|
||||
let undoResetButton = this.document.getElementById("customization-undo-reset-button");
|
||||
let undoResetButton = this.$("customization-undo-reset-button");
|
||||
undoResetButton.hidden = !CustomizableUI.canUndoReset;
|
||||
},
|
||||
|
||||
|
@ -1556,7 +1556,7 @@ CustomizeMode.prototype = {
|
|||
let originalTarget = aEvent.originalTarget;
|
||||
if (this._isUnwantedDragDrop(aEvent) ||
|
||||
this.visiblePalette.contains(originalTarget) ||
|
||||
this.document.getElementById("customization-panelHolder").contains(originalTarget)) {
|
||||
this.$("customization-panelHolder").contains(originalTarget)) {
|
||||
return;
|
||||
}
|
||||
// We have a dragover/drop on the palette.
|
||||
|
@ -1566,7 +1566,7 @@ CustomizeMode.prototype = {
|
|||
this._onDragDrop(aEvent, this.visiblePalette);
|
||||
}
|
||||
};
|
||||
let contentContainer = this.document.getElementById("customization-content-container");
|
||||
let contentContainer = this.$("customization-content-container");
|
||||
contentContainer.addEventListener("dragover", this.paletteDragHandler, true);
|
||||
contentContainer.addEventListener("drop", this.paletteDragHandler, true);
|
||||
},
|
||||
|
@ -1575,7 +1575,7 @@ CustomizeMode.prototype = {
|
|||
DragPositionManager.stop();
|
||||
this._removeDragHandlers(this.visiblePalette);
|
||||
|
||||
let contentContainer = this.document.getElementById("customization-content-container");
|
||||
let contentContainer = this.$("customization-content-container");
|
||||
contentContainer.removeEventListener("dragover", this.paletteDragHandler, true);
|
||||
contentContainer.removeEventListener("drop", this.paletteDragHandler, true);
|
||||
delete this.paletteDragHandler;
|
||||
|
@ -2113,7 +2113,7 @@ CustomizeMode.prototype = {
|
|||
let makeSpaceImmediately = false;
|
||||
if (!gDraggingInToolbars.has(targetArea.id)) {
|
||||
gDraggingInToolbars.add(targetArea.id);
|
||||
let draggedWrapper = this.document.getElementById("wrapper-" + aDraggedItemId);
|
||||
let draggedWrapper = this.$("wrapper-" + aDraggedItemId);
|
||||
let originArea = this._getCustomizableParent(draggedWrapper);
|
||||
makeSpaceImmediately = originArea == targetArea;
|
||||
}
|
||||
|
@ -2184,7 +2184,7 @@ CustomizeMode.prototype = {
|
|||
|
||||
_setGridDragActive(aDragOverNode, aDraggedItem, aValue) {
|
||||
let targetArea = this._getCustomizableParent(aDragOverNode);
|
||||
let draggedWrapper = this.document.getElementById("wrapper-" + aDraggedItem.id);
|
||||
let draggedWrapper = this.$("wrapper-" + aDraggedItem.id);
|
||||
let originArea = this._getCustomizableParent(draggedWrapper);
|
||||
let positionManager = DragPositionManager.getManagerForArea(targetArea);
|
||||
let draggedSize = this._getDragItemSize(aDragOverNode, aDraggedItem);
|
||||
|
@ -2362,13 +2362,13 @@ CustomizeMode.prototype = {
|
|||
},
|
||||
|
||||
_setupDownloadAutoHideToggle() {
|
||||
this.document.getElementById(kDownloadAutohidePanelId).removeAttribute("hidden");
|
||||
this.$(kDownloadAutohidePanelId).removeAttribute("hidden");
|
||||
this.window.addEventListener("click", this._checkForDownloadsClick, true);
|
||||
},
|
||||
|
||||
_teardownDownloadAutoHideToggle() {
|
||||
this.window.removeEventListener("click", this._checkForDownloadsClick, true);
|
||||
this.document.getElementById(kDownloadAutohidePanelId).hidePopup();
|
||||
this.$(kDownloadAutohidePanelId).hidePopup();
|
||||
},
|
||||
|
||||
_maybeMoveDownloadsButtonToNavBar() {
|
||||
|
@ -2458,7 +2458,7 @@ CustomizeMode.prototype = {
|
|||
// It's possible we're toggling for a reason other than hitting
|
||||
// the button (we might be exiting, for example), so make sure that
|
||||
// the state and checkbox are in sync.
|
||||
let whimsyButton = this.document.getElementById("whimsy-button");
|
||||
let whimsyButton = this.$("whimsy-button");
|
||||
whimsyButton.checked = enabled;
|
||||
|
||||
if (enabled) {
|
||||
|
|
|
@ -10,7 +10,6 @@ skip-if = os == "linux" # Bug 952422
|
|||
[browser_iframe_gone_mid_download.js]
|
||||
[browser_indicatorDrop.js]
|
||||
[browser_libraryDrop.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[browser_downloads_panel_block.js]
|
||||
skip-if = true # Bug 1352792
|
||||
[browser_downloads_panel_height.js]
|
||||
|
|
|
@ -91,7 +91,6 @@ skip-if = (os == 'win' && !debug) # bug 1352668
|
|||
support-files =
|
||||
../../../../../devtools/client/inspector/extensions/test/head_devtools_inspector_sidebar.js
|
||||
[browser_ext_find.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[browser_ext_geckoProfiler_symbolicate.js]
|
||||
[browser_ext_getViews.js]
|
||||
[browser_ext_history_redirect.js]
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
.. _uitelemetry:
|
||||
|
||||
=======================
|
||||
UITelemetry data format
|
||||
=======================
|
||||
==================================
|
||||
UITelemetry data format (obsolete)
|
||||
==================================
|
||||
|
||||
.. note::
|
||||
|
||||
``UITelemetry`` is deprecated. As of Firefox 61, ``UITelemetry`` is no longer reported.
|
||||
|
||||
UI Telemetry sends its data as a JSON blob. This document describes the different parts
|
||||
of the JSON blob.
|
||||
|
|
|
@ -11,8 +11,6 @@ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
|||
|
||||
ChromeUtils.defineModuleGetter(this, "AppConstants",
|
||||
"resource://gre/modules/AppConstants.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "UITelemetry",
|
||||
"resource://gre/modules/UITelemetry.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "RecentWindow",
|
||||
"resource:///modules/RecentWindow.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "CustomizableUI",
|
||||
|
@ -166,18 +164,6 @@ const BUCKET_SEPARATOR = "|";
|
|||
|
||||
var BrowserUITelemetry = {
|
||||
init() {
|
||||
UITelemetry.addSimpleMeasureFunction("toolbars",
|
||||
this.getToolbarMeasures.bind(this));
|
||||
UITelemetry.addSimpleMeasureFunction("contextmenu",
|
||||
this.getContextMenuInfo.bind(this));
|
||||
// Ensure that UITour.jsm remains lazy-loaded, yet always registers its
|
||||
// simple measure function with UITelemetry.
|
||||
UITelemetry.addSimpleMeasureFunction("UITour",
|
||||
() => UITour.getTelemetry());
|
||||
|
||||
UITelemetry.addSimpleMeasureFunction("syncstate",
|
||||
this.getSyncState.bind(this));
|
||||
|
||||
Services.obs.addObserver(this, "autocomplete-did-enter-text");
|
||||
CustomizableUI.addListener(this);
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ skip-if = !e10s
|
|||
[browser_SitePermissions_expiry.js]
|
||||
[browser_SitePermissions_tab_urls.js]
|
||||
[browser_taskbar_preview.js]
|
||||
skip-if = os != "win" || (os == 'win' && ccov) # Bug 1423667
|
||||
skip-if = os != "win"
|
||||
[browser_UnsubmittedCrashHandler.js]
|
||||
run-if = crashreporter
|
||||
[browser_urlBar_zoom.js]
|
||||
|
|
Двоичные данные
browser/themes/shared/toolbarbutton-dropdown-arrow.png
Двоичные данные
browser/themes/shared/toolbarbutton-dropdown-arrow.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 91 B |
Двоичные данные
browser/themes/windows/toolbarbutton-dropdown-arrow-win7.png
Двоичные данные
browser/themes/windows/toolbarbutton-dropdown-arrow-win7.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 208 B |
|
@ -450,9 +450,7 @@ Tools.accessibility = {
|
|||
label: l10n("accessibility.label"),
|
||||
panelLabel: l10n("accessibility.panelLabel"),
|
||||
get tooltip() {
|
||||
return l10n("accessibility.tooltip",
|
||||
(osString == "Darwin" ? "Cmd+Opt+" : "Ctrl+Shift+") +
|
||||
l10n("accessibility.commandkey"));
|
||||
return l10n("accessibility.tooltip2");
|
||||
},
|
||||
inMenu: true,
|
||||
|
||||
|
|
|
@ -256,11 +256,11 @@ accessibility.panelLabel=Accessibility Panel
|
|||
# Used for the menuitem in the tool menu
|
||||
accessibility.accesskey=y
|
||||
|
||||
# LOCALIZATION NOTE (accessibility.tooltip):
|
||||
# LOCALIZATION NOTE (accessibility.tooltip2):
|
||||
# This string is displayed in the tooltip of the tab when the Accessibility is
|
||||
# displayed inside the developer tools window.
|
||||
# Keyboard shortcut for Accessibility panel will be shown inside the brackets.
|
||||
accessibility.tooltip=Accessibility (%S)
|
||||
accessibility.tooltip2=Accessibility
|
||||
|
||||
# LOCALIZATION NOTE (toolbox.buttons.splitconsole):
|
||||
# This is the tooltip of the button in the toolbox toolbar used to toggle
|
||||
|
|
|
@ -167,12 +167,6 @@ XPCOMUtils.defineLazyGetter(this, "KeyShortcuts", function() {
|
|||
shortcut: KeyShortcutsBundle.GetStringFromName("dom.commandkey"),
|
||||
modifiers
|
||||
},
|
||||
// Key for opening the Accessibility Panel
|
||||
{
|
||||
toolId: "accessibility",
|
||||
shortcut: KeyShortcutsBundle.GetStringFromName("accessibility.commandkey"),
|
||||
modifiers
|
||||
},
|
||||
];
|
||||
});
|
||||
|
||||
|
|
|
@ -65,7 +65,3 @@ storage.commandkey=VK_F9
|
|||
# LOCALIZATION NOTE (dom.commandkey):
|
||||
# Key pressed to open a toolbox with the DOM panel selected
|
||||
dom.commandkey=W
|
||||
|
||||
# LOCALIZATION NOTE (accessibility.commandkey):
|
||||
# Key pressed to open a toolbox with the accessibility panel selected
|
||||
accessibility.commandkey=Y
|
||||
|
|
|
@ -285,7 +285,6 @@ BroadcastChannel::BroadcastChannel(nsPIDOMWindowInner* aWindow,
|
|||
const nsAString& aChannel)
|
||||
: DOMEventTargetHelper(aWindow)
|
||||
, mChannel(aChannel)
|
||||
, mInnerID(0)
|
||||
, mState(StateActive)
|
||||
{
|
||||
// Window can be null in workers
|
||||
|
@ -387,17 +386,6 @@ BroadcastChannel::Constructor(const GlobalObject& aGlobal,
|
|||
|
||||
bc->mActor->SetParent(bc);
|
||||
|
||||
if (!bc->mWorkerRef) {
|
||||
MOZ_ASSERT(window);
|
||||
bc->mInnerID = window->WindowID();
|
||||
|
||||
// Register as observer for inner-window-destroyed.
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->AddObserver(bc, "inner-window-destroyed", false);
|
||||
}
|
||||
}
|
||||
|
||||
return bc.forget();
|
||||
}
|
||||
|
||||
|
@ -490,34 +478,6 @@ BroadcastChannel::Shutdown()
|
|||
IgnoreKeepAliveIfHasListenersFor(NS_LITERAL_STRING("message"));
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
BroadcastChannel::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
const char16_t* aData)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(!strcmp(aTopic, "inner-window-destroyed"));
|
||||
|
||||
// If the window is destroyed we have to release the reference that we are
|
||||
// keeping.
|
||||
nsCOMPtr<nsISupportsPRUint64> wrapper = do_QueryInterface(aSubject);
|
||||
NS_ENSURE_TRUE(wrapper, NS_ERROR_FAILURE);
|
||||
|
||||
uint64_t innerID;
|
||||
nsresult rv = wrapper->GetData(&innerID);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (innerID == mInnerID) {
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->RemoveObserver(this, "inner-window-destroyed");
|
||||
}
|
||||
|
||||
Shutdown();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
BroadcastChannel::RemoveDocFromBFCache()
|
||||
{
|
||||
|
@ -543,6 +503,13 @@ BroadcastChannel::RemoveDocFromBFCache()
|
|||
bfCacheEntry->RemoveFromBFCacheSync();
|
||||
}
|
||||
|
||||
void
|
||||
BroadcastChannel::DisconnectFromOwner()
|
||||
{
|
||||
Shutdown();
|
||||
DOMEventTargetHelper::DisconnectFromOwner();
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(BroadcastChannel)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(BroadcastChannel,
|
||||
|
@ -555,7 +522,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(BroadcastChannel,
|
|||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BroadcastChannel)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIObserver)
|
||||
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(BroadcastChannel, DOMEventTargetHelper)
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/DOMEventTargetHelper.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsTArray.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
|
||||
|
@ -30,12 +29,9 @@ class WorkerRef;
|
|||
|
||||
class BroadcastChannel final
|
||||
: public DOMEventTargetHelper
|
||||
, public nsIObserver
|
||||
{
|
||||
friend class BroadcastChannelChild;
|
||||
|
||||
NS_DECL_NSIOBSERVER
|
||||
|
||||
typedef mozilla::ipc::PrincipalInfo PrincipalInfo;
|
||||
|
||||
public:
|
||||
|
@ -79,14 +75,14 @@ private:
|
|||
|
||||
void RemoveDocFromBFCache();
|
||||
|
||||
void DisconnectFromOwner() override;
|
||||
|
||||
RefPtr<BroadcastChannelChild> mActor;
|
||||
|
||||
RefPtr<WorkerRef> mWorkerRef;
|
||||
|
||||
nsString mChannel;
|
||||
|
||||
uint64_t mInnerID;
|
||||
|
||||
enum {
|
||||
StateActive,
|
||||
StateClosed
|
||||
|
|
|
@ -86,6 +86,8 @@ BlockScriptWithWrongMimeType=Script from “%1$S” was blocked because of a dis
|
|||
BlockTopLevelDataURINavigation=Navigation to toplevel data: URI not allowed (Blocked loading of: “%1$S”)
|
||||
BlockSubresourceRedirectToData=Redirecting to insecure data: URI not allowed (Blocked loading of: “%1$S”)
|
||||
|
||||
BlockSubresourceFTP=Loading FTP subresource within http(s) page not allowed (Blocked loading of: “%1$S”)
|
||||
|
||||
# LOCALIZATION NOTE (browserUpgradeInsecureDisplayRequest):
|
||||
# %1$S is the browser name "brandShortName"; %2$S is the URL of the upgraded request; %1$S is the upgraded scheme.
|
||||
BrowserUpgradeInsecureDisplayRequest = %1$S is upgrading an insecure display request ‘%2$S’ to use ‘%3$S’
|
||||
|
|
|
@ -159,6 +159,54 @@ nsContentSecurityManager::AllowInsecureRedirectToDataURI(nsIChannel* aNewChannel
|
|||
return false;
|
||||
}
|
||||
|
||||
/* static */ bool
|
||||
nsContentSecurityManager::AllowFTPSubresourceLoad(nsIChannel* aChannel)
|
||||
{
|
||||
// We dissallow using FTP resources as a subresource everywhere.
|
||||
// The only valid way to use FTP resources is loading it as
|
||||
// a top level document.
|
||||
|
||||
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
|
||||
if (!loadInfo) {
|
||||
return true;
|
||||
}
|
||||
|
||||
nsContentPolicyType type = loadInfo->GetExternalContentPolicyType();
|
||||
if (type == nsIContentPolicy::TYPE_DOCUMENT) {
|
||||
return true;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri));
|
||||
if (NS_FAILED(rv) || !uri) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isFtpURI = (NS_SUCCEEDED(uri->SchemeIs("ftp", &isFtpURI)) && isFtpURI);
|
||||
if (!isFtpURI) {
|
||||
return true;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
if (nsINode* node = loadInfo->LoadingNode()) {
|
||||
doc = node->OwnerDoc();
|
||||
}
|
||||
|
||||
nsAutoCString spec;
|
||||
uri->GetSpec(spec);
|
||||
NS_ConvertUTF8toUTF16 specUTF16(NS_UnescapeURL(spec));
|
||||
const char16_t* params[] = { specUTF16.get() };
|
||||
|
||||
nsContentUtils::ReportToConsole(nsIScriptError::warningFlag,
|
||||
NS_LITERAL_CSTRING("FTP_URI_BLOCKED"),
|
||||
doc,
|
||||
nsContentUtils::eSECURITY_PROPERTIES,
|
||||
"BlockSubresourceFTP",
|
||||
params, ArrayLength(params));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static nsresult
|
||||
ValidateSecurityFlags(nsILoadInfo* aLoadInfo)
|
||||
{
|
||||
|
@ -758,6 +806,10 @@ nsContentSecurityManager::CheckChannel(nsIChannel* aChannel)
|
|||
// consider calling SetBlockedRequest in nsContentSecurityManager::CheckChannel
|
||||
}
|
||||
|
||||
if (!AllowFTPSubresourceLoad(aChannel)) {
|
||||
return NS_ERROR_CONTENT_BLOCKED;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@ public:
|
|||
static bool AllowTopLevelNavigationToDataURI(nsIChannel* aChannel);
|
||||
static bool AllowInsecureRedirectToDataURI(nsIChannel* aNewChannel);
|
||||
|
||||
static bool AllowFTPSubresourceLoad(nsIChannel* aChannel);
|
||||
|
||||
private:
|
||||
static nsresult CheckChannel(nsIChannel* aChannel);
|
||||
|
||||
|
|
|
@ -12,3 +12,6 @@ support-files =
|
|||
[browser_test_view_image_data_navigation.js]
|
||||
support-files =
|
||||
file_view_image_data_navigation.html
|
||||
[browser_test_FTP_console_warning.js]
|
||||
support-files =
|
||||
file_FTP_console_warning.html
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
// Description of the test:
|
||||
// Ensure that FTP subresource loads trigger a warning in the webconsole.
|
||||
'use strict';
|
||||
|
||||
function scopedCuImport(path) {
|
||||
const scope = {};
|
||||
ChromeUtils.import(path, scope);
|
||||
return scope;
|
||||
}
|
||||
const {loader, require} = scopedCuImport("resource://devtools/shared/Loader.jsm");
|
||||
const {TargetFactory} = require("devtools/client/framework/target");
|
||||
const {Utils: WebConsoleUtils} =
|
||||
require("devtools/client/webconsole/utils");
|
||||
let { gDevTools } = require("devtools/client/framework/devtools");
|
||||
let promise = require("promise");
|
||||
|
||||
/**
|
||||
* Open the toolbox in a given tab.
|
||||
* @param {XULNode} tab The tab the toolbox should be opened in.
|
||||
* @param {String} toolId Optional. The ID of the tool to be selected.
|
||||
* @param {String} hostType Optional. The type of toolbox host to be used.
|
||||
* @return {Promise} Resolves with the toolbox, when it has been opened.
|
||||
*/
|
||||
var openToolboxForTab = Task.async(function* (tab, toolId, hostType) {
|
||||
info("Opening the toolbox");
|
||||
|
||||
let toolbox;
|
||||
let target = TargetFactory.forTab(tab);
|
||||
yield target.makeRemote();
|
||||
|
||||
// Check if the toolbox is already loaded.
|
||||
toolbox = gDevTools.getToolbox(target);
|
||||
if (toolbox) {
|
||||
if (!toolId || (toolId && toolbox.getPanel(toolId))) {
|
||||
info("Toolbox is already opened");
|
||||
return toolbox;
|
||||
}
|
||||
}
|
||||
|
||||
// If not, load it now.
|
||||
toolbox = yield gDevTools.showToolbox(target, toolId, hostType);
|
||||
|
||||
// Make sure that the toolbox frame is focused.
|
||||
yield new Promise(resolve => waitForFocus(resolve, toolbox.win));
|
||||
|
||||
info("Toolbox opened and focused");
|
||||
|
||||
return toolbox;
|
||||
});
|
||||
|
||||
|
||||
function console_observer(subject, topic, data) {
|
||||
var message = subject.wrappedJSObject.arguments[0];
|
||||
ok(false, message);
|
||||
};
|
||||
|
||||
var webconsole = null;
|
||||
// These files don't actually exist, we are just looking for messages
|
||||
// that indicate that loading those files would have been blocked.
|
||||
var seen_files = ["a.html", "b.html", "c.html", "d.png"];
|
||||
|
||||
function on_new_message(new_messages) {
|
||||
for (let message of new_messages) {
|
||||
let elem = message.node;
|
||||
let text = elem.textContent;
|
||||
|
||||
if (text.includes("Loading FTP subresource within http(s) page not allowed")) {
|
||||
// Remove the file in the message from the list.
|
||||
seen_files = seen_files.filter(file => {
|
||||
return !text.includes(file);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function do_cleanup() {
|
||||
if (webconsole) {
|
||||
webconsole.ui.off("new-messages", on_new_message);
|
||||
}
|
||||
}
|
||||
|
||||
const kTestPath = getRootDirectory(gTestPath)
|
||||
.replace("chrome://mochitests/content", "http://mochi.test:8888")
|
||||
const kTestURI = kTestPath + "file_FTP_console_warning.html";
|
||||
|
||||
add_task(async function() {
|
||||
// A longer timeout is necessary for this test than the plain mochitests
|
||||
// due to opening a new tab with the web console.
|
||||
requestLongerTimeout(4);
|
||||
registerCleanupFunction(do_cleanup);
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
|
||||
|
||||
let toolbox = await openToolboxForTab(tab, "webconsole");
|
||||
ok(toolbox, "Got toolbox");
|
||||
let hud = toolbox.getCurrentPanel().hud;
|
||||
ok(hud, "Got hud");
|
||||
|
||||
if (!webconsole) {
|
||||
registerCleanupFunction(do_cleanup);
|
||||
hud.ui.on("new-messages", on_new_message);
|
||||
webconsole = hud;
|
||||
}
|
||||
|
||||
await BrowserTestUtils.loadURI(gBrowser.selectedBrowser, kTestURI);
|
||||
|
||||
await BrowserTestUtils.waitForCondition(() => seen_files.length === 0);
|
||||
|
||||
is(seen_files.length, 0, "All FTP subresources should be blocked");
|
||||
|
||||
BrowserTestUtils.removeTab(tab);
|
||||
});
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<body>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>FTP subresources</title>
|
||||
</head>
|
||||
<body>
|
||||
<iframe src="ftp://blocked.test/a.html"></iframe>
|
||||
<iframe srcdoc='<iframe src="ftp://blocked.test/b.html"></iframe>'></iframe>
|
||||
<iframe src='data:text/html,<iframe src="ftp://blocked.test/c.html"></iframe>'></iframe>
|
||||
<img src="ftp://blocked.test/d.png">
|
||||
</body>
|
||||
</html>
|
|
@ -121,7 +121,6 @@ requesttimeoutfactor = 2
|
|||
[test_bug380994.js]
|
||||
[test_bug388281.js]
|
||||
[test_bug396389.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[test_bug401564.js]
|
||||
[test_bug411952.js]
|
||||
[test_bug412945.js]
|
||||
|
@ -251,7 +250,6 @@ run-sequentially = node server exceptions dont replay well
|
|||
[test_multipart_streamconv_missing_boundary_lead_dashes.js]
|
||||
[test_multipart_streamconv-byte-by-byte.js]
|
||||
[test_nestedabout_serialize.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[test_net_addr.js]
|
||||
# Bug 732363: test fails on windows for unknown reasons.
|
||||
skip-if = os == "win"
|
||||
|
@ -310,7 +308,7 @@ fail-if = os == "android"
|
|||
# This used to be hasNode, but that caused too many issues with tests being
|
||||
# silently disabled, so now we explicitly call out the platforms not known
|
||||
# to have node installed.
|
||||
skip-if = (os == "android") || (os == 'win' && ccov) # Bug 1423667
|
||||
skip-if = (os == "android")
|
||||
run-sequentially = node server exceptions dont replay well
|
||||
[test_altsvc.js]
|
||||
# This used to be hasNode, but that caused too many issues with tests being
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
[table-model-fixup-2.html]
|
||||
disabled:
|
||||
if webrender and (os == "linux"): https://bugzilla.mozilla.org/show_bug.cgi?id=1445164
|
||||
|
||||
[Replaced elements outside a table cannot be table-row and are considered block -- input=text elements]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ Content-Security-Policy-Report-Only: img-src http://*; default-src 'self'; scrip
|
|||
-->
|
||||
</head>
|
||||
<body>
|
||||
<img src="ftp://blah.test" />
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAEElEQVR42mNgaGD4D8YwBgAw9AX9Y9zBwwAAAABJRU5ErkJggg==" />
|
||||
|
||||
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A%20https%3A%2F%2F%2A&testName=1-Violation%20report%20status%20OK'></script>
|
||||
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A&reportCookieName=multiple-report-policies-2&testName=2-Violation%20report%20status%20OK'></script>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
-->
|
||||
</head>
|
||||
<body>
|
||||
<img src="ftp://blah.test" />
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAEElEQVR42mNgaGD4D8YwBgAw9AX9Y9zBwwAAAABJRU5ErkJggg==" />
|
||||
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A'></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
-->
|
||||
</head>
|
||||
<body>
|
||||
<img src="ftp://blah.test" />
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAEElEQVR42mNgaGD4D8YwBgAw9AX9Y9zBwwAAAABJRU5ErkJggg==" />
|
||||
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=img-src%20http%3A%2F%2F%2A'></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -6,7 +6,6 @@ skip-if = toolkit == 'android'
|
|||
[test_abstime-annotation-domain.js]
|
||||
[test_abstime-annotation-uri.js]
|
||||
[test_async.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[test_bookmarks.js]
|
||||
[test_containersQueries_sorting.js]
|
||||
[test_excludeQueries.js]
|
||||
|
|
|
@ -20,7 +20,6 @@ support-files =
|
|||
[test_317472.js]
|
||||
[test_331487.js]
|
||||
[test_384370.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[test_385397.js]
|
||||
[test_399264_query_to_string.js]
|
||||
[test_399264_string_to_query.js]
|
||||
|
@ -53,10 +52,8 @@ skip-if = os == "linux"
|
|||
[test_async_transactions.js]
|
||||
skip-if = (os == "win" && os_version == "5.1") # Bug 1158887
|
||||
[test_bookmarks_json.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[test_bookmarks_json_corrupt.js]
|
||||
[test_bookmarks_html.js]
|
||||
skip-if = (os == 'win' && ccov) # Bug 1423667
|
||||
[test_bookmarks_html_corrupt.js]
|
||||
[test_bookmarks_html_escape_entities.js]
|
||||
[test_bookmarks_html_import_tags.js]
|
||||
|
|
|
@ -7205,13 +7205,6 @@
|
|||
"n_buckets": 29,
|
||||
"description": "The size (MB) of the ping data submitted to Telemetry exceeding the maximum size"
|
||||
},
|
||||
"TELEMETRY_DISCARDED_CONTENT_PINGS_COUNT": {
|
||||
"record_in_processes": ["main"],
|
||||
"alert_emails": ["telemetry-client-dev@mozilla.com"],
|
||||
"expires_in_version": "never",
|
||||
"kind": "count",
|
||||
"description": "Count of discarded content payloads."
|
||||
},
|
||||
"TELEMETRY_COMPRESS": {
|
||||
"record_in_processes": ["main"],
|
||||
"alert_emails": ["telemetry-client-dev@mozilla.com"],
|
||||
|
|
|
@ -51,7 +51,6 @@ const MIN_SUBSESSION_LENGTH_MS = Services.prefs.getIntPref("toolkit.telemetry.mi
|
|||
const LOGGER_NAME = "Toolkit.Telemetry";
|
||||
const LOGGER_PREFIX = "TelemetrySession" + (Utils.isContentProcess ? "#content::" : "::");
|
||||
|
||||
const MESSAGE_TELEMETRY_PAYLOAD = "Telemetry:Payload";
|
||||
const MESSAGE_TELEMETRY_USS = "Telemetry:USS";
|
||||
const MESSAGE_TELEMETRY_GET_CHILD_USS = "Telemetry:GetChildUSS";
|
||||
|
||||
|
@ -59,9 +58,6 @@ const MESSAGE_TELEMETRY_GET_CHILD_USS = "Telemetry:GetChildUSS";
|
|||
// Changing this pref requires a restart.
|
||||
const IS_UNIFIED_TELEMETRY = Services.prefs.getBoolPref(TelemetryUtils.Preferences.Unified, false);
|
||||
|
||||
// Maximum number of content payloads that we are willing to store.
|
||||
const MAX_NUM_CONTENT_PAYLOADS = 10;
|
||||
|
||||
// Do not gather data more than once a minute (ms)
|
||||
const TELEMETRY_INTERVAL = 60 * 1000;
|
||||
// Delay before intializing telemetry (ms)
|
||||
|
@ -664,11 +660,6 @@ var Impl = {
|
|||
// The previous build ID, if this is the first run with a new build.
|
||||
// Null if this is the first run, or the previous build ID is unknown.
|
||||
_previousBuildId: null,
|
||||
// Telemetry payloads sent by child processes.
|
||||
// Each element is in the format {source: <weak-ref>, payload: <object>},
|
||||
// where source is a weak reference to the child process,
|
||||
// and payload is the telemetry payload from that child process.
|
||||
_childTelemetry: [],
|
||||
// Unique id that identifies this session so the server can cope with duplicate
|
||||
// submissions, orphaning and other oddities. The id is shared across subsessions.
|
||||
_sessionId: null,
|
||||
|
@ -1192,10 +1183,6 @@ var Impl = {
|
|||
Telemetry.getHistogramById(id).add(val);
|
||||
},
|
||||
|
||||
getChildPayloads: function getChildPayloads() {
|
||||
return this._childTelemetry.map(child => child.payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the current session's payload using the provided
|
||||
* simpleMeasurements and info, which are typically obtained by a call
|
||||
|
@ -1450,7 +1437,6 @@ var Impl = {
|
|||
|
||||
this.attachEarlyObservers();
|
||||
|
||||
Services.ppmm.addMessageListener(MESSAGE_TELEMETRY_PAYLOAD, this);
|
||||
Services.ppmm.addMessageListener(MESSAGE_TELEMETRY_USS, this);
|
||||
},
|
||||
|
||||
|
@ -1569,24 +1555,6 @@ var Impl = {
|
|||
receiveMessage: function receiveMessage(message) {
|
||||
this._log.trace("receiveMessage - Message name " + message.name);
|
||||
switch (message.name) {
|
||||
case MESSAGE_TELEMETRY_PAYLOAD:
|
||||
{
|
||||
// In parent process, receive Telemetry payload from child
|
||||
let source = message.data.childUUID;
|
||||
delete message.data.childUUID;
|
||||
|
||||
this._childTelemetry.push({
|
||||
source,
|
||||
payload: message.data,
|
||||
});
|
||||
|
||||
if (this._childTelemetry.length == MAX_NUM_CONTENT_PAYLOADS + 1) {
|
||||
this._childTelemetry.shift();
|
||||
Telemetry.getHistogramById("TELEMETRY_DISCARDED_CONTENT_PINGS_COUNT").add();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case MESSAGE_TELEMETRY_USS:
|
||||
{
|
||||
// In parent process, receive the USS report from the child
|
||||
|
@ -1648,8 +1616,6 @@ var Impl = {
|
|||
}
|
||||
},
|
||||
|
||||
_processUUID: generateUUID(),
|
||||
|
||||
sendContentProcessUSS: function sendContentProcessUSS(aMessageId) {
|
||||
this._log.trace("sendContentProcessUSS");
|
||||
|
||||
|
@ -1668,14 +1634,6 @@ var Impl = {
|
|||
);
|
||||
},
|
||||
|
||||
sendContentProcessPing: function sendContentProcessPing(reason) {
|
||||
this._log.trace("sendContentProcessPing - Reason " + reason);
|
||||
const isSubsession = !this._isClassicReason(reason);
|
||||
let payload = this.getSessionPayload(reason, isSubsession);
|
||||
payload.childUUID = this._processUUID;
|
||||
Services.cpmm.sendAsyncMessage(MESSAGE_TELEMETRY_PAYLOAD, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* On Desktop: Save the "shutdown" ping to disk.
|
||||
* On Android: Save the "saved-session" ping to disk.
|
||||
|
|
|
@ -69,13 +69,6 @@ var UITelemetry = {
|
|||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* Holds the functions that provide UITelemetry's simple
|
||||
* measurements. Those functions are mapped to unique names,
|
||||
* and should be registered with addSimpleMeasureFunction.
|
||||
*/
|
||||
_simpleMeasureFunctions: {},
|
||||
|
||||
/**
|
||||
* A hack to generate the relative timestamp from start when we don't have
|
||||
* access to the Java timer.
|
||||
|
@ -160,53 +153,6 @@ var UITelemetry = {
|
|||
this._measurements.push(aEvent);
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by TelemetrySession to populate the simple measurement
|
||||
* blob. This function will iterate over all functions added
|
||||
* via addSimpleMeasureFunction and return an object with the
|
||||
* results of those functions.
|
||||
*/
|
||||
getSimpleMeasures() {
|
||||
if (!this.enabled) {
|
||||
return {};
|
||||
}
|
||||
|
||||
let result = {};
|
||||
for (let name in this._simpleMeasureFunctions) {
|
||||
result[name] = this._simpleMeasureFunctions[name]();
|
||||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Allows the caller to register functions that will get called
|
||||
* for simple measures during a Telemetry ping. aName is a unique
|
||||
* identifier used as they key for the simple measurement in the
|
||||
* object that getSimpleMeasures returns.
|
||||
*
|
||||
* This function throws an exception if aName already has a function
|
||||
* registered for it.
|
||||
*/
|
||||
addSimpleMeasureFunction(aName, aFunction) {
|
||||
if (!this.enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (aName in this._simpleMeasureFunctions) {
|
||||
throw new Error("A simple measurement function is already registered for " + aName);
|
||||
}
|
||||
|
||||
if (!aFunction || typeof aFunction !== "function") {
|
||||
throw new Error("addSimpleMeasureFunction called with non-function argument.");
|
||||
}
|
||||
|
||||
this._simpleMeasureFunctions[aName] = aFunction;
|
||||
},
|
||||
|
||||
removeSimpleMeasureFunction(aName) {
|
||||
delete this._simpleMeasureFunctions[aName];
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by TelemetrySession to populate the UI measurement
|
||||
* blob.
|
||||
|
|
|
@ -1184,7 +1184,6 @@
|
|||
"SYSTEM_FONT_FALLBACK_SCRIPT",
|
||||
"TELEMETRY_COMPRESS",
|
||||
"TELEMETRY_DISCARDED_ARCHIVED_PINGS_SIZE_MB",
|
||||
"TELEMETRY_DISCARDED_CONTENT_PINGS_COUNT",
|
||||
"TELEMETRY_DISCARDED_PENDING_PINGS_SIZE_MB",
|
||||
"TELEMETRY_DISCARDED_SEND_PINGS_SIZE_MB",
|
||||
"TELEMETRY_INVALID_PING_TYPE_SUBMITTED",
|
||||
|
@ -1687,7 +1686,6 @@
|
|||
"SUBPROCESS_LAUNCH_FAILURE",
|
||||
"TELEMETRY_ARCHIVE_SESSION_PING_COUNT",
|
||||
"TELEMETRY_ASSEMBLE_PAYLOAD_EXCEPTION",
|
||||
"TELEMETRY_DISCARDED_CONTENT_PINGS_COUNT",
|
||||
"TELEMETRY_INVALID_PAYLOAD_SUBMITTED",
|
||||
"TELEMETRY_INVALID_PING_TYPE_SUBMITTED",
|
||||
"TELEMETRY_PENDING_LOAD_FAILURE_PARSE",
|
||||
|
|
|
@ -4,8 +4,6 @@ ChromeUtils.import("resource://gre/modules/TelemetrySession.jsm", this);
|
|||
ChromeUtils.import("resource://gre/modules/PromiseUtils.jsm", this);
|
||||
ChromeUtils.import("resource://testing-common/ContentTaskUtils.jsm", this);
|
||||
|
||||
const MESSAGE_TELEMETRY_PAYLOAD = "Telemetry:Payload";
|
||||
const MESSAGE_TELEMETRY_GET_CHILD_PAYLOAD = "Telemetry:GetChildPayload";
|
||||
const MESSAGE_CHILD_TEST_DONE = "ChildTest:Done";
|
||||
|
||||
const PLATFORM_VERSION = "1.9.2";
|
||||
|
|
|
@ -279,8 +279,6 @@ var PingPicker = {
|
|||
pingPicker.classList.add("hidden");
|
||||
}
|
||||
});
|
||||
document.getElementById("choose-payload")
|
||||
.addEventListener("change", () => displayPingData(gPingData));
|
||||
document.getElementById("processes")
|
||||
.addEventListener("change", () => displayPingData(gPingData));
|
||||
Array.from(document.querySelectorAll(".change-ping")).forEach(el => {
|
||||
|
@ -2372,38 +2370,6 @@ function renderProcessList(ping, selectEl) {
|
|||
}
|
||||
}
|
||||
|
||||
function renderPayloadList(ping) {
|
||||
// Rebuild the payload select with options:
|
||||
// Parent Payload (selected)
|
||||
// Child Payload 1..ping.payload.childPayloads.length
|
||||
let listEl = document.getElementById("choose-payload");
|
||||
removeAllChildNodes(listEl);
|
||||
|
||||
let option = document.createElement("option");
|
||||
let text = bundle.GetStringFromName("parentPayload");
|
||||
let content = document.createTextNode(text);
|
||||
let payloadIndex = 0;
|
||||
option.appendChild(content);
|
||||
option.setAttribute("value", payloadIndex++);
|
||||
option.selected = true;
|
||||
listEl.appendChild(option);
|
||||
|
||||
if (!ping.payload.childPayloads) {
|
||||
listEl.disabled = true;
|
||||
return;
|
||||
}
|
||||
listEl.disabled = false;
|
||||
|
||||
for (; payloadIndex <= ping.payload.childPayloads.length; ++payloadIndex) {
|
||||
option = document.createElement("option");
|
||||
text = bundle.formatStringFromName("childPayloadN", [payloadIndex], 1);
|
||||
content = document.createTextNode(text);
|
||||
option.appendChild(content);
|
||||
option.setAttribute("value", payloadIndex);
|
||||
listEl.appendChild(option);
|
||||
}
|
||||
}
|
||||
|
||||
function togglePingSections(isMainPing) {
|
||||
// We always show the sections that are "common" to all pings.
|
||||
let commonSections = new Set(["heading",
|
||||
|
@ -2442,7 +2408,6 @@ function displayPingData(ping, updatePayloadList = false) {
|
|||
function displayRichPingData(ping, updatePayloadList) {
|
||||
// Update the payload list and process lists
|
||||
if (updatePayloadList) {
|
||||
renderPayloadList(ping);
|
||||
renderProcessList(ping, document.getElementById("processes"));
|
||||
}
|
||||
|
||||
|
@ -2491,15 +2456,6 @@ function displayRichPingData(ping, updatePayloadList) {
|
|||
|
||||
LateWritesSingleton.renderLateWrites(payload.lateWrites);
|
||||
|
||||
// Select payload to render
|
||||
let payloadSelect = document.getElementById("choose-payload");
|
||||
let payloadOption = payloadSelect.selectedOptions.item(0);
|
||||
let payloadIndex = payloadOption.getAttribute("value");
|
||||
|
||||
if (payloadIndex > 0) {
|
||||
payload = ping.payload.childPayloads[payloadIndex - 1];
|
||||
}
|
||||
|
||||
// Show chrome hang stacks
|
||||
ChromeHangs.render(payload.chromeHangs);
|
||||
|
||||
|
|
|
@ -124,10 +124,6 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="title">&aboutTelemetry.payloadChoiceHeader;</h4>
|
||||
<select id="choose-payload"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
|
|
|
@ -15,19 +15,6 @@
|
|||
<stylesheet src="chrome://global/skin/toolbarbutton.css"/>
|
||||
</resources>
|
||||
|
||||
<content>
|
||||
<children includes="observes|template|menupopup|panel|tooltip"/>
|
||||
<xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,label,consumeanchor"/>
|
||||
<xul:label class="toolbarbutton-text" crop="right" flex="1"
|
||||
xbl:inherits="value=label,accesskey,crop,wrap"/>
|
||||
<xul:label class="toolbarbutton-multiline-text" flex="1"
|
||||
xbl:inherits="xbl:text=label,accesskey,wrap"/>
|
||||
<children includes="box"/>
|
||||
</content>
|
||||
</binding>
|
||||
|
||||
<binding id="menu" display="xul:menu"
|
||||
extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
|
||||
<content>
|
||||
<children includes="observes|template|menupopup|panel|tooltip"/>
|
||||
<xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,label,type,consumeanchor"/>
|
||||
|
@ -35,11 +22,16 @@
|
|||
xbl:inherits="value=label,accesskey,crop,dragover-top,wrap"/>
|
||||
<xul:label class="toolbarbutton-multiline-text" flex="1"
|
||||
xbl:inherits="xbl:text=label,accesskey,wrap"/>
|
||||
<children includes="box"/>
|
||||
<xul:dropmarker anonid="dropmarker" type="menu"
|
||||
class="toolbarbutton-menu-dropmarker" xbl:inherits="disabled,label"/>
|
||||
</content>
|
||||
</binding>
|
||||
|
||||
<binding id="menu" display="xul:menu"
|
||||
extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
|
||||
</binding>
|
||||
|
||||
<binding id="toolbarbutton-badged"
|
||||
extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
|
||||
<content>
|
||||
|
@ -53,23 +45,12 @@
|
|||
xbl:inherits="value=label,accesskey,crop,wrap"/>
|
||||
<xul:label class="toolbarbutton-multiline-text" flex="1"
|
||||
xbl:inherits="xbl:text=label,accesskey,wrap"/>
|
||||
<xul:dropmarker anonid="dropmarker" type="menu"
|
||||
class="toolbarbutton-menu-dropmarker" xbl:inherits="disabled,label"/>
|
||||
</content>
|
||||
</binding>
|
||||
|
||||
<binding id="toolbarbutton-badged-menu" display="xul:menu"
|
||||
extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
|
||||
<content>
|
||||
<children includes="observes|template|menupopup|panel|tooltip"/>
|
||||
<xul:stack class="toolbarbutton-badge-stack">
|
||||
<xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,label,consumeanchor"/>
|
||||
<xul:label class="toolbarbutton-badge" xbl:inherits="value=badge" top="0" end="0" crop="none"/>
|
||||
</xul:stack>
|
||||
<xul:label class="toolbarbutton-text" crop="right" flex="1"
|
||||
xbl:inherits="value=label,accesskey,crop,dragover-top,wrap"/>
|
||||
<xul:label class="toolbarbutton-multiline-text" flex="1"
|
||||
xbl:inherits="xbl:text=label,accesskey,wrap"/>
|
||||
<xul:dropmarker anonid="dropmarker" type="menu"
|
||||
class="toolbarbutton-menu-dropmarker" xbl:inherits="disabled,label"/>
|
||||
</content>
|
||||
</binding>
|
||||
</bindings>
|
||||
|
|
|
@ -142,6 +142,7 @@ toolbarbutton.badged-button[type="menu"] {
|
|||
-moz-binding: url("chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton-badged-menu");
|
||||
}
|
||||
|
||||
toolbarbutton:not([type="menu"]) > .toolbarbutton-menu-dropmarker,
|
||||
toolbar[mode="icons"] .toolbarbutton-text,
|
||||
toolbar[mode="icons"] .toolbarbutton-multiline-text,
|
||||
toolbar[mode="text"] .toolbarbutton-icon,
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
<!ENTITY aboutTelemetry.optionGroupToday "Today">
|
||||
<!ENTITY aboutTelemetry.optionGroupYesterday "Yesterday">
|
||||
<!ENTITY aboutTelemetry.optionGroupOlder "Older">
|
||||
<!ENTITY aboutTelemetry.payloadChoiceHeader "Payload">
|
||||
<!-- LOCALIZATION NOTE(aboutTelemetry.previousPing, aboutTelemetry.nextPing):
|
||||
These strings are displayed when selecting Archived pings, and they’re
|
||||
used to move to the next or previous ping. -->
|
||||
|
|
|
@ -104,10 +104,6 @@ memoryMapTitle = Memory map:
|
|||
|
||||
errorFetchingSymbols = An error occurred while fetching symbols. Check that you are connected to the Internet and try again.
|
||||
|
||||
parentPayload = Parent Payload
|
||||
# LOCALIZATION NOTE(childPayloadN):
|
||||
# - %1$S is replaced by the number of the child payload (e.g. “1”, “2”)
|
||||
childPayloadN = Child Payload %1$S
|
||||
timestampHeader = timestamp
|
||||
categoryHeader = category
|
||||
methodHeader = method
|
||||
|
|
Двоичные данные
toolkit/themes/osx/global/icons/notfound.png
Двоичные данные
toolkit/themes/osx/global/icons/notfound.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 538 B |
|
@ -63,7 +63,6 @@ toolkit.jar:
|
|||
skin/classic/global/icons/blacklist_64.png (icons/blacklist_64.png)
|
||||
skin/classic/global/icons/glyph-dropdown.png (icons/glyph-dropdown.png)
|
||||
skin/classic/global/icons/glyph-dropdown@2x.png (icons/glyph-dropdown@2x.png)
|
||||
skin/classic/global/icons/notfound.png (icons/notfound.png)
|
||||
skin/classic/global/icons/panel-dropmarker.png (icons/panel-dropmarker.png)
|
||||
skin/classic/global/icons/resizer.png (icons/resizer.png)
|
||||
skin/classic/global/icons/resizer@2x.png (icons/resizer@2x.png)
|
||||
|
@ -83,7 +82,6 @@ toolkit.jar:
|
|||
skin/classic/global/icons/sslWarning.png (icons/sslWarning.png)
|
||||
* skin/classic/global/in-content/common.css (in-content/common.css)
|
||||
* skin/classic/global/in-content/info-pages.css (in-content/info-pages.css)
|
||||
skin/classic/global/splitter/dimple.png (splitter/dimple.png)
|
||||
skin/classic/global/toolbar/spring.png (toolbar/spring.png)
|
||||
skin/classic/global/toolbar/toolbar-separator.png (toolbar/toolbar-separator.png)
|
||||
skin/classic/global/tree/arrow-disclosure.svg (tree/arrow-disclosure.svg)
|
||||
|
|
|
@ -12,7 +12,6 @@ splitter {
|
|||
cursor: ew-resize;
|
||||
min-width: 9px;
|
||||
min-height: 9px;
|
||||
background: url("chrome://global/skin/splitter/dimple.png") transparent no-repeat center;
|
||||
}
|
||||
|
||||
splitter[state="collapsed"][collapse="before"],
|
||||
|
@ -40,7 +39,6 @@ splitter[orient="vertical"] {
|
|||
min-width: 0px;
|
||||
min-height: 9px;
|
||||
min-width: 9px;
|
||||
background: url("chrome://global/skin/splitter/dimple.png") transparent no-repeat center;
|
||||
}
|
||||
|
||||
splitter[orient="vertical"][state="collapsed"][collapse="before"],
|
||||
|
|
Двоичные данные
toolkit/themes/osx/global/splitter/dimple.png
Двоичные данные
toolkit/themes/osx/global/splitter/dimple.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 104 B |
|
@ -130,7 +130,9 @@ wizardpage {
|
|||
|
||||
#verificationFailedIcon {
|
||||
margin-left: 5px;
|
||||
list-style-image: url("chrome://global/skin/icons/notfound.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
list-style-image: url(chrome://global/skin/icons/warning.svg);
|
||||
}
|
||||
|
||||
/* Error Page */
|
||||
|
|
Двоичные данные
toolkit/themes/windows/global/icons/information-16.png
Двоичные данные
toolkit/themes/windows/global/icons/information-16.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 648 B |
|
@ -46,7 +46,6 @@ toolkit.jar:
|
|||
skin/classic/global/icons/collapse.png (icons/collapse.png)
|
||||
skin/classic/global/icons/expand.png (icons/expand.png)
|
||||
skin/classic/global/icons/folder-item.png (icons/folder-item.png)
|
||||
skin/classic/global/icons/information-16.png (icons/information-16.png)
|
||||
skin/classic/global/icons/Landscape.png (icons/Landscape.png)
|
||||
skin/classic/global/icons/Portrait.png (icons/Portrait.png)
|
||||
skin/classic/global/icons/Print-preview.png (icons/Print-preview.png)
|
||||
|
|
|
@ -106,7 +106,9 @@ wizardpage {
|
|||
|
||||
#verificationFailedIcon {
|
||||
margin-left: 5px;
|
||||
list-style-image: url("chrome://global/skin/icons/information-16.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
list-style-image: url(chrome://global/skin/icons/warning.svg);
|
||||
}
|
||||
|
||||
/* Error Page */
|
||||
|
|
Загрузка…
Ссылка в новой задаче