diff --git a/mozilla/webshell/embed/ActiveX/ActiveXPlugin.cpp b/mozilla/webshell/embed/ActiveX/ActiveXPlugin.cpp index 6232794a0d2..8e36c823f33 100644 --- a/mozilla/webshell/embed/ActiveX/ActiveXPlugin.cpp +++ b/mozilla/webshell/embed/ActiveX/ActiveXPlugin.cpp @@ -17,10 +17,6 @@ */ #include "stdafx.h" -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); -static NS_DEFINE_IID(kIPluginIID, NS_IPLUGIN_IID); - static CActiveXPlugin *gpFactory = NULL; extern "C" NS_EXPORT nsresult diff --git a/mozilla/webshell/embed/ActiveX/ActiveXPluginInstance.cpp b/mozilla/webshell/embed/ActiveX/ActiveXPluginInstance.cpp index 4e65b8c7249..c3c2220eb9c 100644 --- a/mozilla/webshell/embed/ActiveX/ActiveXPluginInstance.cpp +++ b/mozilla/webshell/embed/ActiveX/ActiveXPluginInstance.cpp @@ -17,11 +17,6 @@ */ #include "stdafx.h" -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kIPluginInstanceIID, NS_IPLUGININSTANCE_IID); -//static NS_DEFINE_IID(kIEventHandlerIID, NS_IEVENTHANDLER_IID); - - /////////////////////////////////////////////////////////////////////////////// CActiveXPluginInstance::CActiveXPluginInstance() diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp index 61466e3be16..88afba4177c 100644 --- a/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp +++ b/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp @@ -19,7 +19,6 @@ #include "IEHtmlDocument.h" #include "IEHtmlElementCollection.h" -static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID); CIEHtmlDocument::CIEHtmlDocument() { @@ -51,6 +50,7 @@ HRESULT STDMETHODCALLTYPE CIEHtmlDocument::get_Script(IDispatch __RPC_FAR *__RPC /////////////////////////////////////////////////////////////////////////////// // IHTMLDocument2 methods + HRESULT STDMETHODCALLTYPE CIEHtmlDocument::get_all(IHTMLElementCollection __RPC_FAR *__RPC_FAR *p) { // Validate parameters diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp index 87e370969f0..6b6c470688f 100644 --- a/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp +++ b/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp @@ -21,8 +21,6 @@ #include "IEHtmlElement.h" #include "IEHtmlElementCollection.h" -static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID); - CIEHtmlElement::CIEHtmlElement() { } diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp index 1e711d0c1f4..834f327c9e3 100644 --- a/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp +++ b/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp @@ -73,6 +73,10 @@ HRESULT CIEHtmlElementCollection::CreateFromParentNode(CIEHtmlNode *pParentNode, { nsIDOMNode *pChildNode = nsnull; pIDOMNodeList->Item(i, &pChildNode); + if (pChildNode == nsnull) + { + continue; + } // Create an equivalent IE element CIEHtmlElementInstance *pElement = NULL; @@ -83,11 +87,7 @@ HRESULT CIEHtmlElementCollection::CreateFromParentNode(CIEHtmlNode *pParentNode, pElement->SetParentNode(pCollection->m_pIDispParent); pCollection->AddNode(pElement); } - - if (pChildNode) - { - pChildNode->Release(); - } + pChildNode->Release(); } pIDOMNodeList->Release(); } @@ -104,8 +104,10 @@ HRESULT CIEHtmlElementCollection::AddNode(IDispatch *pNode) { if (pNode == NULL) { + NG_ASSERT(0); return E_INVALIDARG; } + m_cNodeList.push_back(pNode); return S_OK; @@ -146,6 +148,7 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::get_length(long __RPC_FAR *p return S_OK; } +typedef CComObject > > CComEnumVARIANT; HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::get__newEnum(IUnknown __RPC_FAR *__RPC_FAR *p) { @@ -155,8 +158,50 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::get__newEnum(IUnknown __RPC_ } *p = NULL; - // TODO Create a new IEnumVARIANT containing each member of the collection - return E_NOTIMPL; + + // Create a new IEnumVARIANT object + CComEnumVARIANT *pEnumVARIANT = NULL; + CComEnumVARIANT::CreateInstance(&pEnumVARIANT); + if (pEnumVARIANT == NULL) + { + NG_ASSERT(0); + return E_OUTOFMEMORY; + } + + int nObject; + int nObjects = m_cNodeList.size(); + + // Create an array of VARIANTs + VARIANT *avObjects = new VARIANT[nObjects]; + if (avObjects == NULL) + { + NG_ASSERT(0); + return E_OUTOFMEMORY; + } + + // Copy the contents of the collection to the array + for (nObject = 0; nObject < nObjects; nObject++) + { + VARIANT *pVariant = &avObjects[nObject]; + IUnknown *pUnkObject = m_cNodeList[nObject]; + VariantInit(pVariant); + pVariant->vt = VT_UNKNOWN; + pVariant->punkVal = pUnkObject; + pUnkObject->AddRef(); + } + + // Copy the variants to the enumeration object + pEnumVARIANT->Init(&avObjects[0], &avObjects[nObjects], NULL, AtlFlagCopy); + + // Cleanup the array + for (nObject = 0; nObject < nObjects; nObject++) + { + VARIANT *pVariant = &avObjects[nObject]; + VariantClear(pVariant); + } + delete []avObjects; + + return pEnumVARIANT->QueryInterface(IID_IUnknown, (void**) p); } @@ -166,10 +211,15 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::item(VARIANT name, VARIANT i { return E_INVALIDARG; } + *pdisp = NULL; + // Note: parameter "name" contains the index unless its a string + // in which case index does. Sensible huh? + CComVariant vIndex; - if (SUCCEEDED(vIndex.ChangeType(VT_I4, &index))) + if (SUCCEEDED(vIndex.ChangeType(VT_I4, &name)) || + SUCCEEDED(vIndex.ChangeType(VT_I4, &index))) { // Test for stupid values int nIndex = vIndex.lVal; @@ -210,9 +260,12 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::tags(VARIANT tagName, IDispa { return E_INVALIDARG; } + *pdisp = NULL; + // TODO // iterate through collection looking for elements with matching tags + return E_NOTIMPL; } diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlNode.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlNode.cpp index e0e6873fe3d..c8eb96c0751 100644 --- a/mozilla/webshell/embed/ActiveX/IEHtmlNode.cpp +++ b/mozilla/webshell/embed/ActiveX/IEHtmlNode.cpp @@ -18,9 +18,6 @@ #include "stdafx.h" #include "IEHtmlNode.h" -static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID); -static NS_DEFINE_IID(kIDOMElementIID, NS_IDOMELEMENT_IID); - CIEHtmlNode::CIEHtmlNode() { m_pIDOMNode = nsnull; diff --git a/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp b/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp index 9815f904a00..d8fe02ea78e 100644 --- a/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp +++ b/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp @@ -32,12 +32,6 @@ static const std::string c_szPrefsFile = "prefs.js"; static const std::string c_szPrefsHomePage = "browser.startup.homepage"; static const std::string c_szDefaultPage = "resource://res/MozillaControl.html"; - -static NS_DEFINE_IID(kIEventQueueServiceIID, NS_IEVENTQUEUESERVICE_IID); -static NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); -static NS_DEFINE_IID(kIDocumentViewerIID, NS_IDOCUMENT_VIEWER_IID); -static NS_DEFINE_IID(kIDOMDocumentIID, NS_IDOMDOCUMENT_IID); - ///////////////////////////////////////////////////////////////////////////// // CMozillaBrowser diff --git a/mozilla/webshell/embed/ActiveX/MozillaControl.dsp b/mozilla/webshell/embed/ActiveX/MozillaControl.dsp index 6f2290121d2..b4bc28181b7 100644 --- a/mozilla/webshell/embed/ActiveX/MozillaControl.dsp +++ b/mozilla/webshell/embed/ActiveX/MozillaControl.dsp @@ -98,6 +98,10 @@ SOURCE=.\ControlSiteIPFrame.cpp # End Source File # Begin Source File +SOURCE=.\guids.cpp +# End Source File +# Begin Source File + SOURCE=.\IEHtmlDocument.cpp # End Source File # Begin Source File @@ -190,6 +194,10 @@ SOURCE=.\CPMozillaControl.h # End Source File # Begin Source File +SOURCE=.\guids.h +# End Source File +# Begin Source File + SOURCE=.\IEHtmlDocument.h # End Source File # Begin Source File diff --git a/mozilla/webshell/embed/ActiveX/StdAfx.h b/mozilla/webshell/embed/ActiveX/StdAfx.h index 2f7f6c50bb4..6adf3cbb162 100644 --- a/mozilla/webshell/embed/ActiveX/StdAfx.h +++ b/mozilla/webshell/embed/ActiveX/StdAfx.h @@ -125,6 +125,8 @@ typedef std::basic_string tstring; #include "ActiveXPluginInstance.h" #endif +#include "guids.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 f0d26e9ad80..6eb4d2b4be3 100644 --- a/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp +++ b/mozilla/webshell/embed/ActiveX/WebShellContainer.cpp @@ -22,13 +22,6 @@ #include "WebShellContainer.h" - -static NS_DEFINE_IID(kIWebShellContainerIID, NS_IWEB_SHELL_CONTAINER_IID); -static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID); -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -/* static NS_DEFINE_IID(kINetSupportIID, NS_INETSUPPORT_IID); */ - - CWebShellContainer::CWebShellContainer(CMozillaBrowser *pOwner) { NS_INIT_REFCNT(); @@ -200,10 +193,6 @@ CWebShellContainer::EndLoadURL(nsIWebShell* aShell, const PRUnichar* aURL, PRInt m_pEvents2->Fire_NavigateComplete2(m_pOwner, &vURL); - // Fire a DownloadComplete event - m_pEvents1->Fire_DownloadComplete(); - m_pEvents2->Fire_DownloadComplete(); - m_pOwner->m_bBusy = FALSE; SysFreeString(bstrURL); @@ -277,5 +266,10 @@ CWebShellContainer::OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnicha { USES_CONVERSION; NG_TRACE(_T("CWebShellContainer::OnStopBinding(..., %d, \"%s\")\n"), (int) aStatus, W2T((PRUnichar *) aMsg)); + + // Fire a DownloadComplete event + m_pEvents1->Fire_DownloadComplete(); + m_pEvents2->Fire_DownloadComplete(); + return NS_OK; } diff --git a/mozilla/webshell/embed/ActiveX/guids.cpp b/mozilla/webshell/embed/ActiveX/guids.cpp new file mode 100644 index 00000000000..3cdf0cf2d1f --- /dev/null +++ b/mozilla/webshell/embed/ActiveX/guids.cpp @@ -0,0 +1,37 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +#include "stdafx.h" + +// Class IDs +NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); + +// Interface IDs +NS_DEFINE_IID(kIEventQueueServiceIID, NS_IEVENTQUEUESERVICE_IID); +NS_DEFINE_IID(kIDocumentViewerIID, NS_IDOCUMENT_VIEWER_IID); +NS_DEFINE_IID(kIDOMDocumentIID, NS_IDOMDOCUMENT_IID); +NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID); +NS_DEFINE_IID(kIDOMElementIID, NS_IDOMELEMENT_IID); +NS_DEFINE_IID(kIWebShellContainerIID, NS_IWEB_SHELL_CONTAINER_IID); +NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID); +NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + +#ifdef USE_PLUGIN +NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); +NS_DEFINE_IID(kIPluginIID, NS_IPLUGIN_IID); +NS_DEFINE_IID(kIPluginInstanceIID, NS_IPLUGININSTANCE_IID); +#endif diff --git a/mozilla/webshell/embed/ActiveX/guids.h b/mozilla/webshell/embed/ActiveX/guids.h new file mode 100644 index 00000000000..d4b4edb316c --- /dev/null +++ b/mozilla/webshell/embed/ActiveX/guids.h @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +#ifndef GUIDS_H +#define GUIDS_H + +#define NS_EXTERN_IID(_name) \ + extern const nsIID _name; + +// Class IDs +NS_EXTERN_IID(kEventQueueServiceCID); + +// Interface IDs +NS_EXTERN_IID(kIEventQueueServiceIID); +NS_EXTERN_IID(kIDocumentViewerIID); +NS_EXTERN_IID(kIDOMDocumentIID); +NS_EXTERN_IID(kIDOMNodeIID); +NS_EXTERN_IID(kIDOMElementIID); +NS_EXTERN_IID(kIWebShellContainerIID); +NS_EXTERN_IID(kIStreamObserverIID); +NS_EXTERN_IID(kISupportsIID); + +#ifdef USE_PLUGIN +NS_EXTERN_IID(kIFactoryIID); +NS_EXTERN_IID(kIPluginIID); +NS_EXTERN_IID(kIPluginInstanceIID); +#endif + +#endif \ No newline at end of file diff --git a/mozilla/webshell/embed/ActiveX/makefile.win b/mozilla/webshell/embed/ActiveX/makefile.win index 882b5051aed..17ab9a33f46 100644 --- a/mozilla/webshell/embed/ActiveX/makefile.win +++ b/mozilla/webshell/embed/ActiveX/makefile.win @@ -35,6 +35,7 @@ DEFFILE = MozillaControl.def OBJS = \ .\$(OBJDIR)\StdAfx.obj \ + .\$(OBJDIR)\guids.obj \ .\$(OBJDIR)\nsSetupRegistry.obj \ .\$(OBJDIR)\MozillaControl.obj \ .\$(OBJDIR)\MozillaBrowser.obj \ @@ -142,6 +143,8 @@ MozillaBrowser.cpp \ WebShellContainer.cpp \ StdAfx.cpp: StdAfx.h MozillaControl.h MozillaBrowser.h WebShellContainer.h +guids.cpp: StdAfx.h guids.h + clobber:: -regsvr32 /s /c /u $(DIST)\bin\$(DLLNAME).dll