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 20 using WebCore::Color; 21 using WebCore::Document; 22 using WebCore::HTMLElement; 23 using WebCore::RenderStyle; 24 using blink::FrameTestHelpers::WebViewHelper; 25 using blink::WebDocument; 26 27 namespace { 28 29 TEST(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