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

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

Issue 2634113002: ElementVisibilityObserver: remove OOPIF checks. (Closed)
Patch Set: non-exported-base Created 3 years, 11 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/ElementVisibilityObserverTest.cpp
diff --git a/third_party/WebKit/Source/core/dom/ElementVisibilityObserverTest.cpp b/third_party/WebKit/Source/core/dom/ElementVisibilityObserverTest.cpp
index 26452595b29e8760b338983cb4f04d4bb9e57a37..02f03b07793a65bfc272ff501a49f9f93d362576 100644
--- a/third_party/WebKit/Source/core/dom/ElementVisibilityObserverTest.cpp
+++ b/third_party/WebKit/Source/core/dom/ElementVisibilityObserverTest.cpp
@@ -6,8 +6,10 @@
#include "core/dom/DOMImplementation.h"
#include "core/dom/Document.h"
+#include "core/frame/RemoteFrame.h"
#include "core/html/HTMLDivElement.h"
#include "core/html/HTMLDocument.h"
+#include "core/loader/EmptyClients.h"
#include "core/testing/DummyPageHolder.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -15,14 +17,47 @@ namespace blink {
namespace {
+// Stub implementation of FrameLoaderClient for the purpose of testing. It will
+// alow callers to set the parent/top frames by calling |setParent|. It is used
+// in ElementVisibilityObserverTest in order to mock a RemoteFrame parent of a
+// LocalFrame.
+class StubFrameLoaderClient final : public EmptyFrameLoaderClient {
+ public:
+ Frame* parent() const override { return m_parent; }
+ Frame* top() const override { return m_parent; }
+
+ void setParent(Frame* frame) { m_parent = frame; }
+
+ DEFINE_INLINE_VIRTUAL_TRACE() {
+ visitor->trace(m_parent);
+ EmptyFrameLoaderClient::trace(visitor);
+ }
+
+ private:
+ WeakMember<Frame> m_parent = nullptr;
+};
+
class ElementVisibilityObserverTest : public ::testing::Test {
protected:
- void SetUp() override { m_dummyPageHolder = DummyPageHolder::create(); }
+ void SetUp() override {
+ m_frameLoaderClient = new StubFrameLoaderClient();
+ m_dummyPageHolder = DummyPageHolder::create(
+ IntSize(), nullptr, m_frameLoaderClient, nullptr, nullptr);
+ }
+
+ void TearDown() override {
+ m_dummyPageHolder->frame().detach(FrameDetachType::Remove);
+ }
Document& document() { return m_dummyPageHolder->document(); }
+ FrameHost& frameHost() { return m_dummyPageHolder->page().frameHost(); }
+ StubFrameLoaderClient* frameLoaderClient() const {
+ return m_frameLoaderClient;
+ }
private:
std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
+ Persistent<StubFrameLoaderClient> m_frameLoaderClient;
};
TEST_F(ElementVisibilityObserverTest, ObserveElementWithoutDocumentFrame) {
@@ -35,6 +70,20 @@ TEST_F(ElementVisibilityObserverTest, ObserveElementWithoutDocumentFrame) {
// It should not crash.
}
+TEST_F(ElementVisibilityObserverTest, ObserveElementInRemoteFrame) {
+ Persistent<RemoteFrame> remoteFrame =
+ RemoteFrame::create(new EmptyRemoteFrameClient(), &frameHost(), nullptr);
+ frameLoaderClient()->setParent(remoteFrame);
+
+ Persistent<HTMLElement> element = HTMLDivElement::create(document());
+ ElementVisibilityObserver* observer =
+ new ElementVisibilityObserver(element, WTF::bind([](bool) {}));
+ observer->start();
+ observer->deliverObservationsForTesting();
+ observer->stop();
+ // It should not crash.
+}
+
} // anonymous namespace
} // blink namespace
« no previous file with comments | « third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp ('k') | third_party/WebKit/Source/core/loader/EmptyClients.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698