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/NodeRenderStyle.h"
     11 #include "core/dom/StyleEngine.h"
     12 #include "core/frame/LocalFrame.h"
     13 #include "core/html/HTMLElement.h"
     14 #include "core/page/Page.h"
     15 #include "core/rendering/style/RenderStyle.h"
     16 #include "core/testing/URLTestHelpers.h"
     17 #include "platform/graphics/Color.h"
     18 #include "web/tests/FrameTestHelpers.h"
     19 #include <gtest/gtest.h>
     20 
     21 namespace {
     22 
     23 using blink::FrameTestHelpers::WebViewHelper;
     24 using blink::URLTestHelpers::toKURL;
     25 using namespace blink;
     26 
     27 TEST(WebDocumentTest, InsertStyleSheet)
     28 {
     29     WebViewHelper webViewHelper;
     30     webViewHelper.initializeAndLoad("about:blank");
     31 
     32     WebDocument webDoc = webViewHelper.webView()->mainFrame()->document();
     33     Document* coreDoc = toLocalFrame(webViewHelper.webViewImpl()->page()->mainFrame())->document();
     34 
     35     webDoc.insertStyleSheet("body { color: green }");
     36 
     37     // Check insertStyleSheet did not cause a synchronous style recalc.
     38     unsigned accessCount = coreDoc->styleEngine()->resolverAccessCount();
     39     ASSERT_EQ(0U, accessCount);
     40 
     41     HTMLElement* bodyElement = coreDoc->body();
     42     ASSERT(bodyElement);
     43 
     44     RenderStyle* style = bodyElement->renderStyle();
     45     ASSERT(style);
     46 
     47     // Inserted stylesheet not yet applied.
     48     ASSERT_EQ(Color(0, 0, 0), style->visitedDependentColor(CSSPropertyColor));
     49 
     50     // Apply inserted stylesheet.
     51     coreDoc->updateRenderTreeIfNeeded();
     52 
     53     style = bodyElement->renderStyle();
     54     ASSERT(style);
     55 
     56     // Inserted stylesheet applied.
     57     ASSERT_EQ(Color(0, 128, 0), style->visitedDependentColor(CSSPropertyColor));
     58 }
     59 
     60 TEST(WebDocumentTest, BeginExitTransition)
     61 {
     62     std::string baseURL = "http://www.test.com:0/";
     63     const char* htmlURL = "transition_exit.html";
     64     const char* cssURL = "transition_exit.css";
     65     URLTestHelpers::registerMockedURLLoad(toKURL(baseURL + htmlURL), WebString::fromUTF8(htmlURL));
     66     URLTestHelpers::registerMockedURLLoad(toKURL(baseURL + cssURL), WebString::fromUTF8(cssURL));
     67 
     68     WebViewHelper webViewHelper;
     69     webViewHelper.initializeAndLoad(baseURL + htmlURL);
     70 
     71     WebFrame* frame = webViewHelper.webView()->mainFrame();
     72     Document* coreDoc = toLocalFrame(webViewHelper.webViewImpl()->page()->mainFrame())->document();
     73     Element* transitionElement = coreDoc->getElementById("foo");
     74     ASSERT(transitionElement);
     75 
     76     RenderStyle* transitionStyle = transitionElement->renderStyle();
     77     ASSERT(transitionStyle);
     78 
     79     HTMLElement* bodyElement = coreDoc->body();
     80     ASSERT(bodyElement);
     81 
     82     RenderStyle* bodyStyle = bodyElement->renderStyle();
     83     ASSERT(bodyStyle);
     84     // The transition_exit.css stylesheet should not have been applied at this point.
     85     ASSERT_EQ(Color(0, 0, 0), bodyStyle->visitedDependentColor(CSSPropertyColor));
     86 
     87     frame->document().beginExitTransition("#foo");
     88 
     89     // Make sure the stylesheet load request gets processed.
     90     FrameTestHelpers::pumpPendingRequestsDoNotUse(frame);
     91     coreDoc->updateRenderTreeIfNeeded();
     92 
     93     // The element should now be hidden.
     94     transitionStyle = transitionElement->renderStyle();
     95     ASSERT_TRUE(transitionStyle);
     96     ASSERT_EQ(transitionStyle->opacity(), 0);
     97 
     98     // The stylesheet should now have been applied.
     99     bodyStyle = bodyElement->renderStyle();
    100     ASSERT(bodyStyle);
    101     ASSERT_EQ(Color(0, 128, 0), bodyStyle->visitedDependentColor(CSSPropertyColor));
    102 }
    103 
    104 }
    105