Modified: trunk/Source/WebCore/ChangeLog (182804 => 182805)
--- trunk/Source/WebCore/ChangeLog 2015-04-14 19:15:28 UTC (rev 182804)
+++ trunk/Source/WebCore/ChangeLog 2015-04-14 19:22:35 UTC (rev 182805)
@@ -1,3 +1,32 @@
+2015-04-14 Chris Dumez <cdu...@apple.com>
+
+ FrameView::m_frame should be a Ref<Frame>
+ https://bugs.webkit.org/show_bug.cgi?id=143716
+
+ Reviewed by Andreas Kling.
+
+ FrameView::m_frame should be a Ref<Frame> instead of a RefPtr<Frame> as
+ it can never be null.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::FrameView):
+ (WebCore::FrameView::flushCompositingStateForThisFrame):
+ (WebCore::FrameView::hasCompositedContentIncludingDescendants):
+ (WebCore::FrameView::flushCompositingStateIncludingSubframes):
+ (WebCore::FrameView::updateCanBlitOnScrollRecursively):
+ (WebCore::FrameView::setIsOverlapped):
+ (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
+ (WebCore::FrameView::renderedCharactersExceed):
+ (WebCore::FrameView::updateLayerFlushThrottling):
+ (WebCore::FrameView::serviceScriptedAnimations):
+ (WebCore::FrameView::updateBackgroundRecursively):
+ (WebCore::FrameView::adjustScrollStepForFixedContent):
+ (WebCore::FrameView::paintContentsForSnapshot):
+ (WebCore::FrameView::notifyWidgetsInAllFrames):
+ (WebCore::FrameView::setExposedRect):
+ (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
+ * page/FrameView.h:
+
2015-04-13 Simon Fraser <simon.fra...@apple.com>
[iOS WK2] Interactive elements of developer.apple.com are broken
Modified: trunk/Source/WebCore/page/FrameView.cpp (182804 => 182805)
--- trunk/Source/WebCore/page/FrameView.cpp 2015-04-14 19:15:28 UTC (rev 182804)
+++ trunk/Source/WebCore/page/FrameView.cpp 2015-04-14 19:22:35 UTC (rev 182805)
@@ -161,7 +161,7 @@
}
FrameView::FrameView(Frame& frame)
- : m_frame(&frame)
+ : m_frame(frame)
, m_canHaveScrollbars(true)
, m_layoutTimer(*this, &FrameView::layoutTimerFired)
, m_layoutRoot(nullptr)
@@ -909,7 +909,7 @@
tileCache->doPendingRepaints();
#endif
- renderView->compositor().flushPendingLayerChanges(rootFrameForFlush == &frame());
+ renderView->compositor().flushPendingLayerChanges(rootFrameForFlush == m_frame.ptr());
return true;
}
@@ -1014,7 +1014,7 @@
bool FrameView::hasCompositedContentIncludingDescendants() const
{
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
RenderView* renderView = frame->contentRenderer();
if (RenderLayerCompositor* compositor = renderView ? &renderView->compositor() : nullptr) {
if (compositor->inCompositingMode())
@@ -1063,7 +1063,7 @@
{
bool allFramesFlushed = flushCompositingStateForThisFrame(&frame());
- for (Frame* child = frame().tree().firstChild(); child; child = child->tree().traverseNext(&frame())) {
+ for (Frame* child = frame().tree().firstChild(); child; child = child->tree().traverseNext(m_frame.ptr())) {
bool flushed = child->view()->flushCompositingStateForThisFrame(&frame());
allFramesFlushed &= flushed;
}
@@ -1511,7 +1511,7 @@
void FrameView::updateCanBlitOnScrollRecursively()
{
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
if (FrameView* view = frame->view())
view->setCanBlitOnScroll(!view->useSlowRepaints());
}
@@ -1915,7 +1915,7 @@
if (RenderLayerCompositor::allowsIndependentlyCompositedFrames(this)) {
// We also need to trigger reevaluation for this and all descendant frames,
// since a frame uses compositing if any ancestor is compositing.
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
if (RenderView* view = frame->contentRenderer()) {
RenderLayerCompositor& compositor = view->compositor();
compositor.setCompositingLayersNeedRebuild();
@@ -2177,7 +2177,7 @@
if (!page)
return true;
- if (&page->mainFrame() != &frame())
+ if (&page->mainFrame() != m_frame.ptr())
return true;
ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator();
@@ -2294,9 +2294,9 @@
bool FrameView::renderedCharactersExceed(unsigned threshold)
{
- if (!m_frame->contentRenderer())
+ if (!frame().contentRenderer())
return false;
- return countRenderedCharactersInRenderObjectWithThreshold(*m_frame->contentRenderer(), threshold) >= threshold;
+ return countRenderedCharactersInRenderObjectWithThreshold(*frame().contentRenderer(), threshold) >= threshold;
}
void FrameView::availableContentSizeChanged(AvailableSizeChangeReason reason)
@@ -2400,7 +2400,7 @@
if (page->chrome().client().adjustLayerFlushThrottling(flags))
return;
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
if (RenderView* renderView = frame->contentRenderer())
renderView->compositor().setLayerFlushThrottlingEnabled(flags & LayerFlushThrottleState::Enabled);
}
@@ -2635,13 +2635,13 @@
#if ENABLE(REQUEST_ANIMATION_FRAME)
void FrameView::serviceScriptedAnimations(double monotonicAnimationStartTime)
{
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext()) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext()) {
frame->view()->serviceScrollAnimations();
frame->animation().serviceAnimations();
}
Vector<RefPtr<Document>> documents;
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext())
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext())
documents.append(frame->document());
for (size_t i = 0; i < documents.size(); ++i)
@@ -2699,7 +2699,7 @@
void FrameView::updateBackgroundRecursively(const Color& backgroundColor, bool transparent)
{
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
if (FrameView* view = frame->view()) {
view->setTransparent(transparent);
view->setBaseBackgroundColor(backgroundColor);
@@ -3356,7 +3356,7 @@
return step;
TrackedRendererListHashSet* positionedObjects = nullptr;
- if (RenderView* root = m_frame->contentRenderer()) {
+ if (RenderView* root = frame().contentRenderer()) {
if (!root->hasPositionedObjects())
return step;
positionedObjects = root->positionedObjects();
@@ -3982,7 +3982,7 @@
// in the render tree only. This will allow us to restore the selection from the DOM
// after we paint the snapshot.
if (shouldPaintSelection == ExcludeSelection) {
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
if (RenderView* root = frame->contentRenderer())
root->clearSelection();
}
@@ -3998,7 +3998,7 @@
// Restore selection.
if (shouldPaintSelection == ExcludeSelection) {
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get()))
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr()))
frame->selection().updateAppearance();
}
@@ -4492,7 +4492,7 @@
void FrameView::notifyWidgetsInAllFrames(WidgetNotification notification)
{
- for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) {
+ for (auto* frame = m_frame.ptr(); frame; frame = frame->tree().traverseNext(m_frame.ptr())) {
if (FrameView* view = frame->view())
view->notifyWidgets(notification);
}
@@ -4763,7 +4763,7 @@
m_exposedRect = exposedRect;
// FIXME: We should support clipping to the exposed rect for subframes as well.
- if (!m_frame->isMainFrame())
+ if (!frame().isMainFrame())
return;
if (TiledBacking* tiledBacking = this->tiledBacking()) {
adjustTiledBackingCoverage();
@@ -4784,7 +4784,7 @@
m_overrideViewportSize = size;
m_hasOverrideViewportSize = true;
- if (Document* document = m_frame->document()) {
+ if (Document* document = frame().document()) {
// FIXME: this should probably be updateViewportUnitsOnResize(), but synchronously
// dirtying style here causes assertions on iOS (rdar://problem/19998166).
document->styleResolverChanged(DeferRecalcStyle);
Modified: trunk/Source/WebCore/page/FrameView.h (182804 => 182805)
--- trunk/Source/WebCore/page/FrameView.h 2015-04-14 19:15:28 UTC (rev 182804)
+++ trunk/Source/WebCore/page/FrameView.h 2015-04-14 19:22:35 UTC (rev 182805)
@@ -84,7 +84,7 @@
virtual bool scheduleAnimation() override;
#endif
- Frame& frame() const { return *m_frame; }
+ Frame& frame() const { return const_cast<Frame&>(m_frame.get()); }
WEBCORE_EXPORT RenderView* renderView() const;
@@ -659,7 +659,7 @@
LayoutSize m_margins;
std::unique_ptr<ListHashSet<RenderEmbeddedObject*>> m_embeddedObjectsToUpdate;
- const RefPtr<Frame> m_frame;
+ const Ref<Frame> m_frame;
std::unique_ptr<HashSet<RenderElement*>> m_slowRepaintObjects;