<rdar://problem/
8967496>
https://bugs.webkit.org/show_bug.cgi?id=53941
Reviewed by Anders Carlsson.
* UIProcess/API/C/WKPage.cpp:
(WKPageHasHorizontalScrollbar):
(WKPageHasVerticalScrollbar):
* UIProcess/API/C/WKPage.h:
Add API to query whether the main frame has scrollbars.
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::close):
(WebKit::WebPageProxy::processDidCrash):
(WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::hasHorizontalScrollbar):
(WebKit::WebPageProxy::hasVerticalScrollbar):
Store/update main frame scrollbar state.
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::contentsSizeChanged):
* WebProcess/WebCoreSupport/WebChromeClient.h:
(WebKit::WebChromeClient::WebChromeClient):
Post message when main frame scrollbar state changes.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@77846
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2011-02-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Inform the UIProcess when main frame scrollbars change
+ <rdar://problem/8967496>
+ https://bugs.webkit.org/show_bug.cgi?id=53941
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageHasHorizontalScrollbar):
+ (WKPageHasVerticalScrollbar):
+ * UIProcess/API/C/WKPage.h:
+ Add API to query whether the main frame has scrollbars.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ (WebKit::WebPageProxy::close):
+ (WebKit::WebPageProxy::processDidCrash):
+ (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::hasHorizontalScrollbar):
+ (WebKit::WebPageProxy::hasVerticalScrollbar):
+ Store/update main frame scrollbar state.
+
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::contentsSizeChanged):
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ (WebKit::WebChromeClient::WebChromeClient):
+ Post message when main frame scrollbar state changes.
+
2011-02-07 Anders Carlsson <andersca@apple.com>
Reviewed by Sam Weinig.
return toAPI(toImpl(pageRef)->fixedLayoutSize());
}
+bool WKPageHasHorizontalScrollbar(WKPageRef pageRef)
+{
+ return toImpl(pageRef)->hasHorizontalScrollbar();
+}
+
+bool WKPageHasVerticalScrollbar(WKPageRef pageRef)
+{
+ return toImpl(pageRef)->hasVerticalScrollbar();
+}
+
void WKPageFindString(WKPageRef pageRef, WKStringRef string, WKFindOptions options, unsigned maxMatchCount)
{
toImpl(pageRef)->findString(toImpl(string)->string(), toFindOptions(options), maxMatchCount);
WK_EXPORT void WKPageSetUseFixedLayout(WKPageRef page, bool fixed);
WK_EXPORT void WKPageSetFixedLayoutSize(WKPageRef page, WKSize size);
-WK_EXPORT bool WKPageUseFixedLayout(WKPageRef pageRef);
-WK_EXPORT WKSize WKPageFixedLayoutSize(WKPageRef pageRef);
+WK_EXPORT bool WKPageUseFixedLayout(WKPageRef page);
+WK_EXPORT WKSize WKPageFixedLayoutSize(WKPageRef page);
+
+WK_EXPORT bool WKPageHasHorizontalScrollbar(WKPageRef page);
+WK_EXPORT bool WKPageHasVerticalScrollbar(WKPageRef page);
WK_EXPORT void WKPageFindString(WKPageRef page, WKStringRef string, WKFindOptions findOptions, unsigned maxMatchCount);
WK_EXPORT void WKPageHideFindUI(WKPageRef page);
, m_pendingLearnOrIgnoreWordMessageCount(0)
, m_mainFrameHasCustomRepresentation(false)
, m_currentDragOperation(DragOperationNone)
+ , m_mainFrameHasHorizontalScrollbar(false)
+ , m_mainFrameHasVerticalScrollbar(false)
{
#ifndef NDEBUG
webPageProxyCounter.increment();
m_toolTip = String();
+ m_mainFrameHasHorizontalScrollbar = false;
+ m_mainFrameHasVerticalScrollbar = false;
+
invalidateCallbackMap(m_voidCallbacks);
invalidateCallbackMap(m_dataCallbacks);
invalidateCallbackMap(m_stringCallbacks);
m_toolTip = String();
+ m_mainFrameHasHorizontalScrollbar = false;
+ m_mainFrameHasVerticalScrollbar = false;
+
invalidateCallbackMap(m_voidCallbacks);
invalidateCallbackMap(m_dataCallbacks);
invalidateCallbackMap(m_stringCallbacks);
m_uiClient.didCompleteRubberBandForMainFrame(this, initialOverhang);
}
+void WebPageProxy::didChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVecticalScrollbar)
+{
+ m_mainFrameHasHorizontalScrollbar = hasHorizontalScrollbar;
+ m_mainFrameHasVerticalScrollbar = hasVecticalScrollbar;
+}
+
void WebPageProxy::didFinishLoadingDataForCustomRepresentation(const CoreIPC::DataReference& dataReference)
{
m_pageClient->didFinishLoadingDataForCustomRepresentation(dataReference);
bool useFixedLayout() const { return m_useFixedLayout; };
const WebCore::IntSize& fixedLayoutSize() const { return m_fixedLayoutSize; };
+ bool hasHorizontalScrollbar() const { return m_mainFrameHasHorizontalScrollbar; }
+ bool hasVerticalScrollbar() const { return m_mainFrameHasVerticalScrollbar; }
+
#if PLATFORM(MAC)
void sendAccessibilityPresenterToken(const CoreIPC::DataReference&);
#endif
void requestGeolocationPermissionForFrame(uint64_t geolocationID, uint64_t frameID, String originIdentifier);
void runModal() { m_uiClient.runModal(this); }
void didCompleteRubberBandForMainFrame(const WebCore::IntSize&);
+ void didChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVecticalScrollbar);
void reattachToWebProcess();
void reattachToWebProcessWithItem(WebBackForwardListItem*);
WebCore::DragOperation m_currentDragOperation;
String m_pendingAPIRequestURL;
+
+ bool m_mainFrameHasHorizontalScrollbar;
+ bool m_mainFrameHasVerticalScrollbar;
};
} // namespace WebKit
PrintFrame(uint64_t frameID) -> ()
RunModal()
DidCompleteRubberBandForMainFrame(WebCore::IntSize initialOverhang)
+ DidChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar)
#if ENABLE(TILED_BACKING_STORE)
PageDidRequestScroll(WebCore::IntSize delta)
#include <WebCore/FileChooser.h>
#include <WebCore/Frame.h>
#include <WebCore/FrameLoader.h>
+#include <WebCore/FrameView.h>
#include <WebCore/HTMLNames.h>
#include <WebCore/HTMLPlugInImageElement.h>
#include <WebCore/Page.h>
WebFrame* largestFrame = findLargestFrameInFrameSet(m_page);
if (largestFrame != m_cachedFrameSetLargestFrame.get()) {
m_cachedFrameSetLargestFrame = largestFrame;
- WebProcess::shared().connection()->send(Messages::WebPageProxy::FrameSetLargestFrameChanged(largestFrame ? largestFrame->frameID() : 0), m_page->pageID());
+ m_page->send(Messages::WebPageProxy::FrameSetLargestFrameChanged(largestFrame ? largestFrame->frameID() : 0));
+ }
+
+ FrameView* frameView = frame->view();
+ if (!frameView)
+ return;
+
+ bool hasHorizontalScrollbar = frameView->horizontalScrollbar();
+ bool hasVecticalScrollbar = frameView->verticalScrollbar();
+
+ if (hasHorizontalScrollbar != m_cachedHasHorizontalScrollbar || hasVecticalScrollbar != m_cachedHasVerticalScrollbar) {
+ m_page->send(Messages::WebPageProxy::DidChangeScrollbarsForMainFrame(hasHorizontalScrollbar, hasVecticalScrollbar));
+
+ m_cachedHasHorizontalScrollbar = hasHorizontalScrollbar;
+ m_cachedHasVerticalScrollbar = hasVecticalScrollbar;
}
}
class WebChromeClient : public WebCore::ChromeClient {
public:
WebChromeClient(WebPage* page)
- : m_page(page)
+ : m_cachedHasHorizontalScrollbar(false)
+ , m_cachedHasVerticalScrollbar(false)
+ , m_page(page)
{
}
WebPage* page() const { return m_page; }
+
private:
virtual void chromeDestroyed();
String m_cachedToolTip;
mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame;
+ mutable bool m_cachedHasHorizontalScrollbar;
+ mutable bool m_cachedHasVerticalScrollbar;
+
WebPage* m_page;
};