netwerk/protocol/http/nsHttpActivityDistributor.cpp

Thu, 15 Jan 2015 21:03:48 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 21:03:48 +0100
branch
TOR_BUG_9701
changeset 11
deefc01c0e14
permissions
-rw-r--r--

Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)

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

mercurial