static bool isSelectionInDocument(const VisibleSelectionTemplate<Strategy>& visibleSelection, const Document& document) { const PositionTemplate<Strategy> start = visibleSelection.start(); if (start.isNotNull() && (!start.inDocument() || start.document() != document)) return false; const PositionTemplate<Strategy> end = visibleSelection.end(); if (end.isNotNull() && (!end.inDocument() || end.document() != document)) return false; const PositionTemplate<Strategy> extent = visibleSelection.extent(); if (extent.isNotNull() && (!extent.inDocument() || extent.document() != document)) return false; return true; }
String CreateMarkupAlgorithm<Strategy>::createMarkup( const PositionTemplate<Strategy>& startPosition, const PositionTemplate<Strategy>& endPosition, EAnnotateForInterchange shouldAnnotate, ConvertBlocksToInlines convertBlocksToInlines, EAbsoluteURLs shouldResolveURLs, Node* constrainingAncestor) { if (startPosition.isNull() || endPosition.isNull()) return emptyString(); RELEASE_ASSERT(startPosition.compareTo(endPosition) <= 0); bool collapsed = startPosition == endPosition; if (collapsed) return emptyString(); Node* commonAncestor = Strategy::commonAncestor(*startPosition.computeContainerNode(), *endPosition.computeContainerNode()); if (!commonAncestor) return emptyString(); Document* document = startPosition.document(); DCHECK(!document->needsLayoutTreeUpdate()); DocumentLifecycle::DisallowTransitionScope disallowTransition( document->lifecycle()); HTMLElement* specialCommonAncestor = highestAncestorToWrapMarkup<Strategy>( startPosition, endPosition, shouldAnnotate, constrainingAncestor); StyledMarkupSerializer<Strategy> serializer( shouldResolveURLs, shouldAnnotate, startPosition, endPosition, specialCommonAncestor, convertBlocksToInlines); return serializer.createMarkup(); }