2007-06-26  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej.

        Implement http://bugs.webkit.org/show_bug.cgi?id=14225
        Bug 14225: Make it possible to define platform-specific ResourceRequest without #ifdefs

        This change moves the bulk of ResourceRequest into a base class named
        ResourceRequestBase with all platform-specific bits pushed into
        ResourceRequest.  This allows ports to easily add new members to a
        ResourceRequest without having to #ifdef the code that is shared
        between ports.

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceRequest.cpp: Removed.
        * platform/network/ResourceRequest.h: Removed.
        * platform/network/ResourceRequestBase.cpp: Added.
        (WebCore::ResourceRequestBase::asResourceRequest):
        (WebCore::ResourceRequestBase::isEmpty):
        (WebCore::ResourceRequestBase::isNull):
        (WebCore::ResourceRequestBase::url):
        (WebCore::ResourceRequestBase::setURL):
        (WebCore::ResourceRequestBase::cachePolicy):
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::timeoutInterval):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::mainDocumentURL):
        (WebCore::ResourceRequestBase::setMainDocumentURL):
        (WebCore::ResourceRequestBase::httpMethod):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::httpHeaderFields):
        (WebCore::ResourceRequestBase::httpHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::httpBody):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::allowHTTPCookies):
        (WebCore::ResourceRequestBase::setAllowHTTPCookies):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
        (WebCore::operator==):
        (WebCore::ResourceRequestBase::isConditional):
        (WebCore::ResourceRequestBase::updatePlatformRequest):
        (WebCore::ResourceRequestBase::updateResourceRequest):
        * platform/network/ResourceRequestBase.h: Added.
        (WebCore::):
        (WebCore::ResourceRequestBase::httpContentType):
        (WebCore::ResourceRequestBase::setHTTPContentType):
        (WebCore::ResourceRequestBase::httpReferrer):
        (WebCore::ResourceRequestBase::setHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::httpUserAgent):
        (WebCore::ResourceRequestBase::setHTTPUserAgent):
        (WebCore::ResourceRequestBase::httpAccept):
        (WebCore::ResourceRequestBase::setHTTPAccept):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        (WebCore::operator!=):
        * platform/network/cf/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/qt/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@23806 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 606b60a..4dfc5a9 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,75 @@
+2007-06-26  MorganL  <morganl.webkit@yahoo.com>
+
+        Reviewed by Maciej.
+
+        Implement http://bugs.webkit.org/show_bug.cgi?id=14225
+        Bug 14225: Make it possible to define platform-specific ResourceRequest without #ifdefs
+
+        This change moves the bulk of ResourceRequest into a base class named
+        ResourceRequestBase with all platform-specific bits pushed into
+        ResourceRequest.  This allows ports to easily add new members to a
+        ResourceRequest without having to #ifdef the code that is shared
+        between ports.
+
+        * WebCore.exp:
+        * WebCore.pro:
+        * WebCore.vcproj/WebCore.vcproj:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/network/ResourceRequest.cpp: Removed.
+        * platform/network/ResourceRequest.h: Removed.
+        * platform/network/ResourceRequestBase.cpp: Added.
+        (WebCore::ResourceRequestBase::asResourceRequest):
+        (WebCore::ResourceRequestBase::isEmpty):
+        (WebCore::ResourceRequestBase::isNull):
+        (WebCore::ResourceRequestBase::url):
+        (WebCore::ResourceRequestBase::setURL):
+        (WebCore::ResourceRequestBase::cachePolicy):
+        (WebCore::ResourceRequestBase::setCachePolicy):
+        (WebCore::ResourceRequestBase::timeoutInterval):
+        (WebCore::ResourceRequestBase::setTimeoutInterval):
+        (WebCore::ResourceRequestBase::mainDocumentURL):
+        (WebCore::ResourceRequestBase::setMainDocumentURL):
+        (WebCore::ResourceRequestBase::httpMethod):
+        (WebCore::ResourceRequestBase::setHTTPMethod):
+        (WebCore::ResourceRequestBase::httpHeaderFields):
+        (WebCore::ResourceRequestBase::httpHeaderField):
+        (WebCore::ResourceRequestBase::setHTTPHeaderField):
+        (WebCore::ResourceRequestBase::httpBody):
+        (WebCore::ResourceRequestBase::setHTTPBody):
+        (WebCore::ResourceRequestBase::allowHTTPCookies):
+        (WebCore::ResourceRequestBase::setAllowHTTPCookies):
+        (WebCore::ResourceRequestBase::addHTTPHeaderField):
+        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
+        (WebCore::operator==):
+        (WebCore::ResourceRequestBase::isConditional):
+        (WebCore::ResourceRequestBase::updatePlatformRequest):
+        (WebCore::ResourceRequestBase::updateResourceRequest):
+        * platform/network/ResourceRequestBase.h: Added.
+        (WebCore::):
+        (WebCore::ResourceRequestBase::httpContentType):
+        (WebCore::ResourceRequestBase::setHTTPContentType):
+        (WebCore::ResourceRequestBase::httpReferrer):
+        (WebCore::ResourceRequestBase::setHTTPReferrer):
+        (WebCore::ResourceRequestBase::clearHTTPReferrer):
+        (WebCore::ResourceRequestBase::httpUserAgent):
+        (WebCore::ResourceRequestBase::setHTTPUserAgent):
+        (WebCore::ResourceRequestBase::httpAccept):
+        (WebCore::ResourceRequestBase::setHTTPAccept):
+        (WebCore::ResourceRequestBase::ResourceRequestBase):
+        (WebCore::operator!=):
+        * platform/network/cf/ResourceRequest.h: Added.
+        (WebCore::ResourceRequest::ResourceRequest):
+        * platform/network/curl/ResourceRequest.h: Added.
+        (WebCore::ResourceRequest::ResourceRequest):
+        (WebCore::ResourceRequest::doUpdatePlatformRequest):
+        (WebCore::ResourceRequest::doUpdateResourceRequest):
+        * platform/network/mac/ResourceRequest.h: Added.
+        (WebCore::ResourceRequest::ResourceRequest):
+        * platform/network/qt/ResourceRequest.h: Added.
+        (WebCore::ResourceRequest::ResourceRequest):
+        (WebCore::ResourceRequest::doUpdatePlatformRequest):
+        (WebCore::ResourceRequest::doUpdateResourceRequest):
+
 2007-06-26  Adam Roben  <aroben@apple.com>
 
         Add ChangeLog entries from the Windows merge.
diff --git a/WebCore/WebCore.exp b/WebCore/WebCore.exp
index 2ac8af1..f42bb87f 100644
--- a/WebCore/WebCore.exp
+++ b/WebCore/WebCore.exp
@@ -493,7 +493,7 @@
 __ZN7WebCore9TimerBaseC2Ev
 __ZN7WebCore9TimerBaseD2Ev
 __ZN7WebCore9pageCacheEv
-__ZN7WebCoreeqERKNS_15ResourceRequestES2_
+__ZN7WebCoreeqERKNS_19ResourceRequestBaseES2_
 __ZN7WebCoreeqERKNS_4KURLES2_
 __ZNK7WebCore10StringImplcvP8NSStringEv
 __ZNK7WebCore11CachedImage5imageEv
@@ -571,9 +571,9 @@
 __ZNK7WebCore14ResourceLoader11frameLoaderEv
 __ZNK7WebCore15ProgressTracker17estimatedProgressEv
 __ZNK7WebCore15ResourceRequest12nsURLRequestEv
-__ZNK7WebCore15ResourceRequest16httpHeaderFieldsEv
-__ZNK7WebCore15ResourceRequest3urlEv
-__ZNK7WebCore15ResourceRequest7isEmptyEv
+__ZNK7WebCore19ResourceRequestBase16httpHeaderFieldsEv
+__ZNK7WebCore19ResourceRequestBase3urlEv
+__ZNK7WebCore19ResourceRequestBase7isEmptyEv
 __ZNK7WebCore16DeprecatedString11getNSStringEv
 __ZNK7WebCore16DeprecatedString2atEj
 __ZNK7WebCore16DeprecatedString3midEjj
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index 27b9690..7836c9d 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -620,7 +620,7 @@
     platform/network/HTTPParsers.cpp \
     platform/network/ProtectionSpace.cpp \
     platform/network/ResourceHandle.cpp \
-    platform/network/ResourceRequest.cpp \
+    platform/network/ResourceRequestBase.cpp \
     platform/network/ResourceResponse.cpp \
     platform/RegularExpression.cpp \
     platform/ScrollBar.cpp \
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 86a3f4e..1c602a0 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -4160,11 +4160,11 @@
 					>
 				</File>
 				<File
-					RelativePath="..\platform\network\ResourceRequest.cpp"
+					RelativePath="..\platform\network\ResourceRequestBase.cpp"
 					>
 				</File>
 				<File
-					RelativePath="..\platform\network\ResourceRequest.h"
+					RelativePath="..\platform\network\ResourceRequestBase.h"
 					>
 				</File>
 				<File
@@ -4203,6 +4203,10 @@
 						>
 					</File>
 					<File
+						RelativePath="..\platform\network\cf\ResourceRequest.h"
+						>
+					</File>
+					<File
 						RelativePath="..\platform\network\cf\ResourceRequestCFNet.cpp"
 						>
 					</File>
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 61136cb..5916619 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -177,7 +177,6 @@
 		1ACE53EB0A8D18E70022947D /* XMLSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACE53E50A8D18E70022947D /* XMLSerializer.h */; };
 		1ACE53F60A8D19470022947D /* JSXMLSerializer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ACE53F40A8D19470022947D /* JSXMLSerializer.cpp */; };
 		1ACE53F70A8D19470022947D /* JSXMLSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACE53F50A8D19470022947D /* JSXMLSerializer.h */; };
-		1AD8CFCE0B1CED8900696DE0 /* ResourceRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD8CFCD0B1CED8900696DE0 /* ResourceRequest.cpp */; };
 		1AE2AA1E0A1CDAB400B42B25 /* JSHTMLAreaElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE2AA0A0A1CDAB300B42B25 /* JSHTMLAreaElement.cpp */; };
 		1AE2AA1F0A1CDAB400B42B25 /* JSHTMLAreaElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE2AA0B0A1CDAB300B42B25 /* JSHTMLAreaElement.h */; };
 		1AE2AA200A1CDAB400B42B25 /* JSHTMLBaseFontElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE2AA0C0A1CDAB300B42B25 /* JSHTMLBaseFontElement.cpp */; };
@@ -353,7 +352,6 @@
 		651B4D8509AC83370029F1EF /* DeprecatedStringList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */; };
 		651B4D8609AC83370029F1EF /* DeprecatedStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = 651B4D8409AC83370029F1EF /* DeprecatedStringList.h */; };
 		651B4D8F09AC859F0029F1EF /* DeprecatedStringListMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 651B4D8E09AC859F0029F1EF /* DeprecatedStringListMac.mm */; };
-		6522BCDF09C9DAA800C9BA7A /* ResourceRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6522BCDE09C9DAA800C9BA7A /* ResourceRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		654EC611097778F500DAB52C /* WebCoreFrameBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 654EC60F097778F500DAB52C /* WebCoreFrameBridge.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		654EC612097778F500DAB52C /* WebCoreFrameBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 654EC610097778F500DAB52C /* WebCoreFrameBridge.mm */; };
 		6550B69D099DF0270090D781 /* CDATASection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6550B693099DF0270090D781 /* CDATASection.cpp */; };
@@ -1555,6 +1553,9 @@
 		93CD4FE30995F9EA007ECC97 /* StringImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93CD4FDC0995F9EA007ECC97 /* StringImpl.cpp */; };
 		93CD4FE40995F9EA007ECC97 /* StringImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CD4FDD0995F9EA007ECC97 /* StringImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		93CD4FEC0995FD2A007ECC97 /* PlatformString.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CD4FEB0995FD2A007ECC97 /* PlatformString.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		93CDDE280C239A4800CD57AE /* ResourceRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CDDE270C239A4800CD57AE /* ResourceRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		93D82A490C28CF1E00FD703D /* ResourceRequestBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93D82A470C28CF1E00FD703D /* ResourceRequestBase.cpp */; };
+		93D82A4A0C28CF1E00FD703D /* ResourceRequestBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D82A480C28CF1E00FD703D /* ResourceRequestBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		93E227E00AF589AD00D48324 /* DocumentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DB0AF589AD00D48324 /* DocumentLoader.cpp */; };
 		93E227E10AF589AD00D48324 /* MainResourceLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DC0AF589AD00D48324 /* MainResourceLoader.cpp */; };
 		93E227E20AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */; };
@@ -3400,7 +3401,6 @@
 		1ACE53E60A8D18E70022947D /* XMLSerializer.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = XMLSerializer.idl; sourceTree = "<group>"; };
 		1ACE53F40A8D19470022947D /* JSXMLSerializer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSXMLSerializer.cpp; sourceTree = "<group>"; };
 		1ACE53F50A8D19470022947D /* JSXMLSerializer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXMLSerializer.h; sourceTree = "<group>"; };
-		1AD8CFCD0B1CED8900696DE0 /* ResourceRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceRequest.cpp; sourceTree = "<group>"; };
 		1AE2A9F00A1CDA5700B42B25 /* HTMLAreaElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = HTMLAreaElement.idl; sourceTree = "<group>"; };
 		1AE2A9F10A1CDA5700B42B25 /* HTMLBaseFontElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = HTMLBaseFontElement.idl; sourceTree = "<group>"; };
 		1AE2A9F20A1CDA5700B42B25 /* HTMLBodyElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = HTMLBodyElement.idl; sourceTree = "<group>"; };
@@ -3588,7 +3588,6 @@
 		651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DeprecatedStringList.cpp; sourceTree = "<group>"; };
 		651B4D8409AC83370029F1EF /* DeprecatedStringList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DeprecatedStringList.h; sourceTree = "<group>"; };
 		651B4D8E09AC859F0029F1EF /* DeprecatedStringListMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DeprecatedStringListMac.mm; sourceTree = "<group>"; };
-		6522BCDE09C9DAA800C9BA7A /* ResourceRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceRequest.h; sourceTree = "<group>"; };
 		6548E24809E1E04D00AF8020 /* Document.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Document.idl; sourceTree = "<group>"; };
 		654EC60F097778F500DAB52C /* WebCoreFrameBridge.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebCoreFrameBridge.h; sourceTree = "<group>"; };
 		654EC610097778F500DAB52C /* WebCoreFrameBridge.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreFrameBridge.mm; sourceTree = "<group>"; };
@@ -4770,6 +4769,9 @@
 		93CD4FDC0995F9EA007ECC97 /* StringImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringImpl.cpp; sourceTree = "<group>"; };
 		93CD4FDD0995F9EA007ECC97 /* StringImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringImpl.h; sourceTree = "<group>"; };
 		93CD4FEB0995FD2A007ECC97 /* PlatformString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformString.h; sourceTree = "<group>"; };
+		93CDDE270C239A4800CD57AE /* ResourceRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceRequest.h; sourceTree = "<group>"; };
+		93D82A470C28CF1E00FD703D /* ResourceRequestBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceRequestBase.cpp; sourceTree = "<group>"; };
+		93D82A480C28CF1E00FD703D /* ResourceRequestBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceRequestBase.h; sourceTree = "<group>"; };
 		93E227DB0AF589AD00D48324 /* DocumentLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = DocumentLoader.cpp; sourceTree = "<group>"; };
 		93E227DC0AF589AD00D48324 /* MainResourceLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = MainResourceLoader.cpp; sourceTree = "<group>"; };
 		93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetscapePlugInStreamLoader.cpp; sourceTree = "<group>"; };
@@ -7141,8 +7143,8 @@
 				656B84DC0AEA1D3100A095B4 /* ResourceHandle.cpp */,
 				656B84DE0AEA1D3100A095B4 /* ResourceHandleClient.h */,
 				656B84DF0AEA1D3100A095B4 /* ResourceHandleInternal.h */,
-				6522BCDE09C9DAA800C9BA7A /* ResourceRequest.h */,
-				1AD8CFCD0B1CED8900696DE0 /* ResourceRequest.cpp */,
+				93D82A470C28CF1E00FD703D /* ResourceRequestBase.cpp */,
+				93D82A480C28CF1E00FD703D /* ResourceRequestBase.h */,
 				658821650AF4CDF700F01D1F /* ResourceResponse.h */,
 				1A8180A40B1D4E4300CE46C4 /* ResourceResponse.cpp */,
 			);
@@ -7152,6 +7154,7 @@
 		656B84E70AEA1DAE00A095B4 /* mac */ = {
 			isa = PBXGroup;
 			children = (
+				93CDDE270C239A4800CD57AE /* ResourceRequest.h */,
 				6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */,
 				65DAD9FE0AFD86BF00CE53ED /* FormDataStreamMac.h */,
 				65DAD9FF0AFD86BF00CE53ED /* FormDataStreamMac.mm */,
@@ -10457,7 +10460,6 @@
 				93EEC20309C2877700C515D1 /* CanvasGradient.h in Headers */,
 				93EEC20409C2877700C515D1 /* CanvasPattern.h in Headers */,
 				D0B0556809C6700100307E43 /* CreateLinkCommand.h in Headers */,
-				6522BCDF09C9DAA800C9BA7A /* ResourceRequest.h in Headers */,
 				93C841F809CE855C00DFF5E5 /* DOMImplementationFront.h in Headers */,
 				656580F409D12B20000E61D7 /* CSSPropertyNames.h in Headers */,
 				6565815109D13043000E61D7 /* CSSValueKeywords.h in Headers */,
@@ -11619,11 +11621,13 @@
 				BC6DC7A10C1A4BFA004E2017 /* JSHTMLAllCollection.h in Headers */,
 				BCFE2F120C1B58380020235F /* JSRect.h in Headers */,
 				BC4368E80C226E32005EFB5F /* Rect.h in Headers */,
+				93CDDE280C239A4800CD57AE /* ResourceRequest.h in Headers */,
 				BC124EE80C2641CD009E2349 /* BarInfo.h in Headers */,
 				BC124F000C26447A009E2349 /* JSBarInfo.h in Headers */,
 				BCEC01BE0C274DAC009F4EC9 /* Screen.h in Headers */,
 				BCEC01C30C274DDD009F4EC9 /* JSScreen.h in Headers */,
 				BCEC01D70C274EB4009F4EC9 /* PlatformScreen.h in Headers */,
+				93D82A4A0C28CF1E00FD703D /* ResourceRequestBase.h in Headers */,
 				BC94D14F0C275C68006BC617 /* JSHistory.h in Headers */,
 				BC94D1540C275C8B006BC617 /* History.h in Headers */,
 				BC94D1570C275CAB006BC617 /* GlobalHistory.h in Headers */,
@@ -11677,7 +11681,6 @@
 			mainGroup = 0867D691FE84028FC02AAC07 /* WebKit */;
 			productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
 			projectDirPath = "";
-			projectRoot = "";
 			targets = (
 				93F198A508245E59001E9ABC /* WebCore */,
 				DD041FBE09D9DDBE0010AF2A /* Derived Sources */,
@@ -12920,7 +12923,6 @@
 				B2D87C890B124E9500B0DE1E /* SVGPaintServerPatternCg.cpp in Sources */,
 				B2D87C8A0B124E9500B0DE1E /* SVGPaintServerSolidCg.cpp in Sources */,
 				A7352C190B1BB89D00A986D0 /* RenderSVGBlock.cpp in Sources */,
-				1AD8CFCE0B1CED8900696DE0 /* ResourceRequest.cpp in Sources */,
 				06027CB30B1CC03D00884B2D /* ContextMenuItemMac.mm in Sources */,
 				1A8180A50B1D4E4300CE46C4 /* ResourceResponse.cpp in Sources */,
 				B2310B760B1F46A200D55D87 /* CgSupport.cpp in Sources */,
@@ -13059,6 +13061,7 @@
 				BCEC01BD0C274DAC009F4EC9 /* Screen.cpp in Sources */,
 				BCEC01C20C274DDD009F4EC9 /* JSScreen.cpp in Sources */,
 				BC94D1080C274F88006BC617 /* PlatformScreenMac.mm in Sources */,
+				93D82A490C28CF1E00FD703D /* ResourceRequestBase.cpp in Sources */,
 				BC94D14E0C275C68006BC617 /* JSHistory.cpp in Sources */,
 				BC94D1530C275C8B006BC617 /* History.cpp in Sources */,
 				BC94D1590C275CB6006BC617 /* GlobalHistoryMac.mm in Sources */,
diff --git a/WebCore/platform/network/ResourceRequest.cpp b/WebCore/platform/network/ResourceRequestBase.cpp
similarity index 71%
rename from WebCore/platform/network/ResourceRequest.cpp
rename to WebCore/platform/network/ResourceRequestBase.cpp
index fdc9a7a..d5c9eda 100644
--- a/WebCore/platform/network/ResourceRequest.cpp
+++ b/WebCore/platform/network/ResourceRequestBase.cpp
@@ -24,32 +24,38 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 #include "config.h"
+#include "ResourceRequestBase.h"
 #include "ResourceRequest.h"
 
 namespace WebCore {
 
-bool ResourceRequest::isEmpty() const
+inline const ResourceRequest& ResourceRequestBase::asResourceRequest() const
+{
+    return *static_cast<const ResourceRequest*>(this);
+}
+
+bool ResourceRequestBase::isEmpty() const
 {
     updateResourceRequest(); 
     
     return m_url.isEmpty(); 
 }
 
-bool ResourceRequest::isNull() const
+bool ResourceRequestBase::isNull() const
 {
     updateResourceRequest(); 
     
     return m_url.url().isNull();
 }
 
-const KURL& ResourceRequest::url() const 
+const KURL& ResourceRequestBase::url() const 
 {
     updateResourceRequest(); 
     
     return m_url;
 }
 
-void ResourceRequest::setURL(const KURL& url)
+void ResourceRequestBase::setURL(const KURL& url)
 { 
     updateResourceRequest(); 
 
@@ -58,14 +64,14 @@
     m_platformRequestUpdated = false;
 }
 
-const ResourceRequestCachePolicy ResourceRequest::cachePolicy() const
+const ResourceRequestCachePolicy ResourceRequestBase::cachePolicy() const
 {
     updateResourceRequest(); 
     
     return m_cachePolicy; 
 }
 
-void ResourceRequest::setCachePolicy(ResourceRequestCachePolicy cachePolicy)
+void ResourceRequestBase::setCachePolicy(ResourceRequestCachePolicy cachePolicy)
 {
     updateResourceRequest(); 
     
@@ -74,14 +80,14 @@
     m_platformRequestUpdated = false;
 }
 
-double ResourceRequest::timeoutInterval() const
+double ResourceRequestBase::timeoutInterval() const
 {
     updateResourceRequest(); 
     
     return m_timeoutInterval; 
 }
 
-void ResourceRequest::setTimeoutInterval(double timeoutInterval) 
+void ResourceRequestBase::setTimeoutInterval(double timeoutInterval) 
 {
     updateResourceRequest(); 
     
@@ -90,14 +96,14 @@
     m_platformRequestUpdated = false;
 }
 
-const KURL& ResourceRequest::mainDocumentURL() const
+const KURL& ResourceRequestBase::mainDocumentURL() const
 {
     updateResourceRequest(); 
     
     return m_mainDocumentURL; 
 }
 
-void ResourceRequest::setMainDocumentURL(const KURL& mainDocumentURL)
+void ResourceRequestBase::setMainDocumentURL(const KURL& mainDocumentURL)
 { 
     updateResourceRequest(); 
     
@@ -106,14 +112,14 @@
     m_platformRequestUpdated = false;
 }
 
-const String& ResourceRequest::httpMethod() const
+const String& ResourceRequestBase::httpMethod() const
 {
     updateResourceRequest(); 
     
     return m_httpMethod; 
 }
 
-void ResourceRequest::setHTTPMethod(const String& httpMethod) 
+void ResourceRequestBase::setHTTPMethod(const String& httpMethod) 
 {
     updateResourceRequest(); 
 
@@ -122,21 +128,21 @@
     m_platformRequestUpdated = false;
 }
 
-const HTTPHeaderMap& ResourceRequest::httpHeaderFields() const
+const HTTPHeaderMap& ResourceRequestBase::httpHeaderFields() const
 {
     updateResourceRequest(); 
 
     return m_httpHeaderFields; 
 }
 
-String ResourceRequest::httpHeaderField(const String& name) const
+String ResourceRequestBase::httpHeaderField(const String& name) const
 {
     updateResourceRequest(); 
     
     return m_httpHeaderFields.get(name);
 }
 
-void ResourceRequest::setHTTPHeaderField(const String& name, const String& value)
+void ResourceRequestBase::setHTTPHeaderField(const String& name, const String& value)
 {
     updateResourceRequest(); 
     
@@ -145,14 +151,14 @@
     m_platformRequestUpdated = false;
 }
 
-FormData* ResourceRequest::httpBody() const 
+FormData* ResourceRequestBase::httpBody() const 
 { 
     updateResourceRequest(); 
     
     return m_httpBody.get(); 
 }
 
-void ResourceRequest::setHTTPBody(PassRefPtr<FormData> httpBody)
+void ResourceRequestBase::setHTTPBody(PassRefPtr<FormData> httpBody)
 {
     updateResourceRequest(); 
     
@@ -161,14 +167,14 @@
     m_platformRequestUpdated = false;
 } 
 
-bool ResourceRequest::allowHTTPCookies() const 
+bool ResourceRequestBase::allowHTTPCookies() const 
 {
     updateResourceRequest(); 
     
     return m_allowHTTPCookies; 
 }
 
-void ResourceRequest::setAllowHTTPCookies(bool allowHTTPCookies)
+void ResourceRequestBase::setAllowHTTPCookies(bool allowHTTPCookies)
 {
     updateResourceRequest(); 
     
@@ -177,29 +183,7 @@
     m_platformRequestUpdated = false;
 }
 
-void ResourceRequest::updatePlatformRequest() const
-{
-#if PLATFORM(MAC) || USE(CFNETWORK)
-    if (m_platformRequestUpdated)
-        return;
-    
-    const_cast<ResourceRequest*>(this)->doUpdatePlatformRequest();
-    m_platformRequestUpdated = true;
-#endif
-}
-
-void ResourceRequest::updateResourceRequest() const
-{
-#if PLATFORM(MAC) || USE(CFNETWORK)
-    if (m_resourceRequestUpdated)
-        return;
-
-    const_cast<ResourceRequest*>(this)->doUpdateResourceRequest();
-    m_resourceRequestUpdated = true;
-#endif
-}
-
-void ResourceRequest::addHTTPHeaderField(const String& name, const String& value) 
+void ResourceRequestBase::addHTTPHeaderField(const String& name, const String& value) 
 {
     updateResourceRequest();
     pair<HTTPHeaderMap::iterator, bool> result = m_httpHeaderFields.add(name, value); 
@@ -207,14 +191,14 @@
         result.first->second += "," + value;
 }
 
-void ResourceRequest::addHTTPHeaderFields(const HTTPHeaderMap& headerFields)
+void ResourceRequestBase::addHTTPHeaderFields(const HTTPHeaderMap& headerFields)
 {
     HTTPHeaderMap::const_iterator end = headerFields.end();
     for (HTTPHeaderMap::const_iterator it = headerFields.begin(); it != end; ++it)
         addHTTPHeaderField(it->first, it->second);
 }
 
-bool operator==(const ResourceRequest& a, const ResourceRequest& b)
+bool operator==(const ResourceRequestBase& a, const ResourceRequestBase& b)
 {
     if (a.url() != b.url())
         return false;
@@ -251,7 +235,7 @@
     return true;
 }
 
-bool ResourceRequest::isConditional() const
+bool ResourceRequestBase::isConditional() const
 {
     return (m_httpHeaderFields.contains("If-Match") ||
             m_httpHeaderFields.contains("If-Modified-Since") ||
@@ -260,4 +244,22 @@
             m_httpHeaderFields.contains("If-Unmodified-Since"));
 }
 
+void ResourceRequestBase::updatePlatformRequest() const
+{
+    if (m_platformRequestUpdated)
+        return;
+    
+    const_cast<ResourceRequest&>(asResourceRequest()).doUpdatePlatformRequest();
+    m_platformRequestUpdated = true;
+}
+
+void ResourceRequestBase::updateResourceRequest() const
+{
+    if (m_resourceRequestUpdated)
+        return;
+
+    const_cast<ResourceRequest&>(asResourceRequest()).doUpdateResourceRequest();
+    m_resourceRequestUpdated = true;
+}
+
 }
diff --git a/WebCore/platform/network/ResourceRequest.h b/WebCore/platform/network/ResourceRequestBase.h
similarity index 66%
rename from WebCore/platform/network/ResourceRequest.h
rename to WebCore/platform/network/ResourceRequestBase.h
index 9277b9d..8472b1b 100644
--- a/WebCore/platform/network/ResourceRequest.h
+++ b/WebCore/platform/network/ResourceRequestBase.h
@@ -25,25 +25,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef ResourceRequest_h
-#define ResourceRequest_h
+#ifndef ResourceRequestBase_h
+#define ResourceRequestBase_h
 
 #include "FormData.h"
 #include "KURL.h"
 #include "HTTPHeaderMap.h"
 
-#if PLATFORM(MAC)
-#include <wtf/RetainPtr.h>
-#ifdef __OBJC__
-@class NSURLRequest;
-#else
-class NSURLRequest;
-#endif
-#elif USE(CFNETWORK)
-#include <wtf/RetainPtr.h>
-typedef const struct _CFURLRequest* CFURLRequestRef;
-#endif
-
 namespace WebCore {
 
     enum ResourceRequestCachePolicy {
@@ -53,52 +41,10 @@
         ReturnCacheDataDontLoad, // results of a post - allow stale data and only use cache
     };
 
-    struct ResourceRequest {
+    struct ResourceRequest;
 
-        
-        ResourceRequest(const String& url) 
-            : m_url(url.deprecatedString())
-            , m_cachePolicy(UseProtocolCachePolicy)
-            , m_timeoutInterval(defaultTimeoutInterval)
-            , m_httpMethod("GET")
-            , m_allowHTTPCookies(true)
-            , m_resourceRequestUpdated(true)
-            , m_platformRequestUpdated(false)
-        {
-        }
-
-        ResourceRequest(const KURL& url) 
-            : m_url(url)
-            , m_cachePolicy(UseProtocolCachePolicy)
-            , m_timeoutInterval(defaultTimeoutInterval)
-            , m_httpMethod("GET")
-            , m_allowHTTPCookies(true)
-            , m_resourceRequestUpdated(true)
-            , m_platformRequestUpdated(false)
-        {
-        }
-
-        ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 
-            : m_url(url)
-            , m_cachePolicy(policy)
-            , m_timeoutInterval(defaultTimeoutInterval)
-            , m_httpMethod("GET")
-            , m_allowHTTPCookies(true)
-            , m_resourceRequestUpdated(true)
-            , m_platformRequestUpdated(false)
-        {
-            setHTTPReferrer(referrer);
-        }
-        
-        ResourceRequest()
-            : m_cachePolicy(UseProtocolCachePolicy)
-            , m_timeoutInterval(defaultTimeoutInterval)
-            , m_httpMethod("GET")
-            , m_allowHTTPCookies(true)
-            , m_resourceRequestUpdated(true)
-            , m_platformRequestUpdated(false)
-        {
-        }
+    // Do not use this type directly.  Use ResourceRequest instead.
+    struct ResourceRequestBase {
 
         bool isNull() const;
         bool isEmpty() const;
@@ -145,30 +91,28 @@
 
         bool isConditional() const;
         
-#if PLATFORM(MAC)
-        ResourceRequest(NSURLRequest* nsRequest)
+    protected:
+        // Used when ResourceRequest is initialized from a platform representation of the request
+        ResourceRequestBase()
             : m_resourceRequestUpdated(false)
             , m_platformRequestUpdated(true)
-            , m_nsRequest(nsRequest) { }
-        
-        NSURLRequest* nsURLRequest() const;
-#elif USE(CFNETWORK)
-        ResourceRequest(CFURLRequestRef cfRequest)
-            : m_resourceRequestUpdated(false)
-            , m_platformRequestUpdated(true)
-            , m_cfRequest(cfRequest) { }
-        
-        CFURLRequestRef cfURLRequest() const;       
-#endif
-    private:
+        {
+        }
+
+        ResourceRequestBase(const KURL& url, ResourceRequestCachePolicy policy)
+            : m_url(url)
+            , m_cachePolicy(policy)
+            , m_timeoutInterval(defaultTimeoutInterval)
+            , m_httpMethod("GET")
+            , m_allowHTTPCookies(true)
+            , m_resourceRequestUpdated(true)
+            , m_platformRequestUpdated(false)
+        {
+        }
+
         void updatePlatformRequest() const; 
         void updateResourceRequest() const; 
 
-#if PLATFORM(MAC) || USE(CFNETWORK)
-        void doUpdatePlatformRequest();
-        void doUpdateResourceRequest();
-#endif
-        
         static const int defaultTimeoutInterval = 60;
 
         KURL m_url;
@@ -182,16 +126,14 @@
         bool m_allowHTTPCookies;
         mutable bool m_resourceRequestUpdated;
         mutable bool m_platformRequestUpdated;
-#if PLATFORM(MAC)
-        RetainPtr<NSURLRequest> m_nsRequest;
-#elif USE(CFNETWORK)
-        RetainPtr<CFURLRequestRef> m_cfRequest;      
-#endif
+
+    private:
+        const ResourceRequest& asResourceRequest() const;
     };
 
-    bool operator==(const ResourceRequest& a, const ResourceRequest& b);
-    inline bool operator!=(ResourceRequest& a, const ResourceRequest& b) { return !(a == b); }
+    bool operator==(const ResourceRequestBase& a, const ResourceRequestBase& b);
+    inline bool operator!=(ResourceRequestBase& a, const ResourceRequestBase& b) { return !(a == b); }
 
 } // namespace WebCore
 
-#endif // ResourceRequest_h
+#endif // ResourceRequestBase_h
diff --git a/WebCore/platform/network/cf/ResourceRequest.h b/WebCore/platform/network/cf/ResourceRequest.h
new file mode 100644
index 0000000..350c6c8a
--- /dev/null
+++ b/WebCore/platform/network/cf/ResourceRequest.h
@@ -0,0 +1,78 @@
+// -*- mode: c++; c-basic-offset: 4 -*-
+/*
+ * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. 
+ */
+
+#ifndef ResourceRequest_h
+#define ResourceRequest_h
+
+#include "ResourceRequestBase.h"
+
+#include <wtf/RetainPtr.h>
+typedef const struct _CFURLRequest* CFURLRequestRef;
+
+namespace WebCore {
+
+    struct ResourceRequest : ResourceRequestBase {
+
+        ResourceRequest(const String& url) 
+            : ResourceRequestBase(KURL(url.deprecatedString()), UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url) 
+            : ResourceRequestBase(url, UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 
+            : ResourceRequestBase(url, policy)
+        {
+            setHTTPReferrer(referrer);
+        }
+        
+        ResourceRequest()
+            : ResourceRequestBase(KURL(), UseProtocolCachePolicy)
+        {
+        }
+        
+        ResourceRequest(CFURLRequestRef cfRequest)
+            : ResourceRequestBase()
+            , m_cfRequest(cfRequest) { }
+        
+        CFURLRequestRef cfURLRequest() const;       
+
+    private:
+        friend class ResourceRequestBase;
+
+        void doUpdatePlatformRequest();
+        void doUpdateResourceRequest();
+        
+        RetainPtr<CFURLRequestRef> m_cfRequest;      
+    };
+
+} // namespace WebCore
+
+#endif // ResourceRequest_h
diff --git a/WebCore/platform/network/curl/ResourceRequest.h b/WebCore/platform/network/curl/ResourceRequest.h
new file mode 100644
index 0000000..a33ccda
--- /dev/null
+++ b/WebCore/platform/network/curl/ResourceRequest.h
@@ -0,0 +1,67 @@
+// -*- mode: c++; c-basic-offset: 4 -*-
+/*
+ * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. 
+ */
+
+#ifndef ResourceRequest_h
+#define ResourceRequest_h
+
+#include "ResourceRequestBase.h"
+
+namespace WebCore {
+
+    struct ResourceRequest : ResourceRequestBase {
+
+        ResourceRequest(const String& url) 
+            : ResourceRequestBase(KURL(url.deprecatedString()), UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url) 
+            : ResourceRequestBase(url, UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 
+            : ResourceRequestBase(url, policy)
+        {
+            setHTTPReferrer(referrer);
+        }
+        
+        ResourceRequest()
+            : ResourceRequestBase(KURL(), UseProtocolCachePolicy)
+        {
+        }
+        
+    private:
+        friend class ResourceRequestBase;
+
+        void doUpdatePlatformRequest() {}
+        void doUpdateResourceRequest() {}
+    };
+
+} // namespace WebCore
+
+#endif // ResourceRequest_h
diff --git a/WebCore/platform/network/mac/ResourceRequest.h b/WebCore/platform/network/mac/ResourceRequest.h
new file mode 100644
index 0000000..e4ea762
--- /dev/null
+++ b/WebCore/platform/network/mac/ResourceRequest.h
@@ -0,0 +1,82 @@
+// -*- mode: c++; c-basic-offset: 4 -*-
+/*
+ * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. 
+ */
+
+#ifndef ResourceRequest_h
+#define ResourceRequest_h
+
+#include "ResourceRequestBase.h"
+
+#include <wtf/RetainPtr.h>
+#ifdef __OBJC__
+@class NSURLRequest;
+#else
+class NSURLRequest;
+#endif
+
+namespace WebCore {
+
+    struct ResourceRequest : ResourceRequestBase {
+
+        ResourceRequest(const String& url) 
+            : ResourceRequestBase(KURL(url.deprecatedString()), UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url) 
+            : ResourceRequestBase(url, UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 
+            : ResourceRequestBase(url, policy)
+        {
+            setHTTPReferrer(referrer);
+        }
+        
+        ResourceRequest()
+            : ResourceRequestBase(KURL(), UseProtocolCachePolicy)
+        {
+        }
+        
+        ResourceRequest(NSURLRequest* nsRequest)
+            : ResourceRequestBase()
+            , m_nsRequest(nsRequest) { }
+        
+        NSURLRequest* nsURLRequest() const;
+
+    private:
+        friend class ResourceRequestBase;
+
+        void doUpdatePlatformRequest();
+        void doUpdateResourceRequest();
+        
+        RetainPtr<NSURLRequest> m_nsRequest;
+    };
+
+} // namespace WebCore
+
+#endif // ResourceRequest_h
diff --git a/WebCore/platform/network/qt/ResourceRequest.h b/WebCore/platform/network/qt/ResourceRequest.h
new file mode 100644
index 0000000..a33ccda
--- /dev/null
+++ b/WebCore/platform/network/qt/ResourceRequest.h
@@ -0,0 +1,67 @@
+// -*- mode: c++; c-basic-offset: 4 -*-
+/*
+ * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. 
+ */
+
+#ifndef ResourceRequest_h
+#define ResourceRequest_h
+
+#include "ResourceRequestBase.h"
+
+namespace WebCore {
+
+    struct ResourceRequest : ResourceRequestBase {
+
+        ResourceRequest(const String& url) 
+            : ResourceRequestBase(KURL(url.deprecatedString()), UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url) 
+            : ResourceRequestBase(url, UseProtocolCachePolicy)
+        {
+        }
+
+        ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 
+            : ResourceRequestBase(url, policy)
+        {
+            setHTTPReferrer(referrer);
+        }
+        
+        ResourceRequest()
+            : ResourceRequestBase(KURL(), UseProtocolCachePolicy)
+        {
+        }
+        
+    private:
+        friend class ResourceRequestBase;
+
+        void doUpdatePlatformRequest() {}
+        void doUpdateResourceRequest() {}
+    };
+
+} // namespace WebCore
+
+#endif // ResourceRequest_h