| Index: Source/core/frame/Frame.cpp
|
| diff --git a/Source/core/frame/Frame.cpp b/Source/core/frame/Frame.cpp
|
| index bfa3318070a741d669f65a7e39934fe36bdc6a3e..5d0ddcddef320495ff2ff435cebe0e4c4a34593e 100644
|
| --- a/Source/core/frame/Frame.cpp
|
| +++ b/Source/core/frame/Frame.cpp
|
| @@ -44,6 +44,7 @@
|
| #include "core/fetch/ResourceFetcher.h"
|
| #include "core/frame/DOMWindow.h"
|
| #include "core/frame/FrameDestructionObserver.h"
|
| +#include "core/frame/FrameHost.h"
|
| #include "core/frame/FrameView.h"
|
| #include "core/frame/Settings.h"
|
| #include "core/frame/animation/AnimationController.h"
|
| @@ -102,7 +103,7 @@ static inline float parentTextZoomFactor(Frame* frame)
|
| }
|
|
|
| inline Frame::Frame(PassRefPtr<FrameInit> frameInit)
|
| - : m_page(frameInit->page())
|
| + : m_host(frameInit->frameHost())
|
| , m_treeNode(this, parentFromOwnerElement(frameInit->ownerElement()))
|
| , m_loader(this, frameInit->frameLoaderClient())
|
| , m_navigationScheduler(this)
|
| @@ -122,10 +123,10 @@ inline Frame::Frame(PassRefPtr<FrameInit> frameInit)
|
| , m_inViewSourceMode(false)
|
| , m_remotePlatformLayer(0)
|
| {
|
| - ASSERT(m_page);
|
| + ASSERT(page());
|
|
|
| if (ownerElement()) {
|
| - m_page->incrementSubframeCount();
|
| + page()->incrementSubframeCount();
|
| ownerElement()->setContentFrame(*this);
|
| }
|
|
|
| @@ -207,7 +208,7 @@ void Frame::setView(PassRefPtr<FrameView> view)
|
| m_view = view;
|
|
|
| if (m_view && isMainFrame())
|
| - m_view->setVisibleContentScaleFactor(m_page->pageScaleFactor());
|
| + m_view->setVisibleContentScaleFactor(page()->pageScaleFactor());
|
| }
|
|
|
| #if ENABLE(ORIENTATION_EVENTS)
|
| @@ -219,9 +220,23 @@ void Frame::sendOrientationChangeEvent(int orientation)
|
| }
|
| #endif // ENABLE(ORIENTATION_EVENTS)
|
|
|
| +FrameHost* Frame::host() const
|
| +{
|
| + return m_host;
|
| +}
|
| +
|
| +Page* Frame::page() const
|
| +{
|
| + if (m_host)
|
| + return &m_host->page();
|
| + return nullptr;
|
| +}
|
| +
|
| Settings* Frame::settings() const
|
| {
|
| - return m_page ? &m_page->settings() : 0;
|
| + if (m_host)
|
| + return &m_host->settings();
|
| + return nullptr;
|
| }
|
|
|
| void Frame::setPrinting(bool printing, const FloatSize& pageSize, const FloatSize& originalPageSize, float maximumShrinkRatio, AdjustViewSizeOrNot shouldAdjustViewSize)
|
| @@ -331,7 +346,7 @@ void Frame::dispatchVisibilityStateChangeEvent()
|
| childFrames[i]->dispatchVisibilityStateChangeEvent();
|
| }
|
|
|
| -void Frame::willDetachPage()
|
| +void Frame::willDetachFrameHost()
|
| {
|
| // We should never be detatching the page during a Layout.
|
| RELEASE_ASSERT(!m_view || !m_view->isInLayout());
|
| @@ -341,8 +356,9 @@ void Frame::willDetachPage()
|
|
|
| HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
|
| for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
|
| - (*it)->willDetachPage();
|
| + (*it)->willDetachFrameHost();
|
|
|
| + // FIXME: Page should take care of updating focus/scrolling instead of Frame.
|
| // FIXME: It's unclear as to why this is called more than once, but it is,
|
| // so page() could be NULL.
|
| if (page() && page()->focusController().focusedFrame() == this)
|
| @@ -354,11 +370,11 @@ void Frame::willDetachPage()
|
| script().clearScriptObjects();
|
| }
|
|
|
| -void Frame::detachFromPage()
|
| +void Frame::detachFromFrameHost()
|
| {
|
| // We should never be detatching the page during a Layout.
|
| RELEASE_ASSERT(!m_view || !m_view->isInLayout());
|
| - m_page = 0;
|
| + m_host = 0;
|
| }
|
|
|
| void Frame::disconnectOwnerElement()
|
| @@ -367,15 +383,16 @@ void Frame::disconnectOwnerElement()
|
| if (Document* doc = document())
|
| doc->topDocument()->clearAXObjectCache();
|
| ownerElement()->clearContentFrame();
|
| - if (m_page)
|
| - m_page->decrementSubframeCount();
|
| + if (page())
|
| + page()->decrementSubframeCount();
|
| }
|
| m_frameInit->setOwnerElement(0);
|
| }
|
|
|
| bool Frame::isMainFrame() const
|
| {
|
| - return m_page && this == m_page->mainFrame();
|
| + Page* page = this->page();
|
| + return page && this == page->mainFrame();
|
| }
|
|
|
| String Frame::documentTypeString() const
|
| @@ -453,7 +470,7 @@ void Frame::createView(const IntSize& viewportSize, const Color& backgroundColor
|
| ScrollbarMode verticalScrollbarMode, bool verticalLock)
|
| {
|
| ASSERT(this);
|
| - ASSERT(m_page);
|
| + ASSERT(page());
|
|
|
| bool isMainFrame = this->isMainFrame();
|
|
|
| @@ -576,14 +593,14 @@ void Frame::notifyChromeClientWheelEventHandlerCountChanged() const
|
| count += WheelController::from(frame->document())->wheelEventHandlerCount();
|
| }
|
|
|
| - m_page->chrome().client().numWheelEventHandlersChanged(count);
|
| + m_host->chrome().client().numWheelEventHandlersChanged(count);
|
| }
|
|
|
| bool Frame::isURLAllowed(const KURL& url) const
|
| {
|
| // We allow one level of self-reference because some sites depend on that,
|
| // but we don't allow more than one.
|
| - if (m_page->subframeCount() >= Page::maxNumberOfFrames)
|
| + if (page()->subframeCount() >= Page::maxNumberOfFrames)
|
| return false;
|
| bool foundSelfReference = false;
|
| for (const Frame* frame = this; frame; frame = frame->tree().parent()) {
|
| @@ -645,9 +662,8 @@ PassOwnPtr<DragImage> Frame::nodeImage(Node* node)
|
| LayoutRect topLevelRect;
|
| IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect));
|
|
|
| - float deviceScaleFactor = 1;
|
| - if (m_page)
|
| - deviceScaleFactor = m_page->deviceScaleFactor();
|
| + ASSERT(document()->isActive());
|
| + float deviceScaleFactor = m_host->deviceScaleFactor();
|
| paintingRect.setWidth(paintingRect.width() * deviceScaleFactor);
|
| paintingRect.setHeight(paintingRect.height() * deviceScaleFactor);
|
|
|
| @@ -675,9 +691,8 @@ PassOwnPtr<DragImage> Frame::dragImageForSelection()
|
|
|
| IntRect paintingRect = enclosingIntRect(selection().bounds());
|
|
|
| - float deviceScaleFactor = 1;
|
| - if (m_page)
|
| - deviceScaleFactor = m_page->deviceScaleFactor();
|
| + ASSERT(document()->isActive());
|
| + float deviceScaleFactor = m_host->deviceScaleFactor();
|
| paintingRect.setWidth(paintingRect.width() * deviceScaleFactor);
|
| paintingRect.setHeight(paintingRect.height() * deviceScaleFactor);
|
|
|
| @@ -696,10 +711,10 @@ PassOwnPtr<DragImage> Frame::dragImageForSelection()
|
|
|
| double Frame::devicePixelRatio() const
|
| {
|
| - if (!m_page)
|
| + if (!m_host)
|
| return 0;
|
|
|
| - double ratio = m_page->deviceScaleFactor();
|
| + double ratio = m_host->deviceScaleFactor();
|
| if (RuntimeEnabledFeatures::devicePixelRatioIncludesZoomEnabled())
|
| ratio *= pageZoomFactor();
|
| return ratio;
|
|
|