#include "wx/msw/missing.h"
#include "wx/filesys.h"
#include "wx/dynlib.h"
+#include <initguid.h>
+
+/* These GUID definitions are our own implementation to support interfaces
+ * normally in urlmon.h. See include/wx/msw/webview_ie.h
+ */
+
+namespace {
+
+DEFINE_GUID(wxIID_IInternetProtocolRoot,0x79eac9e3,0xbaf9,0x11ce,0x8c,0x82,0,0xaa,0,0x4b,0xa9,0xb);
+DEFINE_GUID(wxIID_IInternetProtocol,0x79eac9e4,0xbaf9,0x11ce,0x8c,0x82,0,0xaa,0,0x4b,0xa9,0xb);
+
+}
wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewIE, wxWebView);
void wxWebViewIE::LoadURL(const wxString& url)
{
- m_ie.CallMethod("Navigate", (BSTR) url.wc_str());
+ m_ie.CallMethod("Navigate", wxConvertStringToOle(url));
}
void wxWebViewIE::SetPage(const wxString& html, const wxString& baseUrl)
wxDynamicLibrary urlMon(wxT("urlmon.dll"));
if(urlMon.HasSymbol(wxT("CoInternetGetSession")))
{
- typedef HRESULT (WINAPI *CoInternetGetSession_t)(DWORD, IInternetSession**, DWORD);
+ typedef HRESULT (WINAPI *CoInternetGetSession_t)(DWORD, wxIInternetSession**, DWORD);
wxDYNLIB_FUNCTION(CoInternetGetSession_t, CoInternetGetSession, urlMon);
ClassFactory* cf = new ClassFactory(handler);
- IInternetSession* session;
+ wxIInternetSession* session;
HRESULT res = (*pfnCoInternetGetSession)(0, &session, 0);
if(FAILED(res))
{
wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING,
GetId(), url, target);
- event.SetEventObject(this);
- HandleWindowEvent(event);
+
+ //skip empty javascript events.
+ if(url == "javascript:\"\"" && target.IsEmpty())
+ {
+ event.Veto();
+ }
+ else
+ {
+ event.SetEventObject(this);
+ HandleWindowEvent(event);
+ }
if (!event.IsAllowed())
{
HRESULT VirtualProtocol::QueryInterface(REFIID riid, void **ppvObject)
{
- if(riid == IID_IUnknown || riid == IID_IInternetProtocolRoot ||
- riid == IID_IInternetProtocol)
+ if(riid == IID_IUnknown || riid == wxIID_IInternetProtocolRoot ||
+ riid == wxIID_IInternetProtocol)
{
- *ppvObject = (IInternetProtocol*)this;
+ *ppvObject = (wxIInternetProtocol*)this;
AddRef();
return S_OK;
}
}
}
-HRESULT VirtualProtocol::Start(LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink,
- IInternetBindInfo *pOIBindInfo, DWORD grfPI,
+HRESULT VirtualProtocol::Start(LPCWSTR szUrl, wxIInternetProtocolSink *pOIProtSink,
+ wxIInternetBindInfo *pOIBindInfo, DWORD grfPI,
HANDLE_PTR dwReserved)
{
wxUnusedVar(szUrl);
//We return the stream length for current and total size as we can always
//read the whole file from the stream
wxFileOffset length = m_file->GetStream()->GetLength();
- m_protocolSink->ReportData(BSCF_FIRSTDATANOTIFICATION |
- BSCF_DATAFULLYAVAILABLE |
- BSCF_LASTDATANOTIFICATION,
+ m_protocolSink->ReportData(wxBSCF_FIRSTDATANOTIFICATION |
+ wxBSCF_DATAFULLYAVAILABLE |
+ wxBSCF_LASTDATANOTIFICATION,
length, length);
return S_OK;
}