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

Unified Diff: Source/core/dom/DocumentTest.cpp

Issue 117703004: Free temporary GPU and memory resources held by inactive or hidden 2D canvases (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: typo Created 6 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
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/frame/Frame.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/DocumentTest.cpp
diff --git a/Source/core/dom/DocumentMarkerControllerTest.cpp b/Source/core/dom/DocumentTest.cpp
similarity index 28%
copy from Source/core/dom/DocumentMarkerControllerTest.cpp
copy to Source/core/dom/DocumentTest.cpp
index f7132ed5527868f0cc41ea56f18cc002c859ace1..99fac54a39d7b23a8bee7c8cd33f4606967deff6 100644
--- a/Source/core/dom/DocumentMarkerControllerTest.cpp
+++ b/Source/core/dom/DocumentTest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Google Inc. All rights reserved.
+ * Copyright (c) 2014, Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,153 +29,94 @@
*/
#include "config.h"
-#include "core/dom/DocumentMarkerController.h"
-
-#include "bindings/v8/ExceptionStatePlaceholder.h"
#include "core/dom/Document.h"
-#include "core/dom/Range.h"
-#include "core/dom/Text.h"
-#include "core/html/HTMLElement.h"
+
#include "core/testing/DummyPageHolder.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/RefPtr.h"
-#include "wtf/testing/WTFTestHelpers.h"
+#include <gmock/gmock.h>
#include <gtest/gtest.h>
using namespace WebCore;
namespace {
-class DocumentMarkerControllerTest : public ::testing::Test {
+class DocumentTest : public ::testing::Test {
protected:
virtual void SetUp() OVERRIDE;
- Document& document() const { return *m_document; }
- DocumentMarkerController& markerController() const { return *m_document->markers(); }
-
- PassRefPtr<Text> createTextNode(const char*);
- void markNodeContents(PassRefPtr<Node>);
- void setBodyInnerHTML(const char*);
+ Document& document() const { return m_dummyPageHolder->document(); }
+ Page& page() const { return m_dummyPageHolder->page(); }
private:
OwnPtr<DummyPageHolder> m_dummyPageHolder;
- Document* m_document;
};
-void DocumentMarkerControllerTest::SetUp()
+void DocumentTest::SetUp()
{
m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
- m_document = &m_dummyPageHolder->document();
- ASSERT(m_document);
-}
-
-PassRefPtr<Text> DocumentMarkerControllerTest::createTextNode(const char* textContents)
-{
- return document().createTextNode(String::fromUTF8(textContents));
-}
-
-void DocumentMarkerControllerTest::markNodeContents(PassRefPtr<Node> node)
-{
- // Force renderers to be created; TextIterator, which is used in
- // DocumentMarkerControllerTest::addMarker(), needs them.
- document().updateLayout();
- RefPtr<Range> range = rangeOfContents(node.get());
- markerController().addMarker(range.get(), DocumentMarker::Spelling);
-}
-
-void DocumentMarkerControllerTest::setBodyInnerHTML(const char* bodyContent)
-{
- document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION);
-}
-
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByNormalize)
-{
- setBodyInnerHTML("<b><i>foo</i></b>");
- {
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- parent->appendChild(createTextNode("bar").get());
- markNodeContents(parent.get());
- EXPECT_EQ(2u, markerController().markers().size());
- parent->normalize();
- }
- // No more reference to marked node.
- EXPECT_EQ(1u, markerController().markers().size());
-}
-
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByRemoveChildren)
-{
- setBodyInnerHTML("<b><i>foo</i></b>");
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- markNodeContents(parent.get());
- EXPECT_EQ(1u, markerController().markers().size());
- parent->removeChildren();
- // No more reference to marked node.
- EXPECT_EQ(0u, markerController().markers().size());
}
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedByRemoveMarked)
-{
- setBodyInnerHTML("<b><i>foo</i></b>");
- {
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- markNodeContents(parent);
- EXPECT_EQ(1u, markerController().markers().size());
- parent->removeChild(parent->firstChild());
- }
- // No more reference to marked node.
- EXPECT_EQ(0u, markerController().markers().size());
-}
+class MockDocumentVisibilityObserver : public DocumentVisibilityObserver {
+public:
+ MockDocumentVisibilityObserver(Document& document) : DocumentVisibilityObserver(document) { }
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByRemoveAncestor)
-{
- setBodyInnerHTML("<b><i>foo</i></b>");
- {
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- markNodeContents(parent);
- EXPECT_EQ(1u, markerController().markers().size());
- parent->parentNode()->parentNode()->removeChild(parent->parentNode());
- }
- // No more reference to marked node.
- EXPECT_EQ(0u, markerController().markers().size());
-}
+ MOCK_METHOD1(didChangeVisibilityState, void(PageVisibilityState));
+};
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByRemoveParent)
+TEST_F(DocumentTest, VisibilityOberver)
{
- setBodyInnerHTML("<b><i>foo</i></b>");
- {
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- markNodeContents(parent);
- EXPECT_EQ(1u, markerController().markers().size());
- parent->parentNode()->removeChild(parent.get());
- }
- // No more reference to marked node.
- EXPECT_EQ(0u, markerController().markers().size());
-}
+ page().setVisibilityState(PageVisibilityStateVisible, true); // initial state
+ MockDocumentVisibilityObserver observer1(document());
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedMarkedByReplaceChild)
-{
- setBodyInnerHTML("<b><i>foo</i></b>");
{
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- markNodeContents(parent.get());
- EXPECT_EQ(1u, markerController().markers().size());
- parent->replaceChild(createTextNode("bar").get(), parent->firstChild());
+ MockDocumentVisibilityObserver observer2(document());
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ ::testing::Mock::VerifyAndClearExpectations(&observer1);
+ ::testing::Mock::VerifyAndClearExpectations(&observer2);
+
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ page().setVisibilityState(PageVisibilityStateHidden, false);
+ ::testing::Mock::VerifyAndClearExpectations(&observer1);
+ ::testing::Mock::VerifyAndClearExpectations(&observer2);
+
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ page().setVisibilityState(PageVisibilityStateHidden, false);
+ ::testing::Mock::VerifyAndClearExpectations(&observer1);
+ ::testing::Mock::VerifyAndClearExpectations(&observer2);
+
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(1);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ OwnPtr<DummyPageHolder> alternatePage = DummyPageHolder::create(IntSize(800, 600));
+ Document& alternateDocument = alternatePage->document();
+ observer2.setObservedDocument(alternateDocument);
+ page().setVisibilityState(PageVisibilityStateVisible, false);
+ ::testing::Mock::VerifyAndClearExpectations(&observer1);
+ ::testing::Mock::VerifyAndClearExpectations(&observer2);
+
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateHidden)).Times(1);
+ EXPECT_CALL(observer2, didChangeVisibilityState(PageVisibilityStateVisible)).Times(0);
+ observer2.setObservedDocument(document());
+ page().setVisibilityState(PageVisibilityStateHidden, false);
+ ::testing::Mock::VerifyAndClearExpectations(&observer1);
+ ::testing::Mock::VerifyAndClearExpectations(&observer2);
}
- // No more reference to marked node.
- EXPECT_EQ(0u, markerController().markers().size());
-}
-TEST_F(DocumentMarkerControllerTest, NodeWillBeRemovedBySetInnerHTML)
-{
- setBodyInnerHTML("<b><i>foo</i></b>");
- {
- RefPtr<Element> parent = toElement(document().body()->firstChild()->firstChild());
- markNodeContents(parent);
- EXPECT_EQ(1u, markerController().markers().size());
- setBodyInnerHTML("");
- }
- // No more reference to marked node.
- EXPECT_EQ(0u, markerController().markers().size());
+ // observer2 destroyed
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateHidden)).Times(0);
+ EXPECT_CALL(observer1, didChangeVisibilityState(PageVisibilityStateVisible)).Times(1);
+ page().setVisibilityState(PageVisibilityStateVisible, false);
}
-}
+} // unnamed namespace
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/frame/Frame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698