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 #include "nsHtml5StreamListener.h"
6 
7 NS_IMPL_ADDREF(nsHtml5StreamListener)
NS_IMPL_RELEASE(nsHtml5StreamListener)8 NS_IMPL_RELEASE(nsHtml5StreamListener)
9 
10 NS_INTERFACE_MAP_BEGIN(nsHtml5StreamListener)
11   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIRequestObserver)
12   NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
13   NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
14   NS_INTERFACE_MAP_ENTRY(nsIThreadRetargetableStreamListener)
15 NS_INTERFACE_MAP_END
16 
17 nsHtml5StreamListener::nsHtml5StreamListener(nsHtml5StreamParser* aDelegate)
18     : mDelegate(aDelegate) {}
19 
~nsHtml5StreamListener()20 nsHtml5StreamListener::~nsHtml5StreamListener() {}
21 
DropDelegate()22 void nsHtml5StreamListener::DropDelegate() {
23   MOZ_ASSERT(NS_IsMainThread(),
24              "Must not call DropDelegate from non-main threads.");
25   mDelegate = nullptr;
26 }
27 
28 NS_IMETHODIMP
CheckListenerChain()29 nsHtml5StreamListener::CheckListenerChain() {
30   if (MOZ_UNLIKELY(!mDelegate)) {
31     return NS_ERROR_NOT_AVAILABLE;
32   }
33   return mDelegate->CheckListenerChain();
34 }
35 
36 NS_IMETHODIMP
OnStartRequest(nsIRequest * aRequest,nsISupports * aContext)37 nsHtml5StreamListener::OnStartRequest(nsIRequest* aRequest,
38                                       nsISupports* aContext) {
39   if (MOZ_UNLIKELY(!mDelegate)) {
40     return NS_ERROR_NOT_AVAILABLE;
41   }
42   return mDelegate->OnStartRequest(aRequest, aContext);
43 }
44 
45 NS_IMETHODIMP
OnStopRequest(nsIRequest * aRequest,nsISupports * aContext,nsresult aStatus)46 nsHtml5StreamListener::OnStopRequest(nsIRequest* aRequest,
47                                      nsISupports* aContext, nsresult aStatus) {
48   if (MOZ_UNLIKELY(!mDelegate)) {
49     return NS_ERROR_NOT_AVAILABLE;
50   }
51   return mDelegate->OnStopRequest(aRequest, aContext, aStatus);
52 }
53 
54 NS_IMETHODIMP
OnDataAvailable(nsIRequest * aRequest,nsISupports * aContext,nsIInputStream * aInStream,uint64_t aSourceOffset,uint32_t aLength)55 nsHtml5StreamListener::OnDataAvailable(nsIRequest* aRequest,
56                                        nsISupports* aContext,
57                                        nsIInputStream* aInStream,
58                                        uint64_t aSourceOffset,
59                                        uint32_t aLength) {
60   if (MOZ_UNLIKELY(!mDelegate)) {
61     return NS_ERROR_NOT_AVAILABLE;
62   }
63   return mDelegate->OnDataAvailable(aRequest, aContext, aInStream,
64                                     aSourceOffset, aLength);
65 }
66