Diff
Modified: trunk/Source/WebCore/ChangeLog (87443 => 87444)
--- trunk/Source/WebCore/ChangeLog 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebCore/ChangeLog 2011-05-26 22:49:48 UTC (rev 87444)
@@ -1,3 +1,20 @@
+2011-05-26 David Levin <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ Need a callback for when the preferred rendered size changed.
+ https://bugs.webkit.org/show_bug.cgi?id=61309
+
+ No new tests needed since no new functionality is exposed.
+
+ * page/Chrome.cpp:
+ (WebCore::Chrome::contentsPreferredSizeChanged): Plumbed through the call.
+ * page/Chrome.h: Added the new method.
+ * page/ChromeClient.h: Ditto.
+ * page/FrameView.cpp:
+ (WebCore::FrameView::setContentsSize): Added calculations for the preferred size
+ and the call to contentsPreferredSizeChanged.
+
2011-05-25 Levi Weintraub <[email protected]>
Reviewed by Eric Seidel.
Modified: trunk/Source/WebCore/page/Chrome.cpp (87443 => 87444)
--- trunk/Source/WebCore/page/Chrome.cpp 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebCore/page/Chrome.cpp 2011-05-26 22:49:48 UTC (rev 87444)
@@ -114,6 +114,11 @@
m_client->contentsSizeChanged(frame, size);
}
+void Chrome::contentsPreferredSizeChanged(Frame* frame, const IntSize& size) const
+{
+ m_client->contentsPreferredSizeChanged(frame, size);
+}
+
void Chrome::scrollRectIntoView(const IntRect& rect) const
{
// FIXME: The unused ScrollView* argument can and should be removed from ChromeClient::scrollRectIntoView.
Modified: trunk/Source/WebCore/page/Chrome.h (87443 => 87444)
--- trunk/Source/WebCore/page/Chrome.h 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebCore/page/Chrome.h 2011-05-26 22:49:48 UTC (rev 87444)
@@ -84,6 +84,7 @@
void scrollRectIntoView(const IntRect&) const;
void contentsSizeChanged(Frame*, const IntSize&) const;
+ void contentsPreferredSizeChanged(Frame*, const IntSize&) const;
void setWindowRect(const FloatRect&) const;
FloatRect windowRect() const;
Modified: trunk/Source/WebCore/page/ChromeClient.h (87443 => 87444)
--- trunk/Source/WebCore/page/ChromeClient.h 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebCore/page/ChromeClient.h 2011-05-26 22:49:48 UTC (rev 87444)
@@ -161,6 +161,7 @@
virtual void dispatchViewportDataDidChange(const ViewportArguments&) const { }
virtual void contentsSizeChanged(Frame*, const IntSize&) const = 0;
+ virtual void contentsPreferredSizeChanged(Frame*, const IntSize&) const { }
virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const = 0; // Currently only Mac has a non empty implementation.
virtual bool shouldMissingPluginMessageBeButton() const { return false; }
Modified: trunk/Source/WebCore/page/FrameView.cpp (87443 => 87444)
--- trunk/Source/WebCore/page/FrameView.cpp 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebCore/page/FrameView.cpp 2011-05-26 22:49:48 UTC (rev 87444)
@@ -475,24 +475,35 @@
void FrameView::setContentsSize(const IntSize& size)
{
- if (size == contentsSize())
- return;
+ bool contentsSizeChanged = size != contentsSize();
+ Page* page = frame() ? frame()->page() : 0;
+ if (contentsSizeChanged) {
+ m_deferSetNeedsLayouts++;
- m_deferSetNeedsLayouts++;
+ ScrollView::setContentsSize(size);
+ scrollAnimator()->contentsResized();
+ if (page)
+ page->chrome()->contentsSizeChanged(frame(), size); // notify only
+ }
- ScrollView::setContentsSize(size);
- scrollAnimator()->contentsResized();
-
- Page* page = frame() ? frame()->page() : 0;
- if (!page)
- return;
+ if (page) {
+ Document* document = frame()->document();
+ if (document && document->renderView() && document->documentElement()) {
+ IntSize preferedSize(document->renderView()->minPreferredLogicalWidth(),
+ document->documentElement()->scrollHeight());
+ if (preferedSize != m_lastPreferedSize) {
+ m_lastPreferedSize = preferedSize;
+ page->chrome()->contentsPreferredSizeChanged(frame(), preferedSize);
+ }
+ }
+ }
- page->chrome()->contentsSizeChanged(frame(), size); //notify only
+ if (contentsSizeChanged) {
+ m_deferSetNeedsLayouts--;
- m_deferSetNeedsLayouts--;
-
- if (!m_deferSetNeedsLayouts)
- m_setNeedsLayoutWasDeferred = false; // FIXME: Find a way to make the deferred layout actually happen.
+ if (!m_deferSetNeedsLayouts)
+ m_setNeedsLayoutWasDeferred = false; // FIXME: Find a way to make the deferred layout actually happen.
+ }
}
void FrameView::adjustViewSize()
Modified: trunk/Source/WebCore/page/FrameView.h (87443 => 87444)
--- trunk/Source/WebCore/page/FrameView.h 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebCore/page/FrameView.h 2011-05-26 22:49:48 UTC (rev 87444)
@@ -392,6 +392,7 @@
bool m_isTransparent;
Color m_baseBackgroundColor;
IntSize m_lastLayoutSize;
+ IntSize m_lastPreferedSize;
float m_lastZoomFactor;
String m_mediaType;
Modified: trunk/Source/WebKit/chromium/ChangeLog (87443 => 87444)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-05-26 22:49:48 UTC (rev 87444)
@@ -1,3 +1,17 @@
+2011-05-26 David Levin <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ Need a callback for when the preferred rendered size changed.
+ https://bugs.webkit.org/show_bug.cgi?id=61309
+
+ * public/WebFrameClient.h
+ (WebKit::WebFrameClient::didChangeContentsPreferredSize): Added stub.
+ * src/ChromeClientImpl.h:
+ (WebKit::ChromeClientImpl::contentsPreferredSizeChanged): Added declaration.
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::contentsPreferredSizeChanged): Added call to WebFrameClient::didChangeContentsPreferredSize.
+
2011-05-26 Mihai Parparita <[email protected]>
Reviewed by Adam Barth.
Modified: trunk/Source/WebKit/chromium/public/WebFrameClient.h (87443 => 87444)
--- trunk/Source/WebKit/chromium/public/WebFrameClient.h 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebKit/chromium/public/WebFrameClient.h 2011-05-26 22:49:48 UTC (rev 87444)
@@ -307,6 +307,9 @@
// The size of the content area changed.
virtual void didChangeContentsSize(WebFrame*, const WebSize&) { }
+ // The preferred dimensions for the rendered HTML contents changed.
+ virtual void didChangeContentsPreferredSize(WebFrame*, const WebSize&) const { }
+
// The main frame scrolled.
virtual void didChangeScrollOffset(WebFrame*) { }
Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (87443 => 87444)
--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp 2011-05-26 22:49:48 UTC (rev 87444)
@@ -588,6 +588,13 @@
webframe->client()->didChangeContentsSize(webframe, size);
}
+void ChromeClientImpl::contentsPreferredSizeChanged(Frame* frame, const IntSize& size) const
+{
+ WebFrameImpl* webframe = WebFrameImpl::fromFrame(frame);
+ if (webframe->client())
+ webframe->client()->didChangeContentsPreferredSize(webframe, size);
+}
+
void ChromeClientImpl::scrollbarsModeDidChange() const
{
}
Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.h (87443 => 87444)
--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.h 2011-05-26 22:49:00 UTC (rev 87443)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.h 2011-05-26 22:49:48 UTC (rev 87444)
@@ -119,6 +119,7 @@
virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
virtual PlatformPageClient platformPageClient() const { return 0; }
virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
+ virtual void contentsPreferredSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
virtual void scrollRectIntoView(
const WebCore::IntRect&, const WebCore::ScrollView*) const { }
virtual void scrollbarsModeDidChange() const;