Navigate2 method broken with IWebBrowser2 in IE7



I'm developing a toolbar plugin for internet explorer. I have it
working in IE6 just fine. I recently upgraded to IE7 and now my calls
to Navigate2 method seems to be broken. They return a simple S_FALSE
and no page change happens. Here is my code (that works in IE6), maybe
somebody has some insights. It is taken from a c++ wrapper class I
wrote. I am using WTL.

// *******************************************************************
BOOL CWebBrowser::HttpPostToUrl( const CString& sUrl, const CString&
sPostData, BOOL fNoHistory /* = FALSE */ )
{
// Make sure we have a pointer to the IWebBrowser2 interface for IE
if( m_spWebBrowser2 == NULL || sUrl.IsEmpty() ) {
return FALSE;
}

VARIANT vUrl, vFlags, vNull, vPostData, vHeaders;

// Populate the url
VariantInit( &vUrl );
vUrl.bstrVal = SysAllocString( sUrl );
vUrl.vt = VT_BSTR;

// No extraneous flags
VariantInit( &vFlags );
// vFlags.lVal = fNoHistory ? navNoHistory: 0;
vFlags.lVal = navNoReadFromCache | navNoWriteToCache;
vFlags.vt = VT_I4;

// Used for null params
VariantInit( &vNull );
vNull.vt = VT_BSTR;
vNull.bstrVal = NULL;

// Change our headers to form post headers
V_VT( &vHeaders ) = VT_BSTR;
V_BSTR( &vHeaders ) = SysAllocString( L"Content-Type:
application/x-www-form-urlencoded\r\n" );

// Add the post data
VariantInit( &vPostData );
if ( !sPostData.IsEmpty() ) {
UTF8Buf utf8Post( sPostData );
LPCSTR lpszPostData = utf8Post;
size_t stArrSize = 0;
StringCchLengthA( lpszPostData, 1024, &stArrSize );
LPSAFEARRAY psa = SafeArrayCreateVector( VT_UI1, 0,
static_cast<DWORD>(stArrSize) );
if ( psa ) {
LPTSTR lpszData = NULL;
SafeArrayAccessData( psa, reinterpret_cast<void**>(&lpszData) );
memcpy( lpszData, lpszPostData, stArrSize );
SafeArrayUnaccessData( psa );
}

V_VT( &vPostData ) = VT_ARRAY | VT_UI1;
V_ARRAY( &vPostData ) = psa;
}

// Post the data to the url
//HRESULT hr = m_spWebBrowser2->Navigate2(&vUrl, &vFlags, &vNull,
&vPostData, &vHeaders);
// BSTR bUrl = SysAllocString( sUrl );
BSTR bUrl = SysAllocString( L"about:blank" );
// PROBLEM ON NEXT LINE!!!!
HRESULT hr = m_spWebBrowser2->Navigate( bUrl, &vFlags, &vNull,
&vPostData, &vHeaders);
SysFreeString( bUrl );
if ( hr == S_FALSE || FAILED(hr) ) {
OutputDebugString( GetErrorMsgForHresult(hr) );
}

// Clean up our variants
VariantClear( &vHeaders );
VariantClear( &vPostData );
VariantClear( &vNull );
VariantClear( &vFlags );
VariantClear( &vUrl );

return SUCCEEDED(hr);
}
// *******************************************************************

Any insights will be very much appreciated.

Andrew Harding

.