Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / DragUpdateTest.cpp
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, ChildrenAffectedByDragUpdate)
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