Changeset 75054 in webkit


Ignore:
Timestamp:
Jan 5, 2011 1:32:57 AM (13 years ago)
Author:
ap@apple.com
Message:

2011-01-05 Alexey Proskuryakov <ap@apple.com>

Reviewed by Sam Weinig.

https://bugs.webkit.org/show_bug.cgi?id=51903
Tell UI process which subframe is largest

  • WebCore.exp.in: Exported FrameView::contentsSize().

2011-01-05 Alexey Proskuryakov <ap@apple.com>

Reviewed by Sam Weinig.

https://bugs.webkit.org/show_bug.cgi?id=51903
Tell UI process which subframe is largest

  • UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::frameSetLargestFrame): Remember largest frame in frameset pages.
  • UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::frameDidBecomeFrameSet): Reset stored largest frame if main frame changes to a frameset or back. (WebKit::WebPageProxy::frameSetLargestFrameChanged): Store a new largest frame when notified of a change.
  • UIProcess/WebPageProxy.messages.in: Added FrameSetLargestFrameChanged.
  • WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::area): Calculate area of a frame. (WebKit::findLargestFrameInFrameSet): Find largest first-level subframe in a frameset page. (WebKit::WebChromeClient::contentsSizeChanged): Recalculate largest frame, and notify UI process if it changed.
  • WebProcess/WebCoreSupport/WebChromeClient.h: Store the latest largest frame.
  • WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::size):
  • WebProcess/WebPage/WebFrame.h: Expose frame size.
Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r75052 r75054  
     12011-01-05  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=51903
     6        Tell UI process which subframe is largest
     7
     8        * WebCore.exp.in: Exported FrameView::contentsSize().
     9
    1102011-01-04  Chris Fleizach  <cfleizach@apple.com>
    211
  • trunk/WebCore/WebCore.exp.in

    r75031 r75054  
    943943__ZNK7WebCore10RenderText9firstRunXEv
    944944__ZNK7WebCore10RenderText9firstRunYEv
     945__ZNK7WebCore10ScrollView12contentsSizeEv
    945946__ZNK7WebCore10ScrollView12documentViewEv
    946947__ZNK7WebCore10ScrollView14scrollbarModesERNS_13ScrollbarModeES2_
  • trunk/WebKit2/ChangeLog

    r75047 r75054  
     12011-01-05  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=51903
     6        Tell UI process which subframe is largest
     7
     8        * UIProcess/WebPageProxy.h:
     9        (WebKit::WebPageProxy::frameSetLargestFrame):
     10        Remember largest frame in frameset pages.
     11
     12        * UIProcess/WebPageProxy.cpp:
     13        (WebKit::WebPageProxy::frameDidBecomeFrameSet): Reset stored largest frame if main frame
     14        changes to a frameset or back.
     15        (WebKit::WebPageProxy::frameSetLargestFrameChanged): Store a new largest frame when notified
     16        of a change.
     17
     18        * UIProcess/WebPageProxy.messages.in: Added FrameSetLargestFrameChanged.
     19
     20        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     21        (WebKit::area): Calculate area of a frame.
     22        (WebKit::findLargestFrameInFrameSet): Find largest first-level subframe in a frameset page.
     23        (WebKit::WebChromeClient::contentsSizeChanged): Recalculate largest frame, and notify UI
     24        process if it changed.
     25
     26        * WebProcess/WebCoreSupport/WebChromeClient.h: Store the latest largest frame.
     27
     28        * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::size):
     29        * WebProcess/WebPage/WebFrame.h:
     30        Expose frame size.
     31
    1322011-01-04  Benjamin Poulain  <benjamin.poulain@nokia.com>
    233
  • trunk/WebKit2/UIProcess/WebPageProxy.cpp

    r75037 r75054  
    12171217
    12181218    frame->setIsFrameSet(value);
     1219    if (frame->isMainFrame())
     1220        m_frameSetLargestFrame = value ? m_mainFrame : 0;
    12191221}
    12201222
     
    19171919}
    19181920
     1921void WebPageProxy::frameSetLargestFrameChanged(uint64_t frameID)
     1922{
     1923    if (!frameID) {
     1924        m_frameSetLargestFrame = 0;
     1925        return;
     1926    }
     1927
     1928    WebFrameProxy* frame = process()->webFrame(frameID);
     1929    MESSAGE_CHECK(frame);
     1930
     1931    m_frameSetLargestFrame = frame;
     1932}
     1933
    19191934#if USE(ACCELERATED_COMPOSITING)
    19201935void WebPageProxy::didChangeAcceleratedCompositing(bool compositing, DrawingAreaInfo& drawingAreaInfo)
  • trunk/WebKit2/UIProcess/WebPageProxy.h

    r75037 r75054  
    113113    WebFrameProxy* mainFrame() const { return m_mainFrame.get(); }
    114114    WebFrameProxy* focusedFrame() const { return m_focusedFrame.get(); }
     115    WebFrameProxy* frameSetLargestFrame() const { return m_frameSetLargestFrame.get(); }
    115116
    116117    DrawingAreaProxy* drawingArea() { return m_drawingArea.get(); }
     
    447448
    448449    void focusedFrameChanged(uint64_t frameID);
     450    void frameSetLargestFrameChanged(uint64_t frameID);
    449451
    450452#if USE(ACCELERATED_COMPOSITING)
     
    477479    RefPtr<WebFrameProxy> m_mainFrame;
    478480    RefPtr<WebFrameProxy> m_focusedFrame;
     481    RefPtr<WebFrameProxy> m_frameSetLargestFrame;
    479482
    480483    String m_userAgent;
  • trunk/WebKit2/UIProcess/WebPageProxy.messages.in

    r75037 r75054  
    3939    TakeFocus(bool direction)
    4040    FocusedFrameChanged(uint64_t frameID)
     41    FrameSetLargestFrameChanged(uint64_t frameID)
    4142    SetToolbarsAreVisible(bool toolbarsAreVisible)
    4243    GetToolbarsAreVisible() -> (bool toolbarsAreVisible)
  • trunk/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r74668 r75054  
    6060namespace WebKit {
    6161
     62static double area(WebFrame* frame)
     63{
     64    IntSize size = frame->size();
     65    return static_cast<double>(size.height()) * size.width();
     66}
     67
     68
     69static WebFrame* findLargestFrameInFrameSet(WebPage* page)
     70{
     71    WebFrame* mainFrame = page->mainFrame();
     72    if (!mainFrame->isFrameSet())
     73        return 0;
     74
     75    WebFrame* largestSoFar = 0;
     76
     77    RefPtr<ImmutableArray> frameChildren = mainFrame->childFrames();
     78    size_t count = frameChildren->size();
     79    for (size_t i = 0; i < count; ++i) {
     80        WebFrame* childFrame = frameChildren->at<WebFrame>(i);
     81        if (!largestSoFar || area(childFrame) > area(largestSoFar))
     82            largestSoFar = childFrame;
     83    }
     84
     85    return largestSoFar;
     86}
     87
    6288void WebChromeClient::chromeDestroyed()
    6389{
     
    385411    m_page->send(Messages::WebPageProxy::DidChangeContentsSize(size));
    386412#endif
     413
     414    WebFrame* largestFrame = findLargestFrameInFrameSet(m_page);
     415    if (largestFrame != m_cachedFrameSetLargestFrame.get()) {
     416        m_cachedFrameSetLargestFrame = largestFrame;
     417        WebProcess::shared().connection()->send(Messages::WebPageProxy::FrameSetLargestFrameChanged(largestFrame ? largestFrame->frameID() : 0), m_page->pageID());
     418    }
    387419}
    388420
  • trunk/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h

    r74418 r75054  
    3434namespace WebKit {
    3535
     36class WebFrame;
    3637class WebPage;
    3738
     
    203204
    204205    String m_cachedToolTip;
     206    mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame;
    205207    WebPage* m_page;
    206208};
  • trunk/WebKit2/WebProcess/WebPage/WebFrame.cpp

    r74571 r75054  
    4242#include <WebCore/DocumentLoader.h>
    4343#include <WebCore/Frame.h>
     44#include <WebCore/FrameView.h>
    4445#include <WebCore/HTMLFrameOwnerElement.h>
    4546#include <WebCore/JSCSSStyleDeclaration.h>
     
    288289}
    289290
     291IntSize WebFrame::size() const
     292{
     293    if (!m_coreFrame)
     294        return IntSize();
     295
     296    FrameView* frameView = m_coreFrame->view();
     297    if (!frameView)
     298        return IntSize();
     299
     300    return frameView->contentsSize();
     301}
     302
    290303bool WebFrame::isFrameSet() const
    291304{
  • trunk/WebKit2/WebProcess/WebPage/WebFrame.h

    r74521 r75054  
    7878    String selectionAsString() const;
    7979
     80    WebCore::IntSize size() const;
     81
    8082    // WKBundleFrame API and SPI functions
    8183    bool isMainFrame() const;
     
    8385    String url() const;
    8486    String innerText() const;
     87    bool isFrameSet() const;
    8588    PassRefPtr<ImmutableArray> childFrames();
    8689    JSValueRef computedStyleIncludingVisitedInfo(JSObjectRef element);
     
    123126    virtual Type type() const { return APIType; }
    124127
    125     bool isFrameSet() const;
    126 
    127128    WebCore::Frame* m_coreFrame;
    128129
Note: See TracChangeset for help on using the changeset viewer.