1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef WEBKIT_COMMON_RESOURCE_TYPE_H__
6#define WEBKIT_COMMON_RESOURCE_TYPE_H__
7
8#include "base/basictypes.h"
9#include "third_party/WebKit/public/platform/WebURLRequest.h"
10#include "webkit/common/webkit_common_export.h"
11
12class ResourceType {
13 public:
14  // Used in histograms, so please add new types at the end, and rename unused
15  // entries to RESOURCETYPE_UNUSED_0, etc...
16  enum Type {
17    MAIN_FRAME = 0,  // top level page
18    SUB_FRAME,       // frame or iframe
19    STYLESHEET,      // a CSS stylesheet
20    SCRIPT,          // an external script
21    IMAGE,           // an image (jpg/gif/png/etc)
22    FONT_RESOURCE,   // a font
23    SUB_RESOURCE,    // an "other" subresource.
24    OBJECT,          // an object (or embed) tag for a plugin,
25                     // or a resource that a plugin requested.
26    MEDIA,           // a media resource.
27    WORKER,          // the main resource of a dedicated worker.
28    SHARED_WORKER,   // the main resource of a shared worker.
29    PREFETCH,        // an explicitly requested prefetch
30    FAVICON,         // a favicon
31    XHR,             // a XMLHttpRequest
32    PING,            // a ping request for <a ping>
33    SERVICE_WORKER,  // the main resource of a service worker.
34    LAST_TYPE        // Place holder so we don't need to change ValidType
35                     // everytime.
36  };
37
38  static bool ValidType(int32 type) {
39    return type >= MAIN_FRAME && type < LAST_TYPE;
40  }
41
42  static Type FromInt(int32 type) {
43    return static_cast<Type>(type);
44  }
45
46  WEBKIT_COMMON_EXPORT static Type FromTargetType(
47      blink::WebURLRequest::TargetType type);
48
49  static bool IsFrame(ResourceType::Type type) {
50    return type == MAIN_FRAME || type == SUB_FRAME;
51  }
52
53  static bool IsSharedWorker(ResourceType::Type type) {
54    return type == SHARED_WORKER;
55  }
56
57  static bool IsServiceWorker(ResourceType::Type type) {
58    return type == SERVICE_WORKER;
59  }
60
61  static bool IsSubresource(ResourceType::Type type) {
62    return type == STYLESHEET ||
63           type == SCRIPT ||
64           type == IMAGE ||
65           type == FONT_RESOURCE ||
66           type == SUB_RESOURCE ||
67           type == WORKER ||
68           type == XHR;
69  }
70
71 private:
72  // Don't instantiate this class.
73  ResourceType();
74  ~ResourceType();
75};
76#endif  // WEBKIT_COMMON_RESOURCE_TYPE_H__
77