Index: Source/core/rendering/RenderBoxModelObject.cpp |
diff --git a/Source/core/rendering/RenderBoxModelObject.cpp b/Source/core/rendering/RenderBoxModelObject.cpp |
index 8ec08d4bc738a86c755f9f226fd356360f6522ee..b06ed1d121931c3039ba1eead2f207132217cc71 100644 |
--- a/Source/core/rendering/RenderBoxModelObject.cpp |
+++ b/Source/core/rendering/RenderBoxModelObject.cpp |
@@ -38,6 +38,7 @@ |
#include "core/rendering/RenderLayer.h" |
#include "core/rendering/RenderObjectInlines.h" |
#include "core/rendering/RenderRegion.h" |
+#include "core/rendering/RenderTextFragment.h" |
#include "core/rendering/RenderView.h" |
#include "core/rendering/compositing/CompositedLayerMapping.h" |
#include "core/rendering/compositing/RenderLayerCompositor.h" |
@@ -60,13 +61,13 @@ using namespace HTMLNames; |
// an anonymous block (that houses other blocks) or it will be an inline flow. |
// <b><i><p>Hello</p></i></b>. In this example the <i> will have a block as |
// its continuation but the <b> will just have an inline as its continuation. |
-typedef HashMap<const RenderBoxModelObject*, RenderBoxModelObject*> ContinuationMap; |
-static ContinuationMap* continuationMap = 0; |
+typedef WillBeHeapHashMap<RawPtrWillBeMember<const RenderBoxModelObject>, RawPtrWillBeMember<RenderBoxModelObject> > ContinuationMap; |
+static OwnPtrWillBePersistent<ContinuationMap>* continuationMap = 0; |
// This HashMap is similar to the continuation map, but connects first-letter |
// renderers to their remaining text fragments. |
-typedef HashMap<const RenderBoxModelObject*, RenderTextFragment*> FirstLetterRemainingTextMap; |
-static FirstLetterRemainingTextMap* firstLetterRemainingTextMap = 0; |
+typedef WillBeHeapHashMap<RawPtrWillBeMember<const RenderBoxModelObject>, RawPtrWillBeMember<RenderTextFragment> > FirstLetterRemainingTextMap; |
+static OwnPtrWillBePersistent<FirstLetterRemainingTextMap>* firstLetterRemainingTextMap = 0; |
void RenderBoxModelObject::setSelectionState(SelectionState state) |
{ |
@@ -2506,18 +2507,18 @@ RenderBoxModelObject* RenderBoxModelObject::continuation() const |
{ |
if (!continuationMap) |
return 0; |
- return continuationMap->get(this); |
+ return (*continuationMap)->get(this); |
} |
void RenderBoxModelObject::setContinuation(RenderBoxModelObject* continuation) |
{ |
if (continuation) { |
if (!continuationMap) |
- continuationMap = new ContinuationMap; |
- continuationMap->set(this, continuation); |
+ continuationMap = new OwnPtrWillBePersistent<ContinuationMap>(adoptPtrWillBeNoop(new ContinuationMap)); |
+ (*continuationMap)->set(this, continuation); |
} else { |
if (continuationMap) |
- continuationMap->remove(this); |
+ (*continuationMap)->remove(this); |
} |
} |
@@ -2537,17 +2538,18 @@ RenderTextFragment* RenderBoxModelObject::firstLetterRemainingText() const |
{ |
if (!firstLetterRemainingTextMap) |
return 0; |
- return firstLetterRemainingTextMap->get(this); |
+ return (*firstLetterRemainingTextMap)->get(this); |
} |
void RenderBoxModelObject::setFirstLetterRemainingText(RenderTextFragment* remainingText) |
{ |
if (remainingText) { |
if (!firstLetterRemainingTextMap) |
- firstLetterRemainingTextMap = new FirstLetterRemainingTextMap; |
- firstLetterRemainingTextMap->set(this, remainingText); |
- } else if (firstLetterRemainingTextMap) |
- firstLetterRemainingTextMap->remove(this); |
+ firstLetterRemainingTextMap = new OwnPtrWillBePersistent<FirstLetterRemainingTextMap>(adoptPtrWillBeNoop(new FirstLetterRemainingTextMap)); |
+ (*firstLetterRemainingTextMap)->set(this, remainingText); |
+ } else if (firstLetterRemainingTextMap) { |
+ (*firstLetterRemainingTextMap)->remove(this); |
+ } |
} |
LayoutRect RenderBoxModelObject::localCaretRectForEmptyElement(LayoutUnit width, LayoutUnit textIndentOffset) |