Chromium Code Reviews| Index: third_party/WebKit/Source/platform/exported/WebURLResponse.cpp |
| diff --git a/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp b/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp |
| index 7a5173ec1b722ca2137f6a9fa2fb72c8d272dcb1..6e06f7226b09c8b92c9b6be2c608b41e24d9998b 100644 |
| --- a/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp |
| +++ b/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp |
| @@ -39,6 +39,7 @@ |
| #include "public/platform/WebURL.h" |
| #include "public/platform/WebURLLoadTiming.h" |
| #include "wtf/Allocator.h" |
| +#include "wtf/Assertions.h" |
| #include "wtf/PtrUtil.h" |
| #include "wtf/RefPtr.h" |
| #include <memory> |
| @@ -76,39 +77,54 @@ public: |
| m_resourceResponse = &m_resourceResponseAllocation; |
| } |
| - WebURLResponsePrivateImpl(const WebURLResponsePrivate* p) |
| - : m_resourceResponseAllocation(*p->m_resourceResponse) |
| + WebURLResponsePrivateImpl(const WebURLResponsePrivate& p) |
| + : m_resourceResponseAllocation(*p.m_resourceResponse) |
| { |
| m_resourceResponse = &m_resourceResponseAllocation; |
| } |
| - virtual void dispose() { delete this; } |
| + ~WebURLResponsePrivateImpl() override {} |
| private: |
| - virtual ~WebURLResponsePrivateImpl() { } |
| - |
| ResourceResponse m_resourceResponseAllocation; |
| }; |
| -void WebURLResponse::initialize() |
| +WebURLResponse::~WebURLResponse() |
| +{ |
| +} |
| + |
| +WebURLResponse::WebURLResponse() |
| + : m_owningPrivate(new WebURLResponsePrivateImpl()) |
| + , m_private(m_owningPrivate.get()) |
| +{ |
| +} |
| + |
| +WebURLResponse::WebURLResponse(const WebURLResponse& r) |
| + : m_owningPrivate(new WebURLResponsePrivateImpl(*r.m_private)) |
| + , m_private(m_owningPrivate.get()) |
| { |
| - assign(new WebURLResponsePrivateImpl()); |
| } |
| -void WebURLResponse::reset() |
| +WebURLResponse::WebURLResponse(const WebURL& url) |
| + : WebURLResponse() |
| { |
| - assign(0); |
| + setURL(url); |
| } |
| -void WebURLResponse::assign(const WebURLResponse& r) |
| +WebURLResponse& WebURLResponse::operator=(const WebURLResponse& r) |
| { |
| + // Copying subclasses that have different m_private ownership semantics |
| + // via this operator is just not supported. |
| + DCHECK(m_owningPrivate); |
| + DCHECK(m_private->m_resourceResponse); |
| if (&r != this) |
| - assign(r.m_private ? new WebURLResponsePrivateImpl(r.m_private) : 0); |
| + *m_private->m_resourceResponse = *r.m_private->m_resourceResponse; |
| + return *this; |
| } |
| bool WebURLResponse::isNull() const |
| { |
| - return !m_private || m_private->m_resourceResponse->isNull(); |
| + return !m_private->m_resourceResponse || m_private->m_resourceResponse->isNull(); |
|
dcheng
2016/07/07 05:02:50
It looks like this can only happen when using the
kinuko
2016/07/07 09:23:04
Looks like the change works, and I like simplifyin
|
| } |
| WebURL WebURLResponse::url() const |
| @@ -342,17 +358,13 @@ void WebURLResponse::setSecurityDetails(const WebSecurityDetails& webSecurityDet |
| ResourceResponse& WebURLResponse::toMutableResourceResponse() |
| { |
| - ASSERT(m_private); |
| - ASSERT(m_private->m_resourceResponse); |
| - |
| + DCHECK(m_private->m_resourceResponse); |
| return *m_private->m_resourceResponse; |
| } |
| const ResourceResponse& WebURLResponse::toResourceResponse() const |
| { |
| - ASSERT(m_private); |
| - ASSERT(m_private->m_resourceResponse); |
| - |
| + DCHECK(m_private->m_resourceResponse); |
| return *m_private->m_resourceResponse; |
| } |
| @@ -511,15 +523,10 @@ void WebURLResponse::setExtraData(WebURLResponse::ExtraData* extraData) |
| m_private->m_resourceResponse->setExtraData(ExtraDataContainer::create(extraData)); |
| } |
| -void WebURLResponse::assign(WebURLResponsePrivate* p) |
| +WebURLResponse::WebURLResponse(WebURLResponsePrivate* p) |
| + : m_private(p) |
| { |
| - // Subclasses may call this directly so a self-assignment check is needed |
| - // here as well as in the public assign method. |
| - if (m_private == p) |
| - return; |
| - if (m_private) |
| - m_private->dispose(); |
| - m_private = p; |
| + DCHECK(p); |
| } |
| } // namespace blink |