Index: Source/web/WebHitTestResult.cpp |
diff --git a/Source/web/WebHitTestResult.cpp b/Source/web/WebHitTestResult.cpp |
index feb094df628b8e9c38fbec020c9189f7c83fa94b..0823dfcc3a97d09c0092344e774583d49b7cc119 100644 |
--- a/Source/web/WebHitTestResult.cpp |
+++ b/Source/web/WebHitTestResult.cpp |
@@ -41,52 +41,81 @@ using namespace blink; |
namespace blink { |
+class WebHitTestResultPrivate : public RefCountedWillBeGarbageCollectedFinalized<WebHitTestResultPrivate> { |
+public: |
+ static PassRefPtrWillBeRawPtr<WebHitTestResultPrivate> create(const HitTestResult&); |
+ static PassRefPtrWillBeRawPtr<WebHitTestResultPrivate> create(const WebHitTestResultPrivate&); |
+ void trace(Visitor* visitor) { visitor->trace(m_result); } |
+ const HitTestResult& result() const { return m_result; } |
+ |
+private: |
+ WebHitTestResultPrivate(const HitTestResult&); |
+ WebHitTestResultPrivate(const WebHitTestResultPrivate&); |
+ |
+ HitTestResult m_result; |
+}; |
+ |
+inline WebHitTestResultPrivate::WebHitTestResultPrivate(const HitTestResult& result) |
+ : m_result(result) |
+{ |
+} |
+ |
+inline WebHitTestResultPrivate::WebHitTestResultPrivate(const WebHitTestResultPrivate& result) |
+ : m_result(result.m_result) |
+{ |
+} |
+ |
+PassRefPtrWillBeRawPtr<WebHitTestResultPrivate> WebHitTestResultPrivate::create(const HitTestResult& result) |
+{ |
+ return adoptRefWillBeNoop(new WebHitTestResultPrivate(result)); |
+} |
+ |
+PassRefPtrWillBeRawPtr<WebHitTestResultPrivate> WebHitTestResultPrivate::create(const WebHitTestResultPrivate& result) |
+{ |
+ return adoptRefWillBeNoop(new WebHitTestResultPrivate(result)); |
+} |
+ |
WebNode WebHitTestResult::node() const |
{ |
- return WebNode(m_private->innerNode()); |
+ return WebNode(m_private->result().innerNode()); |
} |
WebPoint WebHitTestResult::localPoint() const |
{ |
- return roundedIntPoint(m_private->localPoint()); |
+ return roundedIntPoint(m_private->result().localPoint()); |
} |
WebElement WebHitTestResult::urlElement() const |
{ |
- return WebElement(m_private->URLElement()); |
+ return WebElement(m_private->result().URLElement()); |
} |
WebURL WebHitTestResult::absoluteImageURL() const |
{ |
- return m_private->absoluteImageURL(); |
+ return m_private->result().absoluteImageURL(); |
} |
WebURL WebHitTestResult::absoluteLinkURL() const |
{ |
- return m_private->absoluteLinkURL(); |
+ return m_private->result().absoluteLinkURL(); |
} |
bool WebHitTestResult::isContentEditable() const |
{ |
- return m_private->isContentEditable(); |
+ return m_private->result().isContentEditable(); |
} |
WebHitTestResult::WebHitTestResult(const HitTestResult& result) |
+ : m_private(WebHitTestResultPrivate::create(result)) |
{ |
- m_private.reset(new HitTestResult(result)); |
} |
WebHitTestResult& WebHitTestResult::operator=(const HitTestResult& result) |
{ |
- m_private.reset(new HitTestResult(result)); |
+ m_private = WebHitTestResultPrivate::create(result); |
return *this; |
} |
-WebHitTestResult::operator HitTestResult() const |
-{ |
- return *m_private.get(); |
-} |
- |
bool WebHitTestResult::isNull() const |
{ |
return !m_private.get(); |
@@ -94,12 +123,15 @@ bool WebHitTestResult::isNull() const |
void WebHitTestResult::assign(const WebHitTestResult& info) |
{ |
- m_private.reset(new HitTestResult(info)); |
+ if (info.isNull()) |
+ m_private.reset(); |
+ else |
+ m_private = WebHitTestResultPrivate::create(*info.m_private.get()); |
} |
void WebHitTestResult::reset() |
{ |
- m_private.reset(0); |
+ m_private.reset(); |
} |
} // namespace blink |