Bug 1238404 - Use 'using' directive instead of having separate Dispatch impl in subclasses of nsIEventTarget. r?froydnj
--- a/dom/base/WebSocket.cpp
+++ b/dom/base/WebSocket.cpp
@@ -75,20 +75,17 @@ class WebSocketImpl final : public nsIIn
{
public:
NS_DECL_NSIINTERFACEREQUESTOR
NS_DECL_NSIWEBSOCKETLISTENER
NS_DECL_NSIOBSERVER
NS_DECL_NSIREQUEST
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIEVENTTARGET
- // missing from NS_DECL_NSIEVENTTARGET because MSVC
- nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
- return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
- }
+ using nsIEventTarget::Dispatch;
explicit WebSocketImpl(WebSocket* aWebSocket)
: mWebSocket(aWebSocket)
, mOnCloseScheduled(false)
, mFailed(false)
, mDisconnectingOrDisconnected(false)
, mCloseEventWasClean(false)
, mCloseEventCode(nsIWebSocketChannel::CLOSE_ABNORMAL)
--- a/netwerk/base/nsSocketTransportService2.h
+++ b/netwerk/base/nsSocketTransportService2.h
@@ -76,20 +76,17 @@ public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSPISOCKETTRANSPORTSERVICE
NS_DECL_NSISOCKETTRANSPORTSERVICE
NS_DECL_NSIROUTEDSOCKETTRANSPORTSERVICE
NS_DECL_NSIEVENTTARGET
NS_DECL_NSITHREADOBSERVER
NS_DECL_NSIRUNNABLE
NS_DECL_NSIOBSERVER
- // missing from NS_DECL_NSIEVENTTARGET because MSVC
- nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
- return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
- }
+ using nsIEventTarget::Dispatch;
nsSocketTransportService();
// Max Socket count may need to get initialized/used by nsHttpHandler
// before this class is initialized.
static uint32_t gMaxCount;
static PRCallOnceType gMaxCountInitOnce;
static PRStatus DiscoverMaxCount();
--- a/netwerk/base/nsStreamTransportService.h
+++ b/netwerk/base/nsStreamTransportService.h
@@ -16,20 +16,17 @@ class nsStreamTransportService final : p
, public nsIEventTarget
, public nsIObserver
{
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSISTREAMTRANSPORTSERVICE
NS_DECL_NSIEVENTTARGET
NS_DECL_NSIOBSERVER
- // missing from NS_DECL_NSIEVENTTARGET because MSVC
- nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
- return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
- }
+ using nsIEventTarget::Dispatch;
nsresult Init();
nsStreamTransportService() : mShutdownLock("nsStreamTransportService.mShutdownLock"),
mIsShutdown(false) {}
private:
~nsStreamTransportService();
--- a/xpcom/threads/LazyIdleThread.h
+++ b/xpcom/threads/LazyIdleThread.h
@@ -40,20 +40,17 @@ class LazyIdleThread final
{
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIEVENTTARGET
NS_DECL_NSITHREAD
NS_DECL_NSITIMERCALLBACK
NS_DECL_NSITHREADOBSERVER
NS_DECL_NSIOBSERVER
- // missing from NS_DECL_NSIEVENTTARGET because MSVC
- nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
- return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
- }
+ using nsIEventTarget::Dispatch;
enum ShutdownMethod
{
AutomaticShutdown = 0,
ManualShutdown
};
/**
--- a/xpcom/threads/SharedThreadPool.h
+++ b/xpcom/threads/SharedThreadPool.h
@@ -50,27 +50,25 @@ public:
// in a tight loop.
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override;
NS_IMETHOD_(MozExternalRefCountType) AddRef(void) override;
NS_IMETHOD_(MozExternalRefCountType) Release(void) override;
// Forward behaviour to wrapped thread pool implementation.
NS_FORWARD_SAFE_NSITHREADPOOL(mPool);
- // See bug 1155059 - MSVC forces us to not declare Dispatch normally in idl
- // NS_FORWARD_SAFE_NSIEVENTTARGET(mEventTarget);
- nsresult Dispatch(nsIRunnable *event, uint32_t flags) { return !mEventTarget ? NS_ERROR_NULL_POINTER : mEventTarget->Dispatch(event, flags); }
-
NS_IMETHOD DispatchFromScript(nsIRunnable *event, uint32_t flags) override {
return Dispatch(event, flags);
}
NS_IMETHOD Dispatch(already_AddRefed<nsIRunnable>&& event, uint32_t flags) override
{ return !mEventTarget ? NS_ERROR_NULL_POINTER : mEventTarget->Dispatch(Move(event), flags); }
+ using nsIEventTarget::Dispatch;
+
NS_IMETHOD IsOnCurrentThread(bool *_retval) override { return !mEventTarget ? NS_ERROR_NULL_POINTER : mEventTarget->IsOnCurrentThread(_retval); }
// Creates necessary statics. Called once at startup.
static void InitStatics();
// Spins the event loop until all thread pools are shutdown.
// *Must* be called on the main thread.
static void SpinUntilEmpty();
--- a/xpcom/threads/nsIEventTarget.idl
+++ b/xpcom/threads/nsIEventTarget.idl
@@ -12,21 +12,16 @@
%}
native alreadyAddRefed_nsIRunnable(already_AddRefed<nsIRunnable>&&);
[scriptable, uuid(f9d60700-e6dc-4a72-9537-689058655472)]
interface nsIEventTarget : nsISupports
{
/* until we can get rid of all uses, keep the non-alreadyAddRefed<> version */
- /**
- * This must be non-virtual due to issues with MSVC 2013's ordering of
- * vtbls for overloads. With other platforms we can leave this virtual
- * and avoid adding lots of Dispatch() methods to classes inheriting this.
- */
%{C++
nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
}
%}
/**
* This flag specifies the default mode of event dispatch, whereby the event
--- a/xpcom/threads/nsThread.h
+++ b/xpcom/threads/nsThread.h
@@ -28,20 +28,17 @@ class nsThread
, public nsISupportsPriority
{
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIEVENTTARGET
NS_DECL_NSITHREAD
NS_DECL_NSITHREADINTERNAL
NS_DECL_NSISUPPORTSPRIORITY
- // missing from NS_DECL_NSIEVENTTARGET because MSVC
- nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
- return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
- }
+ using nsIEventTarget::Dispatch;
enum MainThreadFlag
{
MAIN_THREAD,
NOT_MAIN_THREAD
};
nsThread(MainThreadFlag aMainThread, uint32_t aStackSize);
--- a/xpcom/threads/nsThreadPool.h
+++ b/xpcom/threads/nsThreadPool.h
@@ -23,20 +23,17 @@ class nsThreadPool final
: public nsIThreadPool
, public nsIRunnable
{
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIEVENTTARGET
NS_DECL_NSITHREADPOOL
NS_DECL_NSIRUNNABLE
- // missing from NS_DECL_NSIEVENTTARGET because MSVC
- nsresult Dispatch(nsIRunnable* aEvent, uint32_t aFlags) {
- return Dispatch(nsCOMPtr<nsIRunnable>(aEvent).forget(), aFlags);
- }
+ using nsIEventTarget::Dispatch;
nsThreadPool();
private:
~nsThreadPool();
void ShutdownThread(nsIThread* aThread);
nsresult PutEvent(nsIRunnable* aEvent);