LCOV - code coverage report
Current view: top level - netwerk/protocol/http - nsHttpActivityDistributor.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 9 43 20.9 %
Date: 2017-07-14 16:53:18 Functions: 5 14 35.7 %
Legend: Lines: hit not hit

          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
       3             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : // HttpLog.h should generally be included first
       6             : #include "HttpLog.h"
       7             : 
       8             : #include "nsHttpActivityDistributor.h"
       9             : #include "nsCOMPtr.h"
      10             : #include "nsAutoPtr.h"
      11             : #include "nsThreadUtils.h"
      12             : 
      13             : namespace mozilla {
      14             : namespace net {
      15             : 
      16             : typedef nsMainThreadPtrHolder<nsIHttpActivityObserver> ObserverHolder;
      17             : typedef nsMainThreadPtrHandle<nsIHttpActivityObserver> ObserverHandle;
      18             : typedef nsTArray<ObserverHandle> ObserverArray;
      19             : 
      20             : class nsHttpActivityEvent : public Runnable
      21             : {
      22             : public:
      23           0 :   nsHttpActivityEvent(nsISupports* aHttpChannel,
      24             :                       uint32_t aActivityType,
      25             :                       uint32_t aActivitySubtype,
      26             :                       PRTime aTimestamp,
      27             :                       uint64_t aExtraSizeData,
      28             :                       const nsACString& aExtraStringData,
      29             :                       ObserverArray* aObservers)
      30           0 :     : Runnable("net::nsHttpActivityEvent")
      31             :     , mHttpChannel(aHttpChannel)
      32             :     , mActivityType(aActivityType)
      33             :     , mActivitySubtype(aActivitySubtype)
      34             :     , mTimestamp(aTimestamp)
      35             :     , mExtraSizeData(aExtraSizeData)
      36             :     , mExtraStringData(aExtraStringData)
      37           0 :     , mObservers(*aObservers)
      38             :   {
      39           0 :     }
      40             : 
      41           0 :     NS_IMETHOD Run() override
      42             :     {
      43           0 :         for (size_t i = 0 ; i < mObservers.Length() ; i++) {
      44             :             Unused <<
      45           0 :                 mObservers[i]->ObserveActivity(mHttpChannel, mActivityType,
      46             :                                                mActivitySubtype, mTimestamp,
      47             :                                                mExtraSizeData,
      48           0 :                                                mExtraStringData);
      49             :         }
      50           0 :         return NS_OK;
      51             :     }
      52             : 
      53             : private:
      54           0 :     virtual ~nsHttpActivityEvent()
      55           0 :     {
      56           0 :     }
      57             : 
      58             :     nsCOMPtr<nsISupports> mHttpChannel;
      59             :     uint32_t mActivityType;
      60             :     uint32_t mActivitySubtype;
      61             :     PRTime mTimestamp;
      62             :     uint64_t mExtraSizeData;
      63             :     nsCString mExtraStringData;
      64             : 
      65             :     ObserverArray mObservers;
      66             : };
      67             : 
      68          44 : NS_IMPL_ISUPPORTS(nsHttpActivityDistributor,
      69             :                   nsIHttpActivityDistributor,
      70             :                   nsIHttpActivityObserver)
      71             : 
      72           1 : nsHttpActivityDistributor::nsHttpActivityDistributor()
      73           1 :     : mLock("nsHttpActivityDistributor.mLock")
      74             : {
      75           1 : }
      76             : 
      77           0 : nsHttpActivityDistributor::~nsHttpActivityDistributor()
      78             : {
      79           0 : }
      80             : 
      81             : NS_IMETHODIMP
      82           0 : nsHttpActivityDistributor::ObserveActivity(nsISupports *aHttpChannel,
      83             :                                            uint32_t aActivityType,
      84             :                                            uint32_t aActivitySubtype,
      85             :                                            PRTime aTimestamp,
      86             :                                            uint64_t aExtraSizeData,
      87             :                                            const nsACString & aExtraStringData)
      88             : {
      89           0 :     nsCOMPtr<nsIRunnable> event;
      90             :     {
      91           0 :         MutexAutoLock lock(mLock);
      92             : 
      93           0 :         if (!mObservers.Length())
      94           0 :             return NS_OK;
      95             : 
      96             :         event = new nsHttpActivityEvent(aHttpChannel, aActivityType,
      97             :                                         aActivitySubtype, aTimestamp,
      98             :                                         aExtraSizeData, aExtraStringData,
      99           0 :                                         &mObservers);
     100             :     }
     101           0 :     NS_ENSURE_TRUE(event, NS_ERROR_OUT_OF_MEMORY);
     102           0 :     return NS_DispatchToMainThread(event);
     103             : }
     104             : 
     105             : NS_IMETHODIMP
     106           8 : nsHttpActivityDistributor::GetIsActive(bool *isActive)
     107             : {
     108           8 :     NS_ENSURE_ARG_POINTER(isActive);
     109          16 :     MutexAutoLock lock(mLock);
     110           8 :     *isActive = !!mObservers.Length();
     111           8 :     return NS_OK;
     112             : }
     113             : 
     114             : NS_IMETHODIMP
     115           0 : nsHttpActivityDistributor::AddObserver(nsIHttpActivityObserver *aObserver)
     116             : {
     117           0 :     MutexAutoLock lock(mLock);
     118             : 
     119           0 :     ObserverHandle observer(new ObserverHolder("nsIHttpActivityObserver", aObserver));
     120           0 :     if (!mObservers.AppendElement(observer))
     121           0 :         return NS_ERROR_OUT_OF_MEMORY;
     122             : 
     123           0 :     return NS_OK;
     124             : }
     125             : 
     126             : NS_IMETHODIMP
     127           0 : nsHttpActivityDistributor::RemoveObserver(nsIHttpActivityObserver *aObserver)
     128             : {
     129           0 :     MutexAutoLock lock(mLock);
     130             : 
     131           0 :     ObserverHandle observer(new ObserverHolder("nsIHttpActivityObserver", aObserver));
     132           0 :     if (!mObservers.RemoveElement(observer))
     133           0 :         return NS_ERROR_FAILURE;
     134             : 
     135           0 :     return NS_OK;
     136             : }
     137             : 
     138             : } // namespace net
     139             : } // namespace mozilla

Generated by: LCOV version 1.13