diff --git a/mozilla/webshell/embed/ActiveX/CPMozillaControl.h b/mozilla/webshell/embed/ActiveX/CPMozillaControl.h index 90fd57f3b24..092e3e45c7d 100644 --- a/mozilla/webshell/embed/ActiveX/CPMozillaControl.h +++ b/mozilla/webshell/embed/ActiveX/CPMozillaControl.h @@ -450,3 +450,460 @@ public: }; + +////////////////////////////////////////////////////////////////////////////// +// CProxyDWebBrowserEvents2 +template +class CProxyDWebBrowserEvents2 : public IConnectionPointImpl +{ +public: +//methods: +//DWebBrowserEvents2 : IDispatch +public: + void Fire_StatusTextChange( + BSTR Text) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BSTR; + pvars[0].bstrVal= Text; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x66, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_ProgressChange( + long Progress, + long ProgressMax) + { + VARIANTARG* pvars = new VARIANTARG[2]; + for (int i = 0; i < 2; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[1].vt = VT_I4; + pvars[1].lVal= Progress; + pvars[0].vt = VT_I4; + pvars[0].lVal= ProgressMax; + DISPPARAMS disp = { pvars, NULL, 2, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x6c, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_CommandStateChange( + long Command, + VARIANT_BOOL Enable) + { + VARIANTARG* pvars = new VARIANTARG[2]; + for (int i = 0; i < 2; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[1].vt = VT_I4; + pvars[1].lVal= Command; + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= Enable; + DISPPARAMS disp = { pvars, NULL, 2, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x69, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_DownloadBegin() + { + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + DISPPARAMS disp = { NULL, NULL, 0, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x6a, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + } + void Fire_DownloadComplete() + { + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + DISPPARAMS disp = { NULL, NULL, 0, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x68, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + } + void Fire_TitleChange( + BSTR Text) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BSTR; + pvars[0].bstrVal= Text; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x71, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_PropertyChange( + BSTR szProperty) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BSTR; + pvars[0].bstrVal= szProperty; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x70, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_BeforeNavigate2( + IDispatch * pDisp, + VARIANT * URL, + VARIANT * Flags, + VARIANT * TargetFrameName, + VARIANT * PostData, + VARIANT * Headers, + VARIANT_BOOL * Cancel) + { + VARIANTARG* pvars = new VARIANTARG[7]; + for (int i = 0; i < 7; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[6].vt = VT_DISPATCH; + pvars[6].pdispVal= pDisp; + pvars[5].vt = VT_VARIANT | VT_BYREF; + pvars[5].byref= URL; + pvars[4].vt = VT_VARIANT | VT_BYREF; + pvars[4].byref= Flags; + pvars[3].vt = VT_VARIANT | VT_BYREF; + pvars[3].byref= TargetFrameName; + pvars[2].vt = VT_VARIANT | VT_BYREF; + pvars[2].byref= PostData; + pvars[1].vt = VT_VARIANT | VT_BYREF; + pvars[1].byref= Headers; + pvars[0].vt = VT_BOOL | VT_BYREF; + pvars[0].byref= Cancel; + DISPPARAMS disp = { pvars, NULL, 7, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0xfa, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_NewWindow2( + IDispatch * * ppDisp, + VARIANT_BOOL * Cancel) + { + VARIANTARG* pvars = new VARIANTARG[2]; + for (int i = 0; i < 2; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[1].vt = VT_DISPATCH | VT_BYREF; + pvars[1].byref= ppDisp; + pvars[0].vt = VT_BOOL | VT_BYREF; + pvars[0].byref= Cancel; + DISPPARAMS disp = { pvars, NULL, 2, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0xfb, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_NavigateComplete2( + IDispatch * pDisp, + VARIANT * URL) + { + VARIANTARG* pvars = new VARIANTARG[2]; + for (int i = 0; i < 2; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[1].vt = VT_DISPATCH; + pvars[1].pdispVal= pDisp; + pvars[0].vt = VT_VARIANT | VT_BYREF; + pvars[0].byref= URL; + DISPPARAMS disp = { pvars, NULL, 2, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0xfc, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_DocumentComplete( + IDispatch * pDisp, + VARIANT * URL) + { + VARIANTARG* pvars = new VARIANTARG[2]; + for (int i = 0; i < 2; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[1].vt = VT_DISPATCH; + pvars[1].pdispVal= pDisp; + pvars[0].vt = VT_VARIANT | VT_BYREF; + pvars[0].byref= URL; + DISPPARAMS disp = { pvars, NULL, 2, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x103, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_OnQuit() + { + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + DISPPARAMS disp = { NULL, NULL, 0, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0xfd, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + } + void Fire_OnVisible( + VARIANT_BOOL Visible) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= Visible; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0xfe, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_OnToolBar( + VARIANT_BOOL ToolBar) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= ToolBar; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0xff, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_OnMenuBar( + VARIANT_BOOL MenuBar) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= MenuBar; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x100, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_OnStatusBar( + VARIANT_BOOL StatusBar) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= StatusBar; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x101, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_OnFullScreen( + VARIANT_BOOL FullScreen) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= FullScreen; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x102, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + void Fire_OnTheaterMode( + VARIANT_BOOL TheaterMode) + { + VARIANTARG* pvars = new VARIANTARG[1]; + for (int i = 0; i < 1; i++) + VariantInit(&pvars[i]); + T* pT = (T*)this; + pT->Lock(); + IUnknown** pp = m_vec.begin(); + while (pp < m_vec.end()) + { + if (*pp != NULL) + { + pvars[0].vt = VT_BOOL; + pvars[0].boolVal= TheaterMode; + DISPPARAMS disp = { pvars, NULL, 1, 0 }; + IDispatch* pDispatch = reinterpret_cast(*pp); + pDispatch->Invoke(0x104, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL); + } + pp++; + } + pT->Unlock(); + delete[] pvars; + } + +}; + diff --git a/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp b/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp index ee3a0229b5d..11a72911ad2 100644 --- a/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp +++ b/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp @@ -756,6 +756,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Busy(VARIANT_BOOL __RPC_FAR *pBoo HRESULT STDMETHODCALLTYPE CMozillaBrowser::Quit(void) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + // TODO fire quit event return S_OK; } @@ -763,6 +769,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::Quit(void) HRESULT STDMETHODCALLTYPE CMozillaBrowser::ClientToWindow(int __RPC_FAR *pcx, int __RPC_FAR *pcy) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + // TODO convert points to be relative to browser return S_OK; } @@ -770,6 +782,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::ClientToWindow(int __RPC_FAR *pcx, in HRESULT STDMETHODCALLTYPE CMozillaBrowser::PutProperty(BSTR szProperty, VARIANT vtValue) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + if (szProperty == NULL) { return E_INVALIDARG; @@ -797,6 +815,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::PutProperty(BSTR szProperty, VARIANT HRESULT STDMETHODCALLTYPE CMozillaBrowser::GetProperty(BSTR Property, VARIANT __RPC_FAR *pvtValue) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT(Property); NG_ASSERT_POINTER(pvtValue, VARIANT); @@ -823,6 +847,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::GetProperty(BSTR Property, VARIANT __ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Name(BSTR __RPC_FAR *Name) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(Name, BSTR); if (Name == NULL) { @@ -835,6 +865,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Name(BSTR __RPC_FAR *Name) HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_HWND(long __RPC_FAR *pHWND) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(pHWND, HWND); if (pHWND == NULL) { @@ -846,6 +882,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_HWND(long __RPC_FAR *pHWND) HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_FullName(BSTR __RPC_FAR *FullName) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(FullName, BSTR); if (FullName == NULL) { @@ -858,6 +900,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_FullName(BSTR __RPC_FAR *FullName HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Path(BSTR __RPC_FAR *Path) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(Path, BSTR); if (Path == NULL) { @@ -870,6 +918,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Path(BSTR __RPC_FAR *Path) HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Visible(VARIANT_BOOL __RPC_FAR *pBool) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(pBool, int); if (pBool == NULL) { @@ -882,12 +936,24 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Visible(VARIANT_BOOL __RPC_FAR *p HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Visible(VARIANT_BOOL Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return S_OK; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_StatusBar(VARIANT_BOOL __RPC_FAR *pBool) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(pBool, int); if (pBool == NULL) { @@ -900,12 +966,24 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_StatusBar(VARIANT_BOOL __RPC_FAR HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_StatusBar(VARIANT_BOOL Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return S_OK; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_StatusText(BSTR __RPC_FAR *StatusText) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(StatusText, BSTR); if (StatusText == NULL) { @@ -918,12 +996,24 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_StatusText(BSTR __RPC_FAR *Status HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_StatusText(BSTR StatusText) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return S_OK; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_ToolBar(int __RPC_FAR *Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(Value, int); if (Value == NULL) { @@ -936,6 +1026,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_ToolBar(int __RPC_FAR *Value) HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_ToolBar(int Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + // No toolbar in control! return S_OK; } @@ -943,6 +1039,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_ToolBar(int Value) HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_MenuBar(VARIANT_BOOL __RPC_FAR *Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(Value, int); if (Value == NULL) { @@ -955,6 +1057,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_MenuBar(VARIANT_BOOL __RPC_FAR *V HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_MenuBar(VARIANT_BOOL Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + // No menu in control! return S_OK; } @@ -962,6 +1070,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_MenuBar(VARIANT_BOOL Value) HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_FullScreen(VARIANT_BOOL __RPC_FAR *pbFullScreen) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + NG_ASSERT_POINTER(pbFullScreen, VARIANT_BOOL); if (pbFullScreen == NULL) { @@ -974,6 +1088,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_FullScreen(VARIANT_BOOL __RPC_FAR HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_FullScreen(VARIANT_BOOL bFullScreen) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + // No fullscreen mode in control! return S_OK; } @@ -985,114 +1105,234 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_FullScreen(VARIANT_BOOL bFullScre HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate2(VARIANT __RPC_FAR *URL, VARIANT __RPC_FAR *Flags, VARIANT __RPC_FAR *TargetFrameName, VARIANT __RPC_FAR *PostData, VARIANT __RPC_FAR *Headers) { - return E_NOTIMPL; + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + + CComVariant vURLAsString; + if (vURLAsString.ChangeType(VT_BSTR, URL) != S_OK) + { + return E_INVALIDARG; + } + + return Navigate(vURLAsString.bstrVal, Flags, TargetFrameName, PostData, Headers); } HRESULT STDMETHODCALLTYPE CMozillaBrowser::QueryStatusWB(OLECMDID cmdID, OLECMDF __RPC_FAR *pcmdf) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT __RPC_FAR *pvaIn, VARIANT __RPC_FAR *pvaOut) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::ShowBrowserBar(VARIANT __RPC_FAR *pvaClsid, VARIANT __RPC_FAR *pvarShow, VARIANT __RPC_FAR *pvarSize) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_ReadyState(READYSTATE __RPC_FAR *plReadyState) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Offline(VARIANT_BOOL __RPC_FAR *pbOffline) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Offline(VARIANT_BOOL bOffline) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Silent(VARIANT_BOOL __RPC_FAR *pbSilent) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Silent(VARIANT_BOOL bSilent) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_RegisterAsBrowser(VARIANT_BOOL __RPC_FAR *pbRegister) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_RegisterAsBrowser(VARIANT_BOOL bRegister) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_RegisterAsDropTarget(VARIANT_BOOL __RPC_FAR *pbRegister) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_RegisterAsDropTarget(VARIANT_BOOL bRegister) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_TheaterMode(VARIANT_BOOL __RPC_FAR *pbRegister) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_TheaterMode(VARIANT_BOOL bRegister) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_AddressBar(VARIANT_BOOL __RPC_FAR *Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_AddressBar(VARIANT_BOOL Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Resizable(VARIANT_BOOL __RPC_FAR *Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Resizable(VARIANT_BOOL Value) { + if (!IsValid()) + { + NG_ASSERT(0); + return E_UNEXPECTED; + } + return E_NOTIMPL; } diff --git a/mozilla/webshell/embed/ActiveX/MozillaBrowser.h b/mozilla/webshell/embed/ActiveX/MozillaBrowser.h index b05e436e635..46f59a7cace 100644 --- a/mozilla/webshell/embed/ActiveX/MozillaBrowser.h +++ b/mozilla/webshell/embed/ActiveX/MozillaBrowser.h @@ -3,28 +3,41 @@ #ifndef __MOZILLABROWSER_H_ #define __MOZILLABROWSER_H_ -#include "resource.h" // main symbols - -#include - -#include "WebShellContainer.h" - -// This file is autogenerated using the ATL proxy wizard +// This file is autogenerated by the ATL proxy wizard // so don't edit it! #include "CPMozillaControl.h" -// Named property +// DEVNOTE: Property and PropertyList should be defined inside CMozillaBrowser +// but were moved outside due to a bug with templates on nested classes +// in VC++ 5.0 which is not at SP3 level. + +// Property is a name,variant pair held by the browser. In IE, properties +// offer a primitive way for DHTML elements to talk back and forth with +// the host app. The Mozilla app currently just implements them for +// compatibility reasons struct Property { CComBSTR szName; CComVariant vValue; }; -// These operators are not implemented anywhere. They only need to be -// defined in order for the compiler to accept the vector -// template... + +// A list of properties +typedef std::vector PropertyList; + + +// DEVNOTE: These operators are required since the unpatched VC++ 5.0 +// generates code even for unreferenced template methods in +// the file and will give compiler errors without +// them. Service Pack 1 and above fixes this problem + int operator <(const Property&, const Property&); int operator ==(const Property&, const Property&); -typedef std::vector PropertyList; + +class CWebShellContainer; + +// Some definitions which are used to make firing events easier +#define CDWebBrowserEvents1 CProxyDWebBrowserEvents +#define CDWebBrowserEvents2 CProxyDWebBrowserEvents2 ///////////////////////////////////////////////////////////////////////////// // CMozillaBrowser @@ -32,9 +45,10 @@ class ATL_NO_VTABLE CMozillaBrowser : public CComObjectRootEx, public CComCoClass, public CComControl, - public CProxyDWebBrowserEvents, + public CDWebBrowserEvents1, + public CDWebBrowserEvents2, public CStockPropImpl, - public IProvideClassInfo2Impl<&CLSID_MozillaBrowser, &DIID_DWebBrowserEvents, &LIBID_MOZILLACONTROLLib>, + public IProvideClassInfo2Impl<&CLSID_MozillaBrowser, &DIID_DWebBrowserEvents2, &LIBID_MOZILLACONTROLLib>, public IPersistStreamInitImpl, public IPersistStorageImpl, public IQuickActivateImpl, @@ -70,7 +84,7 @@ BEGIN_COM_MAP(CMozillaBrowser) COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY_IMPL(IOleControl) COM_INTERFACE_ENTRY_IMPL(IOleObject) -// COM_INTERFACE_ENTRY_IMPL(IQuickActivate) +// COM_INTERFACE_ENTRY_IMPL(IQuickActivate) // This causes size assertion in ATL COM_INTERFACE_ENTRY_IMPL(IPersistStorage) COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit) COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages) @@ -91,6 +105,7 @@ END_PROPERTY_MAP() BEGIN_CONNECTION_POINT_MAP(CMozillaBrowser) // Fires IE events CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents) + CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2) END_CONNECTION_POINT_MAP() @@ -129,17 +144,10 @@ protected: // Indicates the browser is busy doing something BOOL m_bBusy; -#if 0 /* XXX: this breaks the build :-( */ - // Named property - struct Property - { - CComBSTR szName; - CComVariant vValue; - }; - typedef std::vector PropertyList; -#endif + // Property list PropertyList m_PropertyList; + virtual HRESULT CreateWebShell(); virtual BOOL IsValid(); diff --git a/mozilla/webshell/embed/ActiveX/MozillaControl.idl b/mozilla/webshell/embed/ActiveX/MozillaControl.idl index 504020a3bd9..dc91a1ea644 100644 --- a/mozilla/webshell/embed/ActiveX/MozillaControl.idl +++ b/mozilla/webshell/embed/ActiveX/MozillaControl.idl @@ -421,7 +421,6 @@ library MOZILLACONTROLLib interface IWebBrowser; interface IWebBrowserApp; interface IDispatch; -// [default, source] dispinterface DWebBrowserEvents2; - [default, source] dispinterface DWebBrowserEvents; + [default, source] dispinterface DWebBrowserEvents2; }; }; diff --git a/mozilla/webshell/embed/ActiveX/StdAfx.h b/mozilla/webshell/embed/ActiveX/StdAfx.h index f8d88339399..6bb9ff0946b 100644 --- a/mozilla/webshell/embed/ActiveX/StdAfx.h +++ b/mozilla/webshell/embed/ActiveX/StdAfx.h @@ -15,7 +15,7 @@ #define _WIN32_WINNT 0x0400 #define _ATL_APARTMENT_THREADED - +// ATL headers #include //You may derive a class from CComModule and use it if you want to override //something, but do not change the name of _Module @@ -23,6 +23,11 @@ extern CComModule _Module; #include #include +// STL headers +#include + +// Mozilla headers + #ifdef USE_NGPREF #include "nsIPref.h" #endif @@ -50,10 +55,13 @@ extern CComModule _Module; #include "nsVoidArray.h" #include "nsCRT.h" +// Mozilla control headers +#include "resource.h" + #include "BrowserDiagnostics.h" #include "MozillaControl.h" -#include "WebShellContainer.h" #include "MozillaBrowser.h" +#include "WebShellContainer.h" //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. diff --git a/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp b/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp index 811d3de45a0..61f1526652a 100644 --- a/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp +++ b/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp @@ -10,6 +10,8 @@ static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID); CWebShellContainer::CWebShellContainer(CMozillaBrowser *pOwner) { m_pOwner = pOwner; + m_pEvents1 = m_pOwner; + m_pEvents2 = m_pOwner; } @@ -92,11 +94,14 @@ CWebShellContainer::BeginLoadURL(nsIWebShell* aShell, const PRUnichar* aURL) VARIANT_BOOL bCancel = VARIANT_FALSE; long lFlags = 0; - m_pOwner->Fire_BeforeNavigate(bstrURL, lFlags, bstrTargetFrameName, pvPostData, bstrHeaders, &bCancel); + m_pEvents1->Fire_BeforeNavigate(bstrURL, lFlags, bstrTargetFrameName, pvPostData, bstrHeaders, &bCancel); + // TODO m_pEvents2->Fire_BeforeNavigate2(...) + SysFreeString(bstrURL); SysFreeString(bstrTargetFrameName); SysFreeString(bstrHeaders); + if (bCancel == VARIANT_TRUE) { if (aShell) @@ -116,7 +121,8 @@ NS_IMETHODIMP CWebShellContainer::ProgressLoadURL(nsIWebShell* aShell, const PRUnichar* aURL, PRInt32 aProgress, PRInt32 aProgressMax) { ATLTRACE(_T("CWebShellContainer::ProgressLoadURL()\n")); - m_pOwner->Fire_ProgressChange(aProgress, aProgressMax); + m_pEvents1->Fire_ProgressChange(aProgress, aProgressMax); + m_pEvents2->Fire_ProgressChange(aProgress, aProgressMax); return NS_OK; } @@ -128,7 +134,8 @@ CWebShellContainer::EndLoadURL(nsIWebShell* aShell, const PRUnichar* aURL, PRInt USES_CONVERSION; OLECHAR *pszURL = W2OLE((WCHAR *) aURL); BSTR bstrURL = SysAllocString(pszURL); - m_pOwner->Fire_NavigateComplete(bstrURL); + m_pEvents1->Fire_NavigateComplete(bstrURL); +// TODO m_pEvents2->Fire_NavigateComplete2(...) m_pOwner->m_bBusy = FALSE; SysFreeString(bstrURL); @@ -161,7 +168,7 @@ NS_IMETHODIMP CWebShellContainer::OnStartBinding(nsIURL* aURL, const char *aContentType) { ATLTRACE(_T("CWebShellContainer::OnStartBinding()\n")); - return NS_ERROR_FAILURE; + return NS_OK; } @@ -169,7 +176,7 @@ NS_IMETHODIMP CWebShellContainer::OnProgress(nsIURL* aURL, PRInt32 aProgress, PRInt32 aProgressMax) { ATLTRACE(_T("CWebShellContainer::OnProgress()\n")); - return NS_ERROR_FAILURE; + return NS_OK; } @@ -177,7 +184,14 @@ NS_IMETHODIMP CWebShellContainer::OnStatus(nsIURL* aURL, const nsString &aMsg) { ATLTRACE(_T("CWebShellContainer::OnStatus()\n")); - return NS_ERROR_FAILURE; + + USES_CONVERSION; + BSTR bstrText = SysAllocString(W2OLE((PRUnichar *) aMsg)); + m_pEvents1->Fire_StatusTextChange(bstrText); + m_pEvents2->Fire_StatusTextChange(bstrText); + SysFreeString(bstrText); + + return NS_OK; } @@ -185,5 +199,5 @@ NS_IMETHODIMP CWebShellContainer::OnStopBinding(nsIURL* aURL, PRInt32 aStatus, const nsString &aMsg) { ATLTRACE(_T("CWebShellContainer::OnStopBinding()\n")); - return NS_ERROR_FAILURE; + return NS_OK; } diff --git a/mozilla/webshell/embed/ActiveX/WebShellContainer.h b/mozilla/webshell/embed/ActiveX/WebShellContainer.h index 9af83d9cd71..92ee7728bdf 100644 --- a/mozilla/webshell/embed/ActiveX/WebShellContainer.h +++ b/mozilla/webshell/embed/ActiveX/WebShellContainer.h @@ -1,7 +1,8 @@ #ifndef WEBSHELLCONTAINER_H #define WEBSHELLCONTAINER_H -class CMozillaBrowser; +// This is the class that handles the XPCOM side of things, callback +// interfaces into the web shell and so forth. class CWebShellContainer : public nsIWebShellContainer, @@ -9,13 +10,17 @@ class CWebShellContainer : { public: CWebShellContainer(CMozillaBrowser *pOwner); + protected: virtual ~CWebShellContainer(); // Protected members protected: nsString m_sTitle; + CMozillaBrowser *m_pOwner; + CDWebBrowserEvents1 *m_pEvents1; + CDWebBrowserEvents2 *m_pEvents2; public: // nsISupports diff --git a/mozilla/webshell/embed/ActiveX/makefile.win b/mozilla/webshell/embed/ActiveX/makefile.win index 37bb5902d3b..073c3a3d867 100644 --- a/mozilla/webshell/embed/ActiveX/makefile.win +++ b/mozilla/webshell/embed/ActiveX/makefile.win @@ -63,7 +63,7 @@ LLIBS = $(MYLIBS) \ shell32.lib \ -SUBSYSTEM:windows -LCFLAGS = /D "WIN32" /GX +LCFLAGS = /D "WIN32" /GX /FR LFLAGS = /DLL include <$(DEPTH)\config\rules.mak>