зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to mozilla-inbound
This commit is contained in:
Коммит
146e37bb6f
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="ca283b9db2b151d465cfd2e19346cf58fe89e413"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
|
||||
|
@ -128,7 +128,7 @@
|
|||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="3a9a17613cc685aa232432566ad6cc607eab4ec1"/>
|
||||
<project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="c3ee0c875393607430086f942950d1b3f496ab0e"/>
|
||||
<project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="7d33aaf740bbf6c7c6e9c34a92b371eda311b66b"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="24e0e7016bbc22096b28e8bfdd6362b250ac78b7"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="e16b5c17131d2296101b24c87887c9ccf057649f"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="0e56e450367cd802241b27164a2979188242b95f"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="bc70af75eac79073c4c935bf1f71c0cb10e821b7"/>
|
||||
<project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="f620016437dd2f050e044eccef5e70e3f689ccbe"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="65fba428f8d76336b33ddd9e15900357953600ba">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
|
@ -125,7 +125,7 @@
|
|||
<!-- Emulator specific things -->
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="72ffdf71c68a96309212eb13d63560d66db14c9e"/>
|
||||
<project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="cf3f83a8ef13597b62fb6de7aa0cfaf5dc5de2b5"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="606dd627fad312cb79284fa38e44f0ed4bd42bfa"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="265db49431fed74e1887f8dcf083a3b3f3550031"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="694cecf256122d0cb3b6a1a4efb4b5c7401db223"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="aa430bd055bf7e1003d78e9bf0c0abbe32f33e45"/>
|
||||
<project name="platform/development" path="development" revision="5968ff4e13e0d696ad8d972281fc27ae5a12829b"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="ca283b9db2b151d465cfd2e19346cf58fe89e413"/>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
"remote": "",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "5476e49adf00cafde6cb68e876f0514dac4b993d",
|
||||
"revision": "e9a13950c6656cbd21307ff82b8282ed1006c492",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="40c86437150c62396f187c0efb05a406dbac0147"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
|
||||
|
|
|
@ -1452,7 +1452,7 @@ pref("browser.newtabpage.rows", 3);
|
|||
// number of columns of newtab grid
|
||||
pref("browser.newtabpage.columns", 3);
|
||||
|
||||
pref("browser.newtabpage.directorySource", "data:application/json,{}");
|
||||
pref("browser.newtabpage.directorySource", "chrome://global/content/directoryLinks.json");
|
||||
|
||||
// Enable the DOM fullscreen API.
|
||||
pref("full-screen-api.enabled", true);
|
||||
|
|
|
@ -786,10 +786,14 @@ StackFrames.prototype = {
|
|||
if (!isClientEval && !isPopupShown) {
|
||||
// Move the editor's caret to the proper url and line.
|
||||
DebuggerView.setEditorLocation(where.url, where.line);
|
||||
// Highlight the breakpoint at the specified url and line if it exists.
|
||||
DebuggerView.Sources.highlightBreakpoint(where, { noEditorUpdate: true });
|
||||
} else {
|
||||
// Highlight the line where the execution is paused in the editor.
|
||||
DebuggerView.setEditorLocation(where.url, where.line, { noCaret: true });
|
||||
}
|
||||
|
||||
// Highlight the breakpoint at the line and column if it exists.
|
||||
DebuggerView.Sources.highlightBreakpointAtCursor();
|
||||
|
||||
// Don't display the watch expressions textbox inputs in the pane.
|
||||
DebuggerView.WatchExpressions.toggleContents(false);
|
||||
|
||||
|
@ -1747,12 +1751,14 @@ Breakpoints.prototype = {
|
|||
// Initialize the breakpoint, but don't update the editor, since this
|
||||
// callback is invoked because a breakpoint was added in the editor itself.
|
||||
this.addBreakpoint(location, { noEditorUpdate: true }).then(aBreakpointClient => {
|
||||
// If the breakpoint client has an "requestedLocation" attached, then
|
||||
// If the breakpoint client has a "requestedLocation" attached, then
|
||||
// the original requested placement for the breakpoint wasn't accepted.
|
||||
// In this case, we need to update the editor with the new location.
|
||||
if (aBreakpointClient.requestedLocation) {
|
||||
DebuggerView.editor.removeBreakpoint(aBreakpointClient.requestedLocation.line - 1);
|
||||
DebuggerView.editor.addBreakpoint(aBreakpointClient.location.line - 1);
|
||||
DebuggerView.editor.moveBreakpoint(
|
||||
aBreakpointClient.requestedLocation.line - 1,
|
||||
aBreakpointClient.location.line - 1
|
||||
);
|
||||
}
|
||||
// Notify that we've shown a breakpoint in the source editor.
|
||||
window.emit(EVENTS.BREAKPOINT_SHOWN);
|
||||
|
|
|
@ -414,6 +414,17 @@ SourcesView.prototype = Heritage.extend(WidgetMethods, {
|
|||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Highlight the breakpoint on the current currently focused line/column
|
||||
* if it exists.
|
||||
*/
|
||||
highlightBreakpointAtCursor: function() {
|
||||
let url = DebuggerView.Sources.selectedValue;
|
||||
let line = DebuggerView.editor.getCursor().line + 1;
|
||||
let location = { url: url, line: line };
|
||||
this.highlightBreakpoint(location, { noEditorUpdate: true });
|
||||
},
|
||||
|
||||
/**
|
||||
* Unhighlights the current breakpoint in this sources container.
|
||||
*/
|
||||
|
@ -2003,21 +2014,21 @@ VariableBubbleView.prototype = {
|
|||
/**
|
||||
* The mousemove listener for the source editor.
|
||||
*/
|
||||
_onMouseMove: function({ clientX: x, clientY: y, buttons: btns }) {
|
||||
_onMouseMove: function(e) {
|
||||
// Prevent the variable inspection popup from showing when the thread client
|
||||
// is not paused, or while a popup is already visible, or when the user tries
|
||||
// to select text in the editor.
|
||||
if (gThreadClient && gThreadClient.state != "paused"
|
||||
|| !this._tooltip.isHidden()
|
||||
|| (DebuggerView.editor.somethingSelected()
|
||||
&& btns > 0)) {
|
||||
let isResumed = gThreadClient && gThreadClient.state != "paused";
|
||||
let isSelecting = DebuggerView.editor.somethingSelected() && e.buttons > 0;
|
||||
let isPopupVisible = !this._tooltip.isHidden();
|
||||
if (isResumed || isSelecting || isPopupVisible) {
|
||||
clearNamedTimeout("editor-mouse-move");
|
||||
return;
|
||||
}
|
||||
// Allow events to settle down first. If the mouse hovers over
|
||||
// a certain point in the editor long enough, try showing a variable bubble.
|
||||
setNamedTimeout("editor-mouse-move",
|
||||
EDITOR_VARIABLE_HOVER_DELAY, () => this._findIdentifier(x, y));
|
||||
EDITOR_VARIABLE_HOVER_DELAY, () => this._findIdentifier(e.clientX, e.clientY));
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -370,8 +370,7 @@ let DebuggerView = {
|
|||
* The source object coming from the active thread.
|
||||
* @param object aFlags
|
||||
* Additional options for setting the source. Supported options:
|
||||
* - force: boolean allowing whether we can get the selected url's
|
||||
* text again.
|
||||
* - force: boolean forcing all text to be reshown in the editor
|
||||
* @return object
|
||||
* A promise that is resolved after the source text has been set.
|
||||
*/
|
||||
|
@ -441,8 +440,7 @@ let DebuggerView = {
|
|||
* - noDebug: don't set the debug location at the specified line
|
||||
* - align: string specifying whether to align the specified line
|
||||
* at the "top", "center" or "bottom" of the editor
|
||||
* - force: boolean allowing whether we can get the selected url's
|
||||
* text again
|
||||
* - force: boolean forcing all text to be reshown in the editor
|
||||
* @return object
|
||||
* A promise that is resolved after the source text has been set.
|
||||
*/
|
||||
|
|
|
@ -42,6 +42,7 @@ support-files =
|
|||
doc_blackboxing.html
|
||||
doc_breakpoints-break-on-last-line-of-script-on-reload.html
|
||||
doc_closures.html
|
||||
doc_closure-optimized-out.html
|
||||
doc_cmd-break.html
|
||||
doc_cmd-dbg.html
|
||||
doc_conditional-breakpoints.html
|
||||
|
@ -161,6 +162,7 @@ skip-if = true # Bug 933950 (leaky test)
|
|||
[browser_dbg_navigation.js]
|
||||
[browser_dbg_no-page-sources.js]
|
||||
[browser_dbg_on-pause-highlight.js]
|
||||
[browser_dbg_optimized-out-vars.js]
|
||||
[browser_dbg_panel-size.js]
|
||||
[browser_dbg_parser-01.js]
|
||||
[browser_dbg_parser-02.js]
|
||||
|
@ -285,6 +287,7 @@ skip-if = (os == 'mac' || os == 'win') && (debug == false) # Bug 986166
|
|||
[browser_dbg_variables-view-popup-13.js]
|
||||
[browser_dbg_variables-view-popup-14.js]
|
||||
[browser_dbg_variables-view-popup-15.js]
|
||||
[browser_dbg_variables-view-popup-16.js]
|
||||
[browser_dbg_variables-view-reexpand-01.js]
|
||||
[browser_dbg_variables-view-reexpand-02.js]
|
||||
[browser_dbg_variables-view-reexpand-03.js]
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Test that optimized out variables aren't present in the variables view.
|
||||
|
||||
function test() {
|
||||
Task.spawn(function* () {
|
||||
const TAB_URL = EXAMPLE_URL + "doc_closure-optimized-out.html";
|
||||
let panel, debuggee, gDebugger, sources;
|
||||
|
||||
let [, debuggee, panel] = yield initDebugger(TAB_URL);
|
||||
gDebugger = panel.panelWin;
|
||||
sources = gDebugger.DebuggerView.Sources;
|
||||
|
||||
yield waitForSourceShown(panel, ".html");
|
||||
yield panel.addBreakpoint({ url: sources.values[0], line: 18 });
|
||||
yield ensureThreadClientState(panel, "resumed");
|
||||
|
||||
// Spin the event loop before causing the debuggee to pause, to allow
|
||||
// this function to return first.
|
||||
executeSoon(() => {
|
||||
EventUtils.sendMouseEvent({ type: "click" },
|
||||
debuggee.document.querySelector("button"),
|
||||
debuggee);
|
||||
});
|
||||
|
||||
yield waitForDebuggerEvents(panel, gDebugger.EVENTS.FETCHED_SCOPES);
|
||||
let gVars = gDebugger.DebuggerView.Variables;
|
||||
let outerScope = gVars.getScopeAtIndex(1);
|
||||
outerScope.expand();
|
||||
|
||||
let upvarVar = outerScope.get("upvar");
|
||||
ok(!upvarVar, "upvar was optimized out.");
|
||||
if (upvarVar) {
|
||||
ok(false, "upvar = " + upvarVar.target.querySelector(".value").getAttribute("value"));
|
||||
}
|
||||
|
||||
let argVar = outerScope.get("arg");
|
||||
is(argVar.target.querySelector(".name").getAttribute("value"), "arg",
|
||||
"Should have the right property name for |arg|.");
|
||||
is(argVar.target.querySelector(".value").getAttribute("value"), 42,
|
||||
"Should have the right property value for |arg|.");
|
||||
|
||||
yield resumeDebuggerThenCloseAndFinish(panel);
|
||||
}).then(null, aError => {
|
||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
||||
});
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests if opening the variables inspection popup preserves the highlighting
|
||||
* associated with the currently debugged line.
|
||||
*/
|
||||
|
||||
const TAB_URL = EXAMPLE_URL + "doc_recursion-stack.html";
|
||||
|
||||
function test() {
|
||||
Task.spawn(function() {
|
||||
let [tab, debuggee, panel] = yield initDebugger(TAB_URL);
|
||||
let win = panel.panelWin;
|
||||
let events = win.EVENTS;
|
||||
let editor = win.DebuggerView.editor;
|
||||
let frames = win.DebuggerView.StackFrames;
|
||||
let variables = win.DebuggerView.Variables;
|
||||
let bubble = win.DebuggerView.VariableBubble;
|
||||
let tooltip = bubble._tooltip.panel;
|
||||
|
||||
function checkView(selectedFrame, caretLine, debugLine = caretLine) {
|
||||
let deferred = promise.defer();
|
||||
|
||||
is(win.gThreadClient.state, "paused",
|
||||
"Should only be getting stack frames while paused.");
|
||||
is(frames.itemCount, 25,
|
||||
"Should have 25 frames.");
|
||||
is(frames.selectedDepth, selectedFrame,
|
||||
"The correct frame is selected in the widget.");
|
||||
ok(isCaretPos(panel, caretLine),
|
||||
"Editor caret location is correct.");
|
||||
|
||||
// The editor's debug location takes a tick to update.
|
||||
executeSoon(() => {
|
||||
ok(isCaretPos(panel, caretLine), "Editor caret location is still correct.");
|
||||
ok(isDebugPos(panel, debugLine), "Editor debug location is correct.");
|
||||
deferred.resolve();
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function expandGlobalScope() {
|
||||
let globalScope = variables.getScopeAtIndex(1);
|
||||
is(globalScope.expanded, false,
|
||||
"The globalScope should not be expanded yet.");
|
||||
|
||||
let finished = waitForDebuggerEvents(panel, events.FETCHED_VARIABLES);
|
||||
globalScope.expand();
|
||||
return finished;
|
||||
}
|
||||
|
||||
// Allow this generator function to yield first.
|
||||
executeSoon(() => debuggee.recurse());
|
||||
yield waitForSourceAndCaretAndScopes(panel, ".html", 26);
|
||||
yield checkView(0, 26);
|
||||
|
||||
yield expandGlobalScope();
|
||||
yield checkView(0, 26);
|
||||
|
||||
// Inspect variable in topmost frame.
|
||||
yield openVarPopup(panel, { line: 26, ch: 11 });
|
||||
yield checkView(0, 26);
|
||||
|
||||
yield resumeDebuggerThenCloseAndFinish(panel);
|
||||
});
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset='utf-8'/>
|
||||
<title>Debugger Test for Inspecting Optimized-Out Variables</title>
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function onload() {
|
||||
window.removeEventListener("load", onload);
|
||||
function clickHandler(event) {
|
||||
button.removeEventListener("click", clickHandler, false);
|
||||
function outer(arg) {
|
||||
var upvar = arg * 2;
|
||||
// The inner lambda only aliases arg, so the frontend alias analysis decides
|
||||
// that upvar is not aliased and is not in the CallObject.
|
||||
return function () {
|
||||
arg += 2;
|
||||
};
|
||||
}
|
||||
|
||||
var f = outer(42);
|
||||
f();
|
||||
}
|
||||
var button = document.querySelector("button");
|
||||
button.addEventListener("click", clickHandler, false);
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<button>Click me!</button>
|
||||
</body>
|
||||
</html>
|
|
@ -300,6 +300,15 @@ function isCaretPos(aPanel, aLine, aCol = 1) {
|
|||
return cursor.line == (aLine - 1) && cursor.ch == (aCol - 1);
|
||||
}
|
||||
|
||||
function isDebugPos(aPanel, aLine) {
|
||||
let editor = aPanel.panelWin.DebuggerView.editor;
|
||||
let location = editor.getDebugLocation();
|
||||
|
||||
// Source editor starts counting line and column numbers from 0.
|
||||
info("Current editor debug position: " + (location + 1));
|
||||
return location != null && editor.hasLineClass(aLine - 1, "debug-line");
|
||||
}
|
||||
|
||||
function isEditorSel(aPanel, [start, end]) {
|
||||
let editor = aPanel.panelWin.DebuggerView.editor;
|
||||
let range = {
|
||||
|
|
|
@ -24,6 +24,11 @@
|
|||
|
||||
.breakpoint {
|
||||
background-image: url("chrome://browser/skin/devtools/editor-breakpoint.png");
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.breakpoint[adding] {
|
||||
transition: transform .25s;
|
||||
}
|
||||
|
||||
.debugLocation {
|
||||
|
|
|
@ -153,6 +153,29 @@ function removeBreakpoint(ctx, line) {
|
|||
ed.emit("breakpointRemoved", line);
|
||||
}
|
||||
|
||||
function moveBreakpoint(ctx, fromLine, toLine) {
|
||||
let { ed, cm } = ctx;
|
||||
let info = cm.lineInfo(fromLine);
|
||||
|
||||
var fromTop = cm.cursorCoords({ line: fromLine }).top;
|
||||
var toTop = cm.cursorCoords({ line: toLine }).top;
|
||||
|
||||
var marker = ed.getMarker(info.line, "breakpoints", "breakpoint");
|
||||
if (marker) {
|
||||
marker.setAttribute("adding", "");
|
||||
marker.style.transform = "translateY(" + (toTop - fromTop) + "px)";
|
||||
marker.addEventListener('transitionend', function(e) {
|
||||
ed.removeBreakpoint(info.line);
|
||||
ed.addBreakpoint(toLine);
|
||||
|
||||
// For some reason, we have to reset the styles after the marker
|
||||
// is already removed, not before.
|
||||
e.target.removeAttribute("adding");
|
||||
e.target.style.transform = "none";
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all breakpoints in the current Editor.
|
||||
*/
|
||||
|
@ -236,6 +259,6 @@ function findPrev(ctx, query) {
|
|||
|
||||
[
|
||||
initialize, hasBreakpoint, addBreakpoint, removeBreakpoint,
|
||||
getBreakpoints, setDebugLocation, getDebugLocation,
|
||||
moveBreakpoint, getBreakpoints, setDebugLocation, getDebugLocation,
|
||||
clearDebugLocation, find, findNext, findPrev
|
||||
].forEach(function (func) { module.exports[func.name] = func; });
|
||||
|
|
|
@ -509,16 +509,7 @@ Editor.prototype = {
|
|||
* Returns whether a marker of a specified class exists in a line's gutter.
|
||||
*/
|
||||
hasMarker: function (line, gutterName, markerClass) {
|
||||
let cm = editors.get(this);
|
||||
let info = cm.lineInfo(line);
|
||||
if (!info)
|
||||
return false;
|
||||
|
||||
let gutterMarkers = info.gutterMarkers;
|
||||
if (!gutterMarkers)
|
||||
return false;
|
||||
|
||||
let marker = gutterMarkers[gutterName];
|
||||
let marker = this.getMarker(line, gutterName);
|
||||
if (!marker)
|
||||
return false;
|
||||
|
||||
|
@ -561,6 +552,19 @@ Editor.prototype = {
|
|||
cm.lineInfo(line).gutterMarkers[gutterName].classList.remove(markerClass);
|
||||
},
|
||||
|
||||
getMarker: function(line, gutterName) {
|
||||
let cm = editors.get(this);
|
||||
let info = cm.lineInfo(line);
|
||||
if (!info)
|
||||
return null;
|
||||
|
||||
let gutterMarkers = info.gutterMarkers;
|
||||
if (!gutterMarkers)
|
||||
return null;
|
||||
|
||||
return gutterMarkers[gutterName];
|
||||
},
|
||||
|
||||
/**
|
||||
* Remove all gutter markers in the gutter with the given name.
|
||||
*/
|
||||
|
|
|
@ -25,6 +25,7 @@ support-files =
|
|||
simple.css.gz^headers^
|
||||
simple.gz.html
|
||||
simple.html
|
||||
sourcemap-css/contained.css
|
||||
sourcemap-css/sourcemaps.css
|
||||
sourcemap-css/sourcemaps.css.map
|
||||
sourcemap-sass/sourcemaps.scss
|
||||
|
|
|
@ -8,9 +8,11 @@ let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
|
|||
|
||||
const TESTCASE_URI_HTML = TEST_BASE + "sourcemaps.html";
|
||||
const TESTCASE_URI_CSS = TEST_BASE + "sourcemap-css/sourcemaps.css";
|
||||
const TESTCASE_URI_CSS2 = TEST_BASE + "sourcemap-css/contained.css";
|
||||
const TESTCASE_URI_REG_CSS = TEST_BASE + "simple.css";
|
||||
const TESTCASE_URI_SCSS = TEST_BASE + "sourcemap-sass/sourcemaps.scss";
|
||||
const TESTCASE_URI_MAP = TEST_BASE + "sourcemap-css/sourcemaps.css.map";
|
||||
const TESTCASE_SCSS_NAME = "sourcemaps.scss";
|
||||
|
||||
const PREF = "devtools.styleeditor.source-maps-enabled";
|
||||
|
||||
|
@ -35,6 +37,7 @@ function test()
|
|||
// copy all our files over so we don't screw them up for other tests
|
||||
let HTMLFile = yield copy(TESTCASE_URI_HTML, ["sourcemaps.html"]);
|
||||
let CSSFile = yield copy(TESTCASE_URI_CSS, ["sourcemap-css", "sourcemaps.css"]);
|
||||
let CSSFile2 = yield copy(TESTCASE_URI_CSS2, ["sourcemap-css", "contained.css"]);
|
||||
yield copy(TESTCASE_URI_SCSS, ["sourcemap-sass", "sourcemaps.scss"]);
|
||||
yield copy(TESTCASE_URI_MAP, ["sourcemap-css", "sourcemaps.css.map"]);
|
||||
yield copy(TESTCASE_URI_REG_CSS, ["simple.css"]);
|
||||
|
@ -71,15 +74,19 @@ function test()
|
|||
function openEditor(testcaseURI) {
|
||||
let deferred = promise.defer();
|
||||
|
||||
addTabAndOpenStyleEditors(3, panel => {
|
||||
addTabAndOpenStyleEditors(5, panel => {
|
||||
let UI = panel.UI;
|
||||
|
||||
// wait for 3 editors - 1 for first style sheet, 1 for the
|
||||
// generated style sheet, and 1 for original source after it
|
||||
// loads and replaces the generated style sheet.
|
||||
// wait for 5 editors - 1 for first style sheet, 2 for the
|
||||
// generated style sheets, and 2 for original source after it
|
||||
// loads and replaces the generated style sheets.
|
||||
let editor = UI.editors[1];
|
||||
if (getStylesheetNameFor(editor) != TESTCASE_SCSS_NAME) {
|
||||
editor = UI.editors[2];
|
||||
}
|
||||
is(getStylesheetNameFor(editor), TESTCASE_SCSS_NAME, "found scss editor");
|
||||
|
||||
let link = getStylesheetNameLinkFor(editor);
|
||||
let link = getLinkFor(editor);
|
||||
link.click();
|
||||
|
||||
editor.getSourceEditor().then(deferred.resolve);
|
||||
|
@ -125,10 +132,15 @@ function finishUp() {
|
|||
|
||||
/* Helpers */
|
||||
|
||||
function getStylesheetNameLinkFor(editor) {
|
||||
function getLinkFor(editor) {
|
||||
return editor.summary.querySelector(".stylesheet-name");
|
||||
}
|
||||
|
||||
function getStylesheetNameFor(editor) {
|
||||
return editor.summary.querySelector(".stylesheet-name > label")
|
||||
.getAttribute("value")
|
||||
}
|
||||
|
||||
function copy(aSrcChromeURL, aDestFilePath)
|
||||
{
|
||||
let destFile = FileUtils.getFile("ProfD", aDestFilePath);
|
||||
|
|
|
@ -6,106 +6,116 @@
|
|||
const TESTCASE_URI = TEST_BASE_HTTPS + "sourcemaps.html";
|
||||
const PREF = "devtools.styleeditor.source-maps-enabled";
|
||||
|
||||
function test()
|
||||
{
|
||||
waitForExplicitFinish();
|
||||
|
||||
const contents = {
|
||||
"sourcemaps.scss": [
|
||||
"",
|
||||
"$paulrougetpink: #f06;",
|
||||
"",
|
||||
"div {",
|
||||
" color: $paulrougetpink;",
|
||||
"}",
|
||||
"",
|
||||
"span {",
|
||||
" background-color: #EEE;",
|
||||
"}"
|
||||
].join("\n"),
|
||||
"contained.scss": [
|
||||
"$pink: #f06;",
|
||||
"",
|
||||
"#header {",
|
||||
" color: $pink;",
|
||||
"}"
|
||||
].join("\n"),
|
||||
"sourcemaps.css": [
|
||||
"div {",
|
||||
" color: #ff0066; }",
|
||||
"",
|
||||
"span {",
|
||||
" background-color: #EEE; }",
|
||||
"",
|
||||
"/*# sourceMappingURL=sourcemaps.css.map */"
|
||||
].join("\n"),
|
||||
"contained.css": [
|
||||
"#header {",
|
||||
" color: #f06; }",
|
||||
"",
|
||||
"/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyJzYXNzL2NvbnRhaW5lZC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBO0VBQ0UsT0FISyIsInNvdXJjZXNDb250ZW50IjpbIiRwaW5rOiAjZjA2O1xuXG4jaGVhZGVyIHtcbiAgY29sb3I6ICRwaW5rO1xufSJdfQ==*/"
|
||||
].join("\n")
|
||||
}
|
||||
|
||||
const cssNames = ["sourcemaps.css", "contained.css"];
|
||||
const scssNames = ["sourcemaps.scss", "contained.scss"];
|
||||
|
||||
waitForExplicitFinish();
|
||||
|
||||
let test = asyncTest(function*() {
|
||||
Services.prefs.setBoolPref(PREF, true);
|
||||
|
||||
// wait for 3 editors - 1 for first style sheet, 1 for the
|
||||
// generated style sheet, and 1 for original source after it
|
||||
// loads and replaces the generated style sheet.
|
||||
addTabAndOpenStyleEditors(3, panel => runTests(panel.UI));
|
||||
let {UI} = yield addTabAndOpenStyleEditors(5, null, TESTCASE_URI);
|
||||
|
||||
content.location = TESTCASE_URI;
|
||||
}
|
||||
is(UI.editors.length, 3,
|
||||
"correct number of editors with source maps enabled");
|
||||
|
||||
function runTests(UI)
|
||||
{
|
||||
is(UI.editors.length, 2);
|
||||
// Test first plain css editor
|
||||
testFirstEditor(UI.editors[0]);
|
||||
|
||||
let firstEditor = UI.editors[0];
|
||||
testFirstEditor(firstEditor);
|
||||
// Test Scss editors
|
||||
yield testEditor(UI.editors[1], scssNames);
|
||||
yield testEditor(UI.editors[2], scssNames);
|
||||
|
||||
let ScssEditor = UI.editors[1];
|
||||
// Test disabling original sources
|
||||
yield togglePref(UI);
|
||||
|
||||
let link = getStylesheetNameLinkFor(ScssEditor);
|
||||
link.click();
|
||||
is(UI.editors.length, 3, "correct number of editors after pref toggled");
|
||||
|
||||
ScssEditor.getSourceEditor().then(() => {
|
||||
testScssEditor(ScssEditor);
|
||||
// Test CSS editors
|
||||
yield testEditor(UI.editors[1], cssNames);
|
||||
yield testEditor(UI.editors[2], cssNames);
|
||||
|
||||
togglePref(UI);
|
||||
});
|
||||
}
|
||||
|
||||
function togglePref(UI) {
|
||||
let count = 0;
|
||||
|
||||
UI.on("editor-added", (event, editor) => {
|
||||
if (++count == 2) {
|
||||
testTogglingPref(UI);
|
||||
}
|
||||
})
|
||||
|
||||
Services.prefs.setBoolPref(PREF, false);
|
||||
}
|
||||
|
||||
function testTogglingPref(UI) {
|
||||
is(UI.editors.length, 2, "correct number of editors after pref toggled");
|
||||
|
||||
let CSSEditor = UI.editors[1];
|
||||
|
||||
let link = getStylesheetNameLinkFor(CSSEditor);
|
||||
link.click();
|
||||
|
||||
CSSEditor.getSourceEditor().then(() => {
|
||||
testCSSEditor(CSSEditor);
|
||||
|
||||
finishUp();
|
||||
})
|
||||
}
|
||||
Services.prefs.clearUserPref(PREF);
|
||||
});
|
||||
|
||||
function testFirstEditor(editor) {
|
||||
let name = getStylesheetNameFor(editor);
|
||||
is(name, "simple.css", "First style sheet display name is correct");
|
||||
}
|
||||
|
||||
function testScssEditor(editor) {
|
||||
function testEditor(editor, possibleNames) {
|
||||
let name = getStylesheetNameFor(editor);
|
||||
is(name, "sourcemaps.scss", "Original source display name is correct");
|
||||
ok(possibleNames.indexOf(name) >= 0, name + " editor name is correct");
|
||||
|
||||
let text = editor.sourceEditor.getText();
|
||||
return openEditor(editor).then(() => {
|
||||
let expectedText = contents[name];
|
||||
|
||||
is(text, "\n\
|
||||
$paulrougetpink: #f06;\n\
|
||||
\n\
|
||||
div {\n\
|
||||
color: $paulrougetpink;\n\
|
||||
}\n\
|
||||
\n\
|
||||
span {\n\
|
||||
background-color: #EEE;\n\
|
||||
}", "Original source text is correct");
|
||||
}
|
||||
|
||||
function testCSSEditor(editor) {
|
||||
let name = getStylesheetNameFor(editor);
|
||||
is(name, "sourcemaps.css", "CSS source display name is correct");
|
||||
|
||||
let text = editor.sourceEditor.getText();
|
||||
|
||||
is(text, "div {\n\
|
||||
color: #ff0066; }\n\
|
||||
\n\
|
||||
span {\n\
|
||||
background-color: #EEE; }\n\
|
||||
\n\
|
||||
/*# sourceMappingURL=sourcemaps.css.map */", "CSS text is correct");
|
||||
let text = editor.sourceEditor.getText();
|
||||
is(text, expectedText, name + " editor contains expected text");
|
||||
});
|
||||
}
|
||||
|
||||
/* Helpers */
|
||||
function getStylesheetNameLinkFor(editor) {
|
||||
|
||||
function togglePref(UI) {
|
||||
let deferred = promise.defer();
|
||||
let count = 0;
|
||||
|
||||
UI.on("editor-added", (event, editor) => {
|
||||
if (++count == 3) {
|
||||
deferred.resolve();
|
||||
}
|
||||
})
|
||||
|
||||
Services.prefs.setBoolPref(PREF, false);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function openEditor(editor) {
|
||||
getLinkFor(editor).click();
|
||||
|
||||
return editor.getSourceEditor();
|
||||
}
|
||||
|
||||
function getLinkFor(editor) {
|
||||
return editor.summary.querySelector(".stylesheet-name");
|
||||
}
|
||||
|
||||
|
@ -113,8 +123,3 @@ function getStylesheetNameFor(editor) {
|
|||
return editor.summary.querySelector(".stylesheet-name > label")
|
||||
.getAttribute("value")
|
||||
}
|
||||
|
||||
function finishUp() {
|
||||
Services.prefs.clearUserPref(PREF);
|
||||
finish();
|
||||
}
|
|
@ -6,13 +6,11 @@ const TEST_BASE_HTTP = "http://example.com/browser/browser/devtools/styleeditor/
|
|||
const TEST_BASE_HTTPS = "https://example.com/browser/browser/devtools/styleeditor/test/";
|
||||
const TEST_HOST = 'mochi.test:8888';
|
||||
|
||||
let tempScope = {};
|
||||
Cu.import("resource://gre/modules/devtools/Loader.jsm", tempScope);
|
||||
let TargetFactory = tempScope.devtools.TargetFactory;
|
||||
Cu.import("resource://gre/modules/LoadContextInfo.jsm", tempScope);
|
||||
let LoadContextInfo = tempScope.LoadContextInfo;
|
||||
Cu.import("resource://gre/modules/devtools/Console.jsm", tempScope);
|
||||
let console = tempScope.console;
|
||||
let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
|
||||
let TargetFactory = devtools.TargetFactory;
|
||||
let {LoadContextInfo} = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {});
|
||||
let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
|
||||
let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
|
||||
|
||||
let gPanelWindow;
|
||||
let cache = Cc["@mozilla.org/netwerk/cache-storage-service;1"]
|
||||
|
@ -28,6 +26,13 @@ SimpleTest.registerCleanupFunction(() => {
|
|||
gDevTools.testing = false;
|
||||
});
|
||||
|
||||
/**
|
||||
* Define an async test based on a generator function
|
||||
*/
|
||||
function asyncTest(generator) {
|
||||
return () => Task.spawn(generator).then(null, ok.bind(null, false)).then(finish);
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
gPanelWindow = null;
|
||||
|
@ -36,16 +41,25 @@ function cleanup()
|
|||
}
|
||||
}
|
||||
|
||||
function addTabAndOpenStyleEditors(count, callback) {
|
||||
function addTabAndOpenStyleEditors(count, callback, uri) {
|
||||
let deferred = promise.defer();
|
||||
let currentCount = 0;
|
||||
let panel;
|
||||
addTabAndCheckOnStyleEditorAdded(p => panel = p, function () {
|
||||
currentCount++;
|
||||
info(currentCount + " of " + count + " editors opened");
|
||||
if (currentCount == count) {
|
||||
callback(panel);
|
||||
if (callback) {
|
||||
callback(panel);
|
||||
}
|
||||
deferred.resolve(panel);
|
||||
}
|
||||
});
|
||||
|
||||
if (uri) {
|
||||
content.location = uri;
|
||||
}
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function addTabAndCheckOnStyleEditorAdded(callbackOnce, callbackOnAdded) {
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
#header {
|
||||
color: #f06; }
|
||||
|
||||
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyJzYXNzL2NvbnRhaW5lZC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBO0VBQ0UsT0FISyIsInNvdXJjZXNDb250ZW50IjpbIiRwaW5rOiAjZjA2O1xuXG4jaGVhZGVyIHtcbiAgY29sb3I6ICRwaW5rO1xufSJdfQ==*/
|
|
@ -4,6 +4,7 @@
|
|||
<title>testcase for testing CSS source maps</title>
|
||||
<link rel="stylesheet" type="text/css" href="simple.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="sourcemap-css/sourcemaps.css?test=1"/>
|
||||
<link rel="stylesheet" type="text/css" href="sourcemap-css/contained.css"
|
||||
</head>
|
||||
<body>
|
||||
<div>source maps <span>testcase</span></div>
|
||||
|
|
|
@ -9,5 +9,5 @@
|
|||
<!ENTITY newtab.undo.restoreButton "Restore All.">
|
||||
<!ENTITY newtab.undo.closeTooltip "Hide">
|
||||
<!ENTITY newtab.sponsored.release.message "This Sponsor site was suggested because we hoped you’d find it interesting and because it supports Mozilla’s mission.">
|
||||
<!ENTITY newtab.sponsored.trial.message "This Trial Sponsor site was suggested because we hoped you’d find it interesting and because it supports Mozilla’s mission.">
|
||||
<!ENTITY newtab.sponsored.trial.message "This site was suggested because we hoped you’d find it interesting and because it supports Mozilla’s mission.">
|
||||
<!ENTITY newtab.panel.link.text "Learn more…">
|
||||
|
|
|
@ -277,9 +277,13 @@ browser.jar:
|
|||
skin/classic/browser/devtools/close.png (../shared/devtools/images/close.png)
|
||||
skin/classic/browser/devtools/close@2x.png (../shared/devtools/images/close@2x.png)
|
||||
skin/classic/browser/devtools/vview-delete.png (../shared/devtools/images/vview-delete.png)
|
||||
skin/classic/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/browser/devtools/vview-delete@2x.png (../shared/devtools/images/vview-delete@2x.png)
|
||||
skin/classic/browser/devtools/vview-edit.png (../shared/devtools/images/vview-edit.png)
|
||||
skin/classic/browser/devtools/vview-edit@2x.png (../shared/devtools/images/vview-edit@2x.png)
|
||||
skin/classic/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/browser/devtools/vview-lock@2x.png (../shared/devtools/images/vview-lock@2x.png)
|
||||
skin/classic/browser/devtools/vview-open-inspector.png (../shared/devtools/images/vview-open-inspector.png)
|
||||
skin/classic/browser/devtools/vview-open-inspector@2x.png (../shared/devtools/images/vview-open-inspector@2x.png)
|
||||
skin/classic/browser/devtools/undock@2x.png (../shared/devtools/images/undock@2x.png)
|
||||
skin/classic/browser/devtools/font-inspector.css (../shared/devtools/font-inspector.css)
|
||||
skin/classic/browser/devtools/computedview.css (devtools/computedview.css)
|
||||
|
|
|
@ -13,6 +13,10 @@ button[type="menu"] > .button-box > .button-menu-dropmarker {
|
|||
-moz-appearance: none !important;
|
||||
}
|
||||
|
||||
.help-button > .button-box > .button-icon {
|
||||
-moz-margin-end: 0;
|
||||
}
|
||||
|
||||
menulist:not([editable="true"]) > .menulist-dropmarker {
|
||||
display: -moz-box;
|
||||
margin-top: 6px;
|
||||
|
|
|
@ -398,9 +398,13 @@ browser.jar:
|
|||
skin/classic/browser/devtools/close.png (../shared/devtools/images/close.png)
|
||||
skin/classic/browser/devtools/close@2x.png (../shared/devtools/images/close@2x.png)
|
||||
skin/classic/browser/devtools/vview-delete.png (../shared/devtools/images/vview-delete.png)
|
||||
skin/classic/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/browser/devtools/vview-delete@2x.png (../shared/devtools/images/vview-delete@2x.png)
|
||||
skin/classic/browser/devtools/vview-edit.png (../shared/devtools/images/vview-edit.png)
|
||||
skin/classic/browser/devtools/vview-edit@2x.png (../shared/devtools/images/vview-edit@2x.png)
|
||||
skin/classic/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/browser/devtools/vview-lock@2x.png (../shared/devtools/images/vview-lock@2x.png)
|
||||
skin/classic/browser/devtools/vview-open-inspector.png (../shared/devtools/images/vview-open-inspector.png)
|
||||
skin/classic/browser/devtools/vview-open-inspector@2x.png (../shared/devtools/images/vview-open-inspector@2x.png)
|
||||
skin/classic/browser/devtools/undock@2x.png (../shared/devtools/images/undock@2x.png)
|
||||
skin/classic/browser/devtools/font-inspector.css (../shared/devtools/font-inspector.css)
|
||||
skin/classic/browser/devtools/computedview.css (devtools/computedview.css)
|
||||
|
|
|
@ -10,6 +10,10 @@ menulist:not([editable="true"]) > .menulist-dropmarker {
|
|||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.help-button > .button-box > .button-icon {
|
||||
-moz-margin-start: 0;
|
||||
}
|
||||
|
||||
checkbox:hover::before,
|
||||
checkbox[checked]::before {
|
||||
-moz-margin-end: -20px;
|
||||
|
|
|
@ -689,17 +689,17 @@
|
|||
|
||||
.variable-or-property-non-writable-icon {
|
||||
background: url("chrome://browser/skin/devtools/vview-lock.png") no-repeat;
|
||||
background-size: cover;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
/*@media (min-resolution: 2dppx) {
|
||||
@media (min-resolution: 2dppx) {
|
||||
.variable-or-property-non-writable-icon {
|
||||
background-image: url("chrome://browser/skin/identity-icons-https@2x.png");
|
||||
background-size: 32px;
|
||||
background-image: url("chrome://browser/skin/devtools/vview-lock@2x.png");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
.variable-or-property-frozen-label,
|
||||
.variable-or-property-sealed-label,
|
||||
.variable-or-property-non-extensible-label {
|
||||
|
@ -788,64 +788,84 @@
|
|||
/* Variables and properties editing */
|
||||
|
||||
.variables-view-delete {
|
||||
list-style-image: url("chrome://browser/skin/devtools/vview-delete.png");
|
||||
-moz-image-region: rect(0,16px,16px,0);
|
||||
}
|
||||
|
||||
.variables-view-delete:hover {
|
||||
-moz-image-region: rect(0,48px,16px,32px);
|
||||
}
|
||||
|
||||
.variables-view-delete:active {
|
||||
-moz-image-region: rect(0,32px,16px,16px);
|
||||
}
|
||||
|
||||
.variable-or-property:focus > .title > .variables-view-delete {
|
||||
-moz-image-region: rect(0,16px,16px,0);
|
||||
}
|
||||
|
||||
.variables-view-edit {
|
||||
list-style-image: url("chrome://browser/skin/devtools/vview-edit.png");
|
||||
-moz-image-region: rect(0,16px,16px,0);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.variables-view-edit:hover {
|
||||
-moz-image-region: rect(0,48px,16px,32px);
|
||||
}
|
||||
|
||||
.variables-view-edit:active {
|
||||
-moz-image-region: rect(0,32px,16px,16px);
|
||||
}
|
||||
|
||||
.variable-or-property:focus > .title > .variables-view-edit {
|
||||
-moz-image-region: rect(0,16px,16px,0);
|
||||
}
|
||||
|
||||
.variables-view-open-inspector {
|
||||
list-style-image: url("chrome://browser/skin/devtools/vview-open-inspector.png");
|
||||
-moz-image-region: rect(0,16px,16px,0);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.variables-view-open-inspector:hover {
|
||||
-moz-image-region: rect(0,48px,16px,32px);
|
||||
}
|
||||
|
||||
.variables-view-open-inspector:active {
|
||||
-moz-image-region: rect(0,32px,16px,16px);
|
||||
}
|
||||
|
||||
.variable-or-property:focus > .title > .variables-view-open-inspector {
|
||||
-moz-image-region: rect(0,16px,16px,0);
|
||||
}
|
||||
|
||||
.variables-view-throbber {
|
||||
background: url("chrome://global/skin/icons/loading_16.png") center no-repeat;
|
||||
background: url("chrome://browser/skin/devtools/vview-delete.png");
|
||||
background-size: cover;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
.variables-view-delete {
|
||||
background-image: url("chrome://browser/skin/devtools/vview-delete@2x.png");
|
||||
}
|
||||
}
|
||||
|
||||
.variables-view-delete:hover {
|
||||
background-position: 16px;
|
||||
}
|
||||
|
||||
.variables-view-delete:active {
|
||||
background-position: 32px;
|
||||
}
|
||||
|
||||
.variable-or-property:focus > .title > .variables-view-delete {
|
||||
background-position: 0px;
|
||||
}
|
||||
|
||||
.variables-view-edit {
|
||||
background: url("chrome://browser/skin/devtools/vview-edit.png");
|
||||
background-size: cover;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
.variables-view-edit {
|
||||
background-image: url("chrome://browser/skin/devtools/vview-edit@2x.png");
|
||||
}
|
||||
}
|
||||
|
||||
.variables-view-edit:hover {
|
||||
background-position: 16px;
|
||||
}
|
||||
|
||||
.variables-view-edit:active {
|
||||
background-position: 32px;
|
||||
}
|
||||
|
||||
.variable-or-property:focus > .title > .variables-view-edit {
|
||||
background-position: 0px;
|
||||
}
|
||||
|
||||
.variables-view-open-inspector {
|
||||
background: url("chrome://browser/skin/devtools/vview-open-inspector.png");
|
||||
background-size: cover;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
.variables-view-open-inspector {
|
||||
background-image: url("chrome://browser/skin/devtools/vview-open-inspector@2x.png");
|
||||
}
|
||||
}
|
||||
|
||||
.variables-view-open-inspector:hover {
|
||||
background-position: 16px;
|
||||
}
|
||||
|
||||
.variables-view-open-inspector:active {
|
||||
background-position: 32px;
|
||||
}
|
||||
|
||||
.variable-or-property:focus > .title > .variables-view-open-inspector {
|
||||
background-position: 0px;
|
||||
}
|
||||
|
||||
/* Variables and properties input boxes */
|
||||
|
||||
.variable-or-property > .title > .separator + .element-value-input {
|
||||
-moz-margin-start: -2px !important;
|
||||
-moz-margin-end: 2px !important;
|
||||
|
|
|
@ -224,6 +224,10 @@ button[type="menu"] > .button-box > .button-menu-dropmarker {
|
|||
}
|
||||
}
|
||||
|
||||
.help-button > .button-box > .button-text {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.spinbuttons-button {
|
||||
-moz-margin-start: 10px !important;
|
||||
-moz-margin-end: 2px !important;
|
||||
|
|
|
@ -313,9 +313,13 @@ browser.jar:
|
|||
skin/classic/browser/devtools/close.png (../shared/devtools/images/close.png)
|
||||
skin/classic/browser/devtools/close@2x.png (../shared/devtools/images/close@2x.png)
|
||||
skin/classic/browser/devtools/vview-delete.png (../shared/devtools/images/vview-delete.png)
|
||||
skin/classic/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/browser/devtools/vview-delete@2x.png (../shared/devtools/images/vview-delete@2x.png)
|
||||
skin/classic/browser/devtools/vview-edit.png (../shared/devtools/images/vview-edit.png)
|
||||
skin/classic/browser/devtools/vview-edit@2x.png (../shared/devtools/images/vview-edit@2x.png)
|
||||
skin/classic/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/browser/devtools/vview-lock@2x.png (../shared/devtools/images/vview-lock@2x.png)
|
||||
skin/classic/browser/devtools/vview-open-inspector.png (../shared/devtools/images/vview-open-inspector.png)
|
||||
skin/classic/browser/devtools/vview-open-inspector@2x.png (../shared/devtools/images/vview-open-inspector@2x.png)
|
||||
skin/classic/browser/devtools/undock@2x.png (../shared/devtools/images/undock@2x.png)
|
||||
skin/classic/browser/devtools/font-inspector.css (../shared/devtools/font-inspector.css)
|
||||
skin/classic/browser/devtools/computedview.css (devtools/computedview.css)
|
||||
|
@ -678,9 +682,13 @@ browser.jar:
|
|||
skin/classic/aero/browser/devtools/close.png (../shared/devtools/images/close.png)
|
||||
skin/classic/aero/browser/devtools/close@2x.png (../shared/devtools/images/close@2x.png)
|
||||
skin/classic/aero/browser/devtools/vview-delete.png (../shared/devtools/images/vview-delete.png)
|
||||
skin/classic/aero/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/aero/browser/devtools/vview-delete@2x.png (../shared/devtools/images/vview-delete@2x.png)
|
||||
skin/classic/aero/browser/devtools/vview-edit.png (../shared/devtools/images/vview-edit.png)
|
||||
skin/classic/aero/browser/devtools/vview-edit@2x.png (../shared/devtools/images/vview-edit@2x.png)
|
||||
skin/classic/aero/browser/devtools/vview-lock.png (../shared/devtools/images/vview-lock.png)
|
||||
skin/classic/aero/browser/devtools/vview-lock@2x.png (../shared/devtools/images/vview-lock@2x.png)
|
||||
skin/classic/aero/browser/devtools/vview-open-inspector.png (../shared/devtools/images/vview-open-inspector.png)
|
||||
skin/classic/aero/browser/devtools/vview-open-inspector@2x.png (../shared/devtools/images/vview-open-inspector@2x.png)
|
||||
skin/classic/aero/browser/devtools/undock@2x.png (../shared/devtools/images/undock@2x.png)
|
||||
skin/classic/aero/browser/devtools/font-inspector.css (../shared/devtools/font-inspector.css)
|
||||
skin/classic/aero/browser/devtools/computedview.css (devtools/computedview.css)
|
||||
|
|
|
@ -5886,6 +5886,8 @@ RilObject.prototype[REQUEST_QUERY_FACILITY_LOCK] = function REQUEST_QUERY_FACILI
|
|||
options.success = (options.rilRequestError === 0);
|
||||
if (!options.success) {
|
||||
options.errorMsg = RIL_ERROR_TO_GECKO_ERROR[options.rilRequestError];
|
||||
this.sendChromeMessage(options);
|
||||
return;
|
||||
}
|
||||
|
||||
let services;
|
||||
|
|
|
@ -349,31 +349,42 @@ BookmarksEngine.prototype = {
|
|||
Task.spawn(function() {
|
||||
// For first-syncs, make a backup for the user to restore
|
||||
if (this.lastSync == 0) {
|
||||
this._log.debug("Bookmarks backup starting.");
|
||||
yield PlacesBackups.create(null, true);
|
||||
this._log.debug("Bookmarks backup done.");
|
||||
}
|
||||
}.bind(this)).then(
|
||||
cb, ex => {
|
||||
// Failure to create a backup is somewhat bad, but probably not bad
|
||||
// enough to prevent syncing of bookmarks - so just log the error and
|
||||
// continue.
|
||||
this._log.warn("Got exception \"" + Utils.exceptionStr(ex) +
|
||||
"\" backing up bookmarks, but continuing with sync.");
|
||||
cb();
|
||||
}
|
||||
);
|
||||
|
||||
this.__defineGetter__("_guidMap", function() {
|
||||
// Create a mapping of folder titles and separator positions to GUID.
|
||||
// We do this lazily so that we don't do any work unless we reconcile
|
||||
// incoming items.
|
||||
let guidMap;
|
||||
try {
|
||||
guidMap = this._buildGUIDMap();
|
||||
} catch (ex) {
|
||||
this._log.warn("Got exception \"" + Utils.exceptionStr(ex) +
|
||||
"\" building GUID map." +
|
||||
" Skipping all other incoming items.");
|
||||
throw {code: Engine.prototype.eEngineAbortApplyIncoming,
|
||||
cause: ex};
|
||||
}
|
||||
delete this._guidMap;
|
||||
return this._guidMap = guidMap;
|
||||
});
|
||||
|
||||
this._store._childrenToOrder = {};
|
||||
cb();
|
||||
}.bind(this));
|
||||
cb.wait();
|
||||
|
||||
this.__defineGetter__("_guidMap", function() {
|
||||
// Create a mapping of folder titles and separator positions to GUID.
|
||||
// We do this lazily so that we don't do any work unless we reconcile
|
||||
// incoming items.
|
||||
let guidMap;
|
||||
try {
|
||||
guidMap = this._buildGUIDMap();
|
||||
} catch (ex) {
|
||||
this._log.warn("Got exception \"" + Utils.exceptionStr(ex) +
|
||||
"\" building GUID map." +
|
||||
" Skipping all other incoming items.");
|
||||
throw {code: Engine.prototype.eEngineAbortApplyIncoming,
|
||||
cause: ex};
|
||||
}
|
||||
delete this._guidMap;
|
||||
return this._guidMap = guidMap;
|
||||
});
|
||||
|
||||
this._store._childrenToOrder = {};
|
||||
},
|
||||
|
||||
_processIncoming: function (newitems) {
|
||||
|
|
|
@ -89,7 +89,7 @@ function FinalizeRejectDeletions() {
|
|||
|
||||
function HandleRejectKeyPress(e) {
|
||||
if (e.keyCode == 46) {
|
||||
DeleteRejectSelected();
|
||||
DeleteReject();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -405,12 +405,13 @@ let StyleSheetActor = protocol.ActorClass({
|
|||
}
|
||||
|
||||
let docHref;
|
||||
if (this.rawSheet.ownerNode) {
|
||||
if (this.rawSheet.ownerNode instanceof Ci.nsIDOMHTMLDocument) {
|
||||
docHref = this.rawSheet.ownerNode.location.href;
|
||||
let ownerNode = this.rawSheet.ownerNode;
|
||||
if (ownerNode) {
|
||||
if (ownerNode instanceof Ci.nsIDOMHTMLDocument) {
|
||||
docHref = ownerNode.location.href;
|
||||
}
|
||||
if (this.rawSheet.ownerNode.ownerDocument) {
|
||||
docHref = this.rawSheet.ownerNode.ownerDocument.location.href;
|
||||
else if (ownerNode.ownerDocument && ownerNode.ownerDocument.location) {
|
||||
docHref = ownerNode.ownerDocument.location.href;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -846,6 +847,11 @@ let OriginalSourceActor = protocol.ActorClass({
|
|||
if (this.text) {
|
||||
return promise.resolve(this.text);
|
||||
}
|
||||
let content = this.sourceMap.sourceContentFor(this.url);
|
||||
if (content) {
|
||||
this.text = content;
|
||||
return promise.resolve(content);
|
||||
}
|
||||
return fetch(this.url, { window: this.window }).then(({content}) => {
|
||||
this.text = content;
|
||||
return content;
|
||||
|
|
Загрузка…
Ссылка в новой задаче