Index: third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
index 491b2c964edfc40abbd3797b0a8a6aabf44d1e54..058840f2200e8dd289eece5a76a781a555db16c3 100644 |
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
@@ -298,14 +298,6 @@ std::unique_ptr<protocol::DOM::Rect> buildRectForFloatRect( |
.build(); |
} |
-String toErrorString(ExceptionState& exceptionState) { |
- if (exceptionState.hadException()) { |
- return DOMException::getErrorName(exceptionState.code()) + " " + |
- exceptionState.message(); |
- } |
- return ""; |
-} |
- |
} // namespace |
namespace CSSAgentState { |
@@ -722,7 +714,8 @@ void InspectorCSSAgent::resetNonPersistentData() { |
void InspectorCSSAgent::enable(std::unique_ptr<EnableCallback> prpCallback) { |
if (!m_domAgent->enabled()) { |
- prpCallback->sendFailure("DOM agent needs to be enabled first."); |
+ prpCallback->sendFailure( |
+ Response::Error("DOM agent needs to be enabled first.")); |
return; |
} |
m_state->setBoolean(CSSAgentState::cssAgentEnabled, true); |
@@ -751,12 +744,13 @@ void InspectorCSSAgent::wasEnabled() { |
updateActiveStyleSheets(document, InitialFrontendLoad); |
} |
-void InspectorCSSAgent::disable(ErrorString*) { |
+Response InspectorCSSAgent::disable() { |
reset(); |
m_domAgent->setDOMListener(nullptr); |
m_instrumentingAgents->removeInspectorCSSAgent(this); |
m_state->setBoolean(CSSAgentState::cssAgentEnabled, false); |
m_resourceContentLoader->cancel(m_resourceContentLoaderClientId); |
+ return Response::OK(); |
} |
void InspectorCSSAgent::didCommitLoadForLocalFrame(LocalFrame* frame) { |
@@ -875,8 +869,7 @@ bool InspectorCSSAgent::forcePseudoState(Element* element, |
} |
} |
-void InspectorCSSAgent::getMediaQueries( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getMediaQueries( |
std::unique_ptr<protocol::Array<protocol::CSS::CSSMedia>>* medias) { |
*medias = protocol::Array<protocol::CSS::CSSMedia>::create(); |
for (auto& style : m_idToInspectorStyleSheet) { |
@@ -891,10 +884,10 @@ void InspectorCSSAgent::getMediaQueries( |
collectMediaQueriesFromRule(rule, medias->get()); |
} |
} |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::getMatchedStylesForNode( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getMatchedStylesForNode( |
int nodeId, |
Maybe<protocol::CSS::CSSStyle>* inlineStyle, |
Maybe<protocol::CSS::CSSStyle>* attributesStyle, |
@@ -905,28 +898,23 @@ void InspectorCSSAgent::getMatchedStylesForNode( |
inheritedEntries, |
Maybe<protocol::Array<protocol::CSS::CSSKeyframesRule>>* |
cssKeyframesRules) { |
- Element* element = elementForId(errorString, nodeId); |
- if (!element) { |
- *errorString = "Node not found"; |
- return; |
- } |
+ Element* element = nullptr; |
+ Response response = m_domAgent->assertElement(nodeId, element); |
+ if (!response.isSuccess()) |
+ return response; |
Element* originalElement = element; |
PseudoId elementPseudoId = element->getPseudoId(); |
if (elementPseudoId) { |
element = element->parentOrShadowHostElement(); |
- if (!element) { |
- *errorString = "Pseudo element has no parent"; |
- return; |
- } |
+ if (!element) |
+ return Response::Error("Pseudo element has no parent"); |
} |
Document* ownerDocument = element->ownerDocument(); |
// A non-active document has no styles. |
- if (!ownerDocument->isActive()) { |
- *errorString = "Document is not active"; |
- return; |
- } |
+ if (!ownerDocument->isActive()) |
+ return Response::Error("Document is not active"); |
// FIXME: It's really gross for the inspector to reach in and access |
// StyleResolver directly here. We need to provide the Inspector better APIs |
@@ -943,7 +931,7 @@ void InspectorCSSAgent::getMatchedStylesForNode( |
// Pseudo elements. |
if (elementPseudoId) |
- return; |
+ return Response::OK(); |
InspectorStyleSheetForInlineStyle* inlineStyleSheet = |
asInspectorStyleSheet(element); |
@@ -998,6 +986,7 @@ void InspectorCSSAgent::getMatchedStylesForNode( |
} |
*cssKeyframesRules = animationsForNode(element); |
+ return Response::OK(); |
} |
template <class CSSRuleCollection> |
@@ -1081,35 +1070,33 @@ InspectorCSSAgent::animationsForNode(Element* element) { |
return cssKeyframesRules; |
} |
-void InspectorCSSAgent::getInlineStylesForNode( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getInlineStylesForNode( |
int nodeId, |
Maybe<protocol::CSS::CSSStyle>* inlineStyle, |
Maybe<protocol::CSS::CSSStyle>* attributesStyle) { |
- Element* element = elementForId(errorString, nodeId); |
- if (!element) |
- return; |
+ Element* element = nullptr; |
+ Response response = m_domAgent->assertElement(nodeId, element); |
+ if (!response.isSuccess()) |
+ return response; |
InspectorStyleSheetForInlineStyle* styleSheet = |
asInspectorStyleSheet(element); |
if (!styleSheet) |
- return; |
+ return Response::Error("Element is not a style sheet"); |
*inlineStyle = styleSheet->buildObjectForStyle(element->style()); |
*attributesStyle = buildObjectForAttributesStyle(element); |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::getComputedStyleForNode( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getComputedStyleForNode( |
int nodeId, |
std::unique_ptr<protocol::Array<protocol::CSS::CSSComputedStyleProperty>>* |
style) { |
Node* node = nullptr; |
Response response = m_domAgent->assertNode(nodeId, node); |
- if (!response.isSuccess()) { |
- *errorString = response.errorMessage(); |
- return; |
- } |
+ if (!response.isSuccess()) |
+ return response; |
CSSComputedStyleDeclaration* computedStyleInfo = |
CSSComputedStyleDeclaration::create(node, true); |
@@ -1140,6 +1127,7 @@ void InspectorCSSAgent::getComputedStyleForNode( |
.build()); |
} |
} |
+ return Response::OK(); |
} |
void InspectorCSSAgent::collectPlatformFontsForLayoutObject( |
@@ -1169,17 +1157,14 @@ void InspectorCSSAgent::collectPlatformFontsForLayoutObject( |
} |
} |
-void InspectorCSSAgent::getPlatformFontsForNode( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getPlatformFontsForNode( |
int nodeId, |
std::unique_ptr<protocol::Array<protocol::CSS::PlatformFontUsage>>* |
platformFonts) { |
Node* node = nullptr; |
Response response = m_domAgent->assertNode(nodeId, node); |
- if (!response.isSuccess()) { |
- *errorString = response.errorMessage(); |
- return; |
- } |
+ if (!response.isSuccess()) |
+ return response; |
HashCountedSet<std::pair<int, String>> fontStats; |
LayoutObject* root = node->layoutObject(); |
@@ -1206,73 +1191,65 @@ void InspectorCSSAgent::getPlatformFontsForNode( |
.setGlyphCount(font.value) |
.build()); |
} |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::getStyleSheetText(ErrorString* errorString, |
- const String& styleSheetId, |
- String* result) { |
- InspectorStyleSheetBase* inspectorStyleSheet = |
- assertStyleSheetForId(errorString, styleSheetId); |
- if (!inspectorStyleSheet) |
- return; |
+Response InspectorCSSAgent::getStyleSheetText(const String& styleSheetId, |
+ String* result) { |
+ InspectorStyleSheetBase* inspectorStyleSheet = nullptr; |
+ Response response = assertStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
inspectorStyleSheet->getText(result); |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::collectClassNames( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::collectClassNames( |
const String& styleSheetId, |
std::unique_ptr<protocol::Array<String>>* classNames) { |
- IdToInspectorStyleSheet::iterator it = |
- m_idToInspectorStyleSheet.find(styleSheetId); |
- if (it == m_idToInspectorStyleSheet.end()) { |
- *errorString = "No style sheet with given id found"; |
- return; |
- } |
- *classNames = it->value.get()->collectClassNames(); |
+ InspectorStyleSheet* inspectorStyleSheet = nullptr; |
+ Response response = |
+ assertInspectorStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
+ *classNames = inspectorStyleSheet->collectClassNames(); |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::setStyleSheetText( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setStyleSheetText( |
const String& styleSheetId, |
const String& text, |
protocol::Maybe<String>* sourceMapURL) { |
FrontendOperationScope scope; |
- InspectorStyleSheetBase* inspectorStyleSheet = |
- assertStyleSheetForId(errorString, styleSheetId); |
- if (!inspectorStyleSheet) { |
- *errorString = "Style sheet with id " + styleSheetId + " not found"; |
- return; |
- } |
+ InspectorStyleSheetBase* inspectorStyleSheet = nullptr; |
+ Response response = assertStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
TrackExceptionState exceptionState; |
m_domAgent->history()->perform( |
new SetStyleSheetTextAction(inspectorStyleSheet, text), exceptionState); |
- *errorString = toErrorString(exceptionState); |
+ response = InspectorDOMAgent::toResponse(exceptionState); |
+ if (!response.isSuccess()) |
+ return response; |
if (!inspectorStyleSheet->sourceMapURL().isEmpty()) |
*sourceMapURL = inspectorStyleSheet->sourceMapURL(); |
+ return Response::OK(); |
} |
-static bool verifyRangeComponent(ErrorString* errorString, |
- bool valid, |
- const String& component) { |
- if (!valid) |
- *errorString = "range." + component + " must be a non-negative integer"; |
- return valid; |
-} |
- |
-static bool jsonRangeToSourceRange(ErrorString* errorString, |
- InspectorStyleSheetBase* inspectorStyleSheet, |
- protocol::CSS::SourceRange* range, |
- SourceRange* sourceRange) { |
- if (!verifyRangeComponent(errorString, range->getStartLine() >= 0, |
- "startLine") || |
- !verifyRangeComponent(errorString, range->getStartColumn() >= 0, |
- "startColumn") || |
- !verifyRangeComponent(errorString, range->getEndLine() >= 0, "endLine") || |
- !verifyRangeComponent(errorString, range->getEndColumn() >= 0, |
- "endColumn")) |
- return false; |
+static Response jsonRangeToSourceRange( |
+ InspectorStyleSheetBase* inspectorStyleSheet, |
+ protocol::CSS::SourceRange* range, |
+ SourceRange* sourceRange) { |
+ if (range->getStartLine() < 0) |
+ return Response::Error("range.startLine must be a non-negative integer"); |
+ if (range->getStartColumn() < 0) |
+ return Response::Error("range.startColumn must be a non-negative integer"); |
+ if (range->getEndLine() < 0) |
+ return Response::Error("range.endLine must be a non-negative integer"); |
+ if (range->getEndColumn() < 0) |
+ return Response::Error("range.endColumn must be a non-negative integer"); |
unsigned startOffset = 0; |
unsigned endOffset = 0; |
@@ -1281,37 +1258,32 @@ static bool jsonRangeToSourceRange(ErrorString* errorString, |
range->getStartLine(), range->getStartColumn(), &startOffset) && |
inspectorStyleSheet->lineNumberAndColumnToOffset( |
range->getEndLine(), range->getEndColumn(), &endOffset); |
- if (!success) { |
- *errorString = "Specified range is out of bounds"; |
- return false; |
- } |
+ if (!success) |
+ return Response::Error("Specified range is out of bounds"); |
- if (startOffset > endOffset) { |
- *errorString = "Range start must not succeed its end"; |
- return false; |
- } |
+ if (startOffset > endOffset) |
+ return Response::Error("Range start must not succeed its end"); |
sourceRange->start = startOffset; |
sourceRange->end = endOffset; |
- return true; |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::setRuleSelector( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setRuleSelector( |
const String& styleSheetId, |
std::unique_ptr<protocol::CSS::SourceRange> range, |
const String& selector, |
std::unique_ptr<protocol::CSS::SelectorList>* result) { |
FrontendOperationScope scope; |
- InspectorStyleSheet* inspectorStyleSheet = |
- assertInspectorStyleSheetForId(errorString, styleSheetId); |
- if (!inspectorStyleSheet) { |
- *errorString = "Stylesheet not found"; |
- return; |
- } |
+ InspectorStyleSheet* inspectorStyleSheet = nullptr; |
+ Response response = |
+ assertInspectorStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
SourceRange selectorRange; |
- if (!jsonRangeToSourceRange(errorString, inspectorStyleSheet, range.get(), |
- &selectorRange)) |
- return; |
+ response = |
+ jsonRangeToSourceRange(inspectorStyleSheet, range.get(), &selectorRange); |
+ if (!response.isSuccess()) |
+ return response; |
TrackExceptionState exceptionState; |
ModifyRuleAction* action = |
@@ -1321,32 +1293,29 @@ void InspectorCSSAgent::setRuleSelector( |
if (success) { |
CSSStyleRule* rule = InspectorCSSAgent::asCSSStyleRule(action->takeRule()); |
InspectorStyleSheet* inspectorStyleSheet = inspectorStyleSheetForRule(rule); |
- if (!inspectorStyleSheet) { |
- *errorString = "Failed to get inspector style sheet for rule."; |
- return; |
- } |
+ if (!inspectorStyleSheet) |
+ return Response::Error("Failed to get inspector style sheet for rule."); |
*result = inspectorStyleSheet->buildObjectForSelectorList(rule); |
} |
- *errorString = toErrorString(exceptionState); |
+ return InspectorDOMAgent::toResponse(exceptionState); |
} |
-void InspectorCSSAgent::setKeyframeKey( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setKeyframeKey( |
const String& styleSheetId, |
std::unique_ptr<protocol::CSS::SourceRange> range, |
const String& keyText, |
std::unique_ptr<protocol::CSS::Value>* result) { |
FrontendOperationScope scope; |
- InspectorStyleSheet* inspectorStyleSheet = |
- assertInspectorStyleSheetForId(errorString, styleSheetId); |
- if (!inspectorStyleSheet) { |
- *errorString = "Stylesheet not found"; |
- return; |
- } |
+ InspectorStyleSheet* inspectorStyleSheet = nullptr; |
+ Response response = |
+ assertInspectorStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
SourceRange keyRange; |
- if (!jsonRangeToSourceRange(errorString, inspectorStyleSheet, range.get(), |
- &keyRange)) |
- return; |
+ response = |
+ jsonRangeToSourceRange(inspectorStyleSheet, range.get(), &keyRange); |
+ if (!response.isSuccess()) |
+ return response; |
TrackExceptionState exceptionState; |
ModifyRuleAction* action = new ModifyRuleAction( |
@@ -1356,10 +1325,8 @@ void InspectorCSSAgent::setKeyframeKey( |
CSSKeyframeRule* rule = toCSSKeyframeRule(action->takeRule()); |
InspectorStyleSheet* inspectorStyleSheet = |
bindStyleSheet(rule->parentStyleSheet()); |
- if (!inspectorStyleSheet) { |
- *errorString = "Failed to get inspector style sheet for rule."; |
- return; |
- } |
+ if (!inspectorStyleSheet) |
+ return Response::Error("Failed to get inspector style sheet for rule."); |
CSSRuleSourceData* sourceData = |
inspectorStyleSheet->sourceDataForRule(rule); |
@@ -1369,33 +1336,31 @@ void InspectorCSSAgent::setKeyframeKey( |
sourceData->ruleHeaderRange)) |
.build(); |
} |
- *errorString = toErrorString(exceptionState); |
+ return InspectorDOMAgent::toResponse(exceptionState); |
} |
-bool InspectorCSSAgent::multipleStyleTextsActions( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::multipleStyleTextsActions( |
std::unique_ptr<protocol::Array<protocol::CSS::StyleDeclarationEdit>> edits, |
HeapVector<Member<StyleSheetAction>>* actions) { |
int n = edits->length(); |
- if (n == 0) { |
- *errorString = "Edits should not be empty"; |
- return false; |
- } |
+ if (n == 0) |
+ return Response::Error("Edits should not be empty"); |
for (int i = 0; i < n; ++i) { |
protocol::CSS::StyleDeclarationEdit* edit = edits->get(i); |
- InspectorStyleSheetBase* inspectorStyleSheet = |
- assertStyleSheetForId(errorString, edit->getStyleSheetId()); |
- if (!inspectorStyleSheet) { |
- *errorString = |
- String::format("StyleSheet not found for edit #%d of %d", i + 1, n); |
- return false; |
+ InspectorStyleSheetBase* inspectorStyleSheet = nullptr; |
+ Response response = |
+ assertStyleSheetForId(edit->getStyleSheetId(), inspectorStyleSheet); |
+ if (!response.isSuccess()) { |
+ return Response::Error( |
+ String::format("StyleSheet not found for edit #%d of %d", i + 1, n)); |
} |
SourceRange range; |
- if (!jsonRangeToSourceRange(errorString, inspectorStyleSheet, |
- edit->getRange(), &range)) |
- return false; |
+ response = |
+ jsonRangeToSourceRange(inspectorStyleSheet, edit->getRange(), &range); |
+ if (!response.isSuccess()) |
+ return response; |
if (inspectorStyleSheet->isInlineStyle()) { |
InspectorStyleSheetForInlineStyle* inlineStyleSheet = |
@@ -1411,17 +1376,17 @@ bool InspectorCSSAgent::multipleStyleTextsActions( |
actions->append(action); |
} |
} |
- return true; |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::setStyleTexts( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setStyleTexts( |
std::unique_ptr<protocol::Array<protocol::CSS::StyleDeclarationEdit>> edits, |
std::unique_ptr<protocol::Array<protocol::CSS::CSSStyle>>* result) { |
FrontendOperationScope scope; |
HeapVector<Member<StyleSheetAction>> actions; |
- if (!multipleStyleTextsActions(errorString, std::move(edits), &actions)) |
- return; |
+ Response response = multipleStyleTextsActions(std::move(edits), &actions); |
+ if (!response.isSuccess()) |
+ return response; |
TrackExceptionState exceptionState; |
@@ -1438,10 +1403,9 @@ void InspectorCSSAgent::setStyleTexts( |
revert->undo(undoExceptionState); |
ASSERT(!undoExceptionState.hadException()); |
} |
- *errorString = |
- String::format("Failed applying edit #%d: %s", i, |
- toErrorString(exceptionState).utf8().data()); |
- return; |
+ return Response::Error( |
+ String::format("Failed applying edit #%d: ", i) + |
+ InspectorDOMAgent::toResponse(exceptionState).errorMessage()); |
} |
serializedStyles->addItem(action->takeSerializedStyle()); |
} |
@@ -1451,13 +1415,14 @@ void InspectorCSSAgent::setStyleTexts( |
m_domAgent->history()->appendPerformedAction(action); |
} |
*result = std::move(serializedStyles); |
+ return Response::OK(); |
} |
-CSSStyleDeclaration* InspectorCSSAgent::setStyleText( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setStyleText( |
InspectorStyleSheetBase* inspectorStyleSheet, |
const SourceRange& range, |
- const String& text) { |
+ const String& text, |
+ CSSStyleDeclaration*& result) { |
TrackExceptionState exceptionState; |
if (inspectorStyleSheet->isInlineStyle()) { |
InspectorStyleSheetForInlineStyle* inlineStyleSheet = |
@@ -1465,8 +1430,10 @@ CSSStyleDeclaration* InspectorCSSAgent::setStyleText( |
SetElementStyleAction* action = |
new SetElementStyleAction(inlineStyleSheet, text); |
bool success = m_domAgent->history()->perform(action, exceptionState); |
- if (success) |
- return inlineStyleSheet->inlineStyle(); |
+ if (success) { |
+ result = inlineStyleSheet->inlineStyle(); |
+ return Response::OK(); |
+ } |
} else { |
ModifyRuleAction* action = new ModifyRuleAction( |
ModifyRuleAction::SetStyleText, |
@@ -1474,33 +1441,35 @@ CSSStyleDeclaration* InspectorCSSAgent::setStyleText( |
bool success = m_domAgent->history()->perform(action, exceptionState); |
if (success) { |
CSSRule* rule = action->takeRule(); |
- if (rule->type() == CSSRule::kStyleRule) |
- return toCSSStyleRule(rule)->style(); |
- if (rule->type() == CSSRule::kKeyframeRule) |
- return toCSSKeyframeRule(rule)->style(); |
+ if (rule->type() == CSSRule::kStyleRule) { |
+ result = toCSSStyleRule(rule)->style(); |
+ return Response::OK(); |
+ } |
+ if (rule->type() == CSSRule::kKeyframeRule) { |
+ result = toCSSKeyframeRule(rule)->style(); |
+ return Response::OK(); |
+ } |
} |
} |
- *errorString = toErrorString(exceptionState); |
- return nullptr; |
+ return InspectorDOMAgent::toResponse(exceptionState); |
} |
-void InspectorCSSAgent::setMediaText( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setMediaText( |
const String& styleSheetId, |
std::unique_ptr<protocol::CSS::SourceRange> range, |
const String& text, |
std::unique_ptr<protocol::CSS::CSSMedia>* result) { |
FrontendOperationScope scope; |
- InspectorStyleSheet* inspectorStyleSheet = |
- assertInspectorStyleSheetForId(errorString, styleSheetId); |
- if (!inspectorStyleSheet) { |
- *errorString = "Stylesheet not found"; |
- return; |
- } |
+ InspectorStyleSheet* inspectorStyleSheet = nullptr; |
+ Response response = |
+ assertInspectorStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
SourceRange textRange; |
- if (!jsonRangeToSourceRange(errorString, inspectorStyleSheet, range.get(), |
- &textRange)) |
- return; |
+ response = |
+ jsonRangeToSourceRange(inspectorStyleSheet, range.get(), &textRange); |
+ if (!response.isSuccess()) |
+ return response; |
TrackExceptionState exceptionState; |
ModifyRuleAction* action = new ModifyRuleAction( |
@@ -1515,75 +1484,66 @@ void InspectorCSSAgent::setMediaText( |
*result = buildMediaObject(rule->media(), MediaListSourceMediaRule, |
sourceURL, rule->parentStyleSheet()); |
} |
- *errorString = toErrorString(exceptionState); |
+ return InspectorDOMAgent::toResponse(exceptionState); |
} |
-void InspectorCSSAgent::createStyleSheet( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::createStyleSheet( |
const String& frameId, |
protocol::CSS::StyleSheetId* outStyleSheetId) { |
LocalFrame* frame = IdentifiersFactory::frameById(m_inspectedFrames, frameId); |
- if (!frame) { |
- *errorString = "Frame not found"; |
- return; |
- } |
+ if (!frame) |
+ return Response::Error("Frame not found"); |
Document* document = frame->document(); |
- if (!document) { |
- *errorString = "Frame does not have a document"; |
- return; |
- } |
+ if (!document) |
+ return Response::Error("Frame does not have a document"); |
InspectorStyleSheet* inspectorStyleSheet = viaInspectorStyleSheet(document); |
- if (!inspectorStyleSheet) { |
- *errorString = "No target stylesheet found"; |
- return; |
- } |
+ if (!inspectorStyleSheet) |
+ return Response::Error("No target stylesheet found"); |
updateActiveStyleSheets(document, ExistingFrontendRefresh); |
*outStyleSheetId = inspectorStyleSheet->id(); |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::addRule( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::addRule( |
const String& styleSheetId, |
const String& ruleText, |
std::unique_ptr<protocol::CSS::SourceRange> location, |
std::unique_ptr<protocol::CSS::CSSRule>* result) { |
FrontendOperationScope scope; |
- InspectorStyleSheet* inspectorStyleSheet = |
- assertInspectorStyleSheetForId(errorString, styleSheetId); |
- if (!inspectorStyleSheet) |
- return; |
+ InspectorStyleSheet* inspectorStyleSheet = nullptr; |
+ Response response = |
+ assertInspectorStyleSheetForId(styleSheetId, inspectorStyleSheet); |
+ if (!response.isSuccess()) |
+ return response; |
SourceRange ruleLocation; |
- if (!jsonRangeToSourceRange(errorString, inspectorStyleSheet, location.get(), |
- &ruleLocation)) |
- return; |
+ response = jsonRangeToSourceRange(inspectorStyleSheet, location.get(), |
+ &ruleLocation); |
+ if (!response.isSuccess()) |
+ return response; |
TrackExceptionState exceptionState; |
AddRuleAction* action = |
new AddRuleAction(inspectorStyleSheet, ruleText, ruleLocation); |
bool success = m_domAgent->history()->perform(action, exceptionState); |
- if (!success) { |
- *errorString = toErrorString(exceptionState); |
- return; |
- } |
+ if (!success) |
+ return InspectorDOMAgent::toResponse(exceptionState); |
CSSStyleRule* rule = action->takeRule(); |
*result = buildObjectForRule(rule); |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::forcePseudoState( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::forcePseudoState( |
int nodeId, |
std::unique_ptr<protocol::Array<String>> forcedPseudoClasses) { |
Element* element = nullptr; |
Response response = m_domAgent->assertElement(nodeId, element); |
- if (!response.isSuccess()) { |
- *errorString = response.errorMessage(); |
- return; |
- } |
+ if (!response.isSuccess()) |
+ return response; |
unsigned forcedPseudoState = |
computePseudoClassMask(std::move(forcedPseudoClasses)); |
@@ -1593,7 +1553,7 @@ void InspectorCSSAgent::forcePseudoState( |
it == m_nodeIdToForcedPseudoState.end() ? 0 : it->value; |
bool needStyleRecalc = forcedPseudoState != currentForcedPseudoState; |
if (!needStyleRecalc) |
- return; |
+ return Response::OK(); |
if (forcedPseudoState) |
m_nodeIdToForcedPseudoState.set(nodeId, forcedPseudoState); |
@@ -1602,6 +1562,7 @@ void InspectorCSSAgent::forcePseudoState( |
element->ownerDocument()->setNeedsStyleRecalc( |
SubtreeStyleChange, |
StyleChangeReasonForTracing::create(StyleChangeReason::Inspector)); |
+ return Response::OK(); |
} |
std::unique_ptr<protocol::CSS::CSSMedia> InspectorCSSAgent::buildMediaObject( |
@@ -1813,19 +1774,6 @@ InspectorStyleSheetForInlineStyle* InspectorCSSAgent::asInspectorStyleSheet( |
return inspectorStyleSheet; |
} |
-Element* InspectorCSSAgent::elementForId(ErrorString* errorString, int nodeId) { |
- Node* node = m_domAgent->nodeForId(nodeId); |
- if (!node) { |
- *errorString = "No node with given id found"; |
- return nullptr; |
- } |
- if (!node->isElementNode()) { |
- *errorString = "Not an element node"; |
- return nullptr; |
- } |
- return toElement(node); |
-} |
- |
// static |
void InspectorCSSAgent::collectAllDocumentStyleSheets( |
Document* document, |
@@ -1917,33 +1865,32 @@ InspectorStyleSheet* InspectorCSSAgent::viaInspectorStyleSheet( |
return m_cssStyleSheetToInspectorStyleSheet.get(&inspectorSheet); |
} |
-InspectorStyleSheet* InspectorCSSAgent::assertInspectorStyleSheetForId( |
- ErrorString* errorString, |
- const String& styleSheetId) { |
+Response InspectorCSSAgent::assertInspectorStyleSheetForId( |
+ const String& styleSheetId, |
+ InspectorStyleSheet*& result) { |
IdToInspectorStyleSheet::iterator it = |
m_idToInspectorStyleSheet.find(styleSheetId); |
- if (it == m_idToInspectorStyleSheet.end()) { |
- *errorString = "No style sheet with given id found"; |
- return nullptr; |
- } |
- return it->value.get(); |
+ if (it == m_idToInspectorStyleSheet.end()) |
+ return Response::Error("No style sheet with given id found"); |
+ result = it->value.get(); |
+ return Response::OK(); |
} |
-InspectorStyleSheetBase* InspectorCSSAgent::assertStyleSheetForId( |
- ErrorString* errorString, |
- const String& styleSheetId) { |
- ErrorString placeholder; |
- InspectorStyleSheetBase* result = |
- assertInspectorStyleSheetForId(&placeholder, styleSheetId); |
- if (result) |
- return result; |
+Response InspectorCSSAgent::assertStyleSheetForId( |
+ const String& styleSheetId, |
+ InspectorStyleSheetBase*& result) { |
+ InspectorStyleSheet* styleSheet = nullptr; |
+ Response response = assertInspectorStyleSheetForId(styleSheetId, styleSheet); |
+ if (response.isSuccess()) { |
+ result = styleSheet; |
+ return response; |
+ } |
IdToInspectorStyleSheetForInlineStyle::iterator it = |
m_idToInspectorStyleSheetForInlineStyle.find(styleSheetId); |
- if (it == m_idToInspectorStyleSheetForInlineStyle.end()) { |
- *errorString = "No style sheet with given id found"; |
- return nullptr; |
- } |
- return it->value.get(); |
+ if (it == m_idToInspectorStyleSheetForInlineStyle.end()) |
+ return Response::Error("No style sheet with given id found"); |
+ result = it->value.get(); |
+ return Response::OK(); |
} |
protocol::CSS::StyleSheetOrigin InspectorCSSAgent::detectOrigin( |
@@ -2153,12 +2100,11 @@ CSSStyleDeclaration* InspectorCSSAgent::findEffectiveDeclaration( |
return foundStyle ? foundStyle : styles.at(0).get(); |
} |
-void InspectorCSSAgent::setLayoutEditorValue(ErrorString* errorString, |
- Element* element, |
- CSSStyleDeclaration* style, |
- CSSPropertyID propertyId, |
- const String& value, |
- bool forceImportant) { |
+Response InspectorCSSAgent::setLayoutEditorValue(Element* element, |
+ CSSStyleDeclaration* style, |
+ CSSPropertyID propertyId, |
+ const String& value, |
+ bool forceImportant) { |
InspectorStyleSheetBase* inspectorStyleSheet = nullptr; |
RefPtr<CSSRuleSourceData> sourceData; |
// An absence of the parent rule means that given style is an inline style. |
@@ -2173,10 +2119,8 @@ void InspectorCSSAgent::setLayoutEditorValue(ErrorString* errorString, |
sourceData = inlineStyleSheet->ruleSourceData(); |
} |
- if (!sourceData) { |
- *errorString = "Can't find a source to edit"; |
- return; |
- } |
+ if (!sourceData) |
+ return Response::Error("Can't find a source to edit"); |
Vector<StylePropertyShorthand, 4> shorthands; |
getMatchingShorthandsForLonghand(propertyId, &shorthands); |
@@ -2236,12 +2180,15 @@ void InspectorCSSAgent::setLayoutEditorValue(ErrorString* errorString, |
changeRange.start = declaration.range.start; |
changeRange.end = changeRange.start + newPropertyText.length(); |
} |
- CSSStyleDeclaration* resultStyle = |
- setStyleText(errorString, inspectorStyleSheet, bodyRange, styleText); |
- if (resultStyle) |
- frontend()->layoutEditorChange( |
- inspectorStyleSheet->id(), |
- inspectorStyleSheet->buildSourceRangeObject(changeRange)); |
+ CSSStyleDeclaration* resultStyle = nullptr; |
+ Response response = |
+ setStyleText(inspectorStyleSheet, bodyRange, styleText, resultStyle); |
+ if (!response.isSuccess()) |
+ return response; |
+ frontend()->layoutEditorChange( |
+ inspectorStyleSheet->id(), |
+ inspectorStyleSheet->buildSourceRangeObject(changeRange)); |
+ return Response::OK(); |
} |
void InspectorCSSAgent::layoutEditorItemSelected(Element* element, |
@@ -2265,53 +2212,47 @@ void InspectorCSSAgent::layoutEditorItemSelected(Element* element, |
sourceData->ruleHeaderRange)); |
} |
-void InspectorCSSAgent::setEffectivePropertyValueForNode( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::setEffectivePropertyValueForNode( |
int nodeId, |
const String& propertyName, |
const String& value) { |
// TODO: move testing from CSSAgent to layout editor. |
- Element* element = elementForId(errorString, nodeId); |
- if (!element || element->getPseudoId()) |
- return; |
+ Element* element = nullptr; |
+ Response response = m_domAgent->assertElement(nodeId, element); |
+ if (!response.isSuccess()) |
+ return response; |
+ if (element->getPseudoId()) |
+ return Response::Error("Elements is pseudo"); |
CSSPropertyID property = cssPropertyID(propertyName); |
- if (!property) { |
- *errorString = "Invalid property name"; |
- return; |
- } |
+ if (!property) |
+ return Response::Error("Invalid property name"); |
Document* ownerDocument = element->ownerDocument(); |
- if (!ownerDocument->isActive()) { |
- *errorString = "Can't edit a node from a non-active document"; |
- return; |
- } |
+ if (!ownerDocument->isActive()) |
+ return Response::Error("Can't edit a node from a non-active document"); |
CSSPropertyID propertyId = cssPropertyID(propertyName); |
CSSStyleDeclaration* style = |
findEffectiveDeclaration(propertyId, matchingStyles(element)); |
- if (!style) { |
- *errorString = "Can't find a style to edit"; |
- return; |
- } |
+ if (!style) |
+ return Response::Error("Can't find a style to edit"); |
- setLayoutEditorValue(errorString, element, style, propertyId, value); |
+ return setLayoutEditorValue(element, style, propertyId, value); |
} |
-void InspectorCSSAgent::getBackgroundColors( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getBackgroundColors( |
int nodeId, |
Maybe<protocol::Array<String>>* result) { |
- Element* element = elementForId(errorString, nodeId); |
- if (!element) { |
- *errorString = "Node not found"; |
- return; |
- } |
+ Element* element = nullptr; |
+ Response response = m_domAgent->assertElement(nodeId, element); |
+ if (!response.isSuccess()) |
+ return response; |
LayoutRect textBounds; |
LayoutObject* elementLayout = element->layoutObject(); |
if (!elementLayout) |
- return; |
+ return Response::OK(); |
for (const LayoutObject* child = elementLayout->slowFirstChild(); child; |
child = child->nextSibling()) { |
@@ -2320,14 +2261,12 @@ void InspectorCSSAgent::getBackgroundColors( |
textBounds.unite(LayoutRect(child->absoluteBoundingBoxRect())); |
} |
if (textBounds.size().isEmpty()) |
- return; |
+ return Response::OK(); |
Vector<Color> colors; |
FrameView* view = element->document().view(); |
- if (!view) { |
- *errorString = "No view."; |
- return; |
- } |
+ if (!view) |
+ return Response::Error("No view."); |
Document& document = element->document(); |
bool isMainFrame = document.isInMainFrame(); |
bool foundOpaqueColor = false; |
@@ -2353,10 +2292,10 @@ void InspectorCSSAgent::getBackgroundColors( |
*result = protocol::Array<String>::create(); |
for (auto color : colors) |
result->fromJust()->addItem(color.serializedAsCSSComponentValue()); |
+ return Response::OK(); |
} |
-void InspectorCSSAgent::getLayoutTreeAndStyles( |
- ErrorString* errorString, |
+Response InspectorCSSAgent::getLayoutTreeAndStyles( |
std::unique_ptr<protocol::Array<String>> styleWhitelist, |
std::unique_ptr<protocol::Array<protocol::CSS::LayoutTreeNode>>* |
layoutTreeNodes, |
@@ -2381,6 +2320,7 @@ void InspectorCSSAgent::getLayoutTreeAndStyles( |
visitLayoutTreeNodes(m_domAgent->document(), *layoutTreeNodes->get(), |
cssPropertyWhitelist, styleToIndexMap, |
*computedStyles->get()); |
+ return Response::OK(); |
} |
int InspectorCSSAgent::getStyleIndexForNode( |