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

Unified Diff: third_party/WebKit/Source/core/dom/IntersectionObserver.cpp

Issue 1672273002: Enforce containing block requirement for IntersectionObserver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: nits Created 4 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: third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
index 24f43a00be0a8af290568ed7142b269d10466fd2..cca839fc37d293f3ec5268455c9114185713afad 100644
--- a/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/IntersectionObserver.cpp
@@ -172,30 +172,6 @@ LayoutObject* IntersectionObserver::rootLayoutObject() const
return toElement(node)->layoutObject();
}
-bool IntersectionObserver::isDescendantOfRoot(const Element* target) const
-{
- // Is m_root an ancestor, through the DOM and frame trees, of target?
- Node* node = rootNode();
- if (!node || !target || target == node)
- return false;
- if (!target->inDocument() || !node->inDocument())
- return false;
-
- Document* rootDocument = &node->document();
- Document* targetDocument = &target->document();
- while (targetDocument != rootDocument) {
- target = targetDocument->ownerElement();
- if (!target)
- return false;
- targetDocument = &target->document();
- }
- if (node->isDocumentNode()) {
- ASSERT(targetDocument == node);
- return true;
- }
- return target->isDescendantOf(node);
-}
-
void IntersectionObserver::observe(Element* target, ExceptionState& exceptionState)
{
if (!m_root) {
@@ -210,10 +186,6 @@ void IntersectionObserver::observe(Element* target, ExceptionState& exceptionSta
exceptionState.throwDOMException(HierarchyRequestError, "Cannot use the same element for root and target.");
return;
}
- if (!isDescendantOfRoot(target)) {
- exceptionState.throwDOMException(HierarchyRequestError, "Observed element must be a descendant of the observer's root element.");
- return;
- }
// TODO(szager): Add a pointer to the spec that describes this policy.
bool shouldReportRootBounds = target->document().frame()->securityContext()->securityOrigin()->canAccess(rootNode()->document().frame()->securityContext()->securityOrigin());
@@ -241,7 +213,7 @@ void IntersectionObserver::unobserve(Element* target, ExceptionState&)
void IntersectionObserver::computeIntersectionObservations()
{
- if (!m_root)
+ if (!m_root || !m_root->inDocument())
return;
Document* callbackDocument = toDocument(m_callback->executionContext());
if (!callbackDocument)
@@ -358,12 +330,6 @@ void IntersectionObserver::deliver()
m_callback->handleEvent(entries, *this);
}
-void IntersectionObserver::setActive(bool active)
-{
- for (auto& observation : m_observations)
- observation->setActive(m_root && active && isDescendantOfRoot(observation->target()));
-}
-
bool IntersectionObserver::hasPercentMargin() const
{
return (m_topMargin.type() == Percent

Powered by Google App Engine
This is Rietveld 408576698