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 file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef nsStreamListenerWrapper_h__ 6 #define nsStreamListenerWrapper_h__ 7 8 #include "nsCOMPtr.h" 9 #include "nsIStreamListener.h" 10 #include "nsIRequestObserver.h" 11 #include "nsIThreadRetargetableStreamListener.h" 12 #include "mozilla/Attributes.h" 13 14 namespace mozilla { 15 namespace net { 16 17 // Wrapper class to make replacement of nsHttpChannel's listener 18 // from JavaScript possible. It is workaround for bug 433711 and 682305. 19 class nsStreamListenerWrapper final 20 : public nsIStreamListener, 21 public nsIThreadRetargetableStreamListener { 22 public: nsStreamListenerWrapper(nsIStreamListener * listener)23 explicit nsStreamListenerWrapper(nsIStreamListener *listener) 24 : mListener(listener) { 25 MOZ_ASSERT(mListener, "no stream listener specified"); 26 } 27 28 NS_DECL_THREADSAFE_ISUPPORTS NS_FORWARD_SAFE_NSIREQUESTOBSERVER(mListener)29 NS_FORWARD_SAFE_NSIREQUESTOBSERVER(mListener) 30 NS_FORWARD_SAFE_NSISTREAMLISTENER(mListener) 31 NS_DECL_NSITHREADRETARGETABLESTREAMLISTENER 32 33 private: 34 ~nsStreamListenerWrapper() {} 35 nsCOMPtr<nsIStreamListener> mListener; 36 }; 37 38 } // namespace net 39 } // namespace mozilla 40 41 #endif // nsStreamListenerWrapper_h__ 42