Title: [87444] trunk/Source
Revision
87444
Author
[email protected]
Date
2011-05-26 15:49:48 -0700 (Thu, 26 May 2011)

Log Message

Need a callback for when the preferred rendered size changed.
https://bugs.webkit.org/show_bug.cgi?id=61309

Reviewed by Darin Fisher.

Source/WebCore:

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.

Source/WebKit/chromium:

* 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.

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to