| Index: src/plugin/SinkPolicy.inl |
| =================================================================== |
| --- a/src/plugin/SinkPolicy.inl |
| +++ b/src/plugin/SinkPolicy.inl |
| @@ -358,11 +358,11 @@ |
| inline HRESULT CustomSinkStartPolicy<Protocol, Sink>::OnStart(LPCWSTR szUrl, |
| IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
| DWORD grfPI, HANDLE_PTR dwReserved, |
| - IInternetProtocol* pTargetProtocol) const |
| + IInternetProtocol* pTargetProtocol) |
| { |
| ATLASSERT(pTargetProtocol != 0); |
| - bool handled = false; |
| + bool handled = false; |
| Sink* pSink = GetSink(static_cast<const Protocol*>(this)); |
| HRESULT hr = pSink->OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
| dwReserved, pTargetProtocol, handled); |
| @@ -371,20 +371,25 @@ |
| CComPtr<IInternetBindInfo> spBindInfo; |
| if (SUCCEEDED(hr)) |
| { |
| - hr = pSink->QueryInterface(IID_IInternetProtocolSink, |
| - reinterpret_cast<void**>(&spSink)); |
| + hr = pSink->QueryInterface(IID_IInternetProtocolSink, reinterpret_cast<void**>(&spSink)); |
| ATLASSERT(SUCCEEDED(hr) && spSink != 0); |
| } |
| if (SUCCEEDED(hr)) |
| { |
| - hr = pSink->QueryInterface(IID_IInternetBindInfo, |
| - reinterpret_cast<void**>(&spBindInfo)); |
| + hr = pSink->QueryInterface(IID_IInternetBindInfo, reinterpret_cast<void**>(&spBindInfo)); |
| ATLASSERT(SUCCEEDED(hr) && spBindInfo != 0); |
| } |
| if (SUCCEEDED(hr) && !handled) |
| { |
| - hr = pTargetProtocol->Start(szUrl, spSink, spBindInfo, grfPI, |
| - dwReserved); |
| + hr = pTargetProtocol->Start(szUrl, spSink, spBindInfo, grfPI, dwReserved); |
| + static_cast<Protocol*>(this)->m_hasOriginalStartCalled = true; |
| + } |
| + if (E_ABORT == hr && pSink->m_blockedInTransaction) |
| + { |
| + static_cast<Protocol*>(this)->m_shouldSupplyCustomContent = true; |
| + pSink->m_spInternetProtocolSink->ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE, L"text/html"); |
| + pSink->m_spInternetProtocolSink->ReportData(BSCF_FIRSTDATANOTIFICATION, 0, static_cast<ULONG>(g_blockedByABPPage.size())); |
| + return S_OK; |
| } |
| return hr; |
| } |