Make it less awkward to check if a Frame is the main Frame.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Aug 2013 00:09:16 +0000 (00:09 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Aug 2013 00:09:16 +0000 (00:09 +0000)
<https://webkit.org/b/120382>

Reviewed by Anders Carlsson.

Added Page::frameIsMainFrame(const Frame*) so code that wants to find out if a given
Frame is a Page's main frame doesn't have to do a manual pointer compare.

* page/Page.h:
(WebCore::Page::frameIsMainFrame):

    Added. Replaces (frame == &page->mainFrame()) idiom.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@154715 268f45cc-cd09-0410-ab3c-d52691b4dbfc

20 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/history/CachedPage.cpp
Source/WebCore/history/PageCache.cpp
Source/WebCore/html/HTMLPlugInImageElement.cpp
Source/WebCore/html/ImageDocument.cpp
Source/WebCore/inspector/InspectorAgent.cpp
Source/WebCore/inspector/InspectorController.cpp
Source/WebCore/inspector/InspectorInstrumentation.cpp
Source/WebCore/inspector/InspectorPageAgent.cpp
Source/WebCore/loader/FrameLoader.cpp
Source/WebCore/loader/HistoryController.cpp
Source/WebCore/page/DOMWindow.cpp
Source/WebCore/page/Frame.cpp
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/Page.h
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderLayerBacking.cpp
Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
Source/WebKit/mac/WebView/WebFrameView.mm

index b049a80..0cb1fb8 100644 (file)
@@ -1,3 +1,18 @@
+2013-08-27  Andreas Kling  <akling@apple.com>
+
+        Make it less awkward to check if a Frame is the main Frame.
+        <https://webkit.org/b/120382>
+
+        Reviewed by Anders Carlsson.
+
+        Added Page::frameIsMainFrame(const Frame*) so code that wants to find out if a given
+        Frame is a Page's main frame doesn't have to do a manual pointer compare.
+
+        * page/Page.h:
+        (WebCore::Page::frameIsMainFrame):
+
+            Added. Replaces (frame == &page->mainFrame()) idiom.
+
 2013-08-27  Morten Stenshorne  <mstensho@opera.com>
 
         Improve multicol intrinsic width calculation
index 699ebff..31807db 100644 (file)
@@ -1274,7 +1274,7 @@ void Document::setVisualUpdatesAllowed(bool visualUpdatesAllowed)
         updateLayout();
 
     if (Page* page = this->page()) {
-        if (frame() == &page->mainFrame()) {
+        if (page->frameIsMainFrame(frame())) {
             frameView->addPaintPendingMilestones(DidFirstPaintAfterSuppressedIncrementalRendering);
             if (page->requestedLayoutMilestones() & DidFirstLayoutAfterSuppressedIncrementalRendering)
                 frame()->loader().didLayout(DidFirstLayoutAfterSuppressedIncrementalRendering);
@@ -2025,13 +2025,13 @@ void Document::didBecomeCurrentDocumentInFrame()
     // FIXME: Doing this every time is a waste. If the current document and its
     // subframes' documents have no wheel event handlers, then the count did not change,
     // unless the documents they are replacing had wheel event handlers.
-    if (page() && &page()->mainFrame() == m_frame)
+    if (page() && page()->frameIsMainFrame(m_frame))
         pageWheelEventHandlerCountChanged(*page());
 
 #if ENABLE(TOUCH_EVENTS)
     // FIXME: Doing this only for the main frame is insufficient.
     // A subframe could have touch event handlers.
-    if (hasTouchEventHandlers() && page() && &page()->mainFrame() == m_frame)
+    if (hasTouchEventHandlers() && page() && page()->frameIsMainFrame(m_frame))
         page()->chrome().client().needTouchEvents(true);
 #endif
 
@@ -2955,7 +2955,7 @@ void Document::processViewport(const String& features, ViewportArguments::Type o
 
 void Document::updateViewportArguments()
 {
-    if (page() && &page()->mainFrame() == frame()) {
+    if (page() && page()->frameIsMainFrame(frame())) {
 #ifndef NDEBUG
         m_didDispatchViewportPropertiesChanged = true;
 #endif
@@ -4009,7 +4009,7 @@ void Document::setInPageCache(bool flag)
             // function. It would be nice if there was more symmetry here.
             // https://bugs.webkit.org/show_bug.cgi?id=98698
             v->cacheCurrentScrollPosition();
-            if (page && &page->mainFrame() == m_frame) {
+            if (page && page->frameIsMainFrame(m_frame)) {
                 v->resetScrollbarsAndClearContentsSize();
                 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
                     scrollingCoordinator->clearStateTree();
index b6d4668..f7d93b4 100644 (file)
@@ -77,7 +77,7 @@ CachedPage::~CachedPage()
 void CachedPage::restore(Page* page)
 {
     ASSERT(m_cachedMainFrame);
-    ASSERT(page && &page->mainFrame() == &m_cachedMainFrame->view()->frame());
+    ASSERT(page && page->frameIsMainFrame(&m_cachedMainFrame->view()->frame()));
     ASSERT(!page->subframeCount());
 
     m_cachedMainFrame->open();
index 8f7fcc4..8532de3 100644 (file)
@@ -399,7 +399,7 @@ void PageCache::markPagesForFullStyleRecalc(Page* page)
 {
     for (HistoryItem* current = m_head; current; current = current->m_next) {
         CachedPage* cachedPage = current->m_cachedPage.get();
-        if (&cachedPage->cachedMainFrame()->view()->frame() == &page->mainFrame())
+        if (page->frameIsMainFrame(&cachedPage->cachedMainFrame()->view()->frame()))
             cachedPage->markForFullStyleRecalc();
     }
 }
@@ -410,7 +410,7 @@ void PageCache::markPagesForDeviceScaleChanged(Page* page)
 {
     for (HistoryItem* current = m_head; current; current = current->m_next) {
         CachedPage* cachedPage = current->m_cachedPage.get();
-        if (&cachedPage->cachedMainFrame()->view()->frame() == &page->mainFrame())
+        if (page->frameIsMainFrame(&cachedPage->cachedMainFrame()->view()->frame()))
             cachedPage->markForDeviceScaleChanged();
     }
 }
index 743a6df..e055c9f 100644 (file)
@@ -603,7 +603,7 @@ void HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn(const KURL& url)
         return;
     }
 
-    bool inMainFrame = document()->frame() == &document()->page()->mainFrame();
+    bool inMainFrame = document()->page()->frameIsMainFrame(document()->frame());
 
     if (document()->isPluginDocument() && inMainFrame) {
         LOG(Plugins, "%p Plug-in document in main frame", this);
index d310938..b6f7c54 100644 (file)
@@ -373,7 +373,7 @@ CachedImage* ImageDocument::cachedImage()
 
 bool ImageDocument::shouldShrinkToFit() const
 {
-    return frame()->page()->settings().shrinksStandaloneImagesToFit() && &frame()->page()->mainFrame() == frame();
+    return frame()->settings().shrinksStandaloneImagesToFit() && frame()->page()->frameIsMainFrame(frame());
 }
 
 void ImageEventListener::handleEvent(ScriptExecutionContext*, Event* event)
index a40dca6..0bbdca5 100644 (file)
@@ -141,7 +141,7 @@ void InspectorAgent::domContentLoadedEventFired()
 
 bool InspectorAgent::isMainResourceLoader(DocumentLoader* loader, const KURL& requestUrl)
 {
-    return loader->frame() == &m_inspectedPage->mainFrame() && requestUrl == loader->requestURL();
+    return m_inspectedPage->frameIsMainFrame(loader->frame()) && requestUrl == loader->requestURL();
 }
 
 void InspectorAgent::evaluateForTestInFrontend(long callId, const String& script)
index d57cb3d..c8a195c 100644 (file)
@@ -222,7 +222,7 @@ void InspectorController::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWo
 
     // If the page is supposed to serve as InspectorFrontend notify inspector frontend
     // client that it's cleared so that the client can expose inspector bindings.
-    if (m_inspectorFrontendClient && frame == &m_page->mainFrame())
+    if (m_inspectorFrontendClient && m_page->frameIsMainFrame(frame))
         m_inspectorFrontendClient->windowObjectCleared();
 }
 
index 7666d9c..3e69c82 100644 (file)
@@ -902,7 +902,7 @@ void InspectorInstrumentation::didCommitLoadImpl(InstrumentingAgents* instrument
     if (!inspectorAgent || !inspectorAgent->developerExtrasEnabled())
         return;
 
-    if (loader->frame() == &page->mainFrame()) {
+    if (page->frameIsMainFrame(loader->frame())) {
         if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent())
             consoleAgent->reset();
 
index 807e4d0..7c5278e 100644 (file)
@@ -868,7 +868,7 @@ void InspectorPageAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWor
     if (world != mainThreadNormalWorld())
         return;
 
-    if (frame == &m_page->mainFrame())
+    if (m_page->frameIsMainFrame(frame))
         m_injectedScriptManager->discardInjectedScripts();
 
     if (!m_frontend)
@@ -900,7 +900,7 @@ void InspectorPageAgent::loadEventFired()
 
 void InspectorPageAgent::frameNavigated(DocumentLoader* loader)
 {
-    if (loader->frame() == &m_page->mainFrame()) {
+    if (m_page->frameIsMainFrame(loader->frame())) {
         m_scriptToEvaluateOnLoadOnce = m_pendingScriptToEvaluateOnLoadOnce;
         m_scriptPreprocessor = m_pendingScriptPreprocessor;
         m_pendingScriptToEvaluateOnLoadOnce = String();
index c08dd81..36d88d4 100644 (file)
@@ -1959,7 +1959,7 @@ void FrameLoader::prepareForCachedPageRestore()
 {
     ASSERT(!m_frame.tree().parent());
     ASSERT(m_frame.page());
-    ASSERT(&m_frame.page()->mainFrame() == &m_frame);
+    ASSERT(m_frame.page()->frameIsMainFrame(&m_frame));
 
     m_frame.navigationScheduler().cancel();
 
@@ -2028,7 +2028,7 @@ bool FrameLoader::isHostedByObjectElement() const
 
 bool FrameLoader::isLoadingMainFrame() const
 {
-    return m_frame.page() && &m_frame.page()->mainFrame() == &m_frame;
+    return m_frame.page() && m_frame.page()->frameIsMainFrame(&m_frame);
 }
 
 bool FrameLoader::isReplacing() const
@@ -2178,7 +2178,7 @@ void FrameLoader::checkLoadCompleteForThisFrame()
 
             m_progressTracker->progressCompleted();
             if (Page* page = m_frame.page()) {
-                if (&m_frame == &page->mainFrame())
+                if (page->frameIsMainFrame(&m_frame))
                     page->resetRelevantPaintedObjectCounter();
             }
 
@@ -2287,7 +2287,7 @@ void FrameLoader::didLayout(LayoutMilestones milestones)
 {
 #if !ASSERT_DISABLED
     if (Page* page = m_frame.page())
-        ASSERT(&page->mainFrame() == &m_frame);
+        ASSERT(page->frameIsMainFrame(&m_frame));
 #endif
 
     m_client.dispatchDidLayout(milestones);
@@ -2861,7 +2861,7 @@ void FrameLoader::continueLoadAfterNavigationPolicy(const ResourceRequest&, Pass
 
 #if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
     if (Page* page = m_frame.page()) {
-        if (&page->mainFrame() == &m_frame)
+        if (page->frameIsMainFrame(&m_frame))
             page->inspectorController()->resume();
     }
 #endif
@@ -3328,7 +3328,7 @@ void FrameLoader::dispatchDidCommitLoad()
 
     InspectorInstrumentation::didCommitLoad(&m_frame, m_documentLoader.get());
 
-    if (&m_frame.page()->mainFrame() == &m_frame)
+    if (m_frame.page()->frameIsMainFrame(&m_frame))
         m_frame.page()->featureObserver()->didCommitLoad();
 
 }
index 2405459..90cdc37 100644 (file)
@@ -81,7 +81,7 @@ void HistoryController::saveScrollPositionAndViewStateToItem(HistoryItem* item)
         item->setScrollPoint(m_frame.view()->scrollPosition());
 
     Page* page = m_frame.page();
-    if (page && &page->mainFrame() == &m_frame)
+    if (page && page->frameIsMainFrame(&m_frame))
         item->setPageScaleFactor(page->pageScaleFactor());
 
     // FIXME: It would be great to work out a way to put this code in WebCore instead of calling through to the client.
@@ -134,13 +134,13 @@ void HistoryController::restoreScrollPositionAndViewState()
     // https://bugs.webkit.org/show_bug.cgi?id=98698
     if (FrameView* view = m_frame.view()) {
         Page* page = m_frame.page();
-        if (page && &page->mainFrame() == &m_frame) {
+        if (page && page->frameIsMainFrame(&m_frame)) {
             if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
                 scrollingCoordinator->frameViewRootLayerDidChange(view);
         }
 
         if (!view->wasScrolledByUser()) {
-            if (page && &page->mainFrame() == &m_frame && m_currentItem->pageScaleFactor())
+            if (page && page->frameIsMainFrame(&m_frame) && m_currentItem->pageScaleFactor())
                 page->setPageScaleFactor(m_currentItem->pageScaleFactor(), m_currentItem->scrollPoint());
             else
                 view->setScrollPosition(m_currentItem->scrollPoint());
index a03698a..5ffaff4 100644 (file)
@@ -231,7 +231,7 @@ static bool allowsBeforeUnloadListeners(DOMWindow* window)
     Page* page = frame->page();
     if (!page)
         return false;
-    return frame == &page->mainFrame();
+    return page->frameIsMainFrame(frame);
 }
 
 bool DOMWindow::dispatchAllPendingBeforeUnloadEvents()
@@ -931,7 +931,7 @@ void DOMWindow::focus(ScriptExecutionContext* context)
     }
 
     // If we're a top level window, bring the window to the front.
-    if (m_frame == &page->mainFrame() && allowFocus)
+    if (page->frameIsMainFrame(m_frame) && allowFocus)
         page->chrome().focus();
 
     if (!m_frame)
index 3bfdc42..3859282 100644 (file)
@@ -706,7 +706,7 @@ void Frame::createView(const IntSize& viewportSize, const Color& backgroundColor
     ASSERT(this);
     ASSERT(m_page);
 
-    bool isMainFrame = this == &m_page->mainFrame();
+    bool isMainFrame = m_page->frameIsMainFrame(this);
 
     if (isMainFrame && view())
         view()->setParentVisible(false);
@@ -879,7 +879,7 @@ void Frame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor
             view->layout();
     }
 
-    if (&page->mainFrame() == this)
+    if (page->frameIsMainFrame(this))
         pageCache()->markPagesForFullStyleRecalc(page);
 }
 
index 7933417..2860e7f 100644 (file)
@@ -412,7 +412,7 @@ void FrameView::clear()
 
 bool FrameView::isMainFrameView() const
 {
-    return frame().page() && &frame().page()->mainFrame() == &frame();
+    return frame().page() && frame().page()->frameIsMainFrame(&frame());
 }
 
 bool FrameView::didFirstLayout() const
@@ -2742,8 +2742,9 @@ void FrameView::performPostLayoutTasks()
         }
     }
 
-    if (milestonesAchieved && page && &page->mainFrame() == &frame())
+    if (milestonesAchieved && page && page->frameIsMainFrame(&frame()))
         frame().loader().didLayout(milestonesAchieved);
+
 #if ENABLE(FONT_LOAD_EVENTS)
     if (RuntimeEnabledFeatures::fontLoadEventsEnabled())
         frame().document()->fontloader()->didLayout();
index 19f6bf9..69baf60 100644 (file)
@@ -161,6 +161,7 @@ public:
     PlugInClient* plugInClient() const { return m_plugInClient; }
 
     Frame& mainFrame() const { return *m_mainFrame; }
+    bool frameIsMainFrame(const Frame* frame) { return frame == m_mainFrame.get(); }
 
     bool openedByDOM() const;
     void setOpenedByDOM();
index b377ca9..2268377 100644 (file)
@@ -829,7 +829,7 @@ bool RenderBox::canAutoscroll() const
     if (node() != &document())
         return false;
     Page* page = frame().page();
-    return page && &page->mainFrame() == &frame() && view().frameView().isScrollable();
+    return page && page->frameIsMainFrame(&frame()) && view().frameView().isScrollable();
 }
 
 // If specified point is in border belt, returned offset denotes direction of
index 8cb9b55..5834e2e 100644 (file)
@@ -121,7 +121,7 @@ RenderLayerBacking::RenderLayerBacking(RenderLayer* layer)
 {
     if (layer->isRootLayer()) {
         Page* page = renderer().frame().page();
-        if (page && &page->mainFrame() == &renderer().frame()) {
+        if (page && page->frameIsMainFrame(&renderer().frame())) {
             m_isMainFrameRenderViewLayer = true;
 
 #if PLATFORM(MAC)
index 1cacd16..cbf3127 100644 (file)
@@ -1065,7 +1065,7 @@ bool WebFrameLoaderClient::canHandleRequest(const ResourceRequest& request) cons
 {
     Frame* frame = core(m_webFrame.get());
     Page* page = frame->page();
-    BOOL forMainFrame = page && &page->mainFrame() == frame;
+    BOOL forMainFrame = page && page->frameIsMainFrame(frame);
     return [WebView _canHandleRequest:request.nsURLRequest(UpdateHTTPBody) forMainFrame:forMainFrame];
 }
 
@@ -1265,7 +1265,7 @@ void WebFrameLoaderClient::transitionToCommittedForNewPage()
     // If we own the view, delete the old one - otherwise the render m_frame will take care of deleting the view.
     Frame* coreFrame = core(m_webFrame.get());
     Page* page = coreFrame->page();
-    bool isMainFrame = coreFrame == &page->mainFrame();
+    bool isMainFrame = page->frameIsMainFrame(coreFrame);
     if (isMainFrame && coreFrame->view())
         coreFrame->view()->setParentVisible(false);
     coreFrame->setView(0);
index 5825553..bb38aa3 100644 (file)
@@ -282,7 +282,7 @@ static inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCCl
 
     // If this isn't the main frame, it must have an owner element set, or it
     // won't ever get installed in the view hierarchy.
-    ASSERT(frame == &frame->page()->mainFrame() || frame->ownerElement());
+    ASSERT(frame->page()->frameIsMainFrame(frame) || frame->ownerElement());
 
     FrameView* view = frame->view();