|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 #ifndef nsHostObjectProtocolHandler_h |
|
6 #define nsHostObjectProtocolHandler_h |
|
7 |
|
8 #include "mozilla/Attributes.h" |
|
9 #include "nsIProtocolHandler.h" |
|
10 #include "nsIURI.h" |
|
11 #include "nsCOMPtr.h" |
|
12 #include "nsIInputStream.h" |
|
13 |
|
14 #define BLOBURI_SCHEME "blob" |
|
15 #define MEDIASTREAMURI_SCHEME "mediastream" |
|
16 #define MEDIASOURCEURI_SCHEME "mediasource" |
|
17 #define FONTTABLEURI_SCHEME "moz-fonttable" |
|
18 #define RTSPURI_SCHEME "rtsp" |
|
19 |
|
20 class nsIDOMBlob; |
|
21 class nsIDOMMediaStream; |
|
22 class nsIPrincipal; |
|
23 |
|
24 namespace mozilla { |
|
25 namespace dom { |
|
26 class MediaSource; |
|
27 } |
|
28 } |
|
29 |
|
30 class nsHostObjectProtocolHandler : public nsIProtocolHandler |
|
31 { |
|
32 public: |
|
33 nsHostObjectProtocolHandler(); |
|
34 virtual ~nsHostObjectProtocolHandler() {} |
|
35 NS_DECL_ISUPPORTS |
|
36 |
|
37 // nsIProtocolHandler methods, except for GetScheme which is only defined |
|
38 // in subclasses. |
|
39 NS_IMETHOD GetDefaultPort(int32_t *aDefaultPort) MOZ_OVERRIDE; |
|
40 NS_IMETHOD GetProtocolFlags(uint32_t *aProtocolFlags) MOZ_OVERRIDE; |
|
41 NS_IMETHOD NewURI(const nsACString & aSpec, const char * aOriginCharset, nsIURI *aBaseURI, nsIURI * *_retval) MOZ_OVERRIDE; |
|
42 NS_IMETHOD NewChannel(nsIURI *aURI, nsIChannel * *_retval) MOZ_OVERRIDE; |
|
43 NS_IMETHOD AllowPort(int32_t port, const char * scheme, bool *_retval) MOZ_OVERRIDE; |
|
44 |
|
45 static nsresult GenerateURIString(const nsACString &aScheme, |
|
46 nsACString &aUri); |
|
47 |
|
48 // Methods for managing uri->object mapping |
|
49 // AddDataEntry creates the URI with the given scheme and returns it in aUri |
|
50 static nsresult AddDataEntry(const nsACString& aScheme, |
|
51 nsISupports* aObject, |
|
52 nsIPrincipal* aPrincipal, |
|
53 nsACString& aUri); |
|
54 static void RemoveDataEntry(const nsACString& aUri); |
|
55 static nsIPrincipal* GetDataEntryPrincipal(const nsACString& aUri); |
|
56 static void Traverse(const nsACString& aUri, nsCycleCollectionTraversalCallback& aCallback); |
|
57 |
|
58 private: |
|
59 static void Init(void); |
|
60 }; |
|
61 |
|
62 class nsBlobProtocolHandler : public nsHostObjectProtocolHandler |
|
63 { |
|
64 public: |
|
65 NS_IMETHOD GetScheme(nsACString &result) MOZ_OVERRIDE; |
|
66 }; |
|
67 |
|
68 class nsMediaStreamProtocolHandler : public nsHostObjectProtocolHandler |
|
69 { |
|
70 public: |
|
71 NS_IMETHOD GetScheme(nsACString &result) MOZ_OVERRIDE; |
|
72 }; |
|
73 |
|
74 class nsMediaSourceProtocolHandler : public nsHostObjectProtocolHandler |
|
75 { |
|
76 public: |
|
77 NS_IMETHOD GetScheme(nsACString &result) MOZ_OVERRIDE; |
|
78 }; |
|
79 |
|
80 class nsFontTableProtocolHandler : public nsHostObjectProtocolHandler |
|
81 { |
|
82 public: |
|
83 NS_IMETHOD GetScheme(nsACString &result); |
|
84 NS_IMETHOD NewURI(const nsACString & aSpec, const char * aOriginCharset, nsIURI *aBaseURI, nsIURI * *_retval); |
|
85 }; |
|
86 |
|
87 inline bool IsBlobURI(nsIURI* aUri) |
|
88 { |
|
89 bool isBlob; |
|
90 return NS_SUCCEEDED(aUri->SchemeIs(BLOBURI_SCHEME, &isBlob)) && isBlob; |
|
91 } |
|
92 |
|
93 inline bool IsRtspURI(nsIURI* aUri) |
|
94 { |
|
95 bool isRtsp; |
|
96 return NS_SUCCEEDED(aUri->SchemeIs(RTSPURI_SCHEME, &isRtsp)) && isRtsp; |
|
97 } |
|
98 |
|
99 inline bool IsMediaStreamURI(nsIURI* aUri) |
|
100 { |
|
101 bool isStream; |
|
102 return NS_SUCCEEDED(aUri->SchemeIs(MEDIASTREAMURI_SCHEME, &isStream)) && isStream; |
|
103 } |
|
104 |
|
105 inline bool IsMediaSourceURI(nsIURI* aUri) |
|
106 { |
|
107 bool isMediaSource; |
|
108 return NS_SUCCEEDED(aUri->SchemeIs(MEDIASOURCEURI_SCHEME, &isMediaSource)) && isMediaSource; |
|
109 } |
|
110 |
|
111 inline bool IsFontTableURI(nsIURI* aUri) |
|
112 { |
|
113 bool isFont; |
|
114 return NS_SUCCEEDED(aUri->SchemeIs(FONTTABLEURI_SCHEME, &isFont)) && isFont; |
|
115 } |
|
116 |
|
117 extern nsresult |
|
118 NS_GetStreamForBlobURI(nsIURI* aURI, nsIInputStream** aStream); |
|
119 |
|
120 extern nsresult |
|
121 NS_GetStreamForMediaStreamURI(nsIURI* aURI, nsIDOMMediaStream** aStream); |
|
122 |
|
123 extern nsresult |
|
124 NS_GetSourceForMediaSourceURI(nsIURI* aURI, mozilla::dom::MediaSource** aSource); |
|
125 |
|
126 #define NS_BLOBPROTOCOLHANDLER_CID \ |
|
127 { 0xb43964aa, 0xa078, 0x44b2, \ |
|
128 { 0xb0, 0x6b, 0xfd, 0x4d, 0x1b, 0x17, 0x2e, 0x66 } } |
|
129 |
|
130 #define NS_MEDIASTREAMPROTOCOLHANDLER_CID \ |
|
131 { 0x27d1fa24, 0x2b73, 0x4db3, \ |
|
132 { 0xab, 0x48, 0xb9, 0x83, 0x83, 0x40, 0xe0, 0x81 } } |
|
133 |
|
134 #define NS_MEDIASOURCEPROTOCOLHANDLER_CID \ |
|
135 { 0x12ef31fc, 0xa8fb, 0x4661, \ |
|
136 { 0x9a, 0x63, 0xfb, 0x61, 0x04,0x5d, 0xb8, 0x61 } } |
|
137 |
|
138 #define NS_FONTTABLEPROTOCOLHANDLER_CID \ |
|
139 { 0x3fc8f04e, 0xd719, 0x43ca, \ |
|
140 { 0x9a, 0xd0, 0x18, 0xee, 0x32, 0x02, 0x11, 0xf2 } } |
|
141 |
|
142 #endif /* nsHostObjectProtocolHandler_h */ |