diff --git a/xpcom/glue/Observer.h b/xpcom/glue/Observer.h index 958e5e4a96..cf9e507dd8 100644 --- a/xpcom/glue/Observer.h +++ b/xpcom/glue/Observer.h @@ -7,7 +7,7 @@ #ifndef mozilla_Observer_h #define mozilla_Observer_h -#include "nsTArray.h" +#include "nsTObserverArray.h" namespace mozilla { @@ -48,7 +48,7 @@ public: */ void AddObserver(Observer* aObserver) { - mObservers.AppendElement(aObserver); + mObservers.AppendElementUnlessExists(aObserver); } /** @@ -67,15 +67,15 @@ public: void Broadcast(const T& aParam) { - nsTArray*> observersCopy(mObservers); - uint32_t size = observersCopy.Length(); - for (uint32_t i = 0; i < size; ++i) { - observersCopy[i]->Notify(aParam); + typename nsTObserverArray*>::ForwardIterator iter(mObservers); + while (iter.HasMore()) { + Observer* obs = iter.GetNext(); + obs->Notify(aParam); } } protected: - nsTArray*> mObservers; + nsTObserverArray*> mObservers; }; } // namespace mozilla