15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/bind_status_callback_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/platform_thread.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BSCBImpl::BSCBImpl() { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me(); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BSCBImpl::~BSCBImpl() { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me(); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BSCBImpl::me() { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf(" obj=0x%08X", static_cast<BSCBImpl*>(this)); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::DelegateQI(void* obj, REFIID iid, void** ret, DWORD cookie) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BSCBImpl* me = reinterpret_cast<BSCBImpl*>(obj); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = E_NOINTERFACE; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (me->delegate_) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = me->delegate_.QueryInterface(iid, ret); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BSCBImpl::Initialize(IBindStatusCallback* original) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!delegate_); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = original; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::AttachToBind(IBindCtx* bind_ctx) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = ::RegisterBindStatusCallback(bind_ctx, this, delegate_.Receive(), 0); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SUCCEEDED(hr)) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bind_ctx_ = bind_ctx; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::ReleaseBind() { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AddRef ourselves while we release these objects as we might 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // perish during this operation. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddRef(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bind_ctx_) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = ::RevokeBindStatusCallback(bind_ctx_, this); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_.Release(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bind_ctx_.Release(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Release(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IServiceProvider 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::QueryService(REFGUID service, REFIID iid, void** object) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = E_NOINTERFACE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedComPtr<IServiceProvider> svc; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) svc.QueryFrom(delegate_); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (svc) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = svc->QueryService(service, iid, object); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IBindStatusCallback 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnStartBinding(DWORD reserved, IBinding* binding) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = delegate_->OnStartBinding(reserved, binding); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::GetPriority(LONG* priority) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = delegate_->GetPriority(priority); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnLowResource(DWORD reserved) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = delegate_->OnLowResource(reserved); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnProgress(ULONG progress, ULONG progress_max, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ULONG status_code, LPCWSTR status_text) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" status=%i tid=%i %ls", status_code, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::CurrentId(), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_text); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnProgress(progress, progress_max, status_code, status_text); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnStopBinding(HRESULT hresult, LPCWSTR error) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" hr=0x%08X '%ls' tid=%i", hresult, error, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::CurrentId()); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnStopBinding(hresult, error); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::GetBindInfo(DWORD* bindf, BINDINFO* bind_info) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->GetBindInfo(bindf, bind_info); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnDataAvailable(DWORD bscf, DWORD size, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FORMATETC* format_etc, STGMEDIUM* stgmed) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = delegate_->OnDataAvailable(bscf, size, format_etc, stgmed); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnObjectAvailable(REFIID iid, IUnknown* unk) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnObjectAvailable(iid, unk); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IBindStatusCallbackEx 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::GetBindInfoEx(DWORD* bindf, BINDINFO* bind_info, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD* bindf2, DWORD* reserved) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedComPtr<IBindStatusCallbackEx> bscbex; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bscbex.QueryFrom(delegate_); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bscbex) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = bscbex->GetBindInfoEx(bindf, bind_info, bindf2, reserved); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::BeginningTransaction(LPCWSTR url, LPCWSTR headers, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD reserved, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPWSTR* additional_headers) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedComPtr<IHttpNegotiate> http_negotiate; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_negotiate.QueryFrom(delegate_); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (http_negotiate) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = http_negotiate->BeginningTransaction(url, headers, reserved, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) additional_headers); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG_IF(ERROR, FAILED(hr)) << __FUNCTION__; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::OnResponse(DWORD response_code, LPCWSTR response_headers, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPCWSTR request_headers, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPWSTR* additional_headers) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << __FUNCTION__ << me() 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << base::StringPrintf(" tid=%i", base::PlatformThread::CurrentId()); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedComPtr<IHttpNegotiate> http_negotiate; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_negotiate.QueryFrom(delegate_); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (http_negotiate) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = http_negotiate->OnResponse(response_code, response_headers, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_headers, additional_headers); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::GetRootSecurityId(BYTE* security_id, DWORD* security_id_size, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD_PTR reserved) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedComPtr<IHttpNegotiate2> http_negotiate; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_negotiate.QueryFrom(delegate_); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (http_negotiate) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = http_negotiate->GetRootSecurityId(security_id, security_id_size, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reserved); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT BSCBImpl::GetSerializedClientCertContext(BYTE** cert, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD* cert_size) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = S_OK; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedComPtr<IHttpNegotiate3> http_negotiate; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_negotiate.QueryFrom(delegate_); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (http_negotiate) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return http_negotiate->GetSerializedClientCertContext(cert, cert_size); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hr; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 234