Title: [226008] trunk
Revision
226008
Author
m...@apple.com
Date
2017-12-16 12:57:11 -0800 (Sat, 16 Dec 2017)

Log Message

WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
https://bugs.webkit.org/show_bug.cgi?id=180613
<rdar://problem/35946124>

Reviewed by Geoff Garen.

Source/WebCore:

Test: TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm

* platform/ScrollView.h: Exported setScrollbarModes.

Source/WebKit:

Added _alwaysShowsHorizontalScroller and _alwaysShowsVerticalScroller properties to
WKWebView.

* Shared/WebPageCreationParameters.cpp:
(WebKit::WebPageCreationParameters::encode const): Encode new alwaysShowsHorizontalScroller
  and alwaysShowsVerticalScroller parameters.
(WebKit::WebPageCreationParameters::decode): Decode new parameters.

* Shared/WebPageCreationParameters.h: Added new alwaysShowsHorizontalScroller and
  alwaysShowsVerticalScroller boolean parameters.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _alwaysShowsHorizontalScroller]): New accessor that calls through to the
  WebPageProxy.
(-[WKWebView _setAlwaysShowsHorizontalScroller:]): Ditto.
(-[WKWebView _alwaysShowsVerticalScroller]): Ditto.
(-[WKWebView _setAlwaysShowsVerticalScroller:]): Ditto.

* UIProcess/API/Cocoa/WKWebViewPrivate.h: Declare new properties.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::setAlwaysShowsHorizontalScroller): Update member variable and send
  a message to the page.
(WebKit::WebPageProxy::setAlwaysShowsVerticalScroller): Ditto.
(WebKit::WebPageProxy::creationParameters): Initialize new parameters from the new member
  variables.

* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::alwaysShowsHorizontalScroller const): New getter.
(WebKit::WebPageProxy::alwaysShowsVerticalScroller const): Ditto.

* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Factor
  alwaysShowsHorizontalScroller and alwaysShowsVerticalScroller into the initial scroller
  modes and scroller locks when creating the FrameView.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::WebPage): Initialize new m_alwaysShowsHorizontalScroller and
  m_alwaysShowsVerticalScroller member variables from the corresponding new creation
  parameters.
(WebKit::WebPage::setAlwaysShowsHorizontalScroller): Update the member variable and set
  new scrollbar mode on the frame view if needed.
(WebKit::WebPage::setAlwaysShowsVerticalScroller): Ditto.

* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::alwaysShowsHorizontalScroller const): New getter.
(WebKit::WebPage::alwaysShowsVerticalScroller const): Ditto.

* WebProcess/WebPage/WebPage.messages.in: Added new messages.

Source/WebKitLegacy/mac:

* WebKit.mac.exp: Removed WebCoreScrollbarAlwaysOn, which is no longer being used by any
  clients.
* WebView/WebDynamicScrollBarsView.h: Ditto.
* WebView/WebDynamicScrollBarsView.mm: Ditto.

Tools:

* MiniBrowser/mac/MainMenu.xib: Added Always Show {Horizontal,Vertical} Scroller menu items
  to the View menu.

* MiniBrowser/mac/WK1BrowserWindowController.m:
(-[WK1BrowserWindowController validateMenuItem:]): Set the state of the new menu items based
  on -alwaysShow{Horizontal,Vertical}Scroller.
(-[WK1BrowserWindowController toggleAlwaysShowsHorizontalScroller:]): Toggle the value.
(-[WK1BrowserWindowController toggleAlwaysShowsVerticalScroller:]): Ditto.

* MiniBrowser/mac/WK2BrowserWindowController.m:
(-[WK2BrowserWindowController validateMenuItem:]): Set the state of the new menu items based
  on the new property.
(-[WK2BrowserWindowController toggleAlwaysShowsHorizontalScroller:]): Toggle the property.
(-[WK2BrowserWindowController toggleAlwaysShowsVerticalScroller:]): Ditto.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm: Added.
(TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (226007 => 226008)


--- trunk/Source/WebCore/ChangeLog	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebCore/ChangeLog	2017-12-16 20:57:11 UTC (rev 226008)
@@ -1,3 +1,15 @@
+2017-12-16  Dan Bernstein  <m...@apple.com>
+
+        WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
+        https://bugs.webkit.org/show_bug.cgi?id=180613
+        <rdar://problem/35946124>
+
+        Reviewed by Geoff Garen.
+
+        Test: TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm
+
+        * platform/ScrollView.h: Exported setScrollbarModes.
+
 2017-12-16  Antti Koivisto  <an...@apple.com>
 
         Introduce RenderTreeBuilder

Modified: trunk/Source/WebCore/platform/ScrollView.h (226007 => 226008)


--- trunk/Source/WebCore/platform/ScrollView.h	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebCore/platform/ScrollView.h	2017-12-16 20:57:11 UTC (rev 226008)
@@ -103,7 +103,7 @@
     // Auto means show a scrollbar only when one is needed.
     // Note that for platforms with native widgets, these modes are considered advisory. In other words the underlying native
     // widget may choose not to honor the requested modes.
-    void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, bool horizontalLock = false, bool verticalLock = false);
+    WEBCORE_EXPORT void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, bool horizontalLock = false, bool verticalLock = false);
     void setHorizontalScrollbarMode(ScrollbarMode mode, bool lock = false) { setScrollbarModes(mode, verticalScrollbarMode(), lock, verticalScrollbarLock()); }
     void setVerticalScrollbarMode(ScrollbarMode mode, bool lock = false) { setScrollbarModes(horizontalScrollbarMode(), mode, horizontalScrollbarLock(), lock); };
     WEBCORE_EXPORT void scrollbarModes(ScrollbarMode& horizontalMode, ScrollbarMode& verticalMode) const;

Modified: trunk/Source/WebKit/ChangeLog (226007 => 226008)


--- trunk/Source/WebKit/ChangeLog	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/ChangeLog	2017-12-16 20:57:11 UTC (rev 226008)
@@ -1,3 +1,61 @@
+2017-12-16  Dan Bernstein  <m...@apple.com>
+
+        WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
+        https://bugs.webkit.org/show_bug.cgi?id=180613
+        <rdar://problem/35946124>
+
+        Reviewed by Geoff Garen.
+
+        Added _alwaysShowsHorizontalScroller and _alwaysShowsVerticalScroller properties to
+        WKWebView.
+
+        * Shared/WebPageCreationParameters.cpp:
+        (WebKit::WebPageCreationParameters::encode const): Encode new alwaysShowsHorizontalScroller
+          and alwaysShowsVerticalScroller parameters.
+        (WebKit::WebPageCreationParameters::decode): Decode new parameters.
+
+        * Shared/WebPageCreationParameters.h: Added new alwaysShowsHorizontalScroller and
+          alwaysShowsVerticalScroller boolean parameters.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _alwaysShowsHorizontalScroller]): New accessor that calls through to the
+          WebPageProxy.
+        (-[WKWebView _setAlwaysShowsHorizontalScroller:]): Ditto.
+        (-[WKWebView _alwaysShowsVerticalScroller]): Ditto.
+        (-[WKWebView _setAlwaysShowsVerticalScroller:]): Ditto.
+
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declare new properties.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::setAlwaysShowsHorizontalScroller): Update member variable and send
+          a message to the page.
+        (WebKit::WebPageProxy::setAlwaysShowsVerticalScroller): Ditto.
+        (WebKit::WebPageProxy::creationParameters): Initialize new parameters from the new member
+          variables.
+
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::alwaysShowsHorizontalScroller const): New getter.
+        (WebKit::WebPageProxy::alwaysShowsVerticalScroller const): Ditto.
+
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Factor
+          alwaysShowsHorizontalScroller and alwaysShowsVerticalScroller into the initial scroller
+          modes and scroller locks when creating the FrameView.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::WebPage): Initialize new m_alwaysShowsHorizontalScroller and
+          m_alwaysShowsVerticalScroller member variables from the corresponding new creation
+          parameters.
+        (WebKit::WebPage::setAlwaysShowsHorizontalScroller): Update the member variable and set
+          new scrollbar mode on the frame view if needed.
+        (WebKit::WebPage::setAlwaysShowsVerticalScroller): Ditto.
+
+        * WebProcess/WebPage/WebPage.h:
+        (WebKit::WebPage::alwaysShowsHorizontalScroller const): New getter.
+        (WebKit::WebPage::alwaysShowsVerticalScroller const): Ditto.
+
+        * WebProcess/WebPage/WebPage.messages.in: Added new messages.
+
 2017-12-16  Brady Eidson  <beid...@apple.com>
 
         Implement getting ServiceWorker registrations for the WKWebsiteDataStore API

Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp (226007 => 226008)


--- trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp	2017-12-16 20:57:11 UTC (rev 226008)
@@ -43,6 +43,8 @@
     encoder << underlayColor;
     encoder << useFixedLayout;
     encoder << fixedLayoutSize;
+    encoder << alwaysShowsHorizontalScroller;
+    encoder << alwaysShowsVerticalScroller;
     encoder.encodeEnum(paginationMode);
     encoder << paginationBehavesLikeColumns;
     encoder << pageLength;
@@ -136,6 +138,10 @@
         return std::nullopt;
     if (!decoder.decode(parameters.fixedLayoutSize))
         return std::nullopt;
+    if (!decoder.decode(parameters.alwaysShowsHorizontalScroller))
+        return std::nullopt;
+    if (!decoder.decode(parameters.alwaysShowsVerticalScroller))
+        return std::nullopt;
     if (!decoder.decodeEnum(parameters.paginationMode))
         return std::nullopt;
     if (!decoder.decode(parameters.paginationBehavesLikeColumns))

Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (226007 => 226008)


--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h	2017-12-16 20:57:11 UTC (rev 226008)
@@ -81,6 +81,9 @@
     bool useFixedLayout;
     WebCore::IntSize fixedLayoutSize;
 
+    bool alwaysShowsHorizontalScroller;
+    bool alwaysShowsVerticalScroller;
+
     bool suppressScrollbarAnimations;
 
     WebCore::Pagination::Mode paginationMode;

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (226007 => 226008)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2017-12-16 20:57:11 UTC (rev 226008)
@@ -5518,6 +5518,26 @@
     return _impl->setShouldExpandToViewHeightForAutoLayout(shouldExpand);
 }
 
+- (BOOL)_alwaysShowsHorizontalScroller
+{
+    return _page->alwaysShowsHorizontalScroller();
+}
+
+- (void)_setAlwaysShowsHorizontalScroller:(BOOL)alwaysShowsHorizontalScroller
+{
+    _page->setAlwaysShowsHorizontalScroller(alwaysShowsHorizontalScroller);
+}
+
+- (BOOL)_alwaysShowsVerticalScroller
+{
+    return _page->alwaysShowsVerticalScroller();
+}
+
+- (void)_setAlwaysShowsVerticalScroller:(BOOL)alwaysShowsVerticalScroller
+{
+    _page->setAlwaysShowsVerticalScroller(alwaysShowsVerticalScroller);
+}
+
 - (NSPrintOperation *)_printOperationWithPrintInfo:(NSPrintInfo *)printInfo
 {
     if (auto webFrameProxy = _page->mainFrame())

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (226007 => 226008)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2017-12-16 20:57:11 UTC (rev 226008)
@@ -280,6 +280,9 @@
 // of the content; use this property to force it to lay out to the height of the view instead.
 @property (nonatomic, setter=_setShouldExpandContentToViewHeightForAutoLayout:) BOOL _shouldExpandContentToViewHeightForAutoLayout WK_API_AVAILABLE(macosx(10.12));
 
+@property (nonatomic, setter=_setAlwaysShowsHorizontalScroller:) BOOL _alwaysShowsHorizontalScroller WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+@property (nonatomic, setter=_setAlwaysShowsVerticalScroller:) BOOL _alwaysShowsVerticalScroller WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+
 - (NSPrintOperation *)_printOperationWithPrintInfo:(NSPrintInfo *)printInfo;
 - (NSPrintOperation *)_printOperationWithPrintInfo:(NSPrintInfo *)printInfo forFrame:(_WKFrameHandle *)frameHandle WK_API_AVAILABLE(macosx(10.12), ios(10.0));
 

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (226007 => 226008)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-12-16 20:57:11 UTC (rev 226008)
@@ -2652,6 +2652,30 @@
     m_process->send(Messages::WebPage::SetFixedLayoutSize(size), m_pageID);
 }
 
+void WebPageProxy::setAlwaysShowsHorizontalScroller(bool alwaysShowsHorizontalScroller)
+{
+    if (!isValid())
+        return;
+
+    if (alwaysShowsHorizontalScroller == m_alwaysShowsHorizontalScroller)
+        return;
+
+    m_alwaysShowsHorizontalScroller = alwaysShowsHorizontalScroller;
+    m_process->send(Messages::WebPage::SetAlwaysShowsHorizontalScroller(alwaysShowsHorizontalScroller), m_pageID);
+}
+
+void WebPageProxy::setAlwaysShowsVerticalScroller(bool alwaysShowsVerticalScroller)
+{
+    if (!isValid())
+        return;
+
+    if (alwaysShowsVerticalScroller == m_alwaysShowsVerticalScroller)
+        return;
+
+    m_alwaysShowsVerticalScroller = alwaysShowsVerticalScroller;
+    m_process->send(Messages::WebPage::SetAlwaysShowsVerticalScroller(alwaysShowsVerticalScroller), m_pageID);
+}
+
 void WebPageProxy::listenForLayoutMilestones(WebCore::LayoutMilestones milestones)
 {
     if (!isValid())
@@ -5745,6 +5769,8 @@
     parameters.underlayColor = m_underlayColor;
     parameters.useFixedLayout = m_useFixedLayout;
     parameters.fixedLayoutSize = m_fixedLayoutSize;
+    parameters.alwaysShowsHorizontalScroller = m_alwaysShowsHorizontalScroller;
+    parameters.alwaysShowsVerticalScroller = m_alwaysShowsVerticalScroller;
     parameters.suppressScrollbarAnimations = m_suppressScrollbarAnimations;
     parameters.paginationMode = m_paginationMode;
     parameters.paginationBehavesLikeColumns = m_paginationBehavesLikeColumns;

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (226007 => 226008)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-12-16 20:57:11 UTC (rev 226008)
@@ -732,6 +732,11 @@
     bool useFixedLayout() const { return m_useFixedLayout; };
     const WebCore::IntSize& fixedLayoutSize() const { return m_fixedLayoutSize; };
 
+    void setAlwaysShowsHorizontalScroller(bool);
+    void setAlwaysShowsVerticalScroller(bool);
+    bool alwaysShowsHorizontalScroller() const { return m_alwaysShowsHorizontalScroller; }
+    bool alwaysShowsVerticalScroller() const { return m_alwaysShowsVerticalScroller; }
+
     void listenForLayoutMilestones(WebCore::LayoutMilestones);
 
     bool hasHorizontalScrollbar() const { return m_mainFrameHasHorizontalScrollbar; }
@@ -1834,6 +1839,9 @@
     bool m_useFixedLayout { false };
     WebCore::IntSize m_fixedLayoutSize;
 
+    bool m_alwaysShowsHorizontalScroller { false };
+    bool m_alwaysShowsVerticalScroller { false };
+
     WebCore::LayoutMilestones m_observedLayoutMilestones { 0 };
 
     bool m_suppressScrollbarAnimations { false };

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (226007 => 226008)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2017-12-16 20:57:11 UTC (rev 226008)
@@ -1385,9 +1385,15 @@
 
     ScrollbarMode defaultScrollbarMode = shouldHideScrollbars ? ScrollbarAlwaysOff : ScrollbarAuto;
 
+    ScrollbarMode horizontalScrollbarMode = webPage->alwaysShowsHorizontalScroller() ? ScrollbarAlwaysOn : defaultScrollbarMode;
+    ScrollbarMode verticalScrollbarMode = webPage->alwaysShowsVerticalScroller() ? ScrollbarAlwaysOn : defaultScrollbarMode;
+
+    bool horizontalLock = shouldHideScrollbars || webPage->alwaysShowsHorizontalScroller();
+    bool verticalLock = shouldHideScrollbars || webPage->alwaysShowsVerticalScroller();
+
     m_frame->coreFrame()->createView(webPage->size(), backgroundColor, isTransparent,
         webPage->fixedLayoutSize(), fixedVisibleContentRect, shouldUseFixedLayout,
-        defaultScrollbarMode, /* lock */ shouldHideScrollbars, defaultScrollbarMode, /* lock */ shouldHideScrollbars);
+        horizontalScrollbarMode, horizontalLock, verticalScrollbarMode, verticalLock);
 
     if (int minimumLayoutWidth = webPage->minimumLayoutSize().width()) {
         int minimumLayoutHeight = std::max(webPage->minimumLayoutSize().height(), 1);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (226007 => 226008)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2017-12-16 20:57:11 UTC (rev 226008)
@@ -323,6 +323,8 @@
 WebPage::WebPage(uint64_t pageID, WebPageCreationParameters&& parameters)
     : m_pageID(pageID)
     , m_viewSize(parameters.viewSize)
+    , m_alwaysShowsHorizontalScroller { parameters.alwaysShowsHorizontalScroller }
+    , m_alwaysShowsVerticalScroller { parameters.alwaysShowsVerticalScroller }
 #if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC)
     , m_determinePrimarySnapshottedPlugInTimer(RunLoop::main(), this, &WebPage::determinePrimarySnapshottedPlugInTimerFired)
 #endif
@@ -4914,6 +4916,30 @@
     sendEditorStateUpdate();
 }
 
+void WebPage::setAlwaysShowsHorizontalScroller(bool alwaysShowsHorizontalScroller)
+{
+    if (alwaysShowsHorizontalScroller == m_alwaysShowsHorizontalScroller)
+        return;
+
+    m_alwaysShowsHorizontalScroller = alwaysShowsHorizontalScroller;
+    auto view = corePage()->mainFrame().view();
+    if (!alwaysShowsHorizontalScroller)
+        view->setHorizontalScrollbarLock(false);
+    view->setHorizontalScrollbarMode(alwaysShowsHorizontalScroller ? ScrollbarAlwaysOn : m_mainFrameIsScrollable ? ScrollbarAuto : ScrollbarAlwaysOff, alwaysShowsHorizontalScroller || !m_mainFrameIsScrollable);
+}
+
+void WebPage::setAlwaysShowsVerticalScroller(bool alwaysShowsVerticalScroller)
+{
+    if (alwaysShowsVerticalScroller == m_alwaysShowsVerticalScroller)
+        return;
+
+    m_alwaysShowsVerticalScroller = alwaysShowsVerticalScroller;
+    auto view = corePage()->mainFrame().view();
+    if (!alwaysShowsVerticalScroller)
+        view->setVerticalScrollbarLock(false);
+    view->setVerticalScrollbarMode(alwaysShowsVerticalScroller ? ScrollbarAlwaysOn : m_mainFrameIsScrollable ? ScrollbarAuto : ScrollbarAlwaysOff, alwaysShowsVerticalScroller || !m_mainFrameIsScrollable);
+}
+
 void WebPage::setMinimumLayoutSize(const IntSize& minimumLayoutSize)
 {
     if (m_minimumLayoutSize == minimumLayoutSize)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (226007 => 226008)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2017-12-16 20:57:11 UTC (rev 226008)
@@ -913,6 +913,12 @@
 
     bool mainFrameIsScrollable() const { return m_mainFrameIsScrollable; }
 
+    void setAlwaysShowsHorizontalScroller(bool);
+    void setAlwaysShowsVerticalScroller(bool);
+
+    bool alwaysShowsHorizontalScroller() const { return m_alwaysShowsHorizontalScroller; };
+    bool alwaysShowsVerticalScroller() const { return m_alwaysShowsVerticalScroller; };
+
     void setMinimumLayoutSize(const WebCore::IntSize&);
     WebCore::IntSize minimumLayoutSize() const { return m_minimumLayoutSize; }
 
@@ -1396,6 +1402,9 @@
     bool m_scrollingPerformanceLoggingEnabled { false };
     bool m_mainFrameIsScrollable { true };
 
+    bool m_alwaysShowsHorizontalScroller { false };
+    bool m_alwaysShowsVerticalScroller { false };
+
 #if PLATFORM(IOS)
     bool m_ignoreViewportScalingConstraints { false };
 #endif

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (226007 => 226008)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2017-12-16 20:57:11 UTC (rev 226008)
@@ -399,6 +399,9 @@
     FontAtSelection(WebKit::CallbackID callbackID);
 #endif
 
+    SetAlwaysShowsHorizontalScroller(bool alwaysShowsHorizontalScroller)
+    SetAlwaysShowsVerticalScroller(bool alwaysShowsVerticalScroller)
+
     SetMinimumLayoutSize(WebCore::IntSize minimumLayoutSize)
     SetAutoSizingShouldExpandToViewHeight(bool shouldExpand)
 

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (226007 => 226008)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2017-12-16 20:57:11 UTC (rev 226008)
@@ -1,3 +1,16 @@
+2017-12-16  Dan Bernstein  <m...@apple.com>
+
+        WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
+        https://bugs.webkit.org/show_bug.cgi?id=180613
+        <rdar://problem/35946124>
+
+        Reviewed by Geoff Garen.
+
+        * WebKit.mac.exp: Removed WebCoreScrollbarAlwaysOn, which is no longer being used by any
+          clients.
+        * WebView/WebDynamicScrollBarsView.h: Ditto.
+        * WebView/WebDynamicScrollBarsView.mm: Ditto.
+
 2017-12-14  David Kilzer  <ddkil...@apple.com>
 
         Enable -Wstrict-prototypes for WebKit

Modified: trunk/Source/WebKitLegacy/mac/WebKit.mac.exp (226007 => 226008)


--- trunk/Source/WebKitLegacy/mac/WebKit.mac.exp	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKitLegacy/mac/WebKit.mac.exp	2017-12-16 20:57:11 UTC (rev 226008)
@@ -8,7 +8,6 @@
 _HIWebViewCreate
 _HIWebViewGetWebView
 _WebConvertNSImageToCGImageRef
-_WebCoreScrollbarAlwaysOn
 _WebIconDatabaseDidAddIconNotification
 _WebIconDatabaseDidRemoveAllIconsNotification
 _WebIconDatabaseDirectoryDefaultsKey

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebDynamicScrollBarsView.h (226007 => 226008)


--- trunk/Source/WebKitLegacy/mac/WebView/WebDynamicScrollBarsView.h	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebDynamicScrollBarsView.h	2017-12-16 20:57:11 UTC (rev 226008)
@@ -32,9 +32,6 @@
 
 #import <AppKit/NSScrollView.h>
 
-// FIXME: <rdar://problem/5898985> Mail currently expects this header to define WebCoreScrollbarAlwaysOn.
-extern const int WebCoreScrollbarAlwaysOn;
-
 struct WebDynamicScrollBarsViewPrivate;
 @interface WebDynamicScrollBarsView : NSScrollView {
 @private

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebDynamicScrollBarsView.mm (226007 => 226008)


--- trunk/Source/WebKitLegacy/mac/WebView/WebDynamicScrollBarsView.mm	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebDynamicScrollBarsView.mm	2017-12-16 20:57:11 UTC (rev 226008)
@@ -36,9 +36,6 @@
 
 using namespace WebCore;
 
-// FIXME: <rdar://problem/5898985> Mail expects a constant of this name to exist.
-const int WebCoreScrollbarAlwaysOn = ScrollbarAlwaysOn;
-
 #ifndef __OBJC2__
 // In <rdar://problem/7814899> we saw crashes because WebDynamicScrollBarsView increased in size, breaking ABI compatiblity.
 COMPILE_ASSERT(sizeof(WebDynamicScrollBarsView) == 0x8c, WebDynamicScrollBarsView_is_expected_size);

Modified: trunk/Tools/ChangeLog (226007 => 226008)


--- trunk/Tools/ChangeLog	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Tools/ChangeLog	2017-12-16 20:57:11 UTC (rev 226008)
@@ -1,3 +1,30 @@
+2017-12-16  Dan Bernstein  <m...@apple.com>
+
+        WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
+        https://bugs.webkit.org/show_bug.cgi?id=180613
+        <rdar://problem/35946124>
+
+        Reviewed by Geoff Garen.
+
+        * MiniBrowser/mac/MainMenu.xib: Added Always Show {Horizontal,Vertical} Scroller menu items
+          to the View menu.
+
+        * MiniBrowser/mac/WK1BrowserWindowController.m:
+        (-[WK1BrowserWindowController validateMenuItem:]): Set the state of the new menu items based
+          on -alwaysShow{Horizontal,Vertical}Scroller.
+        (-[WK1BrowserWindowController toggleAlwaysShowsHorizontalScroller:]): Toggle the value.
+        (-[WK1BrowserWindowController toggleAlwaysShowsVerticalScroller:]): Ditto.
+
+        * MiniBrowser/mac/WK2BrowserWindowController.m:
+        (-[WK2BrowserWindowController validateMenuItem:]): Set the state of the new menu items based
+          on the new property.
+        (-[WK2BrowserWindowController toggleAlwaysShowsHorizontalScroller:]): Toggle the property.
+        (-[WK2BrowserWindowController toggleAlwaysShowsVerticalScroller:]): Ditto.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm: Added.
+        (TEST):
+
 2017-12-16  Basuke Suzuki  <basuke.suz...@sony.com>
 
         [WinCairo] Move the destination of WinCairoRequirements.zip into WebKitLibraries and register it and related files as git ignore files.

Modified: trunk/Tools/MiniBrowser/mac/MainMenu.xib (226007 => 226008)


--- trunk/Tools/MiniBrowser/mac/MainMenu.xib	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Tools/MiniBrowser/mac/MainMenu.xib	2017-12-16 20:57:11 UTC (rev 226008)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13168.4" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13168.4"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
@@ -735,6 +735,18 @@
                                     </items>
                                 </menu>
                             </menuItem>
+                            <menuItem title="Always Show Horizontal Scroller" id="vTs-1N-5Cb">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="toggleAlwaysShowsHorizontalScroller:" target="-1" id="WAH-WK-kRY"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Always Show Vertical Scroller" id="dad-Bl-adD">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="toggleAlwaysShowsVerticalScroller:" target="-1" id="zGl-OI-HH6"/>
+                                </connections>
+                            </menuItem>
                             <menuItem isSeparatorItem="YES" id="581"/>
                             <menuItem title="Reload Page" keyEquivalent="r" id="579">
                                 <connections>

Modified: trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m (226007 => 226008)


--- trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m	2017-12-16 20:57:11 UTC (rev 226008)
@@ -151,6 +151,10 @@
         [menuItem setState:self.isEditable ? NSOnState : NSOffState];
     else if (action == @selector(showHideWebInspector:))
         [menuItem setTitle:_webView.inspector.isOpen ? @"Close Web Inspector" : @"Show Web Inspector"];
+    else if (action == @selector(toggleAlwaysShowsHorizontalScroller:))
+        menuItem.state = _webView.alwaysShowHorizontalScroller ? NSOnState : NSOffState;
+    else if (action == @selector(toggleAlwaysShowsVerticalScroller:))
+        menuItem.state = _webView.alwaysShowVerticalScroller ? NSOnState : NSOffState;
 
     if (action == @selector(setPageScale:))
         [menuItem setState:areEssentiallyEqual([_webView _viewScaleFactor], [self pageScaleForMenuItemTag:[menuItem tag]])];
@@ -264,6 +268,16 @@
         [inspector show:sender];
 }
 
+- (IBAction)toggleAlwaysShowsHorizontalScroller:(id)sender
+{
+    _webView.alwaysShowHorizontalScroller = !_webView.alwaysShowHorizontalScroller;
+}
+
+- (IBAction)toggleAlwaysShowsVerticalScroller:(id)sender
+{
+    _webView.alwaysShowVerticalScroller = !_webView.alwaysShowVerticalScroller;
+}
+
 - (NSURL *)currentURL
 {
     return _webView.mainFrame.dataSource.request.URL;

Modified: trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m (226007 => 226008)


--- trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m	2017-12-16 20:57:11 UTC (rev 226008)
@@ -209,6 +209,10 @@
         [menuItem setState:self.isEditable ? NSOnState : NSOffState];
     else if (action == @selector(showHideWebInspector:))
         [menuItem setTitle:WKInspectorIsVisible(WKPageGetInspector(_webView._pageRefForTransitionToWKWebView)) ? @"Close Web Inspector" : @"Show Web Inspector"];
+    else if (action == @selector(toggleAlwaysShowsHorizontalScroller:))
+        menuItem.state = _webView._alwaysShowsHorizontalScroller ? NSOnState : NSOffState;
+    else if (action == @selector(toggleAlwaysShowsVerticalScroller:))
+        menuItem.state = _webView._alwaysShowsVerticalScroller ? NSOnState : NSOffState;
 
     if (action == @selector(setPageScale:))
         [menuItem setState:areEssentiallyEqual([_webView _pageScale], [self pageScaleForMenuItemTag:[menuItem tag]])];
@@ -291,6 +295,16 @@
         WKInspectorShow(inspectorRef);
 }
 
+- (IBAction)toggleAlwaysShowsHorizontalScroller:(id)sender
+{
+    _webView._alwaysShowsHorizontalScroller = !_webView._alwaysShowsHorizontalScroller;
+}
+
+- (IBAction)toggleAlwaysShowsVerticalScroller:(id)sender
+{
+    _webView._alwaysShowsVerticalScroller = !_webView._alwaysShowsVerticalScroller;
+}
+
 - (NSURL *)currentURL
 {
     return _webView.URL;

Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (226007 => 226008)


--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2017-12-16 19:07:55 UTC (rev 226007)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2017-12-16 20:57:11 UTC (rev 226008)
@@ -121,6 +121,7 @@
 		33DC89141419579F00747EF7 /* LoadCanceledNoServerRedirectCallback_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33DC89131419579F00747EF7 /* LoadCanceledNoServerRedirectCallback_Bundle.cpp */; };
 		33E79E06137B5FD900E32D99 /* mouse-move-listener.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 33E79E05137B5FCE00E32D99 /* mouse-move-listener.html */; };
 		370CE22A1F57343400E7410B /* WKContentViewTargetForAction.mm in Sources */ = {isa = PBXBuildFile; fileRef = 370CE2291F57343400E7410B /* WKContentViewTargetForAction.mm */; };
+		371195AB1FE5797700A1FB92 /* WKWebViewAlwaysShowsScroller.mm in Sources */ = {isa = PBXBuildFile; fileRef = 371195AA1FE5797700A1FB92 /* WKWebViewAlwaysShowsScroller.mm */; };
 		374B7A601DF36EEE00ACCB6C /* BundleEditingDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 374B7A5E1DF36EEE00ACCB6C /* BundleEditingDelegate.mm */; };
 		374B7A611DF371CF00ACCB6C /* BundleEditingDelegatePlugIn.mm in Sources */ = {isa = PBXBuildFile; fileRef = 374B7A5F1DF36EEE00ACCB6C /* BundleEditingDelegatePlugIn.mm */; };
 		375E0E171D66674400EFEC2C /* WKNSNumber.mm in Sources */ = {isa = PBXBuildFile; fileRef = 375E0E151D66674400EFEC2C /* WKNSNumber.mm */; };
@@ -1224,6 +1225,7 @@
 		33DC89131419579F00747EF7 /* LoadCanceledNoServerRedirectCallback_Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadCanceledNoServerRedirectCallback_Bundle.cpp; sourceTree = "<group>"; };
 		33E79E05137B5FCE00E32D99 /* mouse-move-listener.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "mouse-move-listener.html"; sourceTree = "<group>"; };
 		370CE2291F57343400E7410B /* WKContentViewTargetForAction.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKContentViewTargetForAction.mm; sourceTree = "<group>"; };
+		371195AA1FE5797700A1FB92 /* WKWebViewAlwaysShowsScroller.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewAlwaysShowsScroller.mm; sourceTree = "<group>"; };
 		3722C8681461E03E00C45D00 /* RenderedImageFromDOMRange.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RenderedImageFromDOMRange.mm; sourceTree = "<group>"; };
 		374B7A5E1DF36EEE00ACCB6C /* BundleEditingDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundleEditingDelegate.mm; sourceTree = "<group>"; };
 		374B7A5F1DF36EEE00ACCB6C /* BundleEditingDelegatePlugIn.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundleEditingDelegatePlugIn.mm; sourceTree = "<group>"; };
@@ -2128,6 +2130,7 @@
 				5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */,
 				51C683DD1EA134DB00650183 /* WKURLSchemeHandler-1.mm */,
 				5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */,
+				371195AA1FE5797700A1FB92 /* WKWebViewAlwaysShowsScroller.mm */,
 				2EFF06D61D8AF34A0004BB30 /* WKWebViewCandidateTests.mm */,
 				5CB3CE381FA1691700C3A2D6 /* WKWebViewConfiguration.mm */,
 				7C417F311D19E14800B8EF53 /* WKWebViewDefaultNavigationDelegate.mm */,
@@ -3176,7 +3179,9 @@
 				1ADAD1501D77A9F600212586 /* BlockPtr.mm in Sources */,
 				7C83DE9C1D0A590C00FEBCF3 /* BloomFilter.cpp in Sources */,
 				7C83DEA01D0A590C00FEBCF3 /* CheckedArithmeticOperations.cpp in Sources */,
+				0F30CB5C1FCE1796004B5323 /* ConcurrentPtrHashSet.cpp in Sources */,
 				7C83DEC31D0A590C00FEBCF3 /* Condition.cpp in Sources */,
+				FE05FAF11FE08CD400093230 /* ConstExprPoisoned.cpp in Sources */,
 				7C83DEA61D0A590C00FEBCF3 /* Counters.cpp in Sources */,
 				7C83DEA91D0A590C00FEBCF3 /* CString.cpp in Sources */,
 				7C83DEAD1D0A590C00FEBCF3 /* Deque.cpp in Sources */,
@@ -3196,17 +3201,16 @@
 				7C83DF1D1D0A590C00FEBCF3 /* Lock.cpp in Sources */,
 				A57D54F61F3395D000A97AA7 /* Logger.cpp in Sources */,
 				7C83DEED1D0A590C00FEBCF3 /* MathExtras.cpp in Sources */,
-				FE05FAF11FE08CD400093230 /* ConstExprPoisoned.cpp in Sources */,
 				7C83DEEF1D0A590C00FEBCF3 /* MD5.cpp in Sources */,
 				7C83DEF11D0A590C00FEBCF3 /* MediaTime.cpp in Sources */,
 				7C83DEF61D0A590C00FEBCF3 /* MetaAllocator.cpp in Sources */,
 				7C83DEFE1D0A590C00FEBCF3 /* NakedPtr.cpp in Sources */,
 				A57D54F31F338C3600A97AA7 /* NeverDestroyed.cpp in Sources */,
-				0F30CB5C1FCE1796004B5323 /* ConcurrentPtrHashSet.cpp in Sources */,
 				7C83DF011D0A590C00FEBCF3 /* Optional.cpp in Sources */,
 				1A77BAA31D9AFFFC005FC568 /* OptionSet.cpp in Sources */,
 				7C83DF021D0A590C00FEBCF3 /* OSObjectPtr.cpp in Sources */,
 				7C83DF591D0A590C00FEBCF3 /* ParkingLot.cpp in Sources */,
+				FE05FAEF1FE0645B00093230 /* Poisoned.cpp in Sources */,
 				53EC25411E96FD87000831B9 /* PriorityQueue.cpp in Sources */,
 				7C83DF131D0A590C00FEBCF3 /* RedBlackTree.cpp in Sources */,
 				7C83DF141D0A590C00FEBCF3 /* Ref.cpp in Sources */,
@@ -3217,7 +3221,6 @@
 				7C83DF051D0A590C00FEBCF3 /* RunLoop.cpp in Sources */,
 				7C83DF261D0A590C00FEBCF3 /* SaturatedArithmeticOperations.cpp in Sources */,
 				1A3524AE1D63A4FB0031729B /* Scope.cpp in Sources */,
-				FE05FAEF1FE0645B00093230 /* Poisoned.cpp in Sources */,
 				7C83DF121D0A590C00FEBCF3 /* ScopedLambda.cpp in Sources */,
 				7C83DF3D1D0A590C00FEBCF3 /* SetForScope.cpp in Sources */,
 				7C83DF2A1D0A590C00FEBCF3 /* SHA1.cpp in Sources */,
@@ -3604,6 +3607,7 @@
 				2D4CF8BD1D8360CC0001CE8D /* WKThumbnailView.mm in Sources */,
 				51C683DE1EA134E800650183 /* WKURLSchemeHandler-1.mm in Sources */,
 				5182C22E1F2BCE540059BA7C /* WKURLSchemeHandler-leaks.mm in Sources */,
+				371195AB1FE5797700A1FB92 /* WKWebViewAlwaysShowsScroller.mm in Sources */,
 				514958BE1F7427AC00E87BAD /* WKWebViewAutofillTests.mm in Sources */,
 				2EFF06D71D8AF34A0004BB30 /* WKWebViewCandidateTests.mm in Sources */,
 				5CB3CE391FA1697F00C3A2D6 /* WKWebViewConfiguration.mm in Sources */,

Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm (0 => 226008)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm	2017-12-16 20:57:11 UTC (rev 226008)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+
+#if WK_API_ENABLED && PLATFORM(MAC)
+
+#import "PlatformUtilities.h"
+#import "TestWKWebView.h"
+#import <WebKit/WKWebViewPrivate.h>
+#import <wtf/RetainPtr.h>
+
+TEST(WKWebView, AlwaysShowsScroller)
+{
+    RetainPtr<TestWKWebView> webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)]);
+    [webView synchronouslyLoadHTMLString:@"<style>::-webkit-scrollbar { width: 20px; height: 20px; }</style>"];
+
+    ASSERT_EQ(300, [webView stringByEvaluatingJavaScript:@"document.body.scrollWidth"].integerValue);
+    ASSERT_EQ(300, [webView stringByEvaluatingJavaScript:@"document.body.scrollHeight"].integerValue);
+
+    [webView _setAlwaysShowsHorizontalScroller:YES];
+    ASSERT_EQ(300, [webView stringByEvaluatingJavaScript:@"document.body.scrollWidth"].integerValue);
+    ASSERT_EQ(280, [webView stringByEvaluatingJavaScript:@"document.body.scrollHeight"].integerValue);
+
+    [webView _setAlwaysShowsVerticalScroller:YES];
+    // When using custom scrollers, WebKit fails to dirty layout when we change this, so force it.
+    [webView evaluateJavaScript:@"document.body.appendChild(document.createElement(\"div\"))" completionHandler:nil];
+    ASSERT_EQ(280, [webView stringByEvaluatingJavaScript:@"document.body.scrollWidth"].integerValue);
+    ASSERT_EQ(280, [webView stringByEvaluatingJavaScript:@"document.body.scrollHeight"].integerValue);
+
+    [webView _setAlwaysShowsHorizontalScroller:NO];
+    ASSERT_EQ(280, [webView stringByEvaluatingJavaScript:@"document.body.scrollWidth"].integerValue);
+    ASSERT_EQ(300, [webView stringByEvaluatingJavaScript:@"document.body.scrollHeight"].integerValue);
+}
+
+#endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to