Bug 1398045: Correctly handle channels that don't support weak references. r?mixedpuppy draft
authorKris Maglione <maglione.k@gmail.com>
Fri, 08 Sep 2017 08:56:42 -0700
changeset 661508 8b593855f739c6423c1c22dc177653e0b837ed23
parent 661175 4238fc77e76886bffc08f9e0ff56fa77aaf0910c
child 730603 8065e4df48fef391042db80a60f19e588b90bdc5
push id78794
push usermaglione.k@gmail.com
push dateFri, 08 Sep 2017 15:58:56 +0000
reviewersmixedpuppy
bugs1398045
milestone57.0a1
Bug 1398045: Correctly handle channels that don't support weak references. r?mixedpuppy MozReview-Commit-ID: GX6zUAzVrBZ
toolkit/components/extensions/webrequest/ChannelWrapper.h
--- a/toolkit/components/extensions/webrequest/ChannelWrapper.h
+++ b/toolkit/components/extensions/webrequest/ChannelWrapper.h
@@ -46,41 +46,41 @@ namespace detail {
   // members directly from our ChannelWrapper class.
   struct ChannelHolder
   {
     explicit ChannelHolder(nsIChannel* aChannel)
       : mChannel(do_GetWeakReference(aChannel))
       , mWeakChannel(aChannel)
     {}
 
-    bool HaveChannel() const { return mChannel->IsAlive(); }
+    bool HaveChannel() const { return mChannel && mChannel->IsAlive(); }
 
     void SetChannel(nsIChannel* aChannel)
     {
       mChannel = do_GetWeakReference(aChannel);
       mWeakChannel = aChannel;
       mWeakHttpChannel.reset();
     }
 
     already_AddRefed<nsIChannel> MaybeChannel() const
     {
-      if (!mChannel->IsAlive()) {
+      if (!HaveChannel())) {
         mWeakChannel = nullptr;
       }
       return do_AddRef(mWeakChannel);
     }
 
     already_AddRefed<nsIHttpChannel> MaybeHttpChannel() const
     {
       if (mWeakHttpChannel.isNothing()) {
         nsCOMPtr<nsIHttpChannel> chan = QueryChannel();
         mWeakHttpChannel.emplace(chan.get());
       }
 
-      if (!mChannel->IsAlive()) {
+      if (!HaveChannel())) {
         mWeakHttpChannel.ref() = nullptr;
       }
       return do_AddRef(mWeakHttpChannel.value());
     }
 
     const nsQueryReferent QueryChannel() const { return do_QueryReferent(mChannel); }
 
   private: