blob: d8cf837430c959117628dd5f198d2aacb74d210d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WEBKIT_GLUE_PLUGINS_PEPPER_RESOURCE_H_
#define WEBKIT_GLUE_PLUGINS_PEPPER_RESOURCE_H_
#include "base/basictypes.h"
#include "base/ref_counted.h"
#include "third_party/ppapi/c/pp_resource.h"
#include "webkit/glue/plugins/pepper_resource_tracker.h"
namespace pepper {
class Buffer;
class DeviceContext2D;
class DirectoryReader;
class FileChooser;
class FileIO;
class FileRef;
class ImageData;
class PluginModule;
class Scrollbar;
class URLLoader;
class URLRequestInfo;
class URLResponseInfo;
class Widget;
class Resource : public base::RefCountedThreadSafe<Resource> {
public:
explicit Resource(PluginModule* module);
virtual ~Resource();
// Returns NULL if the resource is invalid or is a different type.
template<typename T>
static scoped_refptr<T> GetAs(PP_Resource res) {
scoped_refptr<Resource> resource = ResourceTracker::Get()->GetResource(res);
return resource ? resource->Cast<T>() : NULL;
}
PP_Resource GetResource() const;
PluginModule* module() const { return module_; }
// Cast the resource into a specified type. This will return NULL if the
// resource does not match the specified type. Specializations of this
// template call into As* functions.
template <typename T> T* Cast() { return NULL; }
private:
// Type-specific getters for individual resource types. These will return
// NULL if the resource does not match the specified type. Used by the Cast()
// function.
virtual Buffer* AsBuffer() { return NULL; }
virtual DeviceContext2D* AsDeviceContext2D() { return NULL; }
virtual DirectoryReader* AsDirectoryReader() { return NULL; }
virtual FileChooser* AsFileChooser() { return NULL; }
virtual FileIO* AsFileIO() { return NULL; }
virtual FileRef* AsFileRef() { return NULL; }
virtual ImageData* AsImageData() { return NULL; }
virtual Scrollbar* AsScrollbar() { return NULL; }
virtual URLLoader* AsURLLoader() { return NULL; }
virtual URLRequestInfo* AsURLRequestInfo() { return NULL; }
virtual URLResponseInfo* AsURLResponseInfo() { return NULL; }
virtual Widget* AsWidget() { return NULL; }
PluginModule* module_; // Non-owning pointer to our module.
DISALLOW_COPY_AND_ASSIGN(Resource);
};
// Cast() specializations.
#define DEFINE_RESOURCE_CAST(Type) \
template <> inline Type* Resource::Cast<Type>() { \
return As##Type(); \
}
DEFINE_RESOURCE_CAST(Buffer)
DEFINE_RESOURCE_CAST(DeviceContext2D)
DEFINE_RESOURCE_CAST(DirectoryReader)
DEFINE_RESOURCE_CAST(FileChooser)
DEFINE_RESOURCE_CAST(FileIO)
DEFINE_RESOURCE_CAST(FileRef)
DEFINE_RESOURCE_CAST(ImageData)
DEFINE_RESOURCE_CAST(Scrollbar)
DEFINE_RESOURCE_CAST(URLLoader)
DEFINE_RESOURCE_CAST(URLRequestInfo)
DEFINE_RESOURCE_CAST(URLResponseInfo)
DEFINE_RESOURCE_CAST(Widget)
#undef DEFINE_RESOURCE_CAST
} // namespace pepper
#endif // WEBKIT_GLUE_PLUGINS_PEPPER_RESOURCE_H_
|