Mozilla/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp
rpotts%netscape.com d49946e886 Fixed build bustage due to NSRepository renaming...
git-svn-id: svn://10.0.0.236/trunk@9046 18797224-902f-48f8-a5cc-f745e15eee43
1998-09-01 22:37:27 +00:00

560 lines
9.7 KiB
C++

// MozillaBrowser.cpp : Implementation of CMozillaBrowser
#include "stdafx.h"
#include "MozillaControl.h"
#include "MozillaBrowser.h"
/////////////////////////////////////////////////////////////////////////////
// CMozillaBrowser
extern "C" void NS_SetupRegistry();
CMozillaBrowser::CMozillaBrowser()
{
m_bWindowOnly = TRUE;
m_bWndLess = FALSE;
m_pIWebShell = nsnull;
// Create the container that handles some things for us
m_pWebShellContainer = NULL;
PL_InitializeEventsLib("");
// Register everything
NS_SetupRegistry();
}
CMozillaBrowser::~CMozillaBrowser()
{
}
STDMETHODIMP CMozillaBrowser::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IMozillaBrowser,
};
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
LRESULT CMozillaBrowser::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// Clip the child windows out of paint operations
SetWindowLong(GWL_STYLE, GetWindowLong(GWL_STYLE) | WS_CLIPCHILDREN);
// Create the NGLayout WebShell
CreateWebShell();
return 0;
}
LRESULT CMozillaBrowser::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/* Destroy NGLayout... */
if (m_pIWebShell != nsnull)
{
m_pIWebShell->Destroy();
NS_RELEASE(m_pIWebShell);
m_pWebShellContainer->Release();
m_pWebShellContainer = NULL;
}
return 0;
}
LRESULT CMozillaBrowser::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/* Pass resize information down to the WebShell... */
if (m_pIWebShell)
{
m_pIWebShell->SetBounds(0, 0, LOWORD(lParam), HIWORD(lParam));
}
return 0;
}
HRESULT CMozillaBrowser::OnDraw(ATL_DRAWINFO& di)
{
if (m_pIWebShell == nsnull)
{
RECT& rc = *(RECT*)di.prcBounds;
Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
DrawText(di.hdcDraw, _T("Mozilla Browser (no window)"), -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
static NS_DEFINE_IID(kWebShellCID, NS_WEB_SHELL_CID);
HRESULT CMozillaBrowser::CreateWebShell()
{
if (m_pIWebShell != nsnull)
{
return E_UNEXPECTED;
}
RECT rcLocation;
GetClientRect(&rcLocation);
nsresult rv;
rv = nsRepository::CreateInstance(kWebShellCID, nsnull,
kIWebShellIID,
(void**)&m_pIWebShell);
if (NS_OK != rv)
{
return E_FAIL;
}
nsRect r;
r.x = 0;
r.y = 0;
r.width = rcLocation.right - rcLocation.left;
r.height = rcLocation.bottom - rcLocation.top;
PRBool aAllowPlugins = PR_FALSE;
rv = m_pIWebShell->Init(m_hWnd,
r.x, r.y,
r.width, r.height,
nsScrollPreference_kAuto, aAllowPlugins);
// Create the container object
m_pWebShellContainer = new CWebShellContainer;
m_pWebShellContainer->AddRef();
m_pIWebShell->SetContainer((nsIWebShellContainer*) m_pWebShellContainer);
// m_pIWebShell->SetObserver((nsIStreamObserver*)this);
// m_pIWebShell->SetPrefs(aPrefs);
m_pIWebShell->Show();
// TODO
// -- remove
// Use the IWebBrowser::Navigate() method
USES_CONVERSION;
LPOLESTR pszUrl = T2OLE(_T("http://www.mozilla.org"));
BSTR bstrUrl = ::SysAllocString(pszUrl);
Navigate(bstrUrl, NULL, NULL, NULL, NULL);
::SysFreeString(bstrUrl);
// -- remove
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// IWebBrowser
HRESULT STDMETHODCALLTYPE CMozillaBrowser::GoBack(void)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
if (m_pIWebShell->CanBack())
{
m_pIWebShell->Back();
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::GoForward(void)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
if (m_pIWebShell->CanForward())
{
m_pIWebShell->Forward();
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::GoHome(void)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO find and navigate to the home page somehow
USES_CONVERSION;
Navigate(T2OLE(_T("http://home.netscape.com")), NULL, NULL, NULL, NULL);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::GoSearch(void)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO find and navigate to the search page somehow
USES_CONVERSION;
Navigate(T2OLE(_T("http://search.netscape.com")), NULL, NULL, NULL, NULL);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate(BSTR URL, VARIANT __RPC_FAR *Flags, VARIANT __RPC_FAR *TargetFrameName, VARIANT __RPC_FAR *PostData, VARIANT __RPC_FAR *Headers)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// Extract the URL parameter
nsString sUrl;
if (URL == NULL)
{
// ASSERT(0);
return E_INVALIDARG;
}
else
{
USES_CONVERSION;
sUrl = OLE2A(URL);
}
// Extract the launch flags parameter
LONG lFlags = 0;
if (Flags)
{
CComVariant vFlags;
if (VariantChangeType(Flags, &vFlags, 0, VT_I4) != S_OK)
{
return E_INVALIDARG;
}
lFlags = vFlags.lVal;
}
// Extract the target frame parameter
nsString sTargetFrame;
if (TargetFrameName)
{
USES_CONVERSION;
CComVariant vTargetFrame;
if (VariantChangeType(TargetFrameName, &vTargetFrame, 0, VT_BSTR) != S_OK)
{
return E_INVALIDARG;
}
sTargetFrame = nsString(OLE2A(vTargetFrame.bstrVal));
}
// Extract the post data parameter
nsString sPostData;
if (PostData)
{
USES_CONVERSION;
CComVariant vPostData;
if (VariantChangeType(PostData, &vPostData, 0, VT_BSTR) != S_OK)
{
return E_INVALIDARG;
}
sPostData = nsString(OLE2A(vPostData.bstrVal));
}
// TODO Extract the headers parameter
PRBool bModifyHistory = PR_TRUE;
// Check the navigation flags
if (lFlags & navOpenInNewWindow)
{
// TODO open in new window?
}
if (lFlags & navNoHistory)
{
// Disable history
bModifyHistory = PR_FALSE;
}
if (lFlags & navNoReadFromCache)
{
// TODO disable read from cache
}
if (lFlags & navNoWriteToCache)
{
// TODO disable write to cache
}
// Create post data from string
nsIPostData *pIPostData = nsnull;
// NS_NewPostData(PR_FALSE, sPostData, &pIPostData);
// TODO find the correct target frame
// Load the URL
m_pIWebShell->LoadURL(sUrl, pIPostData, bModifyHistory);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::Refresh(void)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// Reload the page
CComVariant vRefreshType(REFRESH_NORMAL);
return Refresh2(&vRefreshType);
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::Refresh2(VARIANT __RPC_FAR *Level)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO check specified type
nsReloadType type = nsReload;
m_pIWebShell->Reload(type);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::Stop()
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
m_pIWebShell->Stop();
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Application(IDispatch __RPC_FAR *__RPC_FAR *ppDisp)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Parent(IDispatch __RPC_FAR *__RPC_FAR *ppDisp)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Container(IDispatch __RPC_FAR *__RPC_FAR *ppDisp)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Document(IDispatch __RPC_FAR *__RPC_FAR *ppDisp)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_TopLevelContainer(VARIANT_BOOL __RPC_FAR *pBool)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Type(BSTR __RPC_FAR *Type)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Left(long __RPC_FAR *pl)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Left(long Left)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Top(long __RPC_FAR *pl)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Top(long Top)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Width(long __RPC_FAR *pl)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Width(long Width)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Height(long __RPC_FAR *pl)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Height(long Height)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_LocationName(BSTR __RPC_FAR *LocationName)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_LocationURL(BSTR __RPC_FAR *LocationURL)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Busy(VARIANT_BOOL __RPC_FAR *pBool)
{
if (m_pIWebShell == nsnull)
{
return E_UNEXPECTED;
}
// TODO
return E_NOTIMPL;
}