Commit f824367e authored by lushnikov's avatar lushnikov Committed by Commit bot

DevTools: kill SDK.CSSParser

This abstraction is not needed any more. All the clients are migrated
over to the Common.FormatterWorkerPool.parseCSS method.

BUG=none
R=dgozman

Review-Url: https://codereview.chromium.org/2572053002
Cr-Commit-Position: refs/heads/master@{#438747}
parent 1198e2d3
...@@ -60,17 +60,17 @@ function getCSS() ...@@ -60,17 +60,17 @@ function getCSS()
function test() function test()
{ {
function onStyleSheetParsed(rules) function onRulesParsed(isLastChunk, rules)
{ {
for (var i = 0; i < rules.length; ++i) for (var i = 0; i < rules.length; ++i)
InspectorTest.addObject(rules[i]); InspectorTest.addObject(rules[i]);
InspectorTest.completeTest(); if (isLastChunk)
InspectorTest.completeTest();
} }
function onStyleFetched(result) function onStyleFetched(result)
{ {
var parser = new SDK.CSSParser(); Common.formatterWorkerPool.parseCSS(result.value, onRulesParsed);
parser.parse(result.value, onStyleSheetParsed);
} }
InspectorTest.evaluateInPage("getCSS()", onStyleFetched); InspectorTest.evaluateInPage("getCSS()", onStyleFetched);
......
...@@ -113,7 +113,6 @@ devtools_sdk_js_files = [ ...@@ -113,7 +113,6 @@ devtools_sdk_js_files = [
"front_end/sdk/CSSMedia.js", "front_end/sdk/CSSMedia.js",
"front_end/sdk/CSSMetadata.js", "front_end/sdk/CSSMetadata.js",
"front_end/sdk/CSSModel.js", "front_end/sdk/CSSModel.js",
"front_end/sdk/CSSParser.js",
"front_end/sdk/CSSProperty.js", "front_end/sdk/CSSProperty.js",
"front_end/sdk/CSSRule.js", "front_end/sdk/CSSRule.js",
"front_end/sdk/CSSStyleDeclaration.js", "front_end/sdk/CSSStyleDeclaration.js",
......
...@@ -510,29 +510,30 @@ Audits.AuditRules.StyleSheetProcessor = class { ...@@ -510,29 +510,30 @@ Audits.AuditRules.StyleSheetProcessor = class {
} }
run() { run() {
this._parser = new SDK.CSSParser();
this._processNextStyleSheet(); this._processNextStyleSheet();
} }
_terminateWorker() {
if (this._parser) {
this._parser.dispose();
delete this._parser;
}
}
_finish() {
this._terminateWorker();
this._styleSheetsParsedCallback(this._styleSheets);
}
_processNextStyleSheet() { _processNextStyleSheet() {
if (!this._styleSheetHeaders.length) { if (!this._styleSheetHeaders.length) {
this._finish(); this._styleSheetsParsedCallback(this._styleSheets);
return; return;
} }
this._currentStyleSheetHeader = this._styleSheetHeaders.shift(); this._currentStyleSheetHeader = this._styleSheetHeaders.shift();
this._parser.fetchAndParse(this._currentStyleSheetHeader, this._onStyleSheetParsed.bind(this));
var allRules = [];
this._currentStyleSheetHeader.requestContent().then(
content => Common.formatterWorkerPool.parseCSS(content || '', onRulesParsed.bind(this)));
/**
* @param {boolean} isLastChunk
* @param {!Array<!Common.FormatterWorkerPool.CSSRule>} rules
* @this {Audits.AuditRules.StyleSheetProcessor}
*/
function onRulesParsed(isLastChunk, rules) {
allRules.push(...rules);
if (isLastChunk)
this._onStyleSheetParsed(allRules);
}
} }
/** /**
...@@ -540,7 +541,7 @@ Audits.AuditRules.StyleSheetProcessor = class { ...@@ -540,7 +541,7 @@ Audits.AuditRules.StyleSheetProcessor = class {
*/ */
_onStyleSheetParsed(rules) { _onStyleSheetParsed(rules) {
if (this._progress.isCanceled()) { if (this._progress.isCanceled()) {
this._finish(); this._styleSheetsParsedCallback(this._styleSheets);
return; return;
} }
......
/**
* Copyright 2014 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* @unrestricted
*/
SDK.CSSParser = class extends Common.Object {
constructor() {
super();
this._rules = [];
this._terminated = false;
}
/**
* @param {!SDK.CSSStyleSheetHeader} styleSheetHeader
* @param {function(!Array.<!Common.FormatterWorkerPool.CSSRule>)=} callback
*/
fetchAndParse(styleSheetHeader, callback) {
this._lock();
this._finishedCallback = callback;
styleSheetHeader.requestContent().then(this._innerParse.bind(this));
}
/**
* @param {string} text
* @param {function(!Array.<!Common.FormatterWorkerPool.CSSRule>)=} callback
*/
parse(text, callback) {
this._lock();
this._finishedCallback = callback;
this._innerParse(text);
}
/**
* @param {string} text
* @return {!Promise<!Array.<!Common.FormatterWorkerPool.CSSRule>>}
*/
parsePromise(text) {
return new Promise(promiseConstructor.bind(this));
/**
* @param {function()} succ
* @param {function()} fail
* @this {SDK.CSSParser}
*/
function promiseConstructor(succ, fail) {
this.parse(text, succ);
}
}
dispose() {
if (this._terminated)
return;
this._terminated = true;
this._runFinishedCallback([]);
}
/**
* @return {!Array.<!Common.FormatterWorkerPool.CSSRule>}
*/
rules() {
return this._rules;
}
_lock() {
console.assert(!this._parsingStyleSheet, 'Received request to parse stylesheet before previous was completed.');
this._parsingStyleSheet = true;
}
_unlock() {
delete this._parsingStyleSheet;
}
/**
* @param {?string} text
*/
_innerParse(text) {
this._rules = [];
Common.formatterWorkerPool.parseCSS(text || '', this._onRuleChunk.bind(this));
}
/**
* @param {boolean} isLastChunk
* @param {!Array.<!Common.FormatterWorkerPool.CSSRule>} rules
*/
_onRuleChunk(isLastChunk, rules) {
if (this._terminated)
return;
this._rules = this._rules.concat(rules);
if (isLastChunk)
this._onFinishedParsing();
this.dispatchEventToListeners(SDK.CSSParser.Events.RulesParsed);
}
_onFinishedParsing() {
this._unlock();
this._runFinishedCallback(this._rules);
}
/**
* @param {!Array<!SDK.CSSRule>} rules
*/
_runFinishedCallback(rules) {
var callback = this._finishedCallback;
delete this._finishedCallback;
if (callback)
callback.call(null, rules);
}
};
/** @enum {symbol} */
SDK.CSSParser.Events = {
RulesParsed: Symbol('RulesParsed')
};
...@@ -88,7 +88,6 @@ ...@@ -88,7 +88,6 @@
"CSSMedia.js", "CSSMedia.js",
"CSSMetadata.js", "CSSMetadata.js",
"CSSModel.js", "CSSModel.js",
"CSSParser.js",
"CSSProperty.js", "CSSProperty.js",
"CSSRule.js", "CSSRule.js",
"CSSStyleDeclaration.js", "CSSStyleDeclaration.js",
......
...@@ -37,9 +37,12 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate { ...@@ -37,9 +37,12 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
constructor(uiSourceCode, selectItemCallback) { constructor(uiSourceCode, selectItemCallback) {
super([]); super([]);
this._selectItemCallback = selectItemCallback; this._selectItemCallback = selectItemCallback;
this._cssParser = new SDK.CSSParser(); /** @type {!Array<!Common.FormatterWorkerPool.CSSRule>} */
this._cssParser.addEventListener(SDK.CSSParser.Events.RulesParsed, this.refresh.bind(this)); this._rules = [];
this._cssParser.parse(uiSourceCode.workingCopy()); Common.formatterWorkerPool.parseCSS(uiSourceCode.workingCopy(), (isLastChunk, rules) => {
this._rules.push(...rules);
this.refresh();
});
} }
/** /**
...@@ -57,7 +60,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate { ...@@ -57,7 +60,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @return {number} * @return {number}
*/ */
itemCount() { itemCount() {
return this._cssParser.rules().length; return this._rules.length;
} }
/** /**
...@@ -66,7 +69,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate { ...@@ -66,7 +69,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @return {string} * @return {string}
*/ */
itemKeyAt(itemIndex) { itemKeyAt(itemIndex) {
var rule = this._cssParser.rules()[itemIndex]; var rule = this._rules[itemIndex];
return rule.selectorText || rule.atRule; return rule.selectorText || rule.atRule;
} }
...@@ -77,7 +80,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate { ...@@ -77,7 +80,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @return {number} * @return {number}
*/ */
itemScoreAt(itemIndex, query) { itemScoreAt(itemIndex, query) {
var rule = this._cssParser.rules()[itemIndex]; var rule = this._rules[itemIndex];
return -rule.lineNumber; return -rule.lineNumber;
} }
...@@ -89,7 +92,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate { ...@@ -89,7 +92,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @param {!Element} subtitleElement * @param {!Element} subtitleElement
*/ */
renderItem(itemIndex, query, titleElement, subtitleElement) { renderItem(itemIndex, query, titleElement, subtitleElement) {
var rule = this._cssParser.rules()[itemIndex]; var rule = this._rules[itemIndex];
titleElement.textContent = rule.selectorText || rule.atRule; titleElement.textContent = rule.selectorText || rule.atRule;
this.highlightRanges(titleElement, query); this.highlightRanges(titleElement, query);
subtitleElement.textContent = ':' + (rule.lineNumber + 1); subtitleElement.textContent = ':' + (rule.lineNumber + 1);
...@@ -101,16 +104,9 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate { ...@@ -101,16 +104,9 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @param {string} promptValue * @param {string} promptValue
*/ */
selectItem(itemIndex, promptValue) { selectItem(itemIndex, promptValue) {
var rule = this._cssParser.rules()[itemIndex]; var rule = this._rules[itemIndex];
var lineNumber = rule.lineNumber; var lineNumber = rule.lineNumber;
if (!isNaN(lineNumber) && lineNumber >= 0) if (!isNaN(lineNumber) && lineNumber >= 0)
this._selectItemCallback(lineNumber, rule.columnNumber); this._selectItemCallback(lineNumber, rule.columnNumber);
} }
/**
* @override
*/
dispose() {
this._cssParser.dispose();
}
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment