michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "base/basictypes.h" michael@0: michael@0: #include "COMMessageFilter.h" michael@0: #include "base/message_loop.h" michael@0: #include "mozilla/plugins/PluginModuleChild.h" michael@0: michael@0: #include michael@0: michael@0: namespace mozilla { michael@0: namespace plugins { michael@0: michael@0: HRESULT michael@0: COMMessageFilter::QueryInterface(REFIID riid, void** ppv) michael@0: { michael@0: if (riid == IID_IUnknown || riid == IID_IMessageFilter) { michael@0: *ppv = static_cast(this); michael@0: AddRef(); michael@0: return S_OK; michael@0: } michael@0: return E_NOINTERFACE; michael@0: } michael@0: michael@0: DWORD COMMessageFilter::AddRef() michael@0: { michael@0: ++mRefCnt; michael@0: return mRefCnt; michael@0: } michael@0: michael@0: DWORD COMMessageFilter::Release() michael@0: { michael@0: DWORD r = --mRefCnt; michael@0: if (0 == r) michael@0: delete this; michael@0: return r; michael@0: } michael@0: michael@0: DWORD michael@0: COMMessageFilter::HandleInComingCall(DWORD dwCallType, michael@0: HTASK htaskCaller, michael@0: DWORD dwTickCount, michael@0: LPINTERFACEINFO lpInterfaceInfo) michael@0: { michael@0: if (mPreviousFilter) michael@0: return mPreviousFilter->HandleInComingCall(dwCallType, htaskCaller, michael@0: dwTickCount, lpInterfaceInfo); michael@0: return SERVERCALL_ISHANDLED; michael@0: } michael@0: michael@0: DWORD michael@0: COMMessageFilter::RetryRejectedCall(HTASK htaskCallee, michael@0: DWORD dwTickCount, michael@0: DWORD dwRejectType) michael@0: { michael@0: if (mPreviousFilter) michael@0: return mPreviousFilter->RetryRejectedCall(htaskCallee, dwTickCount, michael@0: dwRejectType); michael@0: return -1; michael@0: } michael@0: michael@0: DWORD michael@0: COMMessageFilter::MessagePending(HTASK htaskCallee, michael@0: DWORD dwTickCount, michael@0: DWORD dwPendingType) michael@0: { michael@0: mPlugin->FlushPendingInterruptQueue(); michael@0: if (mPreviousFilter) michael@0: return mPreviousFilter->MessagePending(htaskCallee, dwTickCount, michael@0: dwPendingType); michael@0: return PENDINGMSG_WAITNOPROCESS; michael@0: } michael@0: michael@0: void michael@0: COMMessageFilter::Initialize(PluginModuleChild* module) michael@0: { michael@0: nsRefPtr f = new COMMessageFilter(module); michael@0: ::CoRegisterMessageFilter(f, getter_AddRefs(f->mPreviousFilter)); michael@0: } michael@0: michael@0: } // namespace plugins michael@0: } // namespace mozilla