/src/mozilla-central/dom/base/nsPluginArray.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | | |
7 | | #ifndef nsPluginArray_h___ |
8 | | #define nsPluginArray_h___ |
9 | | |
10 | | #include "nsTArray.h" |
11 | | #include "nsWeakReference.h" |
12 | | #include "nsIObserver.h" |
13 | | #include "nsWrapperCache.h" |
14 | | #include "nsPIDOMWindow.h" |
15 | | #include "mozilla/dom/BindingDeclarations.h" |
16 | | |
17 | | class nsPluginElement; |
18 | | class nsMimeType; |
19 | | class nsIInternalPluginTag; |
20 | | |
21 | | class nsPluginArray final : public nsIObserver, |
22 | | public nsSupportsWeakReference, |
23 | | public nsWrapperCache |
24 | | { |
25 | | public: |
26 | | NS_DECL_CYCLE_COLLECTING_ISUPPORTS |
27 | | NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsPluginArray, |
28 | | nsIObserver) |
29 | | |
30 | | // nsIObserver |
31 | | NS_DECL_NSIOBSERVER |
32 | | |
33 | | explicit nsPluginArray(nsPIDOMWindowInner* aWindow); |
34 | | nsPIDOMWindowInner* GetParentObject() const; |
35 | | virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; |
36 | | |
37 | | // nsPluginArray registers itself as an observer with a weak reference. |
38 | | // This can't be done in the constructor, because at that point its |
39 | | // refcount is 0 (and it gets destroyed upon registration). So, Init() |
40 | | // must be called after construction. |
41 | | void Init(); |
42 | | void Invalidate(); |
43 | | |
44 | | void GetMimeTypes(nsTArray<RefPtr<nsMimeType>>& aMimeTypes); |
45 | | void GetCTPMimeTypes(nsTArray<RefPtr<nsMimeType>>& aMimeTypes); |
46 | | |
47 | | static void NotifyHiddenPluginTouched(nsPluginElement* aElement); |
48 | | |
49 | | // PluginArray WebIDL methods |
50 | | |
51 | | nsPluginElement* Item(uint32_t aIndex, mozilla::dom::CallerType aCallerType); |
52 | | nsPluginElement* NamedItem(const nsAString& aName, |
53 | | mozilla::dom::CallerType aCallerType); |
54 | | void Refresh(bool aReloadDocuments); |
55 | | nsPluginElement* IndexedGetter(uint32_t aIndex, bool &aFound, |
56 | | mozilla::dom::CallerType aCallerType); |
57 | | nsPluginElement* NamedGetter(const nsAString& aName, bool &aFound, |
58 | | mozilla::dom::CallerType aCallerType); |
59 | | uint32_t Length(mozilla::dom::CallerType aCallerType); |
60 | | void GetSupportedNames(nsTArray<nsString>& aRetval, |
61 | | mozilla::dom::CallerType aCallerType); |
62 | | |
63 | | private: |
64 | | virtual ~nsPluginArray(); |
65 | | |
66 | | bool AllowPlugins() const; |
67 | | void EnsurePlugins(); |
68 | | |
69 | | nsCOMPtr<nsPIDOMWindowInner> mWindow; |
70 | | nsTArray<RefPtr<nsPluginElement> > mPlugins; |
71 | | /* A separate list of click-to-play plugins that we don't tell content |
72 | | * about but keep track of so we can still prompt the user to click to play. |
73 | | */ |
74 | | nsTArray<RefPtr<nsPluginElement> > mCTPPlugins; |
75 | | }; |
76 | | |
77 | | class nsPluginElement final : public nsISupports, |
78 | | public nsWrapperCache |
79 | | { |
80 | | public: |
81 | | NS_DECL_CYCLE_COLLECTING_ISUPPORTS |
82 | | NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsPluginElement) |
83 | | |
84 | | nsPluginElement(nsPIDOMWindowInner* aWindow, |
85 | | nsIInternalPluginTag* aPluginTag); |
86 | | |
87 | | nsPIDOMWindowInner* GetParentObject() const; |
88 | | virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; |
89 | | |
90 | | nsIInternalPluginTag* PluginTag() const |
91 | 0 | { |
92 | 0 | return mPluginTag; |
93 | 0 | } |
94 | | |
95 | | // Plugin WebIDL methods |
96 | | |
97 | | void GetDescription(nsString& retval) const; |
98 | | void GetFilename(nsString& retval) const; |
99 | | void GetVersion(nsString& retval) const; |
100 | | void GetName(nsString& retval) const; |
101 | | nsMimeType* Item(uint32_t index); |
102 | | nsMimeType* NamedItem(const nsAString& name); |
103 | | nsMimeType* IndexedGetter(uint32_t index, bool &found); |
104 | | nsMimeType* NamedGetter(const nsAString& name, bool &found); |
105 | | uint32_t Length(); |
106 | | void GetSupportedNames(nsTArray<nsString>& retval); |
107 | | |
108 | | nsTArray<RefPtr<nsMimeType> >& MimeTypes(); |
109 | | |
110 | | protected: |
111 | | ~nsPluginElement(); |
112 | | |
113 | | void EnsurePluginMimeTypes(); |
114 | | |
115 | | nsCOMPtr<nsPIDOMWindowInner> mWindow; |
116 | | nsCOMPtr<nsIInternalPluginTag> mPluginTag; |
117 | | nsTArray<RefPtr<nsMimeType> > mMimeTypes; |
118 | | }; |
119 | | |
120 | | #endif /* nsPluginArray_h___ */ |