+
+ inspect user agent styles
+
+
+`;
+
+const TEST_DATA = [
+ {
+ selector: "blockquote",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "pre",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "input[type=range]",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "input[type=number]",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "input[type=color]",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "input[type=text]",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "progress",
+ numUserRules: 1,
+ numUARules: 0
+ },
+ {
+ selector: "a",
+ numUserRules: 2,
+ numUARules: 0
+ }
+];
+
+add_task(function*() {
+ requestLongerTimeout(2);
+
+ info("Starting the test with the pref set to true before toolbox is opened");
+ yield setUserAgentStylesPref(true);
+
+ yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
+ let {inspector, view} = yield openRuleView();
+
+ info("Making sure that UA styles are visible on initial load");
+ yield userAgentStylesVisible(inspector, view);
+
+ info("Making sure that setting the pref to false hides UA styles");
+ yield setUserAgentStylesPref(false);
+ yield userAgentStylesNotVisible(inspector, view);
+
+ info("Making sure that resetting the pref to true shows UA styles again");
+ yield setUserAgentStylesPref(true);
+ yield userAgentStylesVisible(inspector, view);
+
+ info("Resetting " + PREF_UA_STYLES);
+ Services.prefs.clearUserPref(PREF_UA_STYLES);
+});
+
+function* setUserAgentStylesPref(val) {
+ info("Setting the pref " + PREF_UA_STYLES + " to: " + val);
+
+ // Reset the pref and wait for PrefObserver to callback so UI
+ // has a chance to get updated.
+ let oncePrefChanged = promise.defer();
+ let prefObserver = new PrefObserver("devtools.");
+ prefObserver.on(PREF_UA_STYLES, oncePrefChanged.resolve);
+ Services.prefs.setBoolPref(PREF_UA_STYLES, val);
+ yield oncePrefChanged.promise;
+ prefObserver.off(PREF_UA_STYLES, oncePrefChanged.resolve);
+}
+
+function* userAgentStylesVisible(inspector, view) {
+ info("Making sure that user agent styles are currently visible");
+
+ let userRules;
+ let uaRules;
+
+ for (let data of TEST_DATA) {
+ yield selectNode(data.selector, inspector);
+ yield compareAppliedStylesWithUI(inspector, view, "ua");
+
+ userRules = view._elementStyle.rules.filter(rule=>rule.editor.isEditable);
+ uaRules = view._elementStyle.rules.filter(rule=>!rule.editor.isEditable);
+ is(userRules.length, data.numUserRules, "Correct number of user rules");
+ ok(uaRules.length > data.numUARules, "Has UA rules");
+ }
+
+ ok(userRules.some(rule=> rule.matchedSelectors.length === 1),
+ "There is an inline style for element in user styles");
+
+ ok(uaRules.some(rule=> rule.matchedSelectors.indexOf(":-moz-any-link")),
+ "There is a rule for :-moz-any-link");
+ ok(uaRules.some(rule=> rule.matchedSelectors.indexOf("*|*:link")),
+ "There is a rule for *|*:link");
+ ok(uaRules.some(rule=> rule.matchedSelectors.length === 1),
+ "Inline styles for ua styles");
+}
+
+function* userAgentStylesNotVisible(inspector, view) {
+ info("Making sure that user agent styles are not currently visible");
+
+ let userRules;
+ let uaRules;
+
+ for (let data of TEST_DATA) {
+ yield selectNode(data.selector, inspector);
+ yield compareAppliedStylesWithUI(inspector, view);
+
+ userRules = view._elementStyle.rules.filter(rule=>rule.editor.isEditable);
+ uaRules = view._elementStyle.rules.filter(rule=>!rule.editor.isEditable);
+ is(userRules.length, data.numUserRules, "Correct number of user rules");
+ is(uaRules.length, data.numUARules, "No UA rules");
+ }
+}
+
+function* compareAppliedStylesWithUI(inspector, view, filter) {
+ info("Making sure that UI is consistent with pageStyle.getApplied");
+
+ let entries = yield inspector.pageStyle.getApplied(
+ inspector.selection.nodeFront, {
+ inherited: true,
+ matchedSelectors: true,
+ filter: filter
+ });
+
+ // We may see multiple entries that map to a given rule; filter the
+ // duplicates here to match what the UI does.
+ let entryMap = new Map();
+ for (let entry of entries) {
+ entryMap.set(entry.rule, entry);
+ }
+ entries = [...entryMap.values()];
+
+ let elementStyle = view._elementStyle;
+ is(elementStyle.rules.length, entries.length,
+ "Should have correct number of rules (" + entries.length + ")");
+
+ entries = entries.sort((a, b) => {
+ return (a.pseudoElement || "z") > (b.pseudoElement || "z");
+ });
+
+ entries.forEach((entry, i) => {
+ let elementStyleRule = elementStyle.rules[i];
+ is(elementStyleRule.inherited, entry.inherited,
+ "Same inherited (" + entry.inherited + ")");
+ is(elementStyleRule.isSystem, entry.isSystem,
+ "Same isSystem (" + entry.isSystem + ")");
+ is(elementStyleRule.editor.isEditable, !entry.isSystem,
+ "Editor isEditable opposite of UA (" + entry.isSystem + ")");
+ });
+}
diff -Nru firefox-45.0~b2+build1/devtools/client/performance/test/browser_perf-overview-render-02.js firefox-45.0~b3+build1/devtools/client/performance/test/browser_perf-overview-render-02.js
--- firefox-45.0~b2+build1/devtools/client/performance/test/browser_perf-overview-render-02.js 2016-02-02 06:57:34.000000000 +0000
+++ firefox-45.0~b3+build1/devtools/client/performance/test/browser_perf-overview-render-02.js 2016-02-05 06:54:49.000000000 +0000
@@ -5,6 +5,7 @@
* Tests that the overview graphs cannot be selected during recording
* and that they're cleared upon rerecording.
*/
+const TIMES_TO_UPDATE = 2;
function* spawnTest() {
// This test seems to take a long time to cleanup on Ubuntu VMs.
requestLongerTimeout(2);
@@ -51,7 +52,7 @@
let updated = 0;
OverviewView.on(EVENTS.OVERVIEW_RENDERED, () => updated++);
- ok((yield waitUntil(() => updated > 10)),
+ ok((yield waitUntil(() => updated > TIMES_TO_UPDATE)),
"The overviews were updated several times.");
ok("selectionEnabled" in framerate,
diff -Nru firefox-45.0~b2+build1/devtools/client/performance/test/browser_perf-overview-render-03.js firefox-45.0~b3+build1/devtools/client/performance/test/browser_perf-overview-render-03.js
--- firefox-45.0~b2+build1/devtools/client/performance/test/browser_perf-overview-render-03.js 2016-02-02 06:57:34.000000000 +0000
+++ firefox-45.0~b3+build1/devtools/client/performance/test/browser_perf-overview-render-03.js 2016-02-05 06:54:49.000000000 +0000
@@ -4,6 +4,7 @@
/**
* Tests that the overview graphs share the exact same width and scaling.
*/
+const TIMES_TO_UPDATE = 2;
function* spawnTest() {
// This test seems to take a long time to cleanup on Ubuntu VMs.
requestLongerTimeout(2);
@@ -23,7 +24,7 @@
yield waitUntil(() => PerformanceController.getCurrentRecording().getMarkers().length);
yield waitUntil(() => PerformanceController.getCurrentRecording().getMemory().length);
yield waitUntil(() => PerformanceController.getCurrentRecording().getTicks().length);
- yield waitUntil(() => updated > 10);
+ yield waitUntil(() => updated > TIMES_TO_UPDATE);
yield stopRecording(panel);
diff -Nru firefox-45.0~b2+build1/devtools/client/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js firefox-45.0~b3+build1/devtools/client/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js
--- firefox-45.0~b2+build1/devtools/client/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js 2016-02-02 06:57:35.000000000 +0000
+++ firefox-45.0~b3+build1/devtools/client/webconsole/test/browser_webconsole_bug_1006027_message_timestamps_incorrect.js 2016-02-05 06:54:49.000000000 +0000
@@ -38,7 +38,7 @@
let minTimestamp = Math.min.apply(null, aTimestampMilliseconds);
let maxTimestamp = Math.max.apply(null, aTimestampMilliseconds);
- ok(Math.abs(maxTimestamp - minTimestamp) < 1000,
- "console.log message timestamp spread < 1000ms confirmed");
+ ok(Math.abs(maxTimestamp - minTimestamp) < 2000,
+ "console.log message timestamp spread < 2000ms confirmed");
}
}
diff -Nru firefox-45.0~b2+build1/docshell/base/nsDocShell.cpp firefox-45.0~b3+build1/docshell/base/nsDocShell.cpp
--- firefox-45.0~b2+build1/docshell/base/nsDocShell.cpp 2016-02-02 06:57:35.000000000 +0000
+++ firefox-45.0~b3+build1/docshell/base/nsDocShell.cpp 2016-02-05 06:54:50.000000000 +0000
@@ -14243,9 +14243,11 @@
NS_IMETHODIMP
nsDocShell::IssueWarning(uint32_t aWarning, bool aAsError)
{
- nsCOMPtr