1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "config.h" 6 #include "core/dom/Element.h" 7 #include "core/frame/FrameView.h" 8 #include "core/html/HTMLDocument.h" 9 #include "core/html/HTMLElement.h" 10 #include "core/testing/DummyPageHolder.h" 11 #include <gtest/gtest.h> 12 13 using namespace WebCore; 14 15 namespace { 16 17 TEST(DragUpdateTest, AffectedByDragUpdate) 18 { 19 // Check that when dragging the div in the document below, you only get a 20 // single element style recalc. 21 22 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); 23 HTMLDocument* document = toHTMLDocument(&dummyPageHolder->document()); 24 document->documentElement()->setInnerHTML("<style>div {width:100px;height:100px} div:-webkit-drag { background-color: green }</style>" 25 "<div>" 26 "<span></span>" 27 "<span></span>" 28 "<span></span>" 29 "<span></span>" 30 "</div>", ASSERT_NO_EXCEPTION); 31 32 document->view()->updateLayoutAndStyleIfNeededRecursive(); 33 unsigned startCount = document->styleEngine()->resolverAccessCount(); 34 35 document->documentElement()->renderer()->updateDragState(true); 36 document->view()->updateLayoutAndStyleIfNeededRecursive(); 37 38 unsigned accessCount = document->styleEngine()->resolverAccessCount() - startCount; 39 40 ASSERT_EQ(1U, accessCount); 41 } 42 43 TEST(DragUpdateTest, ChildrenOrSiblingsAffectedByDragUpdate) 44 { 45 // Check that when dragging the div in the document below, you get a 46 // full subtree style recalc. 47 48 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); 49 HTMLDocument* document = toHTMLDocument(&dummyPageHolder->document()); 50 document->documentElement()->setInnerHTML("<style>div {width:100px;height:100px} div:-webkit-drag span { background-color: green }</style>" 51 "<div>" 52 "<span></span>" 53 "<span></span>" 54 "<span></span>" 55 "<span></span>" 56 "</div>", ASSERT_NO_EXCEPTION); 57 58 document->updateLayout(); 59 unsigned startCount = document->styleEngine()->resolverAccessCount(); 60 61 document->documentElement()->renderer()->updateDragState(true); 62 document->updateLayout(); 63 64 unsigned accessCount = document->styleEngine()->resolverAccessCount() - startCount; 65 66 ASSERT_EQ(5U, accessCount); 67 } 68 69 } // namespace 70