15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/child/web_url_request_util.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using blink::WebURLRequest;
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content {
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ResourceType WebURLRequestToResourceType(const WebURLRequest& request) {
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  WebURLRequest::RequestContext requestContext = request.requestContext();
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (request.frameType() != WebURLRequest::FrameTypeNone) {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DCHECK(requestContext == WebURLRequest::RequestContextForm ||
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           requestContext == WebURLRequest::RequestContextFrame ||
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           requestContext == WebURLRequest::RequestContextHyperlink ||
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           requestContext == WebURLRequest::RequestContextIframe ||
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           requestContext == WebURLRequest::RequestContextInternal ||
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           requestContext == WebURLRequest::RequestContextLocation);
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (request.frameType() == WebURLRequest::FrameTypeTopLevel ||
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        request.frameType() == WebURLRequest::FrameTypeAuxiliary) {
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_MAIN_FRAME;
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (request.frameType() == WebURLRequest::FrameTypeNested)
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SUB_FRAME;
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    NOTREACHED();
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return RESOURCE_TYPE_SUB_RESOURCE;
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  switch (requestContext) {
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Favicon
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextFavicon:
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_FAVICON;
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Font
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextFont:
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_FONT_RESOURCE;
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Image
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextImage:
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextImageSet:
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_IMAGE;
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Media
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextAudio:
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextVideo:
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_MEDIA;
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Object
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextEmbed:
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextObject:
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_OBJECT;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Ping
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextBeacon:
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextCSPReport:
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextPing:
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_PING;
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Prefetch
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextPrefetch:
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_PREFETCH;
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Script
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextImport:
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextScript:
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SCRIPT;
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Style
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextXSLT:
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextStyle:
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_STYLESHEET;
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Subresource
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextDownload:
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextManifest:
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextSubresource:
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextPlugin:
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SUB_RESOURCE;
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // TextTrack
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextTrack:
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_MEDIA;
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Workers
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextServiceWorker:
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SERVICE_WORKER;
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextSharedWorker:
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SHARED_WORKER;
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextWorker:
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_WORKER;
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // Unspecified
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextInternal:
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextUnspecified:
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SUB_RESOURCE;
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // XHR
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextEventSource:
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextFetch:
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextXMLHttpRequest:
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_XHR;
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // These should be handled by the FrameType checks at the top of the
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // function.
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextForm:
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextHyperlink:
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextLocation:
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextFrame:
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case WebURLRequest::RequestContextIframe:
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      NOTREACHED();
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SUB_RESOURCE;
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    default:
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      NOTREACHED();
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return RESOURCE_TYPE_SUB_RESOURCE;
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace content
124