15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef WEBKIT_COMMON_RESOURCE_TYPE_H__
6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define WEBKIT_COMMON_RESOURCE_TYPE_H__
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h"
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "webkit/common/webkit_common_export.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourceType {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used in histograms, so please add new types at the end, and rename unused
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // entries to RESOURCETYPE_UNUSED_0, etc...
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Type {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MAIN_FRAME = 0,  // top level page
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SUB_FRAME,       // frame or iframe
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STYLESHEET,      // a CSS stylesheet
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCRIPT,          // an external script
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IMAGE,           // an image (jpg/gif/png/etc)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FONT_RESOURCE,   // a font
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SUB_RESOURCE,    // an "other" subresource.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OBJECT,          // an object (or embed) tag for a plugin,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     // or a resource that a plugin requested.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MEDIA,           // a media resource.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WORKER,          // the main resource of a dedicated worker.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SHARED_WORKER,   // the main resource of a shared worker.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PREFETCH,        // an explicitly requested prefetch
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FAVICON,         // a favicon
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    XHR,             // a XMLHttpRequest
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    PING,            // a ping request for <a ping>
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LAST_TYPE        // Place holder so we don't need to change ValidType
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     // everytime.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool ValidType(int32 type) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type >= MAIN_FRAME && type < LAST_TYPE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static Type FromInt(int32 type) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<Type>(type);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WEBKIT_COMMON_EXPORT static Type FromTargetType(
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebURLRequest::TargetType type);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsFrame(ResourceType::Type type) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type == MAIN_FRAME || type == SUB_FRAME;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsSharedWorker(ResourceType::Type type) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type == SHARED_WORKER;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsSubresource(ResourceType::Type type) {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type == STYLESHEET ||
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           type == SCRIPT ||
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           type == IMAGE ||
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           type == FONT_RESOURCE ||
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           type == SUB_RESOURCE ||
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           type == WORKER ||
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           type == XHR;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Don't instantiate this class.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResourceType();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ResourceType();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
71ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // WEBKIT_COMMON_RESOURCE_TYPE_H__
72