Diff
Modified: trunk/Source/WebCore/ChangeLog (87014 => 87015)
--- trunk/Source/WebCore/ChangeLog 2011-05-21 10:47:54 UTC (rev 87014)
+++ trunk/Source/WebCore/ChangeLog 2011-05-21 11:04:19 UTC (rev 87015)
@@ -1,3 +1,15 @@
+2011-05-21 Jochen Eisinger <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] add extraData field to resource requests
+ https://bugs.webkit.org/show_bug.cgi?id=61033
+
+ * platform/network/chromium/ResourceRequest.h:
+ (WebCore::ResourceRequest::ExtraData::~ExtraData):
+ (WebCore::ResourceRequest::extraData):
+ (WebCore::ResourceRequest::setExtraData):
+
2011-05-21 Kent Tamura <[email protected]>
Reviewed by Dimitri Glazkov.
Modified: trunk/Source/WebCore/platform/network/chromium/ResourceRequest.h (87014 => 87015)
--- trunk/Source/WebCore/platform/network/chromium/ResourceRequest.h 2011-05-21 10:47:54 UTC (rev 87014)
+++ trunk/Source/WebCore/platform/network/chromium/ResourceRequest.h 2011-05-21 11:04:19 UTC (rev 87015)
@@ -30,12 +30,20 @@
#include "ResourceRequestBase.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
namespace WebCore {
class Frame;
class ResourceRequest : public ResourceRequestBase {
public:
+ class ExtraData : public RefCounted<ExtraData> {
+ public:
+ virtual ~ExtraData() { }
+ };
+
ResourceRequest(const String& url)
: ResourceRequestBase(KURL(ParsedURLString, url), UseProtocolCachePolicy)
, m_requestorID(0)
@@ -100,6 +108,10 @@
bool downloadToFile() const { return m_downloadToFile; }
void setDownloadToFile(bool downloadToFile) { m_downloadToFile = downloadToFile; }
+ // Extra data associated with this request.
+ ExtraData* extraData() const { return m_extraData.get(); }
+ void setExtraData(PassRefPtr<ExtraData> extraData) { m_extraData = extraData; }
+
private:
friend class ResourceRequestBase;
@@ -114,6 +126,7 @@
int m_appCacheHostID;
bool m_hasUserGesture;
bool m_downloadToFile;
+ RefPtr<ExtraData> m_extraData;
};
struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase {
Modified: trunk/Source/WebKit/chromium/ChangeLog (87014 => 87015)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-05-21 10:47:54 UTC (rev 87014)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-05-21 11:04:19 UTC (rev 87015)
@@ -1,3 +1,21 @@
+2011-05-21 Jochen Eisinger <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] add extraData field to resource requests
+ https://bugs.webkit.org/show_bug.cgi?id=61033
+
+ * WebKit.gypi:
+ * public/WebURLRequest.h:
+ (WebKit::WebURLRequest::ExtraData::~ExtraData):
+ * src/WebURLRequest.cpp:
+ (WebKit::WebURLRequest::extraData):
+ (WebKit::WebURLRequest::setExtraData):
+ * tests/WebURLRequestTest.cpp: Added.
+ (WebKit::TestExtraData::TestExtraData):
+ (WebKit::TestExtraData::~TestExtraData):
+ (WebKit::TEST):
+
2011-05-20 Michael Nordman <[email protected]>
Reviewed by Darin Fisher.
Modified: trunk/Source/WebKit/chromium/WebKit.gypi (87014 => 87015)
--- trunk/Source/WebKit/chromium/WebKit.gypi 2011-05-21 10:47:54 UTC (rev 87014)
+++ trunk/Source/WebKit/chromium/WebKit.gypi 2011-05-21 11:04:19 UTC (rev 87015)
@@ -68,6 +68,7 @@
'tests/TreeTestHelpers.cpp',
'tests/TreeTestHelpers.h',
'tests/WebFrameTest.cpp',
+ 'tests/WebURLRequestTest.cpp',
],
'conditions': [
Modified: trunk/Source/WebKit/chromium/public/WebURLRequest.h (87014 => 87015)
--- trunk/Source/WebKit/chromium/public/WebURLRequest.h 2011-05-21 10:47:54 UTC (rev 87014)
+++ trunk/Source/WebKit/chromium/public/WebURLRequest.h 2011-05-21 11:04:19 UTC (rev 87015)
@@ -72,6 +72,11 @@
TargetIsFavicon = 12,
};
+ class ExtraData {
+ public:
+ virtual ~ExtraData() { }
+ };
+
~WebURLRequest() { reset(); }
WebURLRequest() : m_private(0) { }
@@ -164,6 +169,15 @@
WEBKIT_API bool downloadToFile() const;
WEBKIT_API void setDownloadToFile(bool);
+ // Extra data associated with the underlying resource request. Resource
+ // requests can be copied. If non-null, each copy of a resource requests
+ // holds a pointer to the extra data, and the extra data pointer will be
+ // deleted when the last resource request is destroyed. Setting the extra
+ // data pointer will cause the underlying resource request to be
+ // dissociated from any existing non-null extra data pointer.
+ WEBKIT_API ExtraData* extraData() const;
+ WEBKIT_API void setExtraData(ExtraData*);
+
#if defined(WEBKIT_IMPLEMENTATION)
WebCore::ResourceRequest& toMutableResourceRequest();
const WebCore::ResourceRequest& toResourceRequest() const;
Modified: trunk/Source/WebKit/chromium/src/WebURLRequest.cpp (87014 => 87015)
--- trunk/Source/WebKit/chromium/src/WebURLRequest.cpp 2011-05-21 10:47:54 UTC (rev 87014)
+++ trunk/Source/WebKit/chromium/src/WebURLRequest.cpp 2011-05-21 11:04:19 UTC (rev 87015)
@@ -42,6 +42,27 @@
namespace WebKit {
+namespace {
+
+class ExtraDataContainer : public ResourceRequest::ExtraData {
+public:
+ static PassRefPtr<ExtraDataContainer> create(WebURLRequest::ExtraData* extraData) { return adoptRef(new ExtraDataContainer(extraData)); }
+
+ virtual ~ExtraDataContainer() { }
+
+ WebURLRequest::ExtraData* extraData() const { return m_extraData.get(); }
+
+private:
+ explicit ExtraDataContainer(WebURLRequest::ExtraData* extraData)
+ : m_extraData(adoptPtr(extraData))
+ {
+ }
+
+ OwnPtr<WebURLRequest::ExtraData> m_extraData;
+};
+
+} // namespace
+
// The standard implementation of WebURLRequestPrivate, which maintains
// ownership of a ResourceRequest instance.
class WebURLRequestPrivateImpl : public WebURLRequestPrivate {
@@ -276,6 +297,19 @@
m_private->m_resourceRequest->setDownloadToFile(downloadToFile);
}
+WebURLRequest::ExtraData* WebURLRequest::extraData() const
+{
+ RefPtr<ResourceRequest::ExtraData> data = ""
+ if (!data.get())
+ return 0;
+ return static_cast<ExtraDataContainer*>(data.get())->extraData();
+}
+
+void WebURLRequest::setExtraData(WebURLRequest::ExtraData* extraData)
+{
+ m_private->m_resourceRequest->setExtraData(ExtraDataContainer::create(extraData));
+}
+
ResourceRequest& WebURLRequest::toMutableResourceRequest()
{
ASSERT(m_private);
Added: trunk/Source/WebKit/chromium/tests/WebURLRequestTest.cpp (0 => 87015)
--- trunk/Source/WebKit/chromium/tests/WebURLRequestTest.cpp (rev 0)
+++ trunk/Source/WebKit/chromium/tests/WebURLRequestTest.cpp 2011-05-21 11:04:19 UTC (rev 87015)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "WebURLRequest.h"
+
+#include <gtest/gtest.h>
+
+using namespace WebKit;
+
+namespace {
+
+class TestExtraData : public WebURLRequest::ExtraData {
+public:
+ explicit TestExtraData(bool* alive)
+ : m_alive(alive)
+ {
+ *alive = true;
+ }
+
+ virtual ~TestExtraData() { *m_alive = false; }
+
+private:
+ bool* m_alive;
+};
+
+TEST(WebURLRequestTest, ExtraData)
+{
+ bool alive = false;
+ {
+ WebURLRequest urlRequest;
+ TestExtraData* extraData = new TestExtraData(&alive);
+ EXPECT_TRUE(alive);
+
+ urlRequest.initialize();
+ urlRequest.setExtraData(extraData);
+ EXPECT_EQ(extraData, urlRequest.extraData());
+ {
+ WebURLRequest otherUrlRequest = urlRequest;
+ EXPECT_TRUE(alive);
+ EXPECT_EQ(extraData, otherUrlRequest.extraData());
+ EXPECT_EQ(extraData, urlRequest.extraData());
+ }
+ EXPECT_TRUE(alive);
+ EXPECT_EQ(extraData, urlRequest.extraData());
+ }
+ EXPECT_FALSE(alive);
+}
+
+} // namespace