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()
function test()
{
function onStyleSheetParsed(rules)
function onRulesParsed(isLastChunk, rules)
{
for (var i = 0; i < rules.length; ++i)
InspectorTest.addObject(rules[i]);
InspectorTest.completeTest();
if (isLastChunk)
InspectorTest.completeTest();
}
function onStyleFetched(result)
{
var parser = new SDK.CSSParser();
parser.parse(result.value, onStyleSheetParsed);
Common.formatterWorkerPool.parseCSS(result.value, onRulesParsed);
}
InspectorTest.evaluateInPage("getCSS()", onStyleFetched);
......
......@@ -113,7 +113,6 @@ devtools_sdk_js_files = [
"front_end/sdk/CSSMedia.js",
"front_end/sdk/CSSMetadata.js",
"front_end/sdk/CSSModel.js",
"front_end/sdk/CSSParser.js",
"front_end/sdk/CSSProperty.js",
"front_end/sdk/CSSRule.js",
"front_end/sdk/CSSStyleDeclaration.js",
......
......@@ -510,29 +510,30 @@ Audits.AuditRules.StyleSheetProcessor = class {
}
run() {
this._parser = new SDK.CSSParser();
this._processNextStyleSheet();
}
_terminateWorker() {
if (this._parser) {
this._parser.dispose();
delete this._parser;
}
}
_finish() {
this._terminateWorker();
this._styleSheetsParsedCallback(this._styleSheets);
}
_processNextStyleSheet() {
if (!this._styleSheetHeaders.length) {
this._finish();
this._styleSheetsParsedCallback(this._styleSheets);
return;
}
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 {
*/
_onStyleSheetParsed(rules) {
if (this._progress.isCanceled()) {
this._finish();
this._styleSheetsParsedCallback(this._styleSheets);
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 @@
"CSSMedia.js",
"CSSMetadata.js",
"CSSModel.js",
"CSSParser.js",
"CSSProperty.js",
"CSSRule.js",
"CSSStyleDeclaration.js",
......
......@@ -37,9 +37,12 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
constructor(uiSourceCode, selectItemCallback) {
super([]);
this._selectItemCallback = selectItemCallback;
this._cssParser = new SDK.CSSParser();
this._cssParser.addEventListener(SDK.CSSParser.Events.RulesParsed, this.refresh.bind(this));
this._cssParser.parse(uiSourceCode.workingCopy());
/** @type {!Array<!Common.FormatterWorkerPool.CSSRule>} */
this._rules = [];
Common.formatterWorkerPool.parseCSS(uiSourceCode.workingCopy(), (isLastChunk, rules) => {
this._rules.push(...rules);
this.refresh();
});
}
/**
......@@ -57,7 +60,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @return {number}
*/
itemCount() {
return this._cssParser.rules().length;
return this._rules.length;
}
/**
......@@ -66,7 +69,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @return {string}
*/
itemKeyAt(itemIndex) {
var rule = this._cssParser.rules()[itemIndex];
var rule = this._rules[itemIndex];
return rule.selectorText || rule.atRule;
}
......@@ -77,7 +80,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @return {number}
*/
itemScoreAt(itemIndex, query) {
var rule = this._cssParser.rules()[itemIndex];
var rule = this._rules[itemIndex];
return -rule.lineNumber;
}
......@@ -89,7 +92,7 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @param {!Element} subtitleElement
*/
renderItem(itemIndex, query, titleElement, subtitleElement) {
var rule = this._cssParser.rules()[itemIndex];
var rule = this._rules[itemIndex];
titleElement.textContent = rule.selectorText || rule.atRule;
this.highlightRanges(titleElement, query);
subtitleElement.textContent = ':' + (rule.lineNumber + 1);
......@@ -101,16 +104,9 @@ Sources.StyleSheetOutlineDialog = class extends UI.FilteredListWidget.Delegate {
* @param {string} promptValue
*/
selectItem(itemIndex, promptValue) {
var rule = this._cssParser.rules()[itemIndex];
var rule = this._rules[itemIndex];
var lineNumber = rule.lineNumber;
if (!isNaN(lineNumber) && lineNumber >= 0)
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