Line data Source code
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 : #include "mozilla/ModuleUtils.h"
6 : #include "nsWebRequestListener.h"
7 :
8 : #ifdef DEBUG
9 : #include "MainThreadUtils.h"
10 : #endif
11 :
12 : using namespace mozilla;
13 :
14 0 : NS_IMPL_ISUPPORTS(nsWebRequestListener,
15 : nsIWebRequestListener,
16 : nsIStreamListener,
17 : nsIRequestObserver,
18 : nsIThreadRetargetableStreamListener)
19 :
20 : NS_IMETHODIMP
21 0 : nsWebRequestListener::Init(nsIStreamListener *aStreamListener, nsITraceableChannel *aTraceableChannel)
22 : {
23 0 : MOZ_ASSERT(aStreamListener, "Should have aStreamListener");
24 0 : MOZ_ASSERT(aTraceableChannel, "Should have aTraceableChannel");
25 0 : mTargetStreamListener = aStreamListener;
26 0 : return aTraceableChannel->SetNewListener(this, getter_AddRefs(mOrigStreamListener));
27 : }
28 :
29 : NS_IMETHODIMP
30 0 : nsWebRequestListener::OnStartRequest(nsIRequest *request, nsISupports * aCtxt)
31 : {
32 0 : MOZ_ASSERT(mTargetStreamListener, "Should have mTargetStreamListener");
33 0 : MOZ_ASSERT(mOrigStreamListener, "Should have mOrigStreamListener");
34 :
35 0 : nsresult rv = mTargetStreamListener->OnStartRequest(request, aCtxt);
36 0 : NS_ENSURE_SUCCESS(rv, rv);
37 :
38 0 : return mOrigStreamListener->OnStartRequest(request, aCtxt);
39 : }
40 :
41 : NS_IMETHODIMP
42 0 : nsWebRequestListener::OnStopRequest(nsIRequest *request, nsISupports *aCtxt,
43 : nsresult aStatus)
44 : {
45 0 : MOZ_ASSERT(mOrigStreamListener, "Should have mOrigStreamListener");
46 0 : MOZ_ASSERT(mTargetStreamListener, "Should have mTargetStreamListener");
47 :
48 0 : nsresult rv = mOrigStreamListener->OnStopRequest(request, aCtxt, aStatus);
49 0 : NS_ENSURE_SUCCESS(rv, rv);
50 :
51 0 : return mTargetStreamListener->OnStopRequest(request, aCtxt, aStatus);
52 : }
53 :
54 : NS_IMETHODIMP
55 0 : nsWebRequestListener::OnDataAvailable(nsIRequest *request, nsISupports * aCtxt,
56 : nsIInputStream * inStr,
57 : uint64_t sourceOffset, uint32_t count)
58 : {
59 0 : MOZ_ASSERT(mOrigStreamListener, "Should have mOrigStreamListener");
60 0 : return mOrigStreamListener->OnDataAvailable(request, aCtxt, inStr, sourceOffset, count);
61 : }
62 :
63 : NS_IMETHODIMP
64 0 : nsWebRequestListener::CheckListenerChain()
65 : {
66 0 : MOZ_ASSERT(NS_IsMainThread(), "Should be on main thread!");
67 : nsresult rv;
68 : nsCOMPtr<nsIThreadRetargetableStreamListener> retargetableListener =
69 0 : do_QueryInterface(mOrigStreamListener, &rv);
70 0 : if (retargetableListener) {
71 0 : return retargetableListener->CheckListenerChain();
72 : }
73 0 : return rv;
74 : }
|