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