This commit is contained in:
Ryan VanderMeulen 2013-06-07 11:12:41 -04:00
Родитель fa655c18ae 1c6e0c1045
Коммит 8b89587786
48 изменённых файлов: 651 добавлений и 386 удалений

Просмотреть файл

@ -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

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 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

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 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

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 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);
},
/**