Bug 1354642 - Add MakeRefPtr<> helper class.
MozReview-Commit-ID: es34uMTZ00
--- a/dom/media/DOMMediaStream.cpp
+++ b/dom/media/DOMMediaStream.cpp
@@ -109,17 +109,17 @@ DOMMediaStream::TrackPort::GetSourceTrac
}
already_AddRefed<Pledge<bool>>
DOMMediaStream::TrackPort::BlockSourceTrackId(TrackID aTrackId, BlockingMode aBlockingMode)
{
if (mInputPort) {
return mInputPort->BlockSourceTrackId(aTrackId, aBlockingMode);
}
- RefPtr<Pledge<bool>> rejected = new Pledge<bool>();
+ auto rejected = MakeRefPtr<Pledge<bool>>();
rejected->Reject(NS_ERROR_FAILURE);
return rejected.forget();
}
NS_IMPL_CYCLE_COLLECTION(DOMMediaStream::TrackPort, mTrack)
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(DOMMediaStream::TrackPort, AddRef)
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(DOMMediaStream::TrackPort, Release)
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -1405,21 +1405,18 @@ public:
~GetUserMediaTask() {
}
void
Fail(const nsAString& aName,
const nsAString& aMessage = EmptyString(),
const nsAString& aConstraint = EmptyString()) {
RefPtr<MediaMgrError> error = new MediaMgrError(aName, aMessage, aConstraint);
- RefPtr<ErrorCallbackRunnable<nsIDOMGetUserMediaSuccessCallback>> runnable =
- new ErrorCallbackRunnable<nsIDOMGetUserMediaSuccessCallback>(mOnSuccess,
- mOnFailure,
- *error,
- mWindowID);
+ auto runnable = MakeRefPtr<ErrorCallbackRunnable<nsIDOMGetUserMediaSuccessCallback>>(
+ mOnSuccess, mOnFailure, *error, mWindowID);
// These should be empty now
MOZ_ASSERT(!mOnSuccess);
MOZ_ASSERT(!mOnFailure);
NS_DispatchToMainThread(runnable.forget());
// Do after ErrorCallbackRunnable Run()s, as it checks active window list
NS_DispatchToMainThread(do_AddRef(new GetUserMediaListenerRemove(mWindowID, mListener)));
}
@@ -2293,19 +2290,18 @@ if (privileged) {
(!fake || Preferences::GetBool("media.navigator.permission.fake"));
RefPtr<PledgeSourceSet> p = EnumerateDevicesImpl(windowID, videoType,
audioType, fake);
RefPtr<MediaManager> self = this;
p->Then([self, onSuccess, onFailure, windowID, c, listener, askPermission,
prefs, isHTTPS, callID, principalInfo,
isChrome](SourceSet*& aDevices) mutable {
-
- RefPtr<Refcountable<UniquePtr<SourceSet>>> devices(
- new Refcountable<UniquePtr<SourceSet>>(aDevices)); // grab result
+ // grab result
+ auto devices = MakeRefPtr<Refcountable<UniquePtr<SourceSet>>>(aDevices);
// Ensure that our windowID is still good.
if (!nsGlobalWindow::GetInnerWindowWithId(windowID)) {
return;
}
// Apply any constraints. This modifies the passed-in list.
RefPtr<PledgeChar> p2 = self->SelectSettings(c, isChrome, devices);
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -3315,17 +3315,17 @@ MediaInputPort::BlockSourceTrackId(Track
BlockingMode mBlockingMode;
nsCOMPtr<nsIRunnable> mRunnable;
const RefPtr<AbstractThread> mAbstractMainThread;
};
MOZ_ASSERT(IsTrackIDExplicit(aTrackId),
"Only explicit TrackID is allowed");
- RefPtr<Pledge<bool>> pledge = new Pledge<bool>();
+ auto pledge = MakeRefPtr<Pledge<bool>>();
nsCOMPtr<nsIRunnable> runnable = NewRunnableFrom([pledge]() {
MOZ_ASSERT(NS_IsMainThread());
pledge->Resolve(true);
return NS_OK;
});
GraphImpl()->AppendMessage(MakeUnique<Message>(this, aTrackId, aBlockingMode,
runnable.forget(),
mAbstractMainThread));
--- a/mfbt/RefPtr.h
+++ b/mfbt/RefPtr.h
@@ -642,11 +642,25 @@ namespace mozilla {
template<typename T, typename... Args>
already_AddRefed<T>
MakeAndAddRef(Args&&... aArgs)
{
RefPtr<T> p(new T(Forward<Args>(aArgs)...));
return p.forget();
}
+/**
+ * Helper function to be able to conveniently write things like:
+ *
+ * auto runnable = MakeRefPtr<ErrorCallbackRunnable<nsIDOMGetUserMediaSuccessCallback>>(
+ * mOnSuccess, mOnFailure, *error, mWindowID);
+ */
+template<typename T, typename... Args>
+RefPtr<T>
+MakeRefPtr(Args&&... aArgs)
+{
+ RefPtr<T> p(new T(Forward<Args>(aArgs)...));
+ return p;
+}
+
} // namespace mozilla
#endif /* mozilla_RefPtr_h */