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