OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2000 Dirk Mueller (mueller@kde.org) | 3 * Copyright (C) 2000 Dirk Mueller (mueller@kde.org) |
4 * Copyright (C) 2004, 2006, 2009, 2010 Apple Inc. All rights reserved. | 4 * Copyright (C) 2004, 2006, 2009, 2010 Apple Inc. All rights reserved. |
5 * Copyright (C) 2013 Google Inc. All rights reserved. | 5 * Copyright (C) 2013 Google Inc. All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 22 matching lines...) Expand all Loading... |
33 #include "core/rendering/RenderLayer.h" | 33 #include "core/rendering/RenderLayer.h" |
34 #include "core/rendering/RenderView.h" | 34 #include "core/rendering/RenderView.h" |
35 #include "core/rendering/compositing/CompositedLayerMapping.h" | 35 #include "core/rendering/compositing/CompositedLayerMapping.h" |
36 #include "core/rendering/compositing/RenderLayerCompositor.h" | 36 #include "core/rendering/compositing/RenderLayerCompositor.h" |
37 #include "wtf/HashMap.h" | 37 #include "wtf/HashMap.h" |
38 | 38 |
39 namespace blink { | 39 namespace blink { |
40 | 40 |
41 RenderWidget::RenderWidget(Element* element) | 41 RenderWidget::RenderWidget(Element* element) |
42 : RenderReplaced(element) | 42 : RenderReplaced(element) |
| 43 #if !ENABLE(OILPAN) |
43 // Reference counting is used to prevent the widget from being | 44 // Reference counting is used to prevent the widget from being |
44 // destroyed while inside the Widget code, which might not be | 45 // destroyed while inside the Widget code, which might not be |
45 // able to handle that. | 46 // able to handle that. |
46 , m_refCount(1) | 47 , m_refCount(1) |
| 48 #endif |
47 { | 49 { |
48 ASSERT(element); | 50 ASSERT(element); |
49 frameView()->addWidget(this); | 51 frameView()->addWidget(this); |
50 } | 52 } |
51 | 53 |
52 void RenderWidget::willBeDestroyed() | 54 void RenderWidget::willBeDestroyed() |
53 { | 55 { |
54 frameView()->removeWidget(this); | 56 frameView()->removeWidget(this); |
55 | 57 |
56 if (AXObjectCache* cache = document().existingAXObjectCache()) { | 58 if (AXObjectCache* cache = document().existingAXObjectCache()) { |
57 cache->childrenChanged(this->parent()); | 59 cache->childrenChanged(this->parent()); |
58 cache->remove(this); | 60 cache->remove(this); |
59 } | 61 } |
60 | 62 |
61 Element* element = toElement(node()); | 63 Element* element = toElement(node()); |
62 if (element && element->isFrameOwnerElement()) | 64 if (element && element->isFrameOwnerElement()) |
63 toHTMLFrameOwnerElement(element)->setWidget(nullptr); | 65 toHTMLFrameOwnerElement(element)->setWidget(nullptr); |
64 | 66 |
65 RenderReplaced::willBeDestroyed(); | 67 RenderReplaced::willBeDestroyed(); |
66 } | 68 } |
67 | 69 |
68 void RenderWidget::destroy() | 70 void RenderWidget::destroy() |
69 { | 71 { |
| 72 #if ENABLE(ASSERT) && ENABLE(OILPAN) |
| 73 m_didCallDestroy = true; |
| 74 #endif |
70 willBeDestroyed(); | 75 willBeDestroyed(); |
71 clearNode(); | 76 clearNode(); |
| 77 #if ENABLE(OILPAN) |
| 78 // In Oilpan, postDestroy doesn't delete |this|. So calling it here is safe |
| 79 // though |this| will be referred in FrameView. |
| 80 postDestroy(); |
| 81 #else |
72 deref(); | 82 deref(); |
| 83 #endif |
73 } | 84 } |
74 | 85 |
75 RenderWidget::~RenderWidget() | 86 RenderWidget::~RenderWidget() |
76 { | 87 { |
| 88 #if !ENABLE(OILPAN) |
77 ASSERT(m_refCount <= 0); | 89 ASSERT(m_refCount <= 0); |
| 90 #endif |
78 } | 91 } |
79 | 92 |
80 Widget* RenderWidget::widget() const | 93 Widget* RenderWidget::widget() const |
81 { | 94 { |
82 // Plugin widgets are stored in their DOM node. This includes HTMLAppletElem
ent. | 95 // Plugin widgets are stored in their DOM node. This includes HTMLAppletElem
ent. |
83 Element* element = toElement(node()); | 96 Element* element = toElement(node()); |
84 | 97 |
85 if (element && element->isFrameOwnerElement()) | 98 if (element && element->isFrameOwnerElement()) |
86 return toHTMLFrameOwnerElement(element)->ownedWidget(); | 99 return toHTMLFrameOwnerElement(element)->ownedWidget(); |
87 | 100 |
(...skipping 14 matching lines...) Expand all Loading... |
102 return false; | 115 return false; |
103 | 116 |
104 Widget* widget = this->widget(); | 117 Widget* widget = this->widget(); |
105 ASSERT(widget); | 118 ASSERT(widget); |
106 | 119 |
107 IntRect newFrame = roundedIntRect(frame); | 120 IntRect newFrame = roundedIntRect(frame); |
108 | 121 |
109 if (widget->frameRect() == newFrame) | 122 if (widget->frameRect() == newFrame) |
110 return false; | 123 return false; |
111 | 124 |
112 RefPtr<RenderWidget> protector(this); | 125 RefPtrWillBeRawPtr<RenderWidget> protector(this); |
113 RefPtrWillBeRawPtr<Node> protectedNode(node()); | 126 RefPtrWillBeRawPtr<Node> protectedNode(node()); |
114 widget->setFrameRect(newFrame); | 127 widget->setFrameRect(newFrame); |
115 return widget->frameRect().size() != newFrame.size(); | 128 return widget->frameRect().size() != newFrame.size(); |
116 } | 129 } |
117 | 130 |
118 bool RenderWidget::updateWidgetGeometry() | 131 bool RenderWidget::updateWidgetGeometry() |
119 { | 132 { |
120 Widget* widget = this->widget(); | 133 Widget* widget = this->widget(); |
121 ASSERT(widget); | 134 ASSERT(widget); |
122 | 135 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 } | 254 } |
242 | 255 |
243 void RenderWidget::setIsOverlapped(bool isOverlapped) | 256 void RenderWidget::setIsOverlapped(bool isOverlapped) |
244 { | 257 { |
245 Widget* widget = this->widget(); | 258 Widget* widget = this->widget(); |
246 ASSERT(widget); | 259 ASSERT(widget); |
247 ASSERT(widget->isFrameView()); | 260 ASSERT(widget->isFrameView()); |
248 toFrameView(widget)->setIsOverlapped(isOverlapped); | 261 toFrameView(widget)->setIsOverlapped(isOverlapped); |
249 } | 262 } |
250 | 263 |
| 264 #if !ENABLE(OILPAN) |
251 void RenderWidget::deref() | 265 void RenderWidget::deref() |
252 { | 266 { |
253 if (--m_refCount <= 0) | 267 if (--m_refCount <= 0) |
254 postDestroy(); | 268 postDestroy(); |
255 } | 269 } |
| 270 #endif |
256 | 271 |
257 void RenderWidget::updateOnWidgetChange() | 272 void RenderWidget::updateOnWidgetChange() |
258 { | 273 { |
259 Widget* widget = this->widget(); | 274 Widget* widget = this->widget(); |
260 if (!widget) | 275 if (!widget) |
261 return; | 276 return; |
262 | 277 |
263 if (!style()) | 278 if (!style()) |
264 return; | 279 return; |
265 | 280 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 CursorDirective RenderWidget::getCursor(const LayoutPoint& point, Cursor& cursor
) const | 330 CursorDirective RenderWidget::getCursor(const LayoutPoint& point, Cursor& cursor
) const |
316 { | 331 { |
317 if (widget() && widget()->isPluginView()) { | 332 if (widget() && widget()->isPluginView()) { |
318 // A plug-in is responsible for setting the cursor when the pointer is o
ver it. | 333 // A plug-in is responsible for setting the cursor when the pointer is o
ver it. |
319 return DoNotSetCursor; | 334 return DoNotSetCursor; |
320 } | 335 } |
321 return RenderReplaced::getCursor(point, cursor); | 336 return RenderReplaced::getCursor(point, cursor); |
322 } | 337 } |
323 | 338 |
324 } // namespace blink | 339 } // namespace blink |
OLD | NEW |