Changeset 239279 in webkit


Ignore:
Timestamp:
Dec 17, 2018 11:42:55 AM (5 years ago)
Author:
Alan Bujtas
Message:

Reproducible ASSERTion failure when toggling layer borders with find-in-page up
https://bugs.webkit.org/show_bug.cgi?id=192762
<rdar://problem/46676873>

Reviewed by Simon Fraser.

Source/WebCore:

DocumentMarkerController::markersFor() should take a reference instead of a Node*.

Test: editing/document-marker-null-check.html

  • dom/DocumentMarkerController.cpp:

(DocumentMarkerController::hasMarkers):

  • dom/DocumentMarkerController.h:
  • editing/AlternativeTextController.cpp:

(WebCore::AlternativeTextController::respondToChangedSelection):

  • editing/Editor.cpp:

(WebCore::Editor::selectionStartHasMarkerFor const):

  • rendering/InlineTextBox.cpp:

(WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers const):

  • rendering/RenderReplaced.cpp:

(WebCore::RenderReplaced::paint):

  • rendering/RenderText.cpp:

(WebCore::RenderText::draggedContentRangesBetweenOffsets const):

  • rendering/SimpleLineLayout.cpp:

(WebCore::SimpleLineLayout::canUseForWithReason):

  • testing/Internals.cpp:

(WebCore::Internals::markerCountForNode):

LayoutTests:

  • editing/document-marker-null-check-expected.txt: Added.
  • editing/document-marker-null-check.html: Added.
Location:
trunk
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r239278 r239279  
     12018-12-17  Zalan Bujtas  <zalan@apple.com>
     2
     3        Reproducible ASSERTion failure when toggling layer borders with find-in-page up
     4        https://bugs.webkit.org/show_bug.cgi?id=192762
     5        <rdar://problem/46676873>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * editing/document-marker-null-check-expected.txt: Added.
     10        * editing/document-marker-null-check.html: Added.
     11
    1122018-12-17  Commit Queue  <commit-queue@webkit.org>
    213
  • trunk/Source/WebCore/ChangeLog

    r239278 r239279  
     12018-12-17  Zalan Bujtas  <zalan@apple.com>
     2
     3        Reproducible ASSERTion failure when toggling layer borders with find-in-page up
     4        https://bugs.webkit.org/show_bug.cgi?id=192762
     5        <rdar://problem/46676873>
     6
     7        Reviewed by Simon Fraser.
     8
     9        DocumentMarkerController::markersFor() should take a reference instead of a Node*.
     10
     11        Test: editing/document-marker-null-check.html
     12
     13        * dom/DocumentMarkerController.cpp:
     14        (DocumentMarkerController::hasMarkers):
     15        * dom/DocumentMarkerController.h:
     16        * editing/AlternativeTextController.cpp:
     17        (WebCore::AlternativeTextController::respondToChangedSelection):
     18        * editing/Editor.cpp:
     19        (WebCore::Editor::selectionStartHasMarkerFor const):
     20        * rendering/InlineTextBox.cpp:
     21        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers const):
     22        * rendering/RenderReplaced.cpp:
     23        (WebCore::RenderReplaced::paint):
     24        * rendering/RenderText.cpp:
     25        (WebCore::RenderText::draggedContentRangesBetweenOffsets const):
     26        * rendering/SimpleLineLayout.cpp:
     27        (WebCore::SimpleLineLayout::canUseForWithReason):
     28        * testing/Internals.cpp:
     29        (WebCore::Internals::markerCountForNode):
     30
    1312018-12-17  Commit Queue  <commit-queue@webkit.org>
    232
  • trunk/Source/WebCore/dom/DocumentMarkerController.cpp

    r237266 r239279  
    522522}
    523523
    524 Vector<RenderedDocumentMarker*> DocumentMarkerController::markersFor(Node* node, OptionSet<DocumentMarker::MarkerType> markerTypes)
     524Vector<RenderedDocumentMarker*> DocumentMarkerController::markersFor(Node& node, OptionSet<DocumentMarker::MarkerType> markerTypes)
    525525{
    526526    if (!possiblyHasMarkers(markerTypes))
     
    528528
    529529    Vector<RenderedDocumentMarker*> result;
    530     MarkerList* list = m_markers.get(node);
     530    MarkerList* list = m_markers.get(&node);
    531531    if (!list)
    532532        return result;
     
    552552    Node* pastLastNode = range.pastLastNode();
    553553    for (Node* node = range.firstNode(); node != pastLastNode; node = NodeTraversal::next(*node)) {
    554         for (auto* marker : markersFor(node)) {
     554        ASSERT(node);
     555        for (auto* marker : markersFor(*node)) {
    555556            if (!markerTypes.contains(marker->type()))
    556557                continue;
     
    764765    Node* pastLastNode = range.pastLastNode();
    765766    for (Node* node = range.firstNode(); node != pastLastNode; node = NodeTraversal::next(*node)) {
    766         for (auto* marker : markersFor(node)) {
     767        ASSERT(node);
     768        for (auto* marker : markersFor(*node)) {
    767769            if (!markerTypes.contains(marker->type()))
    768770                continue;
  • trunk/Source/WebCore/dom/DocumentMarkerController.h

    r237266 r239279  
    8383    void setMarkersActive(Node*, unsigned startOffset, unsigned endOffset, bool);
    8484
    85     WEBCORE_EXPORT Vector<RenderedDocumentMarker*> markersFor(Node*, OptionSet<DocumentMarker::MarkerType> = DocumentMarker::allMarkers());
     85    WEBCORE_EXPORT Vector<RenderedDocumentMarker*> markersFor(Node&, OptionSet<DocumentMarker::MarkerType> = DocumentMarker::allMarkers());
    8686    WEBCORE_EXPORT Vector<RenderedDocumentMarker*> markersInRange(Range&, OptionSet<DocumentMarker::MarkerType>);
    8787    void clearDescriptionOnMarkersIntersectingRange(Range&, OptionSet<DocumentMarker::MarkerType>);
  • trunk/Source/WebCore/editing/AlternativeTextController.cpp

    r235120 r239279  
    421421
    422422    Node* node = position.containerNode();
    423     for (auto* marker : node->document().markers().markersFor(node)) {
     423    ASSERT(node);
     424    for (auto* marker : node->document().markers().markersFor(*node)) {
    424425        ASSERT(marker);
    425426        if (respondToMarkerAtEndOfWord(*marker, position))
  • trunk/Source/WebCore/editing/Editor.cpp

    r238894 r239279  
    37693769    unsigned int startOffset = static_cast<unsigned int>(from);
    37703770    unsigned int endOffset = static_cast<unsigned int>(from + length);
    3771     Vector<RenderedDocumentMarker*> markers = document().markers().markersFor(node);
     3771    Vector<RenderedDocumentMarker*> markers = document().markers().markersFor(*node);
    37723772    for (auto* marker : markers) {
    37733773        if (marker->startOffset() <= startOffset && endOffset <= marker->endOffset() && marker->type() == markerType)
  • trunk/Source/WebCore/rendering/InlineTextBox.cpp

    r238463 r239279  
    863863        return { };
    864864
    865     Vector<RenderedDocumentMarker*> markers = renderer().document().markers().markersFor(renderer().textNode());
     865    Vector<RenderedDocumentMarker*> markers = renderer().document().markers().markersFor(*renderer().textNode());
    866866
    867867    auto markedTextTypeForMarkerType = [] (DocumentMarker::MarkerType type) {
  • trunk/Source/WebCore/rendering/RenderReplaced.cpp

    r238463 r239279  
    163163    if (element() && element()->parentOrShadowHostElement()) {
    164164        auto* parentContainer = element()->parentOrShadowHostElement();
    165         if (draggedContentContainsReplacedElement(document().markers().markersFor(parentContainer, DocumentMarker::DraggedContent), *element())) {
     165        ASSERT(parentContainer);
     166        if (draggedContentContainsReplacedElement(document().markers().markersFor(*parentContainer, DocumentMarker::DraggedContent), *element())) {
    166167            savedGraphicsContext.save();
    167168            paintInfo.context().setAlpha(0.25);
  • trunk/Source/WebCore/rendering/RenderText.cpp

    r238064 r239279  
    10641064        return { };
    10651065
    1066     auto markers = document().markers().markersFor(textNode(), DocumentMarker::DraggedContent);
     1066    auto markers = document().markers().markersFor(*textNode(), DocumentMarker::DraggedContent);
    10671067    if (markers.isEmpty())
    10681068        return { };
  • trunk/Source/WebCore/rendering/SimpleLineLayout.cpp

    r238463 r239279  
    316316        if (is<RenderText>(*child)) {
    317317            const auto& renderText = downcast<RenderText>(*child);
    318             if (!renderText.document().markers().markersFor(renderText.textNode()).isEmpty())
     318            if (renderText.textNode() && !renderText.document().markers().markersFor(*renderText.textNode()).isEmpty())
    319319                SET_REASON_AND_RETURN_IF_NEEDED(FlowIncludesDocumentMarkers, reasons, includeReasons);
    320320            child = child->nextSibling();
  • trunk/Source/WebCore/testing/Internals.cpp

    r239278 r239279  
    15421542
    15431543    node.document().frame()->editor().updateEditorUINowIfScheduled();
    1544     return node.document().markers().markersFor(&node, markerTypes).size();
     1544    return node.document().markers().markersFor(node, markerTypes).size();
    15451545}
    15461546
     
    15551555    node.document().frame()->editor().updateEditorUINowIfScheduled();
    15561556
    1557     Vector<RenderedDocumentMarker*> markers = node.document().markers().markersFor(&node, markerTypes);
     1557    Vector<RenderedDocumentMarker*> markers = node.document().markers().markersFor(node, markerTypes);
    15581558    if (markers.size() <= index)
    15591559        return nullptr;
Note: See TracChangeset for help on using the changeset viewer.