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
7#include "public/web/WebDocument.h"
8
9#include "core/CSSPropertyNames.h"
10#include "core/dom/Document.h"
11#include "core/dom/NodeRenderStyle.h"
12#include "core/frame/LocalFrame.h"
13#include "core/html/HTMLElement.h"
14#include "core/rendering/style/RenderStyle.h"
15#include "platform/graphics/Color.h"
16#include "web/tests/FrameTestHelpers.h"
17
18#include <gtest/gtest.h>
19
20using WebCore::Color;
21using WebCore::Document;
22using WebCore::HTMLElement;
23using WebCore::RenderStyle;
24using blink::FrameTestHelpers::WebViewHelper;
25using blink::WebDocument;
26
27namespace {
28
29TEST(WebDocumentTest, InsertStyleSheet)
30{
31    WebViewHelper webViewHelper;
32    webViewHelper.initializeAndLoad("about:blank");
33
34    WebDocument webDoc = webViewHelper.webView()->mainFrame()->document();
35    Document* coreDoc = toLocalFrame(webViewHelper.webViewImpl()->page()->mainFrame())->document();
36
37    webDoc.insertStyleSheet("body { color: green }");
38
39    // Check insertStyleSheet did not cause a synchronous style recalc.
40    unsigned accessCount = coreDoc->styleEngine()->resolverAccessCount();
41    ASSERT_EQ(0U, accessCount);
42
43    HTMLElement* bodyElement = coreDoc->body();
44    ASSERT(bodyElement);
45
46    RenderStyle* style = bodyElement->renderStyle();
47    ASSERT(style);
48
49    // Inserted stylesheet not yet applied.
50    ASSERT_EQ(Color(0, 0, 0), style->visitedDependentColor(WebCore::CSSPropertyColor));
51
52    // Apply inserted stylesheet.
53    coreDoc->updateRenderTreeIfNeeded();
54
55    style = bodyElement->renderStyle();
56    ASSERT(style);
57
58    // Inserted stylesheet applied.
59    ASSERT_EQ(Color(0, 128, 0), style->visitedDependentColor(WebCore::CSSPropertyColor));
60}
61
62}
63