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