| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| 11 * documentation and/or other materials provided with the distribution. | 11 * documentation and/or other materials provided with the distribution. |
| 12 * | 12 * |
| 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y | 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y |
| 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y | 16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y |
| 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N | 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N |
| 20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 23 */ | 23 */ |
| 24 | 24 |
| 25 #include "core/page/scrolling/ScrollingCoordinator.h" | 25 #include "core/page/scrolling/ScrollingCoordinator.h" |
| 26 | 26 |
| 27 #include "core/css/CSSStyleSheet.h" |
| 28 #include "core/css/StyleSheetList.h" |
| 27 #include "core/frame/FrameView.h" | 29 #include "core/frame/FrameView.h" |
| 28 #include "core/layout/LayoutPart.h" | 30 #include "core/layout/LayoutPart.h" |
| 29 #include "core/layout/api/LayoutViewItem.h" | 31 #include "core/layout/api/LayoutViewItem.h" |
| 30 #include "core/layout/compositing/CompositedLayerMapping.h" | 32 #include "core/layout/compositing/CompositedLayerMapping.h" |
| 31 #include "core/layout/compositing/PaintLayerCompositor.h" | 33 #include "core/layout/compositing/PaintLayerCompositor.h" |
| 32 #include "core/page/Page.h" | 34 #include "core/page/Page.h" |
| 33 #include "platform/graphics/GraphicsLayer.h" | 35 #include "platform/graphics/GraphicsLayer.h" |
| 34 #include "platform/testing/URLTestHelpers.h" | 36 #include "platform/testing/URLTestHelpers.h" |
| 35 #include "public/platform/Platform.h" | 37 #include "public/platform/Platform.h" |
| 36 #include "public/platform/WebLayer.h" | 38 #include "public/platform/WebLayer.h" |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 EXPECT_TRUE(static_cast<LayoutBoxModelObject*>(fixedPos->layoutObject())->la
yer()->hasCompositedLayerMapping()); | 630 EXPECT_TRUE(static_cast<LayoutBoxModelObject*>(fixedPos->layoutObject())->la
yer()->hasCompositedLayerMapping()); |
| 629 EXPECT_FALSE(scrollLayer->shouldScrollOnMainThread()); | 631 EXPECT_FALSE(scrollLayer->shouldScrollOnMainThread()); |
| 630 | 632 |
| 631 fixedPos->setInlineStyleProperty(CSSPropertyTransform, CSSValueNone); | 633 fixedPos->setInlineStyleProperty(CSSPropertyTransform, CSSValueNone); |
| 632 forceFullCompositingUpdate(); | 634 forceFullCompositingUpdate(); |
| 633 | 635 |
| 634 EXPECT_FALSE(static_cast<LayoutBoxModelObject*>(fixedPos->layoutObject())->l
ayer()->hasCompositedLayerMapping()); | 636 EXPECT_FALSE(static_cast<LayoutBoxModelObject*>(fixedPos->layoutObject())->l
ayer()->hasCompositedLayerMapping()); |
| 635 EXPECT_TRUE(scrollLayer->shouldScrollOnMainThread()); | 637 EXPECT_TRUE(scrollLayer->shouldScrollOnMainThread()); |
| 636 } | 638 } |
| 637 | 639 |
| 640 TEST_F(ScrollingCoordinatorTest, CustomScrollbarShouldTriggerMainThreadScroll) |
| 641 { |
| 642 webViewImpl()->settings()->setPreferCompositingToLCDTextEnabled(true); |
| 643 webViewImpl()->setDeviceScaleFactor(2.f); |
| 644 registerMockedHttpURLLoad("custom_scrollbar.html"); |
| 645 navigateTo(m_baseURL + "custom_scrollbar.html"); |
| 646 forceFullCompositingUpdate(); |
| 647 |
| 648 Document* document = frame()->document(); |
| 649 Element* container = document->getElementById("container"); |
| 650 Element* content = document->getElementById("content"); |
| 651 DCHECK_EQ(container->getAttribute(HTMLNames::classAttr), "custom_scrollbar")
; |
| 652 DCHECK(container); |
| 653 DCHECK(content); |
| 654 |
| 655 LayoutObject* layoutObject = container->layoutObject(); |
| 656 ASSERT_TRUE(layoutObject->isBox()); |
| 657 LayoutBox* box = toLayoutBox(layoutObject); |
| 658 ASSERT_TRUE(box->usesCompositedScrolling()); |
| 659 CompositedLayerMapping* compositedLayerMapping = box->layer()->compositedLay
erMapping(); |
| 660 GraphicsLayer* scrollbarGraphicsLayer = compositedLayerMapping->layerForVert
icalScrollbar(); |
| 661 ASSERT_TRUE(scrollbarGraphicsLayer); |
| 662 ASSERT_TRUE(scrollbarGraphicsLayer->platformLayer()->shouldScrollOnMainThrea
d()); |
| 663 ASSERT_TRUE(scrollbarGraphicsLayer->platformLayer()->mainThreadScrollingReas
ons() & MainThreadScrollingReason::kCustomScrollbarScrolling); |
| 664 |
| 665 // remove custom scrollbar class, the scrollbar is expected to scroll on |
| 666 // impl thread as it is an overlay scrollbar. |
| 667 container->removeAttribute("class"); |
| 668 forceFullCompositingUpdate(); |
| 669 scrollbarGraphicsLayer = compositedLayerMapping->layerForVerticalScrollbar()
; |
| 670 ASSERT_FALSE(scrollbarGraphicsLayer->platformLayer()->shouldScrollOnMainThre
ad()); |
| 671 ASSERT_FALSE(scrollbarGraphicsLayer->platformLayer()->mainThreadScrollingRea
sons() & MainThreadScrollingReason::kCustomScrollbarScrolling); |
| 672 } |
| 673 |
| 638 } // namespace blink | 674 } // namespace blink |
| OLD | NEW |