Index: trunk/Source/platform/exported/WebURLRequest.cpp |
=================================================================== |
--- trunk/Source/platform/exported/WebURLRequest.cpp (revision 179161) |
+++ trunk/Source/platform/exported/WebURLRequest.cpp (working copy) |
@@ -356,4 +356,168 @@ |
m_private = p; |
} |
+WebURLRequest::RequestContext WebURLRequest::requestContextFromTargetType(WebURLRequest::TargetType targetType) |
+{ |
+ switch (targetType) { |
+ case TargetIsMainFrame: |
+ return RequestContextHyperlink; // FIXME: Fetch defines the target separately from the cause. Need to work that out here. |
+ case TargetIsSubframe: |
+ return RequestContextIframe; |
+ case TargetIsSubresource: |
+ return RequestContextSubresource; |
+ case TargetIsStyleSheet: |
+ return RequestContextStyle; |
+ case TargetIsScript: |
+ return RequestContextScript; |
+ case TargetIsFontResource: |
+ return RequestContextFont; |
+ case TargetIsImage: |
+ return RequestContextImage; |
+ case TargetIsObject: |
+ return RequestContextObject; |
+ case TargetIsMedia: |
+ // FIXME: Split this out. |
+ return RequestContextVideo; |
+ case TargetIsWorker: |
+ return RequestContextWorker; |
+ case TargetIsSharedWorker: |
+ return RequestContextSharedWorker; |
+ case TargetIsPrefetch: |
+ return RequestContextPrefetch; |
+ case TargetIsFavicon: |
+ return RequestContextFavicon; |
+ case TargetIsXHR: |
+ return RequestContextXMLHttpRequest; |
+ case TargetIsTextTrack: |
+ return RequestContextTrack; |
+ case TargetIsPing: |
+ return RequestContextPing; |
+ case TargetIsServiceWorker: |
+ return RequestContextServiceWorker; |
+ case TargetIsUnspecified: |
+ return RequestContextUnspecified; |
+ } |
+ ASSERT_NOT_REACHED(); |
+ return RequestContextUnspecified; |
+} |
+ |
+WebURLRequest::TargetType WebURLRequest::targetTypeFromRequestContextAndFrameType(WebURLRequest::RequestContext requestContext, WebURLRequest::FrameType frameType) |
+{ |
+ if (frameType != FrameTypeNone) { |
+ ASSERT(requestContext == RequestContextForm || requestContext == RequestContextFrame || requestContext == RequestContextHyperlink || requestContext == RequestContextIframe || requestContext == RequestContextInternal || requestContext == RequestContextLocation); |
+ if (frameType == FrameTypeTopLevel || frameType == FrameTypeAuxiliary) |
+ return TargetIsMainFrame; |
+ if (frameType == FrameTypeNested) |
+ return TargetIsSubframe; |
+ ASSERT_NOT_REACHED(); |
+ return TargetIsUnspecified; |
+ } |
+ |
+ switch (requestContext) { |
+ // Favicon |
+ case RequestContextFavicon: |
+ return TargetIsFavicon; |
+ |
+ // Font |
+ case RequestContextFont: |
+ return TargetIsFontResource; |
+ |
+ // Image |
+ case RequestContextImage: |
+ return TargetIsImage; |
+ |
+ // Media |
+ case RequestContextAudio: |
+ case RequestContextVideo: |
+ return TargetIsMedia; |
+ |
+ // Object |
+ case RequestContextEmbed: |
+ case RequestContextObject: |
+ return TargetIsObject; |
+ |
+ // Ping |
+ case RequestContextBeacon: |
+ case RequestContextCSPReport: |
+ case RequestContextPing: |
+ return TargetIsPing; |
+ |
+ // Prefetch |
+ case RequestContextPrefetch: |
+ return TargetIsPrefetch; |
+ |
+ // Script |
+ case RequestContextScript: |
+ return TargetIsScript; |
+ |
+ // Style |
+ case RequestContextXSLT: |
+ case RequestContextStyle: |
+ return TargetIsStyleSheet; |
+ |
+ |
+ // Subresource |
+ case RequestContextDownload: |
+ case RequestContextManifest: |
+ case RequestContextSubresource: |
+ case RequestContextPlugin: |
+ return TargetIsSubresource; |
+ |
+ // TextTrack |
+ case RequestContextTrack: |
+ return TargetIsTextTrack; |
+ |
+ // Workers |
+ case RequestContextServiceWorker: |
+ return TargetIsServiceWorker; |
+ case RequestContextSharedWorker: |
+ return TargetIsSharedWorker; |
+ case RequestContextWorker: |
+ return TargetIsWorker; |
+ |
+ // Unspecified |
+ case RequestContextInternal: |
+ case RequestContextUnspecified: |
+ return TargetIsUnspecified; |
+ |
+ // XHR |
+ case RequestContextEventSource: |
+ case RequestContextFetch: |
+ case RequestContextXMLHttpRequest: |
+ return TargetIsXHR; |
+ |
+ // These should be handled by the FrameType checks at the top of the function. |
+ // Main Frame |
+ case RequestContextForm: |
+ case RequestContextHyperlink: |
+ case RequestContextLocation: |
+ case RequestContextFrame: |
+ case RequestContextIframe: |
+ ASSERT_NOT_REACHED(); |
+ return TargetIsUnspecified; |
+ } |
+ ASSERT_NOT_REACHED(); |
+ return TargetIsUnspecified; |
+} |
+ |
+// FIXME: Drop these two methods once embedders are updated to use RequestContexts. |
+WebURLRequest::TargetType WebURLRequest::targetType() const |
+{ |
+ // FIXME: Temporary special case until downstream chromium.org knows of the new TargetTypes. |
+ TargetType targetType = WebURLRequest::targetTypeFromRequestContextAndFrameType(requestContext(), frameType()); |
+ if (targetType == TargetIsTextTrack || targetType == TargetIsUnspecified) |
+ return TargetIsSubresource; |
+ return targetType; |
+} |
+ |
+void WebURLRequest::setTargetType(TargetType targetType) |
+{ |
+ setRequestContext(WebURLRequest::requestContextFromTargetType(targetType)); |
+ if (targetType == TargetIsMainFrame) |
+ setFrameType(FrameTypeTopLevel); |
+ if (targetType == TargetIsSubframe) |
+ setFrameType(FrameTypeNested); |
+} |
+ |
+ |
} // namespace blink |