Merge mozilla-central to mozilla-inbound

This commit is contained in:
Carsten "Tomcat" Book 2014-05-09 14:16:13 +02:00
commit 3d3c439194
43 changed files with 585 additions and 265 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,6 +4,6 @@
"remote": "",
"branch": ""
},
"revision": "5476e49adf00cafde6cb68e876f0514dac4b993d",
"revision": "e9a13950c6656cbd21307ff82b8282ed1006c492",
"repo_path": "/integration/gaia-central"
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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));
},
/**

View File

@ -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.
*/

View File

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

View File

@ -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);
});
}

View File

@ -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);
});
}

View File

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

View File

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

View File

@ -24,6 +24,11 @@
.breakpoint {
background-image: url("chrome://browser/skin/devtools/editor-breakpoint.png");
position: relative;
}
.breakpoint[adding] {
transition: transform .25s;
}
.debugLocation {

View File

@ -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; });

View File

@ -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.
*/

View File

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

View File

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

View File

@ -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();
}

View File

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

View File

@ -0,0 +1,4 @@
#header {
color: #f06; }
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyJzYXNzL2NvbnRhaW5lZC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBO0VBQ0UsT0FISyIsInNvdXJjZXNDb250ZW50IjpbIiRwaW5rOiAjZjA2O1xuXG4jaGVhZGVyIHtcbiAgY29sb3I6ICRwaW5rO1xufSJdfQ==*/

View File

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

View File

@ -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 youd find it interesting and because it supports Mozillas mission.">
<!ENTITY newtab.sponsored.trial.message "This Trial Sponsor site was suggested because we hoped youd find it interesting and because it supports Mozillas mission.">
<!ENTITY newtab.sponsored.trial.message "This site was suggested because we hoped youd find it interesting and because it supports Mozillas mission.">
<!ENTITY newtab.panel.link.text "Learn more…">

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -89,7 +89,7 @@ function FinalizeRejectDeletions() {
function HandleRejectKeyPress(e) {
if (e.keyCode == 46) {
DeleteRejectSelected();
DeleteReject();
}
}

File diff suppressed because one or more lines are too long

View File

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