Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1381)

Unified Diff: Source/core/page/FrameView.cpp

Issue 16695002: Uptake WebKit Changeset r149185. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Refetch render view and null check AXObjectCache Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/rendering/RenderArena.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/page/FrameView.cpp
diff --git a/Source/core/page/FrameView.cpp b/Source/core/page/FrameView.cpp
index 7d4aae25c7b28e481a6964cdaba82a221f18fec3..79cf7e34ff8e1b0e321384e93867482776e1480c 100644
--- a/Source/core/page/FrameView.cpp
+++ b/Source/core/page/FrameView.cpp
@@ -2187,6 +2187,8 @@ bool FrameView::updateWidgets()
Vector<RenderObject*> objects;
objects.reserveInitialCapacity(size);
+ // Protect RendereArena from getting wiped out, when Document is detached during updateWidget().
+ RefPtr<RenderArena> protectedArena = m_frame->document()->renderArena();
RenderObjectSet::const_iterator end = m_widgetUpdateSet->end();
for (RenderObjectSet::const_iterator it = m_widgetUpdateSet->begin(); it != end; ++it) {
@@ -2204,12 +2206,11 @@ bool FrameView::updateWidgets()
m_widgetUpdateSet->remove(object);
}
- RenderArena* arena = m_frame->document()->renderArena();
for (size_t i = 0; i < size; ++i) {
RenderObject* object = objects[i];
if (object->isEmbeddedObject()) {
RenderEmbeddedObject* embeddedObject = static_cast<RenderEmbeddedObject*>(object);
- embeddedObject->deref(arena);
+ embeddedObject->deref(protectedArena.get());
}
}
@@ -2292,6 +2293,8 @@ void FrameView::performPostLayoutTasks()
InspectorInstrumentation::mediaQueryResultChanged(m_frame->document());
}
+ // Refetch render view since it can be destroyed by updateWidget() call above.
+ renderView = this->renderView();
if (renderView && !renderView->printing()) {
IntSize currentSize;
currentSize = visibleContentRect(IncludeScrollbars).size();
« no previous file with comments | « Source/core/dom/Document.cpp ('k') | Source/core/rendering/RenderArena.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698