Bug 1014223 - Use unique identifier for <style> elements; r=harth

This commit is contained in:
Joe Walker
2014-06-17 09:12:16 +01:00
parent 8cd8c981c9
commit c014e6a1d7
4 changed files with 65 additions and 23 deletions

View File

@@ -25,31 +25,44 @@ let test = asyncTest(function*() {
let running = yield usage._testOnly_isRunning();
ok(!running, "csscoverage not is running");
// Pages visited
let expectedVisited = [ PAGE_3 ];
let actualVisited = yield usage._testOnly_visitedPages();
isEqualJson(actualVisited, expectedVisited, 'Visited');
// Page1
let expectedPage1 = { reports: [] };
let actualPage1 = yield usage.createEditorReport(PAGE_1);
let actualPage1 = yield usage.createEditorReport(PAGE_1 + " \u2192 <style> index 0");
isEqualJson(actualPage1, expectedPage1, 'Page1');
// Page2
let expectedPage2 = { reports: [] };
let actualPage2 = yield usage.createEditorReport(PAGE_2);
let actualPage2 = yield usage.createEditorReport(PAGE_2 + " \u2192 <style> index 0");
isEqualJson(actualPage2, expectedPage2, 'Page2');
// Page3
let expectedPage3 = {
// Page3a
let expectedPage3a = {
reports: [
{
selectorText: ".page3-test2",
start: { line: 9, column: 5 },
},
}
]
};
let actualPage3a = yield usage.createEditorReport(PAGE_3 + " \u2192 <style> index 0");
isEqualJson(actualPage3a, expectedPage3a, 'Page3a');
// Page3b
let expectedPage3b = {
reports: [
{
selectorText: ".page3-test3",
start: { line: 3, column: 5 },
}
]
};
let actualPage3 = yield usage.createEditorReport(PAGE_3);
isEqualJson(actualPage3, expectedPage3, 'Page3');
let actualPage3b = yield usage.createEditorReport(PAGE_3 + " \u2192 <style> index 1");
isEqualJson(actualPage3b, expectedPage3b, 'Page3b');
// SheetA
let expectedSheetA = {

View File

@@ -32,31 +32,44 @@ let test = asyncTest(function*() {
running = yield usage._testOnly_isRunning();
ok(!running, "csscoverage not is running");
// Pages visited
let expectedVisited = [ '', PAGE_3 ]; // '' is for the initial location
let actualVisited = yield usage._testOnly_visitedPages();
isEqualJson(actualVisited, expectedVisited, 'Visited');
// Page1
let expectedPage1 = { reports: [] };
let actualPage1 = yield usage.createEditorReport(PAGE_1);
let actualPage1 = yield usage.createEditorReport(PAGE_1 + " \u2192 <style> index 0");
isEqualJson(actualPage1, expectedPage1, 'Page1');
// Page2
let expectedPage2 = { reports: [] };
let actualPage2 = yield usage.createEditorReport(PAGE_2);
let actualPage2 = yield usage.createEditorReport(PAGE_2 + " \u2192 <style> index 0");
isEqualJson(actualPage2, expectedPage2, 'Page2');
// Page3
let expectedPage3 = {
// Page3a
let expectedPage3a = {
reports: [
{
selectorText: ".page3-test2",
start: { line: 9, column: 5 },
},
}
]
};
let actualPage3a = yield usage.createEditorReport(PAGE_3 + " \u2192 <style> index 0");
isEqualJson(actualPage3a, expectedPage3a, 'Page3a');
// Page3b
let expectedPage3b = {
reports: [
{
selectorText: ".page3-test3",
start: { line: 3, column: 5 },
}
]
};
let actualPage3 = yield usage.createEditorReport(PAGE_3);
isEqualJson(actualPage3, expectedPage3, 'Page3');
let actualPage3b = yield usage.createEditorReport(PAGE_3 + " \u2192 <style> index 1");
isEqualJson(actualPage3b, expectedPage3b, 'Page3b');
// SheetA
let expectedSheetA = {

View File

@@ -494,7 +494,7 @@ StyleEditorUI.prototype = {
return;
}
let href = editor.styleSheet.href || editor.styleSheet.nodeHref;
let href = csscoverage.sheetToUrl(editor.styleSheet);
usage.createEditorReport(href).then(data => {
editor.removeAllUnusedRegions();

View File

@@ -6,12 +6,8 @@
const { Cc, Ci, Cu } = require("chrome");
const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
const Services = require("Services");
const promise = require("resource://gre/modules/Promise.jsm").Promise;
const { getRuleLocation } = require("devtools/server/actors/stylesheets");
const protocol = require("devtools/server/protocol");
const { method, custom, RetVal, Arg } = protocol;
@@ -21,6 +17,12 @@ loader.lazyGetter(this, "gDevTools", () => {
loader.lazyGetter(this, "DOMUtils", () => {
return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils)
});
loader.lazyGetter(this, "stylesheets", () => {
return require("devtools/server/actors/stylesheets");
});
loader.lazyGetter(this, "CssLogic", () => {
return require("devtools/styleinspector/css-logic").CssLogic;
});
const CSSRule = Ci.nsIDOMCSSRule;
@@ -441,6 +443,14 @@ let UsageReportActor = protocol.ActorClass({
response: { value: RetVal("boolean") }
}),
/**
* For testing only. What pages did we visit.
*/
_testOnly_visitedPages: method(function() {
return [...this._visitedPages];
}, {
response: { value: RetVal("array:string") }
}),
});
exports.UsageReportActor = UsageReportActor;
@@ -512,7 +522,7 @@ function getImportedSheets(stylesheet) {
* @see deconstructRuleId(ruleId)
*/
function ruleToId(rule) {
let loc = getRuleLocation(rule);
let loc = stylesheets.getRuleLocation(rule);
return sheetToUrl(rule.parentStyleSheet) + "|" + loc.line + "|" + loc.column;
}
@@ -669,11 +679,17 @@ exports.SEL_ALL = [
* Find a URL for a given stylesheet
*/
const sheetToUrl = exports.sheetToUrl = function(stylesheet) {
// For <link> elements
if (stylesheet.href) {
return stylesheet.href;
}
if (stylesheet.ownerNode && stylesheet.ownerNode.baseURI) {
return stylesheet.ownerNode.baseURI;
// For <style> elements
if (stylesheet.ownerNode) {
let document = stylesheet.ownerNode.ownerDocument;
let sheets = [...document.querySelectorAll("style")];
let index = sheets.indexOf(stylesheet.ownerNode);
return getURL(document) + ' → <style> index ' + index;
}
throw new Error("Unknown sheet source");