зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to inbound.
This commit is contained in:
Коммит
8b89587786
|
@ -1380,6 +1380,12 @@
|
|||
t._tPos = position;
|
||||
this.tabContainer._setPositionalAttributes();
|
||||
|
||||
// Prevent the superfluous initial load of a blank document
|
||||
// if we're going to load something other than about:blank.
|
||||
if (!uriIsAboutBlank) {
|
||||
b.setAttribute("nodefaultsrc", "true");
|
||||
}
|
||||
|
||||
// NB: this appendChild call causes us to run constructors for the
|
||||
// browser element, which fires off a bunch of notifications. Some
|
||||
// of those notifications can cause code to run that inspects our
|
||||
|
@ -1389,13 +1395,6 @@
|
|||
|
||||
this.tabContainer.updateVisibility();
|
||||
|
||||
if (!uriIsAboutBlank) {
|
||||
// Stop the existing about:blank load. Otherwise, if aURI
|
||||
// doesn't stop in-progress loads on its own, we'll get into
|
||||
// trouble with multiple parallel loads running at once.
|
||||
b.stop();
|
||||
}
|
||||
|
||||
// wire up a progress listener for the new browser object.
|
||||
var tabListener = this.mTabProgressListener(t, b, uriIsAboutBlank);
|
||||
const filter = Components.classes["@mozilla.org/appshell/component/browser-status-filter;1"]
|
||||
|
|
|
@ -35,10 +35,10 @@ function test() {
|
|||
}
|
||||
|
||||
function load(aTab, aUrl, aCallback) {
|
||||
aTab.linkedBrowser.addEventListener("pageshow", function onpageshow(aEvent) {
|
||||
aEvent.currentTarget.removeEventListener("pageshow", onpageshow, false);
|
||||
aTab.linkedBrowser.addEventListener("load", function onload(aEvent) {
|
||||
aEvent.currentTarget.removeEventListener("load", onload, true);
|
||||
waitForFocus(aCallback, content);
|
||||
}, false);
|
||||
}, true);
|
||||
aTab.linkedBrowser.loadURI(aUrl);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,10 +8,6 @@ XPCOMUtils.defineLazyGetter(this, "docShell", () => {
|
|||
});
|
||||
|
||||
const EXPECTED_REFLOWS = [
|
||||
// b.stop() call in tabbrowser.addTab()
|
||||
"stop@chrome://global/content/bindings/browser.xml|" +
|
||||
"addTab@chrome://browser/content/tabbrowser.xml|",
|
||||
|
||||
// tabbrowser.adjustTabstrip() call after tabopen animation has finished
|
||||
"adjustTabstrip@chrome://browser/content/tabbrowser.xml|" +
|
||||
"_handleNewTab@chrome://browser/content/tabbrowser.xml|" +
|
||||
|
@ -30,7 +26,20 @@ const EXPECTED_REFLOWS = [
|
|||
"get_scrollPosition@chrome://global/content/bindings/scrollbox.xml|" +
|
||||
"_fillTrailingGap@chrome://browser/content/tabbrowser.xml|" +
|
||||
"_handleNewTab@chrome://browser/content/tabbrowser.xml|" +
|
||||
"onxbltransitionend@chrome://browser/content/tabbrowser.xml|"
|
||||
"onxbltransitionend@chrome://browser/content/tabbrowser.xml|",
|
||||
|
||||
// The TabView iframe causes reflows in the parent document.
|
||||
"iQClass_height@chrome://browser/content/tabview.js|" +
|
||||
"GroupItem_getContentBounds@chrome://browser/content/tabview.js|" +
|
||||
"GroupItem_shouldStack@chrome://browser/content/tabview.js|" +
|
||||
"GroupItem_arrange@chrome://browser/content/tabview.js|" +
|
||||
"GroupItem_add@chrome://browser/content/tabview.js|" +
|
||||
"GroupItems_newTab@chrome://browser/content/tabview.js|" +
|
||||
"TabItem__reconnect@chrome://browser/content/tabview.js|" +
|
||||
"TabItem@chrome://browser/content/tabview.js|" +
|
||||
"TabItems_link@chrome://browser/content/tabview.js|" +
|
||||
"@chrome://browser/content/tabview.js|" +
|
||||
"addTab@chrome://browser/content/tabbrowser.xml|"
|
||||
];
|
||||
|
||||
const PREF_PRELOAD = "browser.newtab.preload";
|
||||
|
|
|
@ -1,23 +1,7 @@
|
|||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux32/common-opt"
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux32
|
||||
|
||||
# Avoid dependency on libstdc++ 4.5
|
||||
ac_add_options --enable-stdcxx-compat
|
||||
|
||||
mk_add_options MOZ_PGO=1
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-codesighs
|
||||
# This file is sourced by nightly, beta, and release mozconfigs.
|
||||
|
||||
# Options for rpm versions of mozconfigs
|
||||
PREFIX=/usr
|
||||
LIBDIR=${PREFIX}/lib
|
||||
ac_add_options --with-app-name=mozilla-nightly
|
||||
ac_add_options --disable-updater
|
||||
ac_add_options --prefix=$PREFIX
|
||||
ac_add_options --libdir=$LIBDIR
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux32
|
||||
|
||||
|
@ -19,10 +13,8 @@ export MOZILLA_OFFICIAL=1
|
|||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
#Use ccache
|
||||
ac_add_options --with-ccache=/usr/bin/ccache
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
|
@ -1,5 +1,5 @@
|
|||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux32/common-opt"
|
||||
|
||||
ac_add_options --enable-codesighs
|
||||
ac_add_options --enable-signmar
|
||||
ac_add_options --enable-profiling
|
||||
|
@ -7,28 +7,12 @@ ac_add_options --enable-profiling
|
|||
# Nightlies only since this has a cost in performance
|
||||
ac_add_options --enable-js-diagnostics
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux32
|
||||
|
||||
# Avoid dependency on libstdc++ 4.5
|
||||
ac_add_options --enable-stdcxx-compat
|
||||
|
||||
# This will overwrite the default of stripping everything and keep the symbol table.
|
||||
# This is useful for profiling and debugging and only increases the package size
|
||||
# by 2 MBs.
|
||||
STRIP_FLAGS="--strip-debug"
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Use ccache
|
||||
ac_add_options --with-ccache=/usr/bin/ccache
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-codesighs
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux32
|
||||
|
||||
# Avoid dependency on libstdc++ 4.5
|
||||
ac_add_options --enable-stdcxx-compat
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
#Use ccache
|
||||
ac_add_options --with-ccache=/usr/bin/ccache
|
||||
|
||||
# QT Options
|
||||
export PKG_CONFIG_PATH=/tools/qt-4.6.3/qt/lib/pkgconfig
|
||||
ac_add_options --with-qtdir=/tools/qt-4.6.3/qt
|
||||
ac_add_options --enable-default-toolkit=cairo-qt
|
||||
ac_add_options --disable-crashreporter
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
|
@ -1,7 +1,13 @@
|
|||
# This make file should be identical to the beta mozconfig, apart from the
|
||||
# safeguard below
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux32/beta"
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux32/common-opt"
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
mk_add_options MOZ_PGO=1
|
||||
|
||||
# safeguard against someone forgetting to re-set EARLY_BETA_OR_EARLIER in
|
||||
# defines.sh during the beta cycle
|
||||
export BUILDING_RELEASE=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,23 +1,7 @@
|
|||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux64/common-opt"
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux
|
||||
|
||||
# Avoid dependency on libstdc++ 4.5
|
||||
ac_add_options --enable-stdcxx-compat
|
||||
|
||||
mk_add_options MOZ_PGO=1
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-codesighs
|
||||
# This file is sourced by the nightly, beta, and release mozconfigs.
|
||||
|
||||
# Options for rpm versions of mozconfigs
|
||||
PREFIX=/usr
|
||||
LIBDIR=${PREFIX}/lib64
|
||||
ac_add_options --with-app-name=mozilla-nightly
|
||||
ac_add_options --disable-updater
|
||||
ac_add_options --prefix=$PREFIX
|
||||
ac_add_options --libdir=$LIBDIR
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux
|
||||
|
||||
|
@ -19,10 +13,8 @@ export MOZILLA_OFFICIAL=1
|
|||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
#Use ccache
|
||||
ac_add_options --with-ccache=/usr/bin/ccache
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
|
@ -1,5 +1,5 @@
|
|||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux64/common-opt"
|
||||
|
||||
ac_add_options --enable-codesighs
|
||||
ac_add_options --enable-signmar
|
||||
ac_add_options --enable-profiling
|
||||
|
@ -7,28 +7,12 @@ ac_add_options --enable-profiling
|
|||
# Nightlies only since this has a cost in performance
|
||||
ac_add_options --enable-js-diagnostics
|
||||
|
||||
. $topsrcdir/build/unix/mozconfig.linux
|
||||
|
||||
# Avoid dependency on libstdc++ 4.5
|
||||
ac_add_options --enable-stdcxx-compat
|
||||
|
||||
# This will overwrite the default of stripping everything and keep the symbol table.
|
||||
# This is useful for profiling and debugging and only increases the package size
|
||||
# by 2 MBs.
|
||||
STRIP_FLAGS="--strip-debug"
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Use ccache
|
||||
ac_add_options --with-ccache=/usr/bin/ccache
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
# This make file should be identical to the beta mozconfig, apart from the
|
||||
# safeguard below
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux64/beta"
|
||||
. "$topsrcdir/browser/config/mozconfigs/linux64/common-opt"
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
mk_add_options MOZ_PGO=1
|
||||
|
||||
# safeguard against someone forgetting to re-set EARLY_BETA_OR_EARLIER in
|
||||
# defines.sh during the beta cycle
|
||||
export BUILDING_RELEASE=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,21 +1,5 @@
|
|||
. $topsrcdir/build/macosx/universal/mozconfig
|
||||
. "$topsrcdir/browser/config/mozconfigs/macosx-universal/common-opt"
|
||||
|
||||
# Universal builds override the default of browser (bug 575283 comment 29)
|
||||
ac_add_options --enable-application=browser
|
||||
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# This file is sourced by the nightly, beta, and release mozconfigs.
|
||||
|
||||
. $topsrcdir/build/macosx/universal/mozconfig
|
||||
|
||||
# Universal builds override the default of browser (bug 575283 comment 29)
|
||||
ac_add_options --enable-application=browser
|
||||
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
|
@ -1,10 +1,5 @@
|
|||
. $topsrcdir/build/macosx/universal/mozconfig
|
||||
. "$topsrcdir/browser/config/mozconfigs/macosx-universal/common-opt"
|
||||
|
||||
# Universal builds override the default of browser (bug 575283 comment 29)
|
||||
ac_add_options --enable-application=browser
|
||||
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-codesighs
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --enable-signmar
|
||||
|
@ -15,17 +10,6 @@ ac_add_options --enable-dtrace
|
|||
# Nightlies only since this has a cost in performance
|
||||
ac_add_options --enable-js-diagnostics
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
ac_add_options --with-macbundlename-prefix=Firefox
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
# This make file should be identical to the beta mozconfig, apart from the
|
||||
# safeguard below
|
||||
. "$topsrcdir/browser/config/mozconfigs/macosx-universal/beta"
|
||||
. "$topsrcdir/browser/config/mozconfigs/macosx-universal/common-opt"
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
# safeguard against someone forgetting to re-set EARLY_BETA_OR_EARLIER in
|
||||
# defines.sh during the beta cycle
|
||||
export BUILDING_RELEASE=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
# Just like nightlies, but without tests, not on an update channel, and with
|
||||
# shark and dtrace enabled
|
||||
. $topsrcdir/build/macosx/universal/mozconfig
|
||||
|
||||
# Universal builds override the default of browser (bug 575283 comment 29)
|
||||
ac_add_options --enable-application=browser
|
||||
|
||||
ac_add_options --disable-tests
|
||||
ac_add_options --disable-install-strip
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
# shark specific options
|
||||
ac_add_options --enable-shark
|
||||
ac_add_options --enable-dtrace
|
||||
|
||||
# Need this to prevent name conflicts with the normal nightly build packages
|
||||
export MOZ_PKG_SPECIAL="shark"
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
ac_add_options --with-ccache
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
|
@ -1,31 +1,7 @@
|
|||
. "$topsrcdir/browser/config/mozconfigs/common"
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/common-opt"
|
||||
|
||||
mk_add_options MOZ_PGO=1
|
||||
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-jemalloc
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
if test -z "${_PYMAKE}"; then
|
||||
mk_add_options MOZ_MAKE_FLAGS=-j1
|
||||
fi
|
||||
|
||||
if test "$PROCESSOR_ARCHITECTURE" = "AMD64" -o "$PROCESSOR_ARCHITEW6432" = "AMD64"; then
|
||||
. $topsrcdir/build/win32/mozconfig.vs2010-win64
|
||||
else
|
||||
. $topsrcdir/build/win32/mozconfig.vs2010
|
||||
fi
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
# This file is sourced by the nightly, beta, and release mozconfigs.
|
||||
|
||||
. "$topsrcdir/browser/config/mozconfigs/common"
|
||||
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-jemalloc
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
if test -z "${_PYMAKE}"; then
|
||||
mk_add_options MOZ_MAKE_FLAGS=-j1
|
||||
fi
|
||||
|
||||
if test "$PROCESSOR_ARCHITECTURE" = "AMD64" -o "$PROCESSOR_ARCHITEW6432" = "AMD64"; then
|
||||
. $topsrcdir/build/win32/mozconfig.vs2010-win64
|
||||
else
|
||||
. $topsrcdir/build/win32/mozconfig.vs2010
|
||||
fi
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
|
@ -1,8 +1,5 @@
|
|||
. "$topsrcdir/browser/config/mozconfigs/common"
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/common-opt"
|
||||
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
ac_add_options --enable-update-packaging
|
||||
ac_add_options --enable-jemalloc
|
||||
ac_add_options --enable-signmar
|
||||
ac_add_options --enable-profiling
|
||||
ac_add_options --enable-metro
|
||||
|
@ -10,25 +7,4 @@ ac_add_options --enable-metro
|
|||
# Nightlies only since this has a cost in performance
|
||||
ac_add_options --enable-js-diagnostics
|
||||
|
||||
# Needed to enable breakpad in application.ini
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
if test -z "${_PYMAKE}"; then
|
||||
mk_add_options MOZ_MAKE_FLAGS=-j1
|
||||
fi
|
||||
|
||||
if test "$PROCESSOR_ARCHITECTURE" = "AMD64" -o "$PROCESSOR_ARCHITEW6432" = "AMD64"; then
|
||||
. $topsrcdir/build/win32/mozconfig.vs2010-win64
|
||||
else
|
||||
. $topsrcdir/build/win32/mozconfig.vs2010
|
||||
fi
|
||||
|
||||
# Treat warnings as errors in directories with FAIL_ON_WARNINGS.
|
||||
ac_add_options --enable-warnings-as-errors
|
||||
|
||||
# Package js shell.
|
||||
export MOZ_PACKAGE_JSSHELL=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
# This make file should be identical to the beta mozconfig, apart from the
|
||||
# safeguard below
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/beta"
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/common-opt"
|
||||
|
||||
mk_add_options MOZ_PGO=1
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
# safeguard against someone forgetting to re-set EARLY_BETA_OR_EARLIER in
|
||||
# defines.sh during the beta cycle
|
||||
export BUILDING_RELEASE=1
|
||||
|
||||
. "$topsrcdir/build/mozconfig.common.override"
|
||||
|
|
|
@ -579,7 +579,7 @@ StackFrames.prototype = {
|
|||
this._addFrame(frame);
|
||||
}
|
||||
if (this.currentFrame == null) {
|
||||
this.selectFrame(0);
|
||||
DebuggerView.StackFrames.selectedDepth = 0;
|
||||
}
|
||||
if (this.activeThread.moreFrames) {
|
||||
DebuggerView.StackFrames.dirty = true;
|
||||
|
@ -639,8 +639,6 @@ StackFrames.prototype = {
|
|||
|
||||
// Move the editor's caret to the proper url and line.
|
||||
DebuggerView.updateEditor(url, line);
|
||||
// Highlight the stack frame at the specified depth.
|
||||
DebuggerView.StackFrames.highlightFrame(aDepth);
|
||||
// Highlight the breakpoint at the specified url and line if it exists.
|
||||
DebuggerView.Sources.highlightBreakpoint(url, line);
|
||||
// Don't display the watch expressions textbox inputs in the pane.
|
||||
|
|
|
@ -55,6 +55,8 @@ create({ constructor: SourcesView, proto: MenuContainer.prototype }, {
|
|||
this._cbTextbox.addEventListener("input", this._onConditionalTextboxInput, false);
|
||||
this._cbTextbox.addEventListener("keypress", this._onConditionalTextboxKeyPress, false);
|
||||
|
||||
this.autoFocusOnSelection = false;
|
||||
|
||||
// Show an empty label by default.
|
||||
this.empty();
|
||||
},
|
||||
|
|
|
@ -348,10 +348,9 @@ function StackFramesView() {
|
|||
|
||||
this._framesCache = new Map(); // Can't use a WeakMap because keys are numbers.
|
||||
this._onStackframeRemoved = this._onStackframeRemoved.bind(this);
|
||||
this._onClick = this._onClick.bind(this);
|
||||
this._onSelect = this._onSelect.bind(this);
|
||||
this._onScroll = this._onScroll.bind(this);
|
||||
this._afterScroll = this._afterScroll.bind(this);
|
||||
this._selectFrame = this._selectFrame.bind(this);
|
||||
}
|
||||
|
||||
create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
||||
|
@ -370,9 +369,12 @@ create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
|||
document.getElementById("debuggerCommands").appendChild(commandset);
|
||||
|
||||
this.node = new BreadcrumbsWidget(document.getElementById("stackframes"));
|
||||
this.node.addEventListener("mousedown", this._onClick, false);
|
||||
this.node.addEventListener("select", this._onSelect, false);
|
||||
this.node.addEventListener("scroll", this._onScroll, true);
|
||||
window.addEventListener("resize", this._onScroll, true);
|
||||
|
||||
this.autoFocusOnFirstItem = false;
|
||||
this.autoFocusOnSelection = false;
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -381,7 +383,7 @@ create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
|||
destroy: function() {
|
||||
dumpn("Destroying the StackFramesView");
|
||||
|
||||
this.node.removeEventListener("mousedown", this._onClick, false);
|
||||
this.node.removeEventListener("select", this._onSelect, false);
|
||||
this.node.removeEventListener("scroll", this._onScroll, true);
|
||||
window.removeEventListener("resize", this._onScroll, true);
|
||||
},
|
||||
|
@ -423,21 +425,11 @@ create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
|||
},
|
||||
|
||||
/**
|
||||
* Highlights a frame in this stackframes container.
|
||||
*
|
||||
* Selects the frame at the specified depth in this container.
|
||||
* @param number aDepth
|
||||
* The frame depth specified by the debugger controller.
|
||||
*/
|
||||
highlightFrame: function(aDepth) {
|
||||
let selectedItem = this.selectedItem = this._framesCache.get(aDepth);
|
||||
|
||||
for (let item in this) {
|
||||
if (item != selectedItem) {
|
||||
item.attachment.popup.menuitem.removeAttribute("checked");
|
||||
} else {
|
||||
item.attachment.popup.menuitem.setAttribute("checked", "");
|
||||
}
|
||||
}
|
||||
set selectedDepth(aDepth) {
|
||||
this.selectedItem = this._framesCache.get(aDepth);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -511,7 +503,7 @@ create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
|||
|
||||
let command = document.createElement("command");
|
||||
command.id = commandId;
|
||||
command.addEventListener("command", this._selectFrame.bind(this, aDepth), false);
|
||||
command.addEventListener("command", () => this.selectedDepth = aDepth, false);
|
||||
|
||||
let menuitem = document.createElement("menuitem");
|
||||
menuitem.id = menuitemId;
|
||||
|
@ -572,17 +564,21 @@ create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
|||
},
|
||||
|
||||
/**
|
||||
* The click listener for the stackframes container.
|
||||
* The select listener for the stackframes container.
|
||||
*/
|
||||
_onClick: function(e) {
|
||||
if (e && e.button != 0) {
|
||||
// Only allow left-click to trigger this event.
|
||||
return;
|
||||
}
|
||||
let item = this.getItemForElement(e.target);
|
||||
if (item) {
|
||||
// The container is not empty and we clicked on an actual item.
|
||||
this._selectFrame(item.attachment.depth);
|
||||
_onSelect: function(e) {
|
||||
let stackframeItem = this.selectedItem;
|
||||
if (stackframeItem) {
|
||||
// The container is not empty and an actual item was selected.
|
||||
gStackFrames.selectFrame(stackframeItem.attachment.depth);
|
||||
|
||||
for (let otherItem in this) {
|
||||
if (otherItem != stackframeItem) {
|
||||
otherItem.attachment.popup.menuitem.removeAttribute("checked");
|
||||
} else {
|
||||
otherItem.attachment.popup.menuitem.setAttribute("checked", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -617,16 +613,6 @@ create({ constructor: StackFramesView, proto: MenuContainer.prototype }, {
|
|||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Requests selection of a frame from the controller.
|
||||
*
|
||||
* @param number aDepth
|
||||
* The depth of the frame in the stack.
|
||||
*/
|
||||
_selectFrame: function(aDepth) {
|
||||
DebuggerController.StackFrames.selectFrame(aDepth);
|
||||
},
|
||||
|
||||
_framesCache: null,
|
||||
_commandset: null,
|
||||
_menupopup: null,
|
||||
|
|
|
@ -354,9 +354,7 @@ let DebuggerView = {
|
|||
}
|
||||
// If the requested source exists, display it and update.
|
||||
else if (this.Sources.containsValue(aUrl) && !aFlags.noSwitch) {
|
||||
this.Sources.node.preventFocusOnSelection = true;
|
||||
this.Sources.selectedValue = aUrl;
|
||||
this.Sources.node.preventFocusOnSelection = false;
|
||||
set(aLine);
|
||||
}
|
||||
// Dumb request, invalidate the caret position and debug location.
|
||||
|
|
|
@ -54,6 +54,7 @@ MOCHITEST_BROWSER_TESTS = \
|
|||
browser_dbg_reload-preferred-script.js \
|
||||
browser_dbg_pane-collapse.js \
|
||||
browser_dbg_panesize-inner.js \
|
||||
browser_dbg_breadcrumbs-access.js \
|
||||
browser_dbg_stack-01.js \
|
||||
browser_dbg_stack-02.js \
|
||||
browser_dbg_stack-03.js \
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
const TAB_URL = EXAMPLE_URL + "browser_dbg_script-switching.html";
|
||||
|
||||
let gPane = null;
|
||||
let gTab = null;
|
||||
let gDebuggee = null;
|
||||
let gDebugger = null;
|
||||
|
||||
function test()
|
||||
{
|
||||
let scriptShown = false;
|
||||
let framesAdded = false;
|
||||
let resumed = false;
|
||||
let testStarted = false;
|
||||
|
||||
debug_tab_pane(TAB_URL, function(aTab, aDebuggee, aPane) {
|
||||
gTab = aTab;
|
||||
gDebuggee = aDebuggee;
|
||||
gPane = aPane;
|
||||
gDebugger = gPane.panelWin;
|
||||
resumed = true;
|
||||
|
||||
gDebugger.addEventListener("Debugger:SourceShown", onScriptShown);
|
||||
|
||||
gDebugger.DebuggerController.activeThread.addOneTimeListener("framesadded", function() {
|
||||
framesAdded = true;
|
||||
executeSoon(startTest);
|
||||
});
|
||||
|
||||
executeSoon(function() {
|
||||
gDebuggee.firstCall();
|
||||
});
|
||||
});
|
||||
|
||||
function onScriptShown(aEvent)
|
||||
{
|
||||
scriptShown = aEvent.detail.url.indexOf("-02.js") != -1;
|
||||
executeSoon(startTest);
|
||||
}
|
||||
|
||||
function startTest()
|
||||
{
|
||||
if (scriptShown && framesAdded && resumed && !testStarted) {
|
||||
gDebugger.removeEventListener("Debugger:SourceShown", onScriptShown);
|
||||
testStarted = true;
|
||||
Services.tm.currentThread.dispatch({ run: performTest }, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function performTest()
|
||||
{
|
||||
let editor = gDebugger.DebuggerView.editor;
|
||||
let sources = gDebugger.DebuggerView.Sources;
|
||||
let stackframes = gDebugger.DebuggerView.StackFrames;
|
||||
|
||||
is(editor.getCaretPosition().line, 5,
|
||||
"The source editor caret position was incorrect (1).");
|
||||
is(sources.selectedLabel, "test-script-switching-02.js",
|
||||
"The currently selected source is incorrect (1).");
|
||||
is(stackframes.selectedIndex, 3,
|
||||
"The currently selected stackframe is incorrect (1).");
|
||||
|
||||
EventUtils.sendKey("DOWN", gDebugger);
|
||||
is(editor.getCaretPosition().line, 6,
|
||||
"The source editor caret position was incorrect (2).");
|
||||
is(sources.selectedLabel, "test-script-switching-02.js",
|
||||
"The currently selected source is incorrect (2).");
|
||||
is(stackframes.selectedIndex, 3,
|
||||
"The currently selected stackframe is incorrect (2).");
|
||||
|
||||
EventUtils.sendKey("UP", gDebugger);
|
||||
is(editor.getCaretPosition().line, 5,
|
||||
"The source editor caret position was incorrect (3).");
|
||||
is(sources.selectedLabel, "test-script-switching-02.js",
|
||||
"The currently selected source is incorrect (3).");
|
||||
is(stackframes.selectedIndex, 3,
|
||||
"The currently selected stackframe is incorrect (3).");
|
||||
|
||||
|
||||
EventUtils.sendMouseEvent({ type: "mousedown" },
|
||||
stackframes.selectedItem.target,
|
||||
gDebugger);
|
||||
|
||||
|
||||
EventUtils.sendKey("UP", gDebugger);
|
||||
is(editor.getCaretPosition().line, 5,
|
||||
"The source editor caret position was incorrect (4).");
|
||||
is(sources.selectedLabel, "test-script-switching-02.js",
|
||||
"The currently selected source is incorrect (4).");
|
||||
is(stackframes.selectedIndex, 2,
|
||||
"The currently selected stackframe is incorrect (4).");
|
||||
|
||||
gDebugger.addEventListener("Debugger:SourceShown", function _onEvent(aEvent) {
|
||||
gDebugger.removeEventListener(aEvent.type, _onEvent);
|
||||
|
||||
is(editor.getCaretPosition().line, 4,
|
||||
"The source editor caret position was incorrect (5).");
|
||||
is(sources.selectedLabel, "test-script-switching-01.js",
|
||||
"The currently selected source is incorrect (5).");
|
||||
is(stackframes.selectedIndex, 1,
|
||||
"The currently selected stackframe is incorrect (5).");
|
||||
|
||||
EventUtils.sendKey("UP", gDebugger);
|
||||
|
||||
is(editor.getCaretPosition().line, 4,
|
||||
"The source editor caret position was incorrect (6).");
|
||||
is(sources.selectedLabel, "test-script-switching-01.js",
|
||||
"The currently selected source is incorrect (6).");
|
||||
is(stackframes.selectedIndex, 0,
|
||||
"The currently selected stackframe is incorrect (6).");
|
||||
|
||||
gDebugger.addEventListener("Debugger:SourceShown", function _onEvent(aEvent) {
|
||||
gDebugger.removeEventListener(aEvent.type, _onEvent);
|
||||
|
||||
is(editor.getCaretPosition().line, 5,
|
||||
"The source editor caret position was incorrect (7).");
|
||||
is(sources.selectedLabel, "test-script-switching-02.js",
|
||||
"The currently selected source is incorrect (7).");
|
||||
is(stackframes.selectedIndex, 3,
|
||||
"The currently selected stackframe is incorrect (7).");
|
||||
|
||||
gDebugger.addEventListener("Debugger:SourceShown", function _onEvent(aEvent) {
|
||||
gDebugger.removeEventListener(aEvent.type, _onEvent);
|
||||
|
||||
is(editor.getCaretPosition().line, 4,
|
||||
"The source editor caret position was incorrect (8).");
|
||||
is(sources.selectedLabel, "test-script-switching-01.js",
|
||||
"The currently selected source is incorrect (8).");
|
||||
is(stackframes.selectedIndex, 0,
|
||||
"The currently selected stackframe is incorrect (8).");
|
||||
|
||||
closeDebuggerAndFinish();
|
||||
});
|
||||
|
||||
EventUtils.sendKey("HOME", gDebugger);
|
||||
});
|
||||
|
||||
EventUtils.sendKey("END", gDebugger);
|
||||
});
|
||||
|
||||
EventUtils.sendKey("UP", gDebugger);
|
||||
}
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
removeTab(gTab);
|
||||
gPane = null;
|
||||
gTab = null;
|
||||
gDebuggee = null;
|
||||
gDebugger = null;
|
||||
});
|
||||
}
|
|
@ -530,6 +530,14 @@ let Prefs = new ViewHelpers.Prefs("devtools.netmonitor", {
|
|||
networkDetailsHeight: ["Int", "panes-network-details-height"]
|
||||
});
|
||||
|
||||
/**
|
||||
* Returns true if this is document is in RTL mode.
|
||||
* @return boolean
|
||||
*/
|
||||
XPCOMUtils.defineLazyGetter(window, "isRTL", function() {
|
||||
return window.getComputedStyle(document.documentElement, null).direction == "rtl";
|
||||
});
|
||||
|
||||
/**
|
||||
* Convenient way of emitting events from the panel window.
|
||||
*/
|
||||
|
|
|
@ -897,10 +897,11 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
|
|||
let startCapNode = $(".requests-menu-timings-cap.start", target);
|
||||
let endCapNode = $(".requests-menu-timings-cap.end", target);
|
||||
let totalNode = $(".requests-menu-timings-total", target);
|
||||
let direction = window.isRTL ? -1 : 1;
|
||||
|
||||
// Render the timing information at a specific horizontal translation
|
||||
// based on the delta to the first monitored event network.
|
||||
let translateX = "translateX(" + attachment.startedDeltaMillis + "px)";
|
||||
let translateX = "translateX(" + (direction * attachment.startedDeltaMillis) + "px)";
|
||||
|
||||
// Based on the total time passed until the last request, rescale
|
||||
// all the waterfalls to a reasonable size.
|
||||
|
@ -911,8 +912,8 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
|
|||
let revScaleX = "scaleX(" + (1 / scale) + ")";
|
||||
|
||||
timingsNode.style.transform = scaleX + " " + translateX;
|
||||
startCapNode.style.transform = revScaleX + " translateX(0.5px)";
|
||||
endCapNode.style.transform = revScaleX + " translateX(-0.5px)";
|
||||
startCapNode.style.transform = revScaleX + " translateX(" + (direction * 0.5) + "px)";
|
||||
endCapNode.style.transform = revScaleX + " translateX(" + (direction * -0.5) + "px)";
|
||||
totalNode.style.transform = revScaleX;
|
||||
}
|
||||
},
|
||||
|
@ -947,10 +948,11 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
|
|||
|
||||
// Insert one label for each division on the current scale.
|
||||
let fragment = document.createDocumentFragment();
|
||||
let direction = window.isRTL ? -1 : 1;
|
||||
|
||||
for (let x = 0; x < availableWidth; x += scaledStep) {
|
||||
let divisionMS = (x / aScale).toFixed(0);
|
||||
let translateX = "translateX(" + (x | 0) + "px)";
|
||||
let translateX = "translateX(" + ((direction * x) | 0) + "px)";
|
||||
|
||||
let node = document.createElement("label");
|
||||
let text = L10N.getFormatStr("networkMenu.divisionMS", divisionMS);
|
||||
|
@ -1009,7 +1011,8 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
|
|||
for (let i = 1; i <= REQUESTS_WATERFALL_BACKGROUND_TICKS_SCALES; i++) {
|
||||
let increment = scaledStep * Math.pow(2, i);
|
||||
for (let x = 0; x < canvasWidth; x += increment) {
|
||||
data32[x | 0] = (alphaComponent << 24) | (b << 16) | (g << 8) | r;
|
||||
let position = (window.isRTL ? canvasWidth - x : x) | 0;
|
||||
data32[position] = (alphaComponent << 24) | (b << 16) | (g << 8) | r;
|
||||
}
|
||||
alphaComponent += REQUESTS_WATERFALL_BACKGROUND_TICKS_OPACITY_ADD;
|
||||
}
|
||||
|
@ -1035,6 +1038,9 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
|
|||
* Hides the overflowing columns in the requests table.
|
||||
*/
|
||||
_hideOverflowingColumns: function() {
|
||||
if (window.isRTL) {
|
||||
return;
|
||||
}
|
||||
let table = $("#network-table");
|
||||
let toolbar = $("#requests-menu-toolbar");
|
||||
let columns = [
|
||||
|
@ -1202,7 +1208,11 @@ create({ constructor: RequestsMenuView, proto: MenuContainer.prototype }, {
|
|||
let waterfall = $("#requests-menu-waterfall-header-box");
|
||||
let containerBounds = container.getBoundingClientRect();
|
||||
let waterfallBounds = waterfall.getBoundingClientRect();
|
||||
this._cachedWaterfallWidth = containerBounds.width - waterfallBounds.left;
|
||||
if (!window.isRTL) {
|
||||
this._cachedWaterfallWidth = containerBounds.width - waterfallBounds.left;
|
||||
} else {
|
||||
this._cachedWaterfallWidth = waterfallBounds.right;
|
||||
}
|
||||
}
|
||||
return this._cachedWaterfallWidth;
|
||||
},
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#toolbar-labels {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#details-pane-toggle[disabled] {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ const Cu = Components.utils;
|
|||
const ENSURE_SELECTION_VISIBLE_DELAY = 50; // ms
|
||||
|
||||
Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
|
||||
Cu.import("resource:///modules/devtools/shared/event-emitter.js");
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["BreadcrumbsWidget"];
|
||||
|
||||
|
@ -45,6 +46,8 @@ this.BreadcrumbsWidget = function BreadcrumbsWidget(aNode) {
|
|||
this._list.setAttribute("flex", "1");
|
||||
this._list.setAttribute("orient", "horizontal");
|
||||
this._list.setAttribute("clicktoscroll", "true")
|
||||
this._list.addEventListener("keypress", e => this.emit("keyPress", e), false);
|
||||
this._list.addEventListener("mousedown", e => this.emit("mousePress", e), false);
|
||||
this._parent.appendChild(this._list);
|
||||
|
||||
// By default, hide the arrows. We let the arrowscrollbox show them
|
||||
|
@ -54,6 +57,9 @@ this.BreadcrumbsWidget = function BreadcrumbsWidget(aNode) {
|
|||
this._list.addEventListener("underflow", this._onUnderflow.bind(this), false);
|
||||
this._list.addEventListener("overflow", this._onOverflow.bind(this), false);
|
||||
|
||||
// This widget emits events that can be handled in a MenuContainer.
|
||||
EventEmitter.decorate(this);
|
||||
|
||||
// Delegate some of the associated node's methods to satisfy the interface
|
||||
// required by MenuContainer instances.
|
||||
ViewHelpers.delegateWidgetAttributeMethods(this, aNode);
|
||||
|
|
|
@ -78,14 +78,6 @@ SideMenuWidget.prototype = {
|
|||
*/
|
||||
sortedGroups: true,
|
||||
|
||||
/**
|
||||
* Specifies if when an item is selected in this container (via the
|
||||
* selectedItem setter), that respective item should be focused as well.
|
||||
* You can enable this flag, for example, to maintain a certain node
|
||||
* selected but visually indicate a different selection in this container.
|
||||
*/
|
||||
preventFocusOnSelection: false,
|
||||
|
||||
/**
|
||||
* Specifies if this container should try to keep the selected item visible.
|
||||
* (For example, when new items are added the selection is brought into view).
|
||||
|
@ -142,9 +134,6 @@ SideMenuWidget.prototype = {
|
|||
if (this.maintainSelectionVisible) {
|
||||
this.ensureSelectionIsVisible({ withGroup: true, delayed: true });
|
||||
}
|
||||
if (this._orderedMenuElementsArray.length == 1) {
|
||||
this._list.focus();
|
||||
}
|
||||
if (maintainScrollAtBottom) {
|
||||
this._list.scrollTop = this._list.scrollHeight;
|
||||
}
|
||||
|
@ -226,7 +215,6 @@ SideMenuWidget.prototype = {
|
|||
node.classList.add("selected");
|
||||
node.parentNode.classList.add("selected");
|
||||
this._selectedItem = node;
|
||||
!this.preventFocusOnSelection && node.focus();
|
||||
} else {
|
||||
node.classList.remove("selected");
|
||||
node.parentNode.classList.remove("selected");
|
||||
|
|
|
@ -587,7 +587,7 @@ MenuContainer.prototype = {
|
|||
|
||||
/**
|
||||
* Prepares an item to be added to this container. This allows for a large
|
||||
* number of items to be batched up before alphabetically sorted and added.
|
||||
* number of items to be batched up before being sorted and added.
|
||||
*
|
||||
* If the "staged" flag is not set to true, the item will be immediately
|
||||
* inserted at the correct position in this container, so that all the items
|
||||
|
@ -625,13 +625,13 @@ MenuContainer.prototype = {
|
|||
|
||||
// Batch the item to be added later.
|
||||
if (aOptions.staged) {
|
||||
// Commit operations will ignore any specified index.
|
||||
// An ulterior commit operation will ignore any specified index.
|
||||
delete aOptions.index;
|
||||
return void this._stagedItems.push({ item: item, options: aOptions });
|
||||
}
|
||||
// Find the target position in this container and insert the item there.
|
||||
if (!("index" in aOptions)) {
|
||||
return this._insertItemAt(this._findExpectedIndex(item), item, aOptions);
|
||||
return this._insertItemAt(this._findExpectedIndexFor(item), item, aOptions);
|
||||
}
|
||||
// Insert the item at the specified index. If negative or out of bounds,
|
||||
// the item will be simply appended.
|
||||
|
@ -669,14 +669,13 @@ MenuContainer.prototype = {
|
|||
* True if a selected item was available, false otherwise.
|
||||
*/
|
||||
refresh: function() {
|
||||
let selectedValue = this.selectedValue;
|
||||
if (!selectedValue) {
|
||||
let selectedItem = this.selectedItem;
|
||||
if (!selectedItem) {
|
||||
return false;
|
||||
}
|
||||
let entangledLabel = this.getItemByValue(selectedValue)._label;
|
||||
this._container.removeAttribute("notice");
|
||||
this._container.setAttribute("label", entangledLabel);
|
||||
this._container.setAttribute("tooltiptext", selectedValue);
|
||||
this._container.setAttribute("label", selectedItem._label);
|
||||
this._container.setAttribute("tooltiptext", selectedItem._value);
|
||||
return true;
|
||||
},
|
||||
|
||||
|
@ -946,7 +945,13 @@ MenuContainer.prototype = {
|
|||
let targetElement = aItem ? aItem._target : null;
|
||||
let prevElement = this._container.selectedItem;
|
||||
|
||||
// Prevent selecting the same item again, so return early.
|
||||
// Make sure the currently selected item's target element is also focused.
|
||||
if (this.autoFocusOnSelection && targetElement) {
|
||||
targetElement.focus();
|
||||
}
|
||||
|
||||
// Prevent selecting the same item again and avoid dispatching
|
||||
// a redundant selection event, so return early.
|
||||
if (targetElement == prevElement) {
|
||||
return;
|
||||
}
|
||||
|
@ -981,6 +986,42 @@ MenuContainer.prototype = {
|
|||
set selectedValue(aValue)
|
||||
this.selectedItem = this._itemsByValue.get(aValue),
|
||||
|
||||
/**
|
||||
* Focus this container the first time an element is inserted?
|
||||
*
|
||||
* If this flag is set to true, then when the first item is inserted in
|
||||
* this container (and thus it's the only item available), its corresponding
|
||||
* target element is focused as well.
|
||||
*/
|
||||
autoFocusOnFirstItem: true,
|
||||
|
||||
/**
|
||||
* Focus on selection?
|
||||
*
|
||||
* If this flag is set to true, then whenever an item is selected in
|
||||
* this container (e.g. via the selectedIndex or selectedItem setters),
|
||||
* its corresponding target element is focused as well.
|
||||
*
|
||||
* You can disable this flag, for example, to maintain a certain node
|
||||
* focused but visually indicate a different selection in this container.
|
||||
*/
|
||||
autoFocusOnSelection: true,
|
||||
|
||||
/**
|
||||
* Focus on input (e.g. mouse click)?
|
||||
*
|
||||
* If this flag is set to true, then whenever an item receives user input in
|
||||
* this container, its corresponding target element is focused as well.
|
||||
*/
|
||||
autoFocusOnInput: true,
|
||||
|
||||
/**
|
||||
* The number of elements in this container to jump when Page Up or Page Down
|
||||
* keys are pressed. If falsy, then the page size will be based on the
|
||||
* number of visible items in the container.
|
||||
*/
|
||||
pageSize: 0,
|
||||
|
||||
/**
|
||||
* Focuses the first visible item in this container.
|
||||
*/
|
||||
|
@ -1323,7 +1364,7 @@ MenuContainer.prototype = {
|
|||
* @return number
|
||||
* The expected item index.
|
||||
*/
|
||||
_findExpectedIndex: function(aItem) {
|
||||
_findExpectedIndexFor: function(aItem) {
|
||||
let itemCount = this.itemCount;
|
||||
|
||||
for (let i = 0; i < itemCount; i++) {
|
||||
|
@ -1367,6 +1408,9 @@ MenuContainer.prototype = {
|
|||
if (!this._currentFilterPredicate(aItem)) {
|
||||
aItem._target.hidden = true;
|
||||
}
|
||||
if (this.autoFocusOnFirstItem && this._itemsByElement.size == 1) {
|
||||
aItem._target.focus();
|
||||
}
|
||||
if (aOptions.attributes) {
|
||||
aItem.setAttributes(aOptions.attributes, aItem._target);
|
||||
}
|
||||
|
@ -1424,13 +1468,6 @@ MenuContainer.prototype = {
|
|||
this._itemsByElement.delete(aItem._target);
|
||||
},
|
||||
|
||||
/**
|
||||
* The number of elements in this container to jump when Page Up or Page Down
|
||||
* keys are pressed. If falsy, then the page size will be based on the
|
||||
* number of visible items in the container.
|
||||
*/
|
||||
pageSize: 0,
|
||||
|
||||
/**
|
||||
* The keyPress event listener for this container.
|
||||
* @param string aName
|
||||
|
@ -1442,9 +1479,11 @@ MenuContainer.prototype = {
|
|||
|
||||
switch (aEvent.keyCode) {
|
||||
case aEvent.DOM_VK_UP:
|
||||
case aEvent.DOM_VK_LEFT:
|
||||
this.focusPrevItem();
|
||||
return;
|
||||
case aEvent.DOM_VK_DOWN:
|
||||
case aEvent.DOM_VK_RIGHT:
|
||||
this.focusNextItem();
|
||||
return;
|
||||
case aEvent.DOM_VK_PAGE_UP:
|
||||
|
@ -1472,10 +1511,13 @@ MenuContainer.prototype = {
|
|||
// Only allow left-click to trigger this event.
|
||||
return;
|
||||
}
|
||||
|
||||
let item = this.getItemForElement(aEvent.target);
|
||||
if (item) {
|
||||
// The container is not empty and we clicked on an actual item.
|
||||
this.selectedItem = item;
|
||||
// Make sure the current event's target element is also focused.
|
||||
this.autoFocusOnInput && item._target.focus();
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -9,6 +9,10 @@
|
|||
direction: ltr;
|
||||
}
|
||||
|
||||
.breadcrumbs-widget-item {
|
||||
-moz-user-focus: normal;
|
||||
}
|
||||
|
||||
/* SideMenuWidget */
|
||||
|
||||
.side-menu-widget-container {
|
||||
|
|
|
@ -1192,14 +1192,34 @@ WebConsoleFrame.prototype = {
|
|||
severity = SEVERITY_WARNING;
|
||||
}
|
||||
|
||||
let objectActors = new Set();
|
||||
|
||||
// Gather the actor IDs.
|
||||
for (let prop of ["errorMessage", "lineText"]) {
|
||||
let grip = aScriptError[prop];
|
||||
if (WebConsoleUtils.isActorGrip(grip)) {
|
||||
objectActors.add(grip.actor);
|
||||
}
|
||||
}
|
||||
|
||||
let errorMessage = aScriptError.errorMessage;
|
||||
if (errorMessage.type && errorMessage.type == "longString") {
|
||||
errorMessage = errorMessage.initial;
|
||||
}
|
||||
|
||||
let node = this.createMessageNode(aCategory, severity,
|
||||
aScriptError.errorMessage,
|
||||
errorMessage,
|
||||
aScriptError.sourceName,
|
||||
aScriptError.lineNumber, null, null,
|
||||
aScriptError.timeStamp);
|
||||
if (aScriptError.private) {
|
||||
node.setAttribute("private", true);
|
||||
}
|
||||
|
||||
if (objectActors.size > 0) {
|
||||
node._objectActors = objectActors;
|
||||
}
|
||||
|
||||
return node;
|
||||
},
|
||||
|
||||
|
@ -1225,10 +1245,32 @@ WebConsoleFrame.prototype = {
|
|||
*/
|
||||
handleLogMessage: function WCF_handleLogMessage(aPacket)
|
||||
{
|
||||
this.outputMessage(CATEGORY_JS, () => {
|
||||
return this.createMessageNode(CATEGORY_JS, SEVERITY_LOG, aPacket.message,
|
||||
null, null, null, null, aPacket.timeStamp);
|
||||
});
|
||||
if (aPacket.message) {
|
||||
this.outputMessage(CATEGORY_JS, this._reportLogMessage, [aPacket]);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Display log messages received from the server.
|
||||
*
|
||||
* @private
|
||||
* @param object aPacket
|
||||
* The message packet received from the server.
|
||||
* @return nsIDOMElement
|
||||
* The message element to render for the given log message.
|
||||
*/
|
||||
_reportLogMessage: function WCF__reportLogMessage(aPacket)
|
||||
{
|
||||
let msg = aPacket.message;
|
||||
if (msg.type && msg.type == "longString") {
|
||||
msg = msg.initial;
|
||||
}
|
||||
let node = this.createMessageNode(CATEGORY_JS, SEVERITY_LOG, msg, null,
|
||||
null, null, null, aPacket.timeStamp);
|
||||
if (WebConsoleUtils.isActorGrip(aPacket.message)) {
|
||||
node._objectActors = new Set([aPacket.message.actor]);
|
||||
}
|
||||
return node;
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -1992,6 +2034,22 @@ WebConsoleFrame.prototype = {
|
|||
}
|
||||
});
|
||||
}
|
||||
else if (category == CATEGORY_JS &&
|
||||
methodOrNode == this.reportPageError) {
|
||||
let pageError = args[1];
|
||||
for (let prop of ["errorMessage", "lineText"]) {
|
||||
let grip = pageError[prop];
|
||||
if (WebConsoleUtils.isActorGrip(grip)) {
|
||||
this._releaseObject(grip.actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (category == CATEGORY_JS &&
|
||||
methodOrNode == this._reportLogMessage) {
|
||||
if (WebConsoleUtils.isActorGrip(args[0].message)) {
|
||||
this._releaseObject(args[0].message.actor);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
Двоичные данные
browser/themes/linux/devtools/arrows.png
Двоичные данные
browser/themes/linux/devtools/arrows.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 804 B |
|
@ -29,12 +29,18 @@
|
|||
padding: 4px;
|
||||
}
|
||||
|
||||
.requests-menu-header:not(:last-child),
|
||||
.requests-menu-subitem:not(:last-child) {
|
||||
.requests-menu-header:not(:last-child):-moz-locale-dir(ltr),
|
||||
.requests-menu-subitem:not(:last-child):-moz-locale-dir(ltr) {
|
||||
-moz-border-end: 1px solid hsla(210,8%,5%,.25);
|
||||
box-shadow: 1px 0 0 hsla(210,16%,76%,.1);
|
||||
}
|
||||
|
||||
.requests-menu-header:not(:last-child):-moz-locale-dir(rtl),
|
||||
.requests-menu-subitem:not(:last-child):-moz-locale-dir(rtl) {
|
||||
-moz-border-end: 1px solid hsla(210,8%,5%,.25);
|
||||
box-shadow: -1px 0 0 hsla(210,16%,76%,.1);
|
||||
}
|
||||
|
||||
.requests-menu-header-button {
|
||||
-moz-appearance: none;
|
||||
background: none;
|
||||
|
@ -171,7 +177,6 @@ box.requests-menu-status[code^="5"] {
|
|||
-moz-padding-start: 4px;
|
||||
-moz-border-start: 1px dotted #999;
|
||||
font-size: 75%;
|
||||
text-align: left;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
|
@ -179,6 +184,14 @@ box.requests-menu-status[code^="5"] {
|
|||
-moz-margin-start: -100px !important; /* Don't affect layout. */
|
||||
}
|
||||
|
||||
.requests-menu-timings-division:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-division:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
/* Network requests table: waterfall items */
|
||||
|
||||
.requests-menu-subitem.requests-menu-waterfall {
|
||||
|
@ -189,15 +202,30 @@ box.requests-menu-status[code^="5"] {
|
|||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
.requests-menu-timings {
|
||||
.requests-menu-subitem.requests-menu-waterfall:-moz-locale-dir(rtl) {
|
||||
background-position: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total {
|
||||
-moz-padding-start: 8px;
|
||||
font-size: 85%;
|
||||
font-weight: 600;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap {
|
||||
|
@ -208,16 +236,32 @@ box.requests-menu-status[code^="5"] {
|
|||
|
||||
.requests-menu-timings-cap.start {
|
||||
-moz-border-end: none;
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end {
|
||||
-moz-border-start: none;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.start:-moz-locale-dir(ltr) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.start:-moz-locale-dir(rtl) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end:-moz-locale-dir(ltr) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end:-moz-locale-dir(rtl) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-box {
|
||||
height: 10px;
|
||||
border-top: 1px solid #fff;
|
||||
|
|
|
@ -123,7 +123,6 @@ browser.jar:
|
|||
* skin/classic/browser/devtools/common.css (devtools/common.css)
|
||||
skin/classic/browser/devtools/dark-theme.css (devtools/dark-theme.css)
|
||||
skin/classic/browser/devtools/light-theme.css (devtools/light-theme.css)
|
||||
skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
|
||||
skin/classic/browser/devtools/widgets.css (devtools/widgets.css)
|
||||
skin/classic/browser/devtools/commandline.png (devtools/commandline.png)
|
||||
skin/classic/browser/devtools/command-paintflashing.png (devtools/command-paintflashing.png)
|
||||
|
|
Двоичные данные
browser/themes/osx/devtools/arrows.png
Двоичные данные
browser/themes/osx/devtools/arrows.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 804 B |
|
@ -29,12 +29,18 @@
|
|||
padding: 4px;
|
||||
}
|
||||
|
||||
.requests-menu-header:not(:last-child),
|
||||
.requests-menu-subitem:not(:last-child) {
|
||||
.requests-menu-header:not(:last-child):-moz-locale-dir(ltr),
|
||||
.requests-menu-subitem:not(:last-child):-moz-locale-dir(ltr) {
|
||||
-moz-border-end: 1px solid hsla(210,8%,5%,.25);
|
||||
box-shadow: 1px 0 0 hsla(210,16%,76%,.1);
|
||||
}
|
||||
|
||||
.requests-menu-header:not(:last-child):-moz-locale-dir(rtl),
|
||||
.requests-menu-subitem:not(:last-child):-moz-locale-dir(rtl) {
|
||||
-moz-border-end: 1px solid hsla(210,8%,5%,.25);
|
||||
box-shadow: -1px 0 0 hsla(210,16%,76%,.1);
|
||||
}
|
||||
|
||||
.requests-menu-header-button {
|
||||
-moz-appearance: none;
|
||||
background: none;
|
||||
|
@ -171,7 +177,6 @@ box.requests-menu-status[code^="5"] {
|
|||
-moz-padding-start: 4px;
|
||||
-moz-border-start: 1px dotted #999;
|
||||
font-size: 75%;
|
||||
text-align: left;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
|
@ -179,6 +184,14 @@ box.requests-menu-status[code^="5"] {
|
|||
-moz-margin-start: -100px !important; /* Don't affect layout. */
|
||||
}
|
||||
|
||||
.requests-menu-timings-division:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-division:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
/* Network requests table: waterfall items */
|
||||
|
||||
.requests-menu-subitem.requests-menu-waterfall {
|
||||
|
@ -189,15 +202,30 @@ box.requests-menu-status[code^="5"] {
|
|||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
.requests-menu-timings {
|
||||
.requests-menu-subitem.requests-menu-waterfall:-moz-locale-dir(rtl) {
|
||||
background-position: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total {
|
||||
-moz-padding-start: 8px;
|
||||
font-size: 85%;
|
||||
font-weight: 600;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap {
|
||||
|
@ -208,16 +236,32 @@ box.requests-menu-status[code^="5"] {
|
|||
|
||||
.requests-menu-timings-cap.start {
|
||||
-moz-border-end: none;
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end {
|
||||
-moz-border-start: none;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.start:-moz-locale-dir(ltr) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.start:-moz-locale-dir(rtl) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end:-moz-locale-dir(ltr) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end:-moz-locale-dir(rtl) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-box {
|
||||
height: 10px;
|
||||
border-top: 1px solid #fff;
|
||||
|
|
|
@ -212,7 +212,6 @@ browser.jar:
|
|||
skin/classic/browser/devtools/dark-theme.css (devtools/dark-theme.css)
|
||||
skin/classic/browser/devtools/light-theme.css (devtools/light-theme.css)
|
||||
skin/classic/browser/devtools/widgets.css (devtools/widgets.css)
|
||||
skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
|
||||
skin/classic/browser/devtools/commandline.png (devtools/commandline.png)
|
||||
skin/classic/browser/devtools/command-paintflashing.png (devtools/command-paintflashing.png)
|
||||
skin/classic/browser/devtools/command-responsivemode.png (devtools/command-responsivemode.png)
|
||||
|
|
Двоичные данные
browser/themes/windows/devtools/arrows.png
Двоичные данные
browser/themes/windows/devtools/arrows.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 804 B |
|
@ -29,12 +29,18 @@
|
|||
padding: 4px;
|
||||
}
|
||||
|
||||
.requests-menu-header:not(:last-child),
|
||||
.requests-menu-subitem:not(:last-child) {
|
||||
.requests-menu-header:not(:last-child):-moz-locale-dir(ltr),
|
||||
.requests-menu-subitem:not(:last-child):-moz-locale-dir(ltr) {
|
||||
-moz-border-end: 1px solid hsla(210,8%,5%,.25);
|
||||
box-shadow: 1px 0 0 hsla(210,16%,76%,.1);
|
||||
}
|
||||
|
||||
.requests-menu-header:not(:last-child):-moz-locale-dir(rtl),
|
||||
.requests-menu-subitem:not(:last-child):-moz-locale-dir(rtl) {
|
||||
-moz-border-end: 1px solid hsla(210,8%,5%,.25);
|
||||
box-shadow: -1px 0 0 hsla(210,16%,76%,.1);
|
||||
}
|
||||
|
||||
.requests-menu-header-button {
|
||||
-moz-appearance: none;
|
||||
background: none;
|
||||
|
@ -171,7 +177,6 @@ box.requests-menu-status[code^="5"] {
|
|||
-moz-padding-start: 4px;
|
||||
-moz-border-start: 1px dotted #999;
|
||||
font-size: 90%;
|
||||
text-align: left;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
|
@ -179,6 +184,14 @@ box.requests-menu-status[code^="5"] {
|
|||
-moz-margin-start: -100px !important; /* Don't affect layout. */
|
||||
}
|
||||
|
||||
.requests-menu-timings-division:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-division:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
/* Network requests table: waterfall items */
|
||||
|
||||
.requests-menu-subitem.requests-menu-waterfall {
|
||||
|
@ -189,15 +202,30 @@ box.requests-menu-status[code^="5"] {
|
|||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
.requests-menu-timings {
|
||||
.requests-menu-subitem.requests-menu-waterfall:-moz-locale-dir(rtl) {
|
||||
background-position: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total:-moz-locale-dir(ltr) {
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total:-moz-locale-dir(rtl) {
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-total {
|
||||
-moz-padding-start: 8px;
|
||||
font-size: 85%;
|
||||
font-weight: 600;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap {
|
||||
|
@ -208,16 +236,32 @@ box.requests-menu-status[code^="5"] {
|
|||
|
||||
.requests-menu-timings-cap.start {
|
||||
-moz-border-end: none;
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end {
|
||||
-moz-border-start: none;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.start:-moz-locale-dir(ltr) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.start:-moz-locale-dir(rtl) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end:-moz-locale-dir(ltr) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
transform-origin: left center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-cap.end:-moz-locale-dir(rtl) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
transform-origin: right center;
|
||||
}
|
||||
|
||||
.requests-menu-timings-box {
|
||||
height: 10px;
|
||||
border-top: 1px solid #fff;
|
||||
|
|
|
@ -150,7 +150,6 @@ browser.jar:
|
|||
skin/classic/browser/devtools/dark-theme.css (devtools/dark-theme.css)
|
||||
skin/classic/browser/devtools/light-theme.css (devtools/light-theme.css)
|
||||
skin/classic/browser/devtools/widgets.css (devtools/widgets.css)
|
||||
skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
|
||||
skin/classic/browser/devtools/commandline.png (devtools/commandline.png)
|
||||
skin/classic/browser/devtools/alerticon-warning.png (devtools/alerticon-warning.png)
|
||||
skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png)
|
||||
|
@ -403,7 +402,6 @@ browser.jar:
|
|||
skin/classic/aero/browser/devtools/dark-theme.css (devtools/dark-theme.css)
|
||||
skin/classic/aero/browser/devtools/light-theme.css (devtools/light-theme.css)
|
||||
skin/classic/aero/browser/devtools/widgets.css (devtools/widgets.css)
|
||||
skin/classic/aero/browser/devtools/arrows.png (devtools/arrows.png)
|
||||
skin/classic/aero/browser/devtools/commandline.png (devtools/commandline.png)
|
||||
skin/classic/aero/browser/devtools/command-paintflashing.png (devtools/command-paintflashing.png)
|
||||
skin/classic/aero/browser/devtools/command-responsivemode.png (devtools/command-responsivemode.png)
|
||||
|
|
|
@ -318,6 +318,15 @@ nsFrameLoader::LoadFrame()
|
|||
src.Trim(" \t\n\r");
|
||||
|
||||
if (src.IsEmpty()) {
|
||||
// If the frame is a XUL element and has the attribute 'nodefaultsrc=true'
|
||||
// then we will not use 'about:blank' as fallback but return early without
|
||||
// starting a load if no 'src' attribute is given (or it's empty).
|
||||
if (mOwnerContent->IsXUL() &&
|
||||
mOwnerContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::nodefaultsrc,
|
||||
nsGkAtoms::_true, eCaseMatters)) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
src.AssignLiteral("about:blank");
|
||||
}
|
||||
|
||||
|
|
|
@ -607,6 +607,7 @@ GK_ATOM(no, "no")
|
|||
GK_ATOM(noautohide, "noautohide")
|
||||
GK_ATOM(nobr, "nobr")
|
||||
GK_ATOM(node, "node")
|
||||
GK_ATOM(nodefaultsrc, "nodefaultsrc")
|
||||
GK_ATOM(nodeSet, "node-set")
|
||||
GK_ATOM(noembed, "noembed")
|
||||
GK_ATOM(noframes, "noframes")
|
||||
|
|
|
@ -341,6 +341,24 @@ WebConsoleActor.prototype =
|
|||
return actor.grip();
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a long string grip if needed for the given string.
|
||||
*
|
||||
* @private
|
||||
* @param string aString
|
||||
* The string you want to create a long string grip for.
|
||||
* @return string|object
|
||||
* A string is returned if |aString| is not a long string.
|
||||
* A LongStringActor grip is returned if |aString| is a long string.
|
||||
*/
|
||||
_createStringGrip: function NEA__createStringGrip(aString)
|
||||
{
|
||||
if (aString && this._stringIsLong(aString)) {
|
||||
return this.longStringGrip(aString, this._actorPool);
|
||||
}
|
||||
return aString;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get an object actor by its ID.
|
||||
*
|
||||
|
@ -913,7 +931,7 @@ WebConsoleActor.prototype =
|
|||
packet = {
|
||||
from: this.actorID,
|
||||
type: "logMessage",
|
||||
message: aMessage.message,
|
||||
message: this._createStringGrip(aMessage.message),
|
||||
timeStamp: aMessage.timeStamp,
|
||||
};
|
||||
}
|
||||
|
@ -931,10 +949,9 @@ WebConsoleActor.prototype =
|
|||
preparePageErrorForRemote: function WCA_preparePageErrorForRemote(aPageError)
|
||||
{
|
||||
return {
|
||||
message: aPageError.message,
|
||||
errorMessage: aPageError.errorMessage,
|
||||
errorMessage: this._createStringGrip(aPageError.errorMessage),
|
||||
sourceName: aPageError.sourceName,
|
||||
lineText: aPageError.sourceLine,
|
||||
lineText: this._createStringGrip(aPageError.sourceLine),
|
||||
lineNumber: aPageError.lineNumber,
|
||||
columnNumber: aPageError.columnNumber,
|
||||
category: aPageError.category,
|
||||
|
@ -1139,6 +1156,8 @@ function NetworkEventActor(aNetworkEvent, aWebConsoleActor)
|
|||
};
|
||||
|
||||
this._timings = {};
|
||||
|
||||
// Keep track of LongStringActors owned by this NetworkEventActor.
|
||||
this._longStringActors = new Set();
|
||||
|
||||
this._discardRequestBody = aNetworkEvent.discardRequestBody;
|
||||
|
@ -1353,7 +1372,7 @@ NetworkEventActor.prototype =
|
|||
addRequestPostData: function NEA_addRequestPostData(aPostData)
|
||||
{
|
||||
this._request.postData = aPostData;
|
||||
aPostData.text = this._createStringGrip(aPostData.text);
|
||||
aPostData.text = this.parent._createStringGrip(aPostData.text);
|
||||
if (typeof aPostData.text == "object") {
|
||||
this._longStringActors.add(aPostData.text);
|
||||
}
|
||||
|
@ -1448,7 +1467,7 @@ NetworkEventActor.prototype =
|
|||
function NEA_addResponseContent(aContent, aDiscardedResponseBody)
|
||||
{
|
||||
this._response.content = aContent;
|
||||
aContent.text = this._createStringGrip(aContent.text);
|
||||
aContent.text = this.parent._createStringGrip(aContent.text);
|
||||
if (typeof aContent.text == "object") {
|
||||
this._longStringActors.add(aContent.text);
|
||||
}
|
||||
|
@ -1498,30 +1517,12 @@ NetworkEventActor.prototype =
|
|||
_prepareHeaders: function NEA__prepareHeaders(aHeaders)
|
||||
{
|
||||
for (let header of aHeaders) {
|
||||
header.value = this._createStringGrip(header.value);
|
||||
header.value = this.parent._createStringGrip(header.value);
|
||||
if (typeof header.value == "object") {
|
||||
this._longStringActors.add(header.value);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a long string grip if needed for the given string.
|
||||
*
|
||||
* @private
|
||||
* @param string aString
|
||||
* The string you want to create a long string grip for.
|
||||
* @return string|object
|
||||
* A string is returned if |aString| is not a long string.
|
||||
* A LongStringActor grip is returned if |aString| is a long string.
|
||||
*/
|
||||
_createStringGrip: function NEA__createStringGrip(aString)
|
||||
{
|
||||
if (this.parent._stringIsLong(aString)) {
|
||||
return this.parent.longStringGrip(aString, this.parent._actorPool);
|
||||
}
|
||||
return aString;
|
||||
},
|
||||
};
|
||||
|
||||
NetworkEventActor.prototype.requestTypes =
|
||||
|
|
|
@ -945,9 +945,7 @@ ConsoleServiceListener.prototype =
|
|||
}
|
||||
}
|
||||
|
||||
if (aMessage.message) {
|
||||
this.listener.onConsoleServiceMessage(aMessage);
|
||||
}
|
||||
this.listener.onConsoleServiceMessage(aMessage);
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче