Home | History | Annotate | Download | only in css
      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