Line data Source code
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 mozilla_dom_URL_h
8 : #define mozilla_dom_URL_h
9 :
10 : #include "mozilla/dom/BindingDeclarations.h"
11 : #include "mozilla/dom/URLSearchParams.h"
12 : #include "nsCycleCollectionParticipant.h"
13 : #include "nsString.h"
14 : #include "nsWrapperCache.h"
15 :
16 : class nsISupports;
17 : class nsIURI;
18 :
19 : namespace mozilla {
20 :
21 : class ErrorResult;
22 : class DOMMediaStream;
23 :
24 : namespace dom {
25 :
26 : class Blob;
27 : class MediaSource;
28 : class GlobalObject;
29 :
30 : class URL : public URLSearchParamsObserver
31 : , public nsWrapperCache
32 : {
33 : public:
34 : NS_DECL_CYCLE_COLLECTING_ISUPPORTS
35 57 : NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(URL)
36 :
37 3 : URL(nsISupports* aParent)
38 3 : : mParent(aParent)
39 3 : {}
40 :
41 : // WebIDL methods
42 3 : nsISupports* GetParentObject() const
43 : {
44 3 : return mParent;
45 : }
46 :
47 : virtual JSObject*
48 : WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
49 :
50 : static already_AddRefed<URL>
51 : Constructor(const GlobalObject& aGlobal, const nsAString& aURL,
52 : const Optional<nsAString>& aBase, ErrorResult& aRv);
53 :
54 : // Helper for Fetch API
55 : static already_AddRefed<URL>
56 : WorkerConstructor(const GlobalObject& aGlobal, const nsAString& aURL,
57 : const nsAString& aBase, ErrorResult& aRv);
58 :
59 :
60 : static void
61 : CreateObjectURL(const GlobalObject& aGlobal, Blob& aBlob,
62 : nsAString& aResult, ErrorResult& aRv);
63 :
64 : static void
65 : CreateObjectURL(const GlobalObject& aGlobal, DOMMediaStream& aStream,
66 : nsAString& aResult, ErrorResult& aRv);
67 :
68 : static void
69 : CreateObjectURL(const GlobalObject& aGlobal, MediaSource& aSource,
70 : nsAString& aResult, ErrorResult& aRv);
71 :
72 : static void
73 : RevokeObjectURL(const GlobalObject& aGlobal, const nsAString& aURL,
74 : ErrorResult& aRv);
75 :
76 : static bool
77 : IsValidURL(const GlobalObject& aGlobal, const nsAString& aURL,
78 : ErrorResult& aRv);
79 :
80 : virtual void
81 : GetHref(nsAString& aHref, ErrorResult& aRv) const = 0;
82 :
83 : virtual void
84 : SetHref(const nsAString& aHref, ErrorResult& aRv) = 0;
85 :
86 : virtual void
87 : GetOrigin(nsAString& aOrigin, ErrorResult& aRv) const = 0;
88 :
89 : virtual void
90 : GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const = 0;
91 :
92 : virtual void
93 : SetProtocol(const nsAString& aProtocol, ErrorResult& aRv) = 0;
94 :
95 : virtual void
96 : GetUsername(nsAString& aUsername, ErrorResult& aRv) const = 0;
97 :
98 : virtual void
99 : SetUsername(const nsAString& aUsername, ErrorResult& aRv) = 0;
100 :
101 : virtual void
102 : GetPassword(nsAString& aPassword, ErrorResult& aRv) const = 0;
103 :
104 : virtual void
105 : SetPassword(const nsAString& aPassword, ErrorResult& aRv) = 0;
106 :
107 : virtual void
108 : GetHost(nsAString& aHost, ErrorResult& aRv) const = 0;
109 :
110 : virtual void
111 : SetHost(const nsAString& aHost, ErrorResult& aRv) = 0;
112 :
113 : virtual void
114 : GetHostname(nsAString& aHostname, ErrorResult& aRv) const = 0;
115 :
116 : virtual void
117 : SetHostname(const nsAString& aHostname, ErrorResult& aRv) = 0;
118 :
119 : virtual void
120 : GetPort(nsAString& aPort, ErrorResult& aRv) const = 0;
121 :
122 : virtual void
123 : SetPort(const nsAString& aPort, ErrorResult& aRv) = 0;
124 :
125 : virtual void
126 : GetPathname(nsAString& aPathname, ErrorResult& aRv) const = 0;
127 :
128 : virtual void
129 : SetPathname(const nsAString& aPathname, ErrorResult& aRv) = 0;
130 :
131 : virtual void
132 : GetSearch(nsAString& aSearch, ErrorResult& aRv) const = 0;
133 :
134 : virtual void
135 : SetSearch(const nsAString& aSearch, ErrorResult& aRv);
136 :
137 : URLSearchParams* SearchParams();
138 :
139 : virtual void
140 : GetHash(nsAString& aHost, ErrorResult& aRv) const = 0;
141 :
142 : virtual void
143 : SetHash(const nsAString& aHash, ErrorResult& aRv) = 0;
144 :
145 0 : void Stringify(nsAString& aRetval, ErrorResult& aRv) const
146 : {
147 0 : GetHref(aRetval, aRv);
148 0 : }
149 :
150 : void
151 0 : ToJSON(nsAString& aResult, ErrorResult& aRv) const
152 : {
153 0 : GetHref(aResult, aRv);
154 0 : }
155 :
156 : // URLSearchParamsObserver
157 : void
158 : URLSearchParamsUpdated(URLSearchParams* aSearchParams) override;
159 :
160 : protected:
161 0 : virtual ~URL()
162 0 : {}
163 :
164 : virtual void
165 : UpdateURLSearchParams() = 0;
166 :
167 : virtual void
168 : SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv) = 0;
169 :
170 : void CreateSearchParamsIfNeeded();
171 :
172 : nsCOMPtr<nsISupports> mParent;
173 : RefPtr<URLSearchParams> mSearchParams;
174 : };
175 :
176 : bool IsChromeURI(nsIURI* aURI);
177 :
178 : } // namespace dom
179 : } // namespace mozilla
180 :
181 : #endif /* mozilla_dom_URL_h */
|