Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/netwerk/base/nsSecCheckWrapChannel.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#ifndef nsSecCheckWrapChannel_h__
7
#define nsSecCheckWrapChannel_h__
8
9
#include "nsIHttpChannel.h"
10
#include "nsIHttpChannelInternal.h"
11
#include "nsIUploadChannel.h"
12
#include "nsIUploadChannel2.h"
13
#include "nsISecCheckWrapChannel.h"
14
#include "nsIWyciwygChannel.h"
15
#include "mozilla/LoadInfo.h"
16
17
namespace mozilla {
18
namespace net {
19
20
/*
21
 * The nsSecCheckWrapChannelBase wraps channels that do *not*
22
 *  * provide a newChannel2() implementation
23
 *  * provide get/setLoadInfo functions
24
 *
25
 * In order to perform security checks for channels
26
 *   a) before opening the channel, and
27
 *   b) after redirects
28
 * we are attaching a loadinfo object to every channel which
29
 * provides information about the content-type of the channel,
30
 * who initiated the load, etc.
31
 *
32
 * Addon created channels might *not* provide that loadInfo object for
33
 * some transition time before we mark the NewChannel-API as deprecated.
34
 * We do not want to break those addons hence we wrap such channels
35
 * using the provided wrapper in this class.
36
 *
37
 * Please note that the wrapper only forwards calls for
38
 *  * nsIRequest
39
 *  * nsIChannel
40
 *  * nsIHttpChannel
41
 *  * nsIHttpChannelInternal
42
 *  * nsIUploadChannel
43
 *  * nsIUploadChannel2
44
 *
45
 * In case any addon needs to query the inner channel this class
46
 * provides a readonly function to query the wrapped channel.
47
 *
48
 */
49
50
class nsSecCheckWrapChannelBase : public nsIHttpChannel
51
                                , public nsIHttpChannelInternal
52
                                , public nsISecCheckWrapChannel
53
                                , public nsIUploadChannel
54
                                , public nsIUploadChannel2
55
{
56
public:
57
  NS_FORWARD_NSIHTTPCHANNEL(mHttpChannel->)
58
  NS_FORWARD_NSIHTTPCHANNELINTERNAL(mHttpChannelInternal->)
59
  NS_FORWARD_NSICHANNEL(mChannel->)
60
  NS_FORWARD_NSIREQUEST(mRequest->)
61
  NS_FORWARD_NSIUPLOADCHANNEL(mUploadChannel->)
62
  NS_FORWARD_NSIUPLOADCHANNEL2(mUploadChannel2->)
63
  NS_DECL_NSISECCHECKWRAPCHANNEL
64
  NS_DECL_ISUPPORTS
65
66
  explicit nsSecCheckWrapChannelBase(nsIChannel* aChannel);
67
68
protected:
69
0
  virtual ~nsSecCheckWrapChannelBase() = default;
70
71
  nsCOMPtr<nsIChannel>             mChannel;
72
  // We do a QI in the constructor to set the following pointers.
73
  nsCOMPtr<nsIHttpChannel>         mHttpChannel;
74
  nsCOMPtr<nsIHttpChannelInternal> mHttpChannelInternal;
75
  nsCOMPtr<nsIRequest>             mRequest;
76
  nsCOMPtr<nsIUploadChannel>       mUploadChannel;
77
  nsCOMPtr<nsIUploadChannel2>      mUploadChannel2;
78
};
79
80
/* We define a separate class here to make it clear that we're overriding
81
 * Get/SetLoadInfo as well as AsyncOpen2() and Open2(), rather that using
82
 * the forwarded implementations provided by NS_FORWARD_NSICHANNEL"
83
 */
84
class nsSecCheckWrapChannel : public nsSecCheckWrapChannelBase
85
{
86
public:
87
  NS_IMETHOD GetLoadInfo(nsILoadInfo **aLoadInfo) override;
88
  NS_IMETHOD SetLoadInfo(nsILoadInfo *aLoadInfo) override;
89
90
  NS_IMETHOD AsyncOpen2(nsIStreamListener *aListener) override;
91
  NS_IMETHOD Open2(nsIInputStream** aStream) override;
92
93
  nsSecCheckWrapChannel(nsIChannel* aChannel, nsILoadInfo* aLoadInfo);
94
  static already_AddRefed<nsIChannel> MaybeWrap(nsIChannel* aChannel,
95
                                                nsILoadInfo* aLoadInfo);
96
97
protected:
98
0
  virtual ~nsSecCheckWrapChannel() = default;
99
100
  nsCOMPtr<nsILoadInfo> mLoadInfo;
101
};
102
103
} // namespace net
104
} // namespace mozilla
105
106
#endif // nsSecCheckWrapChannel_h__