Changeset 155796 in webkit
- Timestamp:
- Sep 15, 2013 12:27:52 AM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r155775 r155796 1 2013-09-14 Andreas Kling <akling@apple.com> 2 3 Get rid of ref-counting on RenderWidget. 4 <https://webkit.org/b/121357> 5 6 Reviewed by Darin Adler. 7 8 * wtf/WeakPtr.h: 9 (WTF::WeakPtr::operator!): 10 11 Add operator! to WeakPtr. 12 1 13 2013-09-14 Darin Adler <darin@apple.com> 2 14 -
trunk/Source/WTF/wtf/WeakPtr.h
r154294 r155796 101 101 102 102 T* get() const { return m_ref->get(); } 103 bool operator!() const { return !m_ref; } 103 104 104 105 private: -
trunk/Source/WebCore/ChangeLog
r155795 r155796 1 2013-09-15 Andreas Kling <akling@apple.com> 2 3 Get rid of ref-counting on RenderWidget. 4 <https://webkit.org/b/121357> 5 6 Reviewed by Darin Adler. 7 8 Instead of RenderView tracking RenderWidgets, have FrameView track Widgets 9 that are currently in the render tree. 10 11 To protect ourselves during NPAPI tomfoolery, we now let RenderWidget hand 12 out weak pointers through a createWeakPtr() method so call sites can monitor 13 the renderer for deletion without having to take shared ownership. 14 15 This works out quite nicely since instead of keeping a limping object alive 16 for a little longer just so we can call methods on it (to accomplish nothing), 17 we're forced to check right away if it's gone, and take immediate action. 18 19 De-virtualized RenderObject::destroy() since it's no longer needed for 20 RenderWidget to defer destruction. 21 22 * page/FrameView.cpp: 23 (WebCore::FrameView::layout): 24 (WebCore::FrameView::repaintFixedElementsAfterScrolling): 25 26 Call updateWidgetPositions() on FrameView instead of RenderView. 27 28 (WebCore::FrameView::updateEmbeddedObject): 29 30 Turn null checking of embedded object's element backpointer into an 31 assertion. This will eventually go away completely once that renderer 32 can return a HTMLFrameOwnerElement&. 33 34 Use WeakPtr to check for renderer destruction following the call out 35 to updateWidget(). 36 37 (WebCore::FrameView::updateEmbeddedObjects): 38 39 Slap a WidgetHierarchyUpdatesSuspensionScope guard on this function 40 to defer Widget updates until all the updateEmbeddedObject calls are 41 done. This avoids RenderWidget::setWidget() having to handle 'this' 42 disappearing from underneath. 43 44 Also use a ListHashSet with a null sentinel to avoid looping forever. 45 46 (WebCore::FrameView::performPostLayoutTasks): 47 48 Only call updateEmbeddedObjects() once since that function no longer 49 operates in chunks. 50 51 (WebCore::FrameView::notifyWidgetsInAllFrames): 52 53 Call notifyWidgets() on FrameView instead of RenderView. 54 55 (WebCore::FrameView::didAddWidgetToRenderTree): 56 (WebCore::FrameView::willRemoveWidgetFromRenderTree): 57 58 Added. These are called by RenderWidget when a Widget is being 59 added or removed from a RenderWidget. 60 61 (WebCore::collectWidgets): 62 63 Helper to collect raw Widget pointers into a Vector and ref them. 64 65 (WebCore::FrameView::updateWidgetPositions): 66 67 Moved here from RenderView. This function holds a ref on all the 68 attached Widgets and calls RenderWidget::updateWidgetPosition() on 69 their corresponding renderers. 70 71 (WebCore::FrameView::notifyWidgets): 72 73 Moved here from RenderView. Holds a ref on all the widgets while 74 calling Widget::notifyWidget() on each one. 75 76 * rendering/RenderLayer.cpp: 77 (WebCore::RenderLayer::scrollTo): 78 79 Call updateWidgetPositions() on FrameView instead of RenderView. 80 81 * rendering/RenderObject.h: 82 83 De-virtualized destroy(). 84 85 * rendering/RenderView.cpp: 86 * rendering/RenderView.h: 87 88 Moved a bunch of things to FrameView. Made protected section private 89 since nothing inherits from RenderView. 90 91 * rendering/RenderWidget.h: 92 (WebCore::RenderWidget::createWeakPtr): 93 94 Added a WeakPtr factory for clients that want to monitor this object 95 for destruction. 96 97 * rendering/RenderWidget.cpp: 98 (WebCore::RenderWidget::RenderWidget): 99 (WebCore::RenderWidget::willBeDestroyed): 100 (WebCore::RenderWidget::~RenderWidget): 101 102 Removed ref counting. 103 Removed registration with RenderView in ctor/willBeDestroyed. 104 105 (WebCore::RenderWidget::setWidgetGeometry): 106 107 Monitor the RenderWidget itself through a WeakPtr and check on it 108 after each step that we're still alive. In that case just bail out. 109 110 (WebCore::RenderWidget::setWidget): 111 112 Register the incoming/outgoing Widget with the FrameView. 113 Use a WeakPtr to check on 'this' after updateWidgetGeometry(). 114 115 (WebCore::RenderWidget::updateWidgetPosition): 116 117 Use a WeakPtr to check on 'this' after updateWidgetGeometry(). 118 119 * GNUmakefile.list.am: 120 * rendering/RenderWidgetProtector.h: 121 122 Removed. 123 124 1 125 2013-09-14 Sam Weinig <sam@webkit.org> 2 126 -
trunk/Source/WebCore/GNUmakefile.list.am
r155779 r155796 4541 4541 Source/WebCore/rendering/RenderWidget.cpp \ 4542 4542 Source/WebCore/rendering/RenderWidget.h \ 4543 Source/WebCore/rendering/RenderWidgetProtector.h \4544 4543 Source/WebCore/rendering/RenderWordBreak.cpp \ 4545 4544 Source/WebCore/rendering/RenderWordBreak.h \ -
trunk/Source/WebCore/page/FrameView.cpp
r155660 r155796 128 128 #endif 129 129 130 // The maximum number of updateEmbeddedObjects iterations that should be done before returning.131 static const unsigned maxUpdateEmbeddedObjectsIterations = 2;132 133 130 static RenderLayer::UpdateLayerPositionsFlags updateLayerPositionFlags(RenderLayer* layer, bool isRelayoutingSubtree, bool didFullRepaint) 134 131 { … … 1346 1343 else { 1347 1344 if (!m_inSynchronousPostLayout) { 1348 if (inChildFrameLayoutWithFrameFlattening) { 1349 if (RenderView* renderView = this->renderView()) 1350 renderView->updateWidgetPositions(); 1351 } else { 1345 if (inChildFrameLayoutWithFrameFlattening) 1346 updateWidgetPositions(); 1347 else { 1352 1348 m_inSynchronousPostLayout = true; 1353 1349 performPostLayoutTasks(); // Calls resumeScheduledEvents(). … … 1402 1398 { 1403 1399 if (!m_embeddedObjectsToUpdate) 1404 m_embeddedObjectsToUpdate = adoptPtr(new HashSet<RenderEmbeddedObject*>);1400 m_embeddedObjectsToUpdate = adoptPtr(new ListHashSet<RenderEmbeddedObject*>); 1405 1401 1406 1402 ASSERT(embeddedObject.frameOwnerElement()); … … 1995 1991 if (m_nestedLayoutCount <= 1 && hasViewportConstrainedObjects()) { 1996 1992 if (RenderView* renderView = this->renderView()) { 1997 renderView->updateWidgetPositions();1993 updateWidgetPositions(); 1998 1994 renderView->layer()->updateLayerPositionsAfterDocumentScroll(); 1999 1995 } … … 2651 2647 void FrameView::updateEmbeddedObject(RenderEmbeddedObject& embeddedObject) 2652 2648 { 2653 ASSERT(m_embeddedObjectsToUpdate->contains(&embeddedObject));2654 2655 // The object may have already been destroyed (thus element cleared),2656 // but FrameView holds a manual ref, so it won't have been deleted.2657 if (!embeddedObject.frameOwnerElement())2658 return;2659 2660 2649 // No need to update if it's already crashed or known to be missing. 2661 2650 if (embeddedObject.isPluginUnavailable()) 2662 2651 return; 2652 2653 // FIXME: RenderEmbeddedObject::frameOwnerElement() should return a reference. 2654 ASSERT(embeddedObject.frameOwnerElement()); 2663 2655 2664 2656 HTMLFrameOwnerElement& element = *embeddedObject.frameOwnerElement(); … … 2671 2663 return; 2672 2664 } 2665 2666 auto weakRenderer = embeddedObject.createWeakPtr(); 2673 2667 2674 2668 // FIXME: This could turn into a real virtual dispatch if we defined … … 2692 2686 ASSERT_NOT_REACHED(); 2693 2687 2694 // Caution: it's possible the object was destroyed again, since loading a 2695 // plugin may run any arbitrary JavaScript. 2688 // It's possible the renderer was destroyed below updateWidget() since loading a plugin may execute arbitrary JavaScript. 2689 if (!weakRenderer) 2690 return; 2691 2696 2692 embeddedObject.updateWidgetPosition(); 2697 2693 } 2698 2694 2699 boolFrameView::updateEmbeddedObjects()2695 void FrameView::updateEmbeddedObjects() 2700 2696 { 2701 2697 if (m_nestedLayoutCount > 1 || !m_embeddedObjectsToUpdate || m_embeddedObjectsToUpdate->isEmpty()) 2702 return true; 2703 2704 // Protect RendereArena from getting wiped out, when Document is detached during updateWidget(). 2705 RefPtr<RenderArena> protectedArena = frame().document()->renderArena(); 2706 2707 Vector<RenderEmbeddedObject*> embeddedObjects; 2708 embeddedObjects.reserveInitialCapacity(m_embeddedObjectsToUpdate->size()); 2709 for (auto it = m_embeddedObjectsToUpdate->begin(), end = m_embeddedObjectsToUpdate->end(); it != end; ++it) { 2710 RenderEmbeddedObject& object = **it; 2711 embeddedObjects.uncheckedAppend(&object); 2712 object.ref(); 2713 } 2714 2715 for (unsigned i = 0; i < embeddedObjects.size(); ++i) { 2716 RenderEmbeddedObject& object = *embeddedObjects[i]; 2717 updateEmbeddedObject(object); 2718 m_embeddedObjectsToUpdate->remove(&object); 2719 } 2720 2721 for (unsigned i = 0; i < embeddedObjects.size(); ++i) 2722 embeddedObjects[i]->deref(protectedArena.get()); 2723 2724 return m_embeddedObjectsToUpdate->isEmpty(); 2698 return; 2699 2700 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates; 2701 2702 // Insert a marker for where we should stop. 2703 ASSERT(!m_embeddedObjectsToUpdate->contains(nullptr)); 2704 m_embeddedObjectsToUpdate->add(nullptr); 2705 2706 while (!m_embeddedObjectsToUpdate->isEmpty()) { 2707 RenderEmbeddedObject* embeddedObject = m_embeddedObjectsToUpdate->takeFirst(); 2708 if (!embeddedObject) 2709 break; 2710 updateEmbeddedObject(*embeddedObject); 2711 } 2725 2712 } 2726 2713 … … 2777 2764 frame().loader().client().dispatchDidLayout(); 2778 2765 2779 if (RenderView* renderView = this->renderView()) 2780 renderView->updateWidgetPositions(); 2781 2782 // layout() protects FrameView, but it still can get destroyed when updateWidgets() 2766 updateWidgetPositions(); 2767 2768 // layout() protects FrameView, but it still can get destroyed when updateEmbeddedObjects() 2783 2769 // is called through the post layout timer. 2784 2770 Ref<FrameView> protect(*this); 2785 for (unsigned i = 0; i < maxUpdateEmbeddedObjectsIterations; i++) { 2786 if (updateEmbeddedObjects()) 2787 break; 2788 } 2771 2772 updateEmbeddedObjects(); 2789 2773 2790 2774 if (page) { … … 4155 4139 { 4156 4140 for (Frame* frame = m_frame.get(); frame; frame = frame->tree().traverseNext(m_frame.get())) { 4157 if ( RenderView* root = frame->contentRenderer())4158 root->notifyWidgets(notification);4141 if (FrameView* view = frame->view()) 4142 view->notifyWidgets(notification); 4159 4143 } 4160 4144 } … … 4258 4242 } 4259 4243 4244 void FrameView::didAddWidgetToRenderTree(Widget& widget) 4245 { 4246 ASSERT(!m_widgetsInRenderTree.contains(&widget)); 4247 m_widgetsInRenderTree.add(&widget); 4248 } 4249 4250 void FrameView::willRemoveWidgetFromRenderTree(Widget& widget) 4251 { 4252 ASSERT(m_widgetsInRenderTree.contains(&widget)); 4253 m_widgetsInRenderTree.remove(&widget); 4254 } 4255 4256 static Vector<RefPtr<Widget>> collectAndProtectWidgets(const HashSet<Widget*>& set) 4257 { 4258 Vector<RefPtr<Widget>> widgets; 4259 copyToVector(set, widgets); 4260 return widgets; 4261 } 4262 4263 void FrameView::updateWidgetPositions() 4264 { 4265 // updateWidgetPosition() can possibly cause layout to be re-entered (via plug-ins running 4266 // scripts in response to NPP_SetWindow, for example), so we need to keep the Widgets 4267 // alive during enumeration. 4268 auto protectedWidgets = collectAndProtectWidgets(m_widgetsInRenderTree); 4269 4270 for (unsigned i = 0, size = protectedWidgets.size(); i < size; ++i) { 4271 if (RenderWidget* renderWidget = RenderWidget::find(protectedWidgets[i].get())) 4272 renderWidget->updateWidgetPosition(); 4273 } 4274 } 4275 4276 void FrameView::notifyWidgets(WidgetNotification notification) 4277 { 4278 auto protectedWidgets = collectAndProtectWidgets(m_widgetsInRenderTree); 4279 4280 for (unsigned i = 0, size = protectedWidgets.size(); i < size; ++i) 4281 protectedWidgets[i]->notifyWidget(notification); 4282 } 4283 4260 4284 } // namespace WebCore -
trunk/Source/WebCore/page/FrameView.h
r155524 r155796 34 34 #include "ScrollView.h" 35 35 #include <wtf/Forward.h> 36 #include <wtf/ListHashSet.h> 36 37 #include <wtf/OwnPtr.h> 37 38 #include <wtf/text/WTFString.h> … … 438 439 void setScrollPinningBehavior(ScrollPinningBehavior); 439 440 441 void updateWidgetPositions(); 442 void didAddWidgetToRenderTree(Widget&); 443 void willRemoveWidgetFromRenderTree(Widget&); 444 440 445 protected: 441 446 virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) OVERRIDE; … … 524 529 double adjustedDeferredRepaintDelay() const; 525 530 526 boolupdateEmbeddedObjects();531 void updateEmbeddedObjects(); 527 532 void updateEmbeddedObject(RenderEmbeddedObject&); 528 533 void scrollToAnchor(); … … 544 549 void notifyWidgetsInAllFrames(WidgetNotification); 545 550 void removeFromAXObjectCache(); 546 551 void notifyWidgets(WidgetNotification); 552 553 HashSet<Widget*> m_widgetsInRenderTree; 554 547 555 static double sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache 548 556 … … 550 558 LayoutSize m_margins; 551 559 552 OwnPtr< HashSet<RenderEmbeddedObject*>> m_embeddedObjectsToUpdate;560 OwnPtr<ListHashSet<RenderEmbeddedObject*>> m_embeddedObjectsToUpdate; 553 561 const RefPtr<Frame> m_frame; 554 562 -
trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp
r155631 r155796 54 54 #include "RenderTheme.h" 55 55 #include "RenderView.h" 56 #include "RenderWidgetProtector.h"57 56 #include "Settings.h" 58 57 #include "Text.h" -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r155607 r155796 2247 2247 view.frameView().updateAnnotatedRegions(); 2248 2248 #endif 2249 view. updateWidgetPositions();2249 view.frameView().updateWidgetPositions(); 2250 2250 2251 2251 if (!m_updatingMarqueePosition) { -
trunk/Source/WebCore/rendering/RenderObject.h
r155591 r155796 943 943 944 944 void destroyAndCleanupAnonymousWrappers(); 945 v irtual void destroy();945 void destroy(); 946 946 947 947 // Virtual function helpers for the deprecated Flexible Box Layout (display: -webkit-box). -
trunk/Source/WebCore/rendering/RenderView.cpp
r155530 r155796 43 43 #include "RenderSelectionInfo.h" 44 44 #include "RenderWidget.h" 45 #include "RenderWidgetProtector.h"46 45 #include "StyleInheritedData.h" 47 46 #include "TransformState.h" … … 955 954 } 956 955 957 size_t RenderView::getRetainedWidgets(Vector<RenderWidget*>& renderWidgets)958 {959 size_t size = m_widgets.size();960 961 renderWidgets.reserveCapacity(size);962 963 RenderWidgetSet::const_iterator end = m_widgets.end();964 for (RenderWidgetSet::const_iterator it = m_widgets.begin(); it != end; ++it) {965 renderWidgets.uncheckedAppend(*it);966 (*it)->ref();967 }968 969 return size;970 }971 972 void RenderView::releaseWidgets(Vector<RenderWidget*>& renderWidgets)973 {974 size_t size = renderWidgets.size();975 976 for (size_t i = 0; i < size; ++i)977 renderWidgets[i]->deref(renderArena());978 }979 980 void RenderView::updateWidgetPositions()981 {982 // updateWidgetPosition() can possibly cause layout to be re-entered (via plug-ins running983 // scripts in response to NPP_SetWindow, for example), so we need to keep the Widgets984 // alive during enumeration.985 986 Vector<RenderWidget*> renderWidgets;987 size_t size = getRetainedWidgets(renderWidgets);988 989 for (size_t i = 0; i < size; ++i)990 renderWidgets[i]->updateWidgetPosition();991 992 releaseWidgets(renderWidgets);993 }994 995 void RenderView::addWidget(RenderWidget* o)996 {997 m_widgets.add(o);998 }999 1000 void RenderView::removeWidget(RenderWidget* o)1001 {1002 m_widgets.remove(o);1003 }1004 1005 void RenderView::notifyWidgets(WidgetNotification notification)1006 {1007 Vector<RenderWidget*> renderWidgets;1008 size_t size = getRetainedWidgets(renderWidgets);1009 1010 for (size_t i = 0; i < size; ++i)1011 renderWidgets[i]->notifyWidget(notification);1012 1013 releaseWidgets(renderWidgets);1014 }1015 1016 956 LayoutRect RenderView::viewRect() const 1017 957 { … … 1020 960 return frameView().visibleContentRect(); 1021 961 } 1022 1023 962 1024 963 IntRect RenderView::unscaledDocumentRect() const -
trunk/Source/WebCore/rendering/RenderView.h
r155370 r155796 34 34 class ImageQualityController; 35 35 class RenderQuote; 36 class RenderWidget;37 36 38 37 #if USE(ACCELERATED_COMPOSITING) … … 109 108 110 109 virtual LayoutRect viewRect() const OVERRIDE; 111 112 void updateWidgetPositions();113 void addWidget(RenderWidget*);114 void removeWidget(RenderWidget*);115 116 void notifyWidgets(WidgetNotification);117 110 118 111 // layoutDelta is used transiently during layout to store how far an object has moved from its … … 293 286 #endif 294 287 295 size_t getRetainedWidgets(Vector<RenderWidget*>&);296 void releaseWidgets(Vector<RenderWidget*>&);297 298 288 void pushLayoutStateForCurrentFlowThread(const RenderObject*); 299 289 void popLayoutStateForCurrentFlowThread(); … … 302 292 friend class LayoutStateDisabler; 303 293 304 pr otected:294 private: 305 295 FrameView& m_frameView; 306 296 … … 330 320 int m_maximalOutlineSize; // Used to apply a fudge factor to dirty-rect checks on blocks/tables. 331 321 332 typedef HashSet<RenderWidget*> RenderWidgetSet;333 RenderWidgetSet m_widgets;334 335 private:336 322 bool shouldUsePrintingLayout() const; 337 323 -
trunk/Source/WebCore/rendering/RenderWidget.cpp
r155598 r155796 34 34 #include "RenderLayer.h" 35 35 #include "RenderView.h" 36 #include "RenderWidgetProtector.h"37 36 #include <wtf/StackStats.h> 38 37 #include <wtf/Ref.h> … … 92 91 RenderWidget::RenderWidget(HTMLFrameOwnerElement* element) 93 92 : RenderReplaced(element) 93 , m_weakPtrFactory(this) 94 94 , m_widget(0) 95 95 , m_frameView(element->document().view()) 96 // Reference counting is used to prevent the widget from being97 // destroyed while inside the Widget code, which might not be98 // able to handle that.99 , m_refCount(1)100 96 { 101 97 setInline(false); 102 view().addWidget(this);103 98 } 104 99 105 100 void RenderWidget::willBeDestroyed() 106 101 { 107 view().removeWidget(this);108 109 102 if (AXObjectCache* cache = document().existingAXObjectCache()) { 110 103 cache->childrenChanged(this->parent()); … … 117 110 } 118 111 119 void RenderWidget::destroy()120 {121 willBeDestroyed();122 123 // Grab the arena from node()->document().renderArena() before clearing the node pointer.124 // Clear the node before deref-ing, as this may be deleted when deref is called.125 RenderArena* arena = renderArena();126 clearNode();127 deref(arena);128 }129 130 112 RenderWidget::~RenderWidget() 131 113 { 132 ASSERT(m_refCount <= 0);133 clearWidget();134 114 } 135 115 … … 157 137 m_clipRect = clipRect; 158 138 159 RenderWidgetProtector protector(this); 160 Ref<HTMLFrameOwnerElement> protectElement(*frameOwnerElement()); 139 WeakPtr<RenderWidget> weakThis = createWeakPtr(); 140 141 // This call *may* cause this renderer to disappear from underneath... 161 142 m_widget->setFrameRect(newFrame); 162 143 163 if (clipChanged && !boundsChanged) 144 // ...so we follow up with a sanity check. 145 if (!weakThis) 146 return true; 147 148 if (clipChanged && !boundsChanged) { 149 // This call *may* cause this renderer to disappear from underneath... 164 150 m_widget->clipRectChanged(); 165 151 152 // ...so here's another sanity check. 153 if (!weakThis) 154 return true; 155 } 156 166 157 #if USE(ACCELERATED_COMPOSITING) 167 158 if (hasLayer() && layer()->isComposited()) … … 194 185 if (m_widget) { 195 186 moveWidgetToParentSoon(m_widget.get(), 0); 187 view().frameView().willRemoveWidgetFromRenderTree(*m_widget); 196 188 widgetRendererMap().remove(m_widget.get()); 197 clearWidget();189 m_widget = nullptr; 198 190 } 199 191 m_widget = widget; 200 192 if (m_widget) { 201 193 widgetRendererMap().add(m_widget.get(), this); 194 view().frameView().didAddWidgetToRenderTree(*m_widget); 202 195 // If we've already received a layout, apply the calculated space to the 203 196 // widget immediately, but we have to have really been fully constructed (with a non-null 204 197 // style pointer). 205 198 if (style()) { 206 if (!needsLayout()) 199 if (!needsLayout()) { 200 WeakPtr<RenderWidget> weakThis = createWeakPtr(); 207 201 updateWidgetGeometry(); 202 if (!weakThis) 203 return; 204 } 208 205 209 206 if (style()->visibility() != VISIBLE) … … 341 338 } 342 339 343 void RenderWidget::deref(RenderArena *arena)344 {345 if (--m_refCount <= 0)346 arenaDelete(arena, this);347 }348 349 340 void RenderWidget::updateWidgetPosition() 350 341 { … … 352 343 return; 353 344 345 WeakPtr<RenderWidget> weakThis = createWeakPtr(); 346 354 347 bool boundsChanged = updateWidgetGeometry(); 355 348 349 if (!weakThis) 350 return; 351 356 352 // if the frame bounds got changed, or if view needs layout (possibly indicating 357 353 // content size is wrong) we have to do a layout to set the right widget size … … 381 377 } 382 378 383 void RenderWidget::clearWidget()384 {385 m_widget = 0;386 }387 388 379 RenderWidget* RenderWidget::find(const Widget* widget) 389 380 { -
trunk/Source/WebCore/rendering/RenderWidget.h
r155598 r155796 27 27 #include "RenderReplaced.h" 28 28 #include "Widget.h" 29 #include <wtf/WeakPtr.h> 29 30 30 31 namespace WebCore { … … 72 73 void notifyWidget(WidgetNotification); 73 74 74 RenderArena* ref() { ++m_refCount; return renderArena(); }75 void deref(RenderArena*);76 77 75 #if USE(ACCELERATED_COMPOSITING) 78 76 bool requiresAcceleratedCompositing() const; 79 77 #endif 78 79 WeakPtr<RenderWidget> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); } 80 80 81 81 virtual void viewCleared() { } … … 85 85 86 86 FrameView* frameView() const { return m_frameView; } 87 88 void clearWidget();89 87 90 88 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE FINAL; … … 107 105 108 106 virtual void willBeDestroyed() OVERRIDE FINAL; 109 virtual void destroy() OVERRIDE FINAL;110 107 virtual void setSelectionState(SelectionState) OVERRIDE FINAL; 111 108 virtual void setOverlapTestResult(bool) OVERRIDE FINAL; … … 114 111 bool updateWidgetGeometry(); 115 112 113 WeakPtrFactory<RenderWidget> m_weakPtrFactory; 116 114 RefPtr<Widget> m_widget; 117 115 FrameView* m_frameView; 118 116 IntRect m_clipRect; // The rectangle needs to remain correct after scrolling, so it is stored in content view coordinates, and not clipped to window. 119 int m_refCount;120 117 }; 121 118
Note: See TracChangeset
for help on using the changeset viewer.