Allow using XMLHTTP ActiveX object with custom scheme handlers
Fix the problem of the access-denied error when using a 'new window.ActiveXObject("Microsoft.XMLHTTP")' to access URIs from custom WebView scheme handler of the Internet Explorer WebView. The solution here is to implement PARSE_SECURITY_URL and PARSE_SECURITY_DOMAIN in ParseUrl of the IInternetProtocolInfo interface of the Internet Explorer Control. The direct implementation of VirtualProtocol::QueryInterface() instead of using IMPLEMENT_IUNKNOWN_METHODS works, but is not nice. The better approach would be probably enhancing ADD_RAW_IID to support multiple inheritance. Closes #17893.
This commit is contained in:
@@ -73,7 +73,7 @@ public:
|
||||
wxDECLARE_NO_COPY_CLASS(wxWebViewIEImpl);
|
||||
};
|
||||
|
||||
class VirtualProtocol : public wxIInternetProtocol
|
||||
class VirtualProtocol : public wxIInternetProtocol, public wxIInternetProtocolInfo
|
||||
{
|
||||
protected:
|
||||
wxIInternetProtocolSink* m_protocolSink;
|
||||
@@ -114,6 +114,27 @@ public:
|
||||
ULARGE_INTEGER* WXUNUSED(plibNewPosition)) wxOVERRIDE
|
||||
{ return E_FAIL; }
|
||||
HRESULT STDMETHODCALLTYPE UnlockRequest() wxOVERRIDE { return S_OK; }
|
||||
|
||||
//IInternetProtocolInfo
|
||||
HRESULT STDMETHODCALLTYPE CombineUrl(
|
||||
LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl,
|
||||
DWORD dwCombineFlags, LPWSTR pwzResult,
|
||||
DWORD cchResult, DWORD *pcchResult,
|
||||
DWORD dwReserved) wxOVERRIDE;
|
||||
HRESULT STDMETHODCALLTYPE ParseUrl(
|
||||
LPCWSTR pwzUrl, PARSEACTION ParseAction,
|
||||
DWORD dwParseFlags, LPWSTR pwzResult,
|
||||
DWORD cchResult, DWORD *pcchResult,
|
||||
DWORD dwReserved) wxOVERRIDE;
|
||||
HRESULT STDMETHODCALLTYPE CompareUrl(
|
||||
LPCWSTR pwzUrl1,
|
||||
LPCWSTR pwzUrl2,
|
||||
DWORD dwCompareFlags) wxOVERRIDE;
|
||||
HRESULT STDMETHODCALLTYPE QueryInfo(
|
||||
LPCWSTR pwzUrl, QUERYOPTION OueryOption,
|
||||
DWORD dwQueryFlags, LPVOID pBuffer,
|
||||
DWORD cbBuffer, DWORD *pcbBuf,
|
||||
DWORD dwReserved) wxOVERRIDE;
|
||||
};
|
||||
|
||||
class ClassFactory : public IClassFactory
|
||||
|
Reference in New Issue
Block a user