| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/layout/LayoutView.h" |
| #include "core/paint/PaintLayerScrollableArea.h" |
| #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" |
| #include "platform/testing/UnitTestHelpers.h" |
| #include "public/web/WebScriptSource.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "web/WebLocalFrameImpl.h" |
| #include "web/tests/sim/SimDisplayItemList.h" |
| #include "web/tests/sim/SimRequest.h" |
| #include "web/tests/sim/SimTest.h" |
| |
| namespace blink { |
| |
| namespace { |
| |
| class ScrollbarsTest : private ScopedRootLayerScrollingForTest, public SimTest { |
| public: |
| ScrollbarsTest() : ScopedRootLayerScrollingForTest(true) {} |
| }; |
| |
| TEST_F(ScrollbarsTest, DocumentStyleRecalcPreservesScrollbars) { |
| v8::HandleScope handleScope(v8::Isolate::GetCurrent()); |
| webView().resize(WebSize(800, 600)); |
| SimRequest request("https://example.com/test.html", "text/html"); |
| loadURL("https://example.com/test.html"); |
| request.complete("<style> body { width: 1600px; height: 1200px; } </style>"); |
| PaintLayerScrollableArea* plsa = document().layoutView()->getScrollableArea(); |
| |
| compositor().beginFrame(); |
| ASSERT_TRUE(plsa->verticalScrollbar() && plsa->horizontalScrollbar()); |
| |
| // Forces recalc of LayoutView's computed style in Document::updateStyle, |
| // without invalidating layout. |
| mainFrame().executeScriptAndReturnValue(WebScriptSource( |
| "document.querySelector('style').sheet.insertRule('body {}', 1);")); |
| |
| compositor().beginFrame(); |
| ASSERT_TRUE(plsa->verticalScrollbar() && plsa->horizontalScrollbar()); |
| } |
| |
| } // namespace |
| |
| } // namespace blink |