Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/plugin/ProtocolImpl.inl

Issue 12513014: Fix crash on file upload (Closed)
Patch Set: Created Oct. 4, 2013, 8:38 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/plugin/ProtocolImpl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007 Igor Tandetnik 1 // Copyright 2007 Igor Tandetnik
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 ATLASSERT(pOIBindInfo != 0); 465 ATLASSERT(pOIBindInfo != 0);
466 ATLASSERT(pTargetProtocol != 0); 466 ATLASSERT(pTargetProtocol != 0);
467 if (!pOIProtSink || !pOIBindInfo || !pTargetProtocol) 467 if (!pOIProtSink || !pOIBindInfo || !pTargetProtocol)
468 { 468 {
469 return E_POINTER; 469 return E_POINTER;
470 } 470 }
471 471
472 // This method should only be called once, and be the only source 472 // This method should only be called once, and be the only source
473 // of target interface pointers. 473 // of target interface pointers.
474 ATLASSERT(m_spInternetProtocolSink == 0); 474 ATLASSERT(m_spInternetProtocolSink == 0);
475 ATLASSERT(m_spInternetBindInfo == 0);
476 ATLASSERT(m_spTargetProtocol == 0); 475 ATLASSERT(m_spTargetProtocol == 0);
477 if (m_spInternetProtocolSink || m_spInternetBindInfo || m_spTargetProtocol) 476 if (m_spInternetProtocolSink || m_spTargetProtocol)
478 { 477 {
479 return E_UNEXPECTED; 478 return E_UNEXPECTED;
480 } 479 }
481 480
482 ATLASSERT(m_spServiceProvider == 0); 481 ATLASSERT(m_spServiceProvider == 0);
483 482
484 m_spInternetProtocolSink = pOIProtSink; 483 m_spInternetProtocolSink = pOIProtSink;
485 m_spInternetBindInfo = pOIBindInfo;
486 m_spTargetProtocol = pTargetProtocol; 484 m_spTargetProtocol = pTargetProtocol;
487 return S_OK; 485 return S_OK;
488 } 486 }
489 487
490 inline void IInternetProtocolSinkImpl::ReleaseAll() 488 inline void IInternetProtocolSinkImpl::ReleaseAll()
491 { 489 {
492 m_spInternetProtocolSink.Release(); 490 m_spInternetProtocolSink.Release();
493 m_spServiceProvider.Release(); 491 m_spServiceProvider.Release();
494 m_spInternetBindInfo.Release();
495 m_spTargetProtocol.Release(); 492 m_spTargetProtocol.Release();
496 } 493 }
497 494
498 inline IServiceProvider* IInternetProtocolSinkImpl::GetClientServiceProvider() 495 inline IServiceProvider* IInternetProtocolSinkImpl::GetClientServiceProvider()
499 { 496 {
500 return m_spServiceProvider; 497 return m_spServiceProvider;
501 } 498 }
502 499
503 inline HRESULT IInternetProtocolSinkImpl::QueryServiceFromClient( 500 inline HRESULT IInternetProtocolSinkImpl::QueryServiceFromClient(
504 REFGUID guidService, REFIID riid, void** ppvObject) 501 REFGUID guidService, REFIID riid, void** ppvObject)
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 /* [in] */ REFGUID guidService, 576 /* [in] */ REFGUID guidService,
580 /* [in] */ REFIID riid, 577 /* [in] */ REFIID riid,
581 /* [out] */ void** ppvObject) 578 /* [out] */ void** ppvObject)
582 { 579 {
583 ATLASSERT(m_spServiceProvider != 0); 580 ATLASSERT(m_spServiceProvider != 0);
584 return m_spServiceProvider ? 581 return m_spServiceProvider ?
585 m_spServiceProvider->QueryService(guidService, riid, ppvObject) : 582 m_spServiceProvider->QueryService(guidService, riid, ppvObject) :
586 E_UNEXPECTED; 583 E_UNEXPECTED;
587 } 584 }
588 585
589 // IInternetBindInfo
590 inline STDMETHODIMP IInternetProtocolSinkImpl::GetBindInfo(
591 /* [out] */ DWORD *grfBINDF,
592 /* [in, out] */ BINDINFO *pbindinfo)
593 {
594 ATLASSERT(m_spInternetBindInfo != 0);
595 return m_spInternetBindInfo ?
596 m_spInternetBindInfo->GetBindInfo(grfBINDF, pbindinfo) :
597 E_UNEXPECTED;
598 }
599
600 inline STDMETHODIMP IInternetProtocolSinkImpl::GetBindString(
601 /* [in] */ ULONG ulStringType,
602 /* [in, out] */ LPOLESTR *ppwzStr,
603 /* [in] */ ULONG cEl,
604 /* [in, out] */ ULONG *pcElFetched)
605 {
606 ATLASSERT(m_spInternetBindInfo != 0);
607 return m_spInternetBindInfo ?
608 m_spInternetBindInfo->GetBindString(ulStringType, ppwzStr, cEl,
609 pcElFetched) :
610 E_UNEXPECTED;
611 }
612
613 // ===== CInternetProtocolSinkWithSP ===== 586 // ===== CInternetProtocolSinkWithSP =====
614 587
615 template <class T, class ThreadModel> 588 template <class T, class ThreadModel>
616 inline HRESULT CInternetProtocolSinkWithSP<T, ThreadModel>::OnStart( 589 inline HRESULT CInternetProtocolSinkWithSP<T, ThreadModel>::OnStart(
617 LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, 590 LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink,
618 IInternetBindInfo *pOIBindInfo, DWORD grfPI, DWORD dwReserved, 591 IInternetBindInfo *pOIBindInfo, DWORD grfPI, DWORD dwReserved,
619 IInternetProtocol* pTargetProtocol) 592 IInternetProtocol* pTargetProtocol)
620 { 593 {
621 ATLASSERT(m_spServiceProvider == 0); 594 ATLASSERT(m_spServiceProvider == 0);
622 if (m_spServiceProvider) 595 if (m_spServiceProvider)
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 ATLASSERT(pTargetProtocol); 697 ATLASSERT(pTargetProtocol);
725 HRESULT hr = m_internetSink.OnStart(szUrl, pOIProtSink, pOIBindInfo, 698 HRESULT hr = m_internetSink.OnStart(szUrl, pOIProtSink, pOIBindInfo,
726 grfPI, dwReserved, pTargetProtocol); 699 grfPI, dwReserved, pTargetProtocol);
727 700
728 //We return INET_E_REDIRECT_FAILED in case we have iframe blocking. 701 //We return INET_E_REDIRECT_FAILED in case we have iframe blocking.
729 if (hr == INET_E_REDIRECT_FAILED) 702 if (hr == INET_E_REDIRECT_FAILED)
730 { 703 {
731 return S_OK; 704 return S_OK;
732 } 705 }
733 CComPtr<IInternetProtocolSink> spSink; 706 CComPtr<IInternetProtocolSink> spSink;
734 CComPtr<IInternetBindInfo> spBindInfo;
735 if (SUCCEEDED(hr)) 707 if (SUCCEEDED(hr))
736 { 708 {
737 hr = m_internetSink.QueryInterface(&spSink); 709 hr = m_internetSink.QueryInterface(&spSink);
738 ATLASSERT(SUCCEEDED(hr) && spSink != 0); 710 ATLASSERT(SUCCEEDED(hr) && spSink != 0);
739 } 711 }
740 if (SUCCEEDED(hr)) 712 if (SUCCEEDED(hr))
741 { 713 {
742 hr = m_internetSink.QueryInterface(&spBindInfo); 714 hr = pTargetProtocol->Start(szUrl, spSink, pOIBindInfo, grfPI, dwReserved) ;
743 ATLASSERT(SUCCEEDED(hr) && spBindInfo != 0);
744 }
745 if (SUCCEEDED(hr))
746 {
747 hr = pTargetProtocol->Start(szUrl, spSink, spBindInfo, grfPI,
748 dwReserved);
749 }
750 else
751 {
752
753 } 715 }
754 return hr; 716 return hr;
755 } 717 }
756 template <class Sink> 718 template <class Sink>
757 inline HRESULT CustomSinkStartPolicy<Sink>::Read(/* [in, out] */ void *pv,/* [ in] */ ULONG cb,/* [out] */ ULONG *pcbRead) 719 inline HRESULT CustomSinkStartPolicy<Sink>::Read(/* [in, out] */ void *pv,/* [ in] */ ULONG cb,/* [out] */ ULONG *pcbRead)
758 { 720 {
759 return m_internetSink.Read(pv, cb, pcbRead); 721 return m_internetSink.Read(pv, cb, pcbRead);
760 } 722 }
761 723
762 // ===== CInternetProtocol ===== 724 // ===== CInternetProtocol =====
(...skipping 23 matching lines...) Expand all
786 inline STDMETHODIMP CInternetProtocol<StartPolicy, ThreadModel>::Read( 748 inline STDMETHODIMP CInternetProtocol<StartPolicy, ThreadModel>::Read(
787 /* [in, out] */ void *pv, 749 /* [in, out] */ void *pv,
788 /* [in] */ ULONG cb, 750 /* [in] */ ULONG cb,
789 /* [out] */ ULONG *pcbRead) 751 /* [out] */ ULONG *pcbRead)
790 { 752 {
791 return StartPolicy::Read(pv, cb, pcbRead); 753 return StartPolicy::Read(pv, cb, pcbRead);
792 } 754 }
793 } // end namespace PassthroughAPP 755 } // end namespace PassthroughAPP
794 756
795 #endif // PASSTHROUGHAPP_PROTOCOLIMPL_INL 757 #endif // PASSTHROUGHAPP_PROTOCOLIMPL_INL
OLDNEW
« no previous file with comments | « src/plugin/ProtocolImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld