Commit 69e8054e authored by yosin@chromium.org's avatar yosin@chromium.org

Make SVG elements not to consider editable.

This patch changes Position::isCandidate() and Position::isCandidate() not to
return true for SVG elements except for rendered text, since we don't implement
SVG editor yet.

Note: Rendered text in SVG documents are represented by |Text| class and their
renderer is |RenderSVGInlineText| derived from |RenderText| class.

BUG=380043
TEST=LayoutTests/editing/execCommand/format-block-with-uneditable-crash-2.html

Review URL: https://codereview.chromium.org/314923003

git-svn-id: svn://svn.chromium.org/blink/trunk@175855 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent cb381999
<!DOCTYPE html>
<html>
<head>
<script>
if (window.testRunner)
testRunner.dumpAsText();
onload = function() {
document.designMode = 'on';
document.execCommand('SelectAll');
document.execCommand('FormatBlock', false, '<pre>');
document.documentElement.textContent = 'PASS if Blink doesn\'t crash.';
};
</script>
</head>
<body>
ab<embed contenteditable="false"><svg>xyz</svg>
</body>
</html>
...@@ -865,6 +865,12 @@ bool Position::isCandidate() const ...@@ -865,6 +865,12 @@ bool Position::isCandidate() const
if (renderer->isText()) if (renderer->isText())
return !nodeIsUserSelectNone(deprecatedNode()) && inRenderedText(); return !nodeIsUserSelectNone(deprecatedNode()) && inRenderedText();
if (renderer->isSVG()) {
// We don't consider SVG elements are contenteditable except for
// associated renderer returns isText() true, e.g. RenderSVGInlineText.
return false;
}
if (isRenderedTableElement(deprecatedNode()) || editingIgnoresContent(deprecatedNode())) if (isRenderedTableElement(deprecatedNode()) || editingIgnoresContent(deprecatedNode()))
return (atFirstEditingPositionForNode() || atLastEditingPositionForNode()) && !nodeIsUserSelectNone(deprecatedNode()->parentNode()); return (atFirstEditingPositionForNode() || atLastEditingPositionForNode()) && !nodeIsUserSelectNone(deprecatedNode()->parentNode());
......
...@@ -165,6 +165,12 @@ bool PositionIterator::isCandidate() const ...@@ -165,6 +165,12 @@ bool PositionIterator::isCandidate() const
if (renderer->isText()) if (renderer->isText())
return !Position::nodeIsUserSelectNone(m_anchorNode) && Position(*this).inRenderedText(); return !Position::nodeIsUserSelectNone(m_anchorNode) && Position(*this).inRenderedText();
if (renderer->isSVG()) {
// We don't consider SVG elements are contenteditable except for
// associated renderer returns isText() true, e.g. RenderSVGInlineText.
return false;
}
if (isRenderedTableElement(m_anchorNode) || editingIgnoresContent(m_anchorNode)) if (isRenderedTableElement(m_anchorNode) || editingIgnoresContent(m_anchorNode))
return (atStartOfNode() || atEndOfNode()) && !Position::nodeIsUserSelectNone(m_anchorNode->parentNode()); return (atStartOfNode() || atEndOfNode()) && !Position::nodeIsUserSelectNone(m_anchorNode->parentNode());
......
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