Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1089)

Unified Diff: Source/core/inspector/InspectorCSSAgent.cpp

Issue 172593003: DevTools: [CSS] Add CSS.editRangeInStyleSheetText() to the protocol (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: address comments Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InspectorCSSAgent.cpp
diff --git a/Source/core/inspector/InspectorCSSAgent.cpp b/Source/core/inspector/InspectorCSSAgent.cpp
index 8512f7f46f3fc47e5d83c3c26ca8551779f63815..bea56ed3d057c3fc5c0428807f52cafcecf7ae6e 100644
--- a/Source/core/inspector/InspectorCSSAgent.cpp
+++ b/Source/core/inspector/InspectorCSSAgent.cpp
@@ -828,7 +828,7 @@ void InspectorCSSAgent::setStyleSheetText(ErrorString* errorString, const String
{
InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId);
if (!inspectorStyleSheet) {
- *errorString = "Style sheet with id " + styleSheetId + " not found.";
+ *errorString = "Style sheet with id " + styleSheetId + " not found";
return;
}
@@ -837,6 +837,61 @@ void InspectorCSSAgent::setStyleSheetText(ErrorString* errorString, const String
*errorString = InspectorDOMAgent::toErrorString(exceptionState);
}
+void InspectorCSSAgent::editRangeInStyleSheetText(ErrorString* errorString, const String& styleSheetId, const RefPtr<JSONObject>& range, const String& text)
+{
+ InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId);
+ if (!inspectorStyleSheet) {
+ *errorString = "Style sheet with id " + styleSheetId + " not found";
apavlov 2014/02/21 14:37:55 "Stylesheet" ?
lushnikov 2014/02/23 16:07:07 Done.
+ return;
+ }
+ int startLineNumber;
+ int startColumn;
+ int endLineNumber;
+ int endColumn;
+ if (!range->getNumber("startLine", &startLineNumber)) {
apavlov 2014/02/21 14:37:55 This could be extracted: static bool rangeCompone
lushnikov 2014/02/23 16:07:07 Done.
lushnikov 2014/02/23 16:07:07 Done.
+ *errorString = "range.startLine must be an integer value";
apavlov 2014/02/21 14:37:55 "...must be an integer" is sufficient (since "inte
lushnikov 2014/02/23 16:07:07 Done.
+ return;
+ }
+ if (!range->getNumber("startColumn", &startColumn)) {
+ *errorString = "range.startColumn must be an integer value";
+ return;
+ }
+ if (!range->getNumber("endLine", &endLineNumber)) {
+ *errorString = "range.endLine must be an integer value";
+ return;
+ }
+ if (!range->getNumber("endColumn", &endColumn)) {
+ *errorString = "range.endColumn must be an integer value";
+ return;
+ }
+ if (startLineNumber < 0 || startColumn < 0 || endLineNumber < 0 || endColumn < 0) {
+ *errorString = "Range parameters must be non-negative integer values";
+ return;
+ }
+ String oldText;
+ if (!inspectorStyleSheet->getText(&oldText)) {
+ *errorString = "Failed to fetch stylesheet text";
+ return;
+ }
+
+ unsigned startOffset;
+ unsigned endOffset;
+ bool successConvertion = inspectorStyleSheet->lineNumberAndColumnToOffset(startLineNumber, startColumn, &startOffset);
apavlov 2014/02/21 14:37:55 successConvertion -> success (or something along t
lushnikov 2014/02/23 16:07:07 Done.
+ successConvertion = successConvertion && inspectorStyleSheet->lineNumberAndColumnToOffset(endLineNumber, endColumn, &endOffset);
apavlov 2014/02/21 14:37:55 if (successConversion) successConversion = ...
lushnikov 2014/02/23 16:07:07 This is essentially the same due-to "&&" operation
+ if (!successConvertion || startOffset > oldText.length() || endOffset > oldText.length()) {
apavlov 2014/02/21 14:37:55 it does not make any sense to extract a part of li
lushnikov 2014/02/23 16:07:07 Done.
+ *errorString = "Specified range is out of bounds";
+ return;
+ }
+
+ if (startOffset > endOffset) {
+ *errorString = "Range start must preceed its end";
apavlov 2014/02/21 14:37:55 "precede" or, better yet, "Range start must not
lushnikov 2014/02/23 16:07:07 Done.
+ return;
+ }
+
+ oldText.replace(startOffset, endOffset - startOffset, text);
+ setStyleSheetText(errorString, styleSheetId, oldText);
+}
+
void InspectorCSSAgent::setPropertyText(ErrorString* errorString, const RefPtr<JSONObject>& fullStyleId, int propertyIndex, const String& text, bool overwrite, RefPtr<TypeBuilder::CSS::CSSStyle>& result)
{
InspectorCSSId compoundId(fullStyleId);

Powered by Google App Engine
This is Rietveld 408576698