diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp
index 95a54e1d019..2e856b7ef79 100644
--- a/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp
+++ b/mozilla/webshell/embed/ActiveX/IEHtmlDocument.cpp
@@ -19,6 +19,8 @@
#include "IEHtmlDocument.h"
#include "IEHtmlElementCollection.h"
+static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID);
+
CIEHtmlDocument::CIEHtmlDocument()
{
}
@@ -39,6 +41,18 @@ HRESULT STDMETHODCALLTYPE CIEHtmlDocument::get_Script(IDispatch __RPC_FAR *__RPC
// IHTMLDocument2 methods
HRESULT STDMETHODCALLTYPE CIEHtmlDocument::get_all(IHTMLElementCollection __RPC_FAR *__RPC_FAR *p)
{
+ // Get the associated document
+ nsIDOMNode *pIDOMNode = nsnull;
+ if (m_pIDOMNode != nsnull)
+ {
+ m_pIDOMNode->QueryInterface(kIDOMNodeIID, (void **) &pIDOMNode);
+ }
+ if (pIDOMNode == nsnull)
+ {
+ return E_UNEXPECTED;
+ }
+
+ // Validate parameters
if (p == NULL)
{
return E_INVALIDARG;
@@ -47,15 +61,15 @@ HRESULT STDMETHODCALLTYPE CIEHtmlDocument::get_all(IHTMLElementCollection __RPC_
*p = NULL;
CIEHtmlElementCollectionInstance *pCollection = NULL;
- CIEHtmlElementCollectionInstance::CreateInstance(&pCollection);
- if (pCollection == NULL)
+ CIEHtmlElementCollection::CreateFromParentNode(pIDOMNode, (CIEHtmlElementCollection **) &pCollection);
+ if (pCollection)
{
- return E_OUTOFMEMORY;
+ pCollection->AddRef();
+ *p = pCollection;
}
- // TODO get everything from NG and make some elements!
+ pIDOMNode->Release();
- pCollection->QueryInterface(IID_IHTMLElementCollection, (void **) p);
return S_OK;
}
diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlDocument.h b/mozilla/webshell/embed/ActiveX/IEHtmlDocument.h
index 71d105850a6..6cb069b06d6 100644
--- a/mozilla/webshell/embed/ActiveX/IEHtmlDocument.h
+++ b/mozilla/webshell/embed/ActiveX/IEHtmlDocument.h
@@ -18,7 +18,9 @@
#ifndef IEHTMLDOCUMENT_H
#define IEHTMLDOCUMENT_H
-class CIEHtmlDocument : public CComObjectRootEx,
+#include "IEHtmlNode.h"
+
+class CIEHtmlDocument : public CIEHtmlNode,
public IDispatchImpl
{
public:
diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp
index 0fd51dcf29a..aef143ef168 100644
--- a/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp
+++ b/mozilla/webshell/embed/ActiveX/IEHtmlElement.cpp
@@ -19,7 +19,9 @@
#include "stdafx.h"
#include "IEHtmlElement.h"
+#include "IEHtmlElementCollection.h"
+static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID);
CIEHtmlElement::CIEHtmlElement()
{
@@ -30,7 +32,6 @@ CIEHtmlElement::~CIEHtmlElement()
{
}
-
///////////////////////////////////////////////////////////////////////////////
// IHTMLElement implementation
@@ -56,7 +57,13 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElement::put_className(BSTR v)
HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_className(BSTR __RPC_FAR *p)
{
- return E_NOTIMPL;
+ if (p == NULL)
+ {
+ return E_INVALIDARG;
+ }
+ // TODO
+ *p = SysAllocString(OLESTR(""));
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE CIEHtmlElement::put_id(BSTR v)
@@ -66,12 +73,28 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElement::put_id(BSTR v)
HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_id(BSTR __RPC_FAR *p)
{
- return E_NOTIMPL;
+ if (p == NULL)
+ {
+ return E_INVALIDARG;
+ }
+ // TODO
+ *p = SysAllocString(OLESTR(""));
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_tagName(BSTR __RPC_FAR *p)
{
- return E_NOTIMPL;
+ if (p == NULL)
+ {
+ return E_INVALIDARG;
+ }
+
+ nsString sNodeName;
+ m_pIDOMNode->GetNodeName(sNodeName);
+
+ USES_CONVERSION;
+ *p = SysAllocString(W2COLE((const PRUnichar *) sNodeName));
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_parentElement(IHTMLElement __RPC_FAR *__RPC_FAR *p)
@@ -466,6 +489,35 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_children(IDispatch __RPC_FAR *__RP
HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_all(IDispatch __RPC_FAR *__RPC_FAR *p)
{
- return E_NOTIMPL;
+ // Get the associated document
+ nsIDOMNode *pIDOMNode = nsnull;
+ if (m_pIDOMNode != nsnull)
+ {
+ m_pIDOMNode->QueryInterface(kIDOMNodeIID, (void **) &pIDOMNode);
+ }
+ if (pIDOMNode == nsnull)
+ {
+ return E_UNEXPECTED;
+ }
+
+ // Validate parameters
+ if (p == NULL)
+ {
+ return E_INVALIDARG;
+ }
+
+ *p = NULL;
+
+ CIEHtmlElementCollectionInstance *pCollection = NULL;
+ CIEHtmlElementCollection::CreateFromParentNode(pIDOMNode, (CIEHtmlElementCollection **) &pCollection);
+ if (pCollection)
+ {
+ pCollection->AddRef();
+ *p = pCollection;
+ }
+
+ pIDOMNode->Release();
+
+ return S_OK;
}
diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlElement.h b/mozilla/webshell/embed/ActiveX/IEHtmlElement.h
index 4a4f3d291f5..fdb455decf0 100644
--- a/mozilla/webshell/embed/ActiveX/IEHtmlElement.h
+++ b/mozilla/webshell/embed/ActiveX/IEHtmlElement.h
@@ -18,13 +18,23 @@
#ifndef IEHTMLELEMENT_H
#define IEHTMLELEMENT_H
-class CIEHtmlElement : public CComObjectRootEx,
+#include "IEHtmlNode.h"
+
+class CIEHtmlElement : public CIEHtmlNode,
public IDispatchImpl
{
public:
CIEHtmlElement();
+protected:
virtual ~CIEHtmlElement();
+public:
+
+BEGIN_COM_MAP(CIEHtmlElement)
+ COM_INTERFACE_ENTRY_IID(IID_IDispatch, IHTMLElement)
+ COM_INTERFACE_ENTRY_IID(IID_IHTMLElement, IHTMLElement)
+END_COM_MAP()
+
// Implementation of IHTMLElement
virtual HRESULT STDMETHODCALLTYPE setAttribute(BSTR strAttributeName, VARIANT AttributeValue, LONG lFlags);
virtual HRESULT STDMETHODCALLTYPE getAttribute(BSTR strAttributeName, LONG lFlags, VARIANT __RPC_FAR *AttributeValue);
@@ -119,7 +129,6 @@ public:
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IHTMLElement) \
COM_INTERFACE_ENTRY_IID(IID_IHTMLElement, IHTMLElement)
-
typedef CComObject CIEHtmlElementInstance;
#endif
\ No newline at end of file
diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp b/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp
index de0d5cf1f77..f84d9d1bcc6 100644
--- a/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp
+++ b/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.cpp
@@ -16,6 +16,7 @@
* Reserved.
*/
#include "stdafx.h"
+#include "IEHtmlElement.h"
#include "IEHtmlElementCollection.h"
CIEHtmlElementCollection::CIEHtmlElementCollection()
@@ -26,6 +27,75 @@ CIEHtmlElementCollection::~CIEHtmlElementCollection()
{
}
+
+HRESULT CIEHtmlElementCollection::CreateFromParentNode(nsIDOMNode *pParentNode, CIEHtmlElementCollection **pInstance)
+{
+ if (pInstance == NULL)
+ {
+ return E_INVALIDARG;
+ }
+
+ if (pParentNode == nsnull)
+ {
+ return E_INVALIDARG;
+ }
+
+ *pInstance = NULL;
+
+ CIEHtmlElementCollectionInstance *pCollection = NULL;
+ CIEHtmlElementCollectionInstance::CreateInstance(&pCollection);
+
+ // Get elements
+ nsIDOMNodeList *pIDOMNodeList = nsnull;
+ pParentNode->GetChildNodes(&pIDOMNodeList);
+ if (pIDOMNodeList)
+ {
+ PRUint32 aLength = 0;
+ pIDOMNodeList->GetLength(&aLength);
+ for (PRUint32 i = 0; i < aLength; i++)
+ {
+ nsIDOMNode *pChildNode = nsnull;
+ pIDOMNodeList->Item(i, &pChildNode);
+
+ // Create an equivalent IE element
+ CIEHtmlElementInstance *pElement = NULL;
+ CIEHtmlElementInstance::CreateInstance(&pElement);
+ if (pElement)
+ {
+ pElement->SetDOMNode(pChildNode);
+ pCollection->AddNode(pElement);
+ }
+
+ if (pChildNode)
+ {
+ pChildNode->Release();
+ }
+ }
+ pIDOMNodeList->Release();
+ }
+
+ *pInstance = pCollection;
+
+ return S_OK;
+}
+
+
+HRESULT CIEHtmlElementCollection::AddNode(IDispatch *pNode)
+{
+ if (pNode == NULL)
+ {
+ return E_INVALIDARG;
+ }
+ m_cNodeList.push_back(pNode);
+
+ return S_OK;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// IHTMLElementCollection methods
+
+
HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::toString(BSTR __RPC_FAR *String)
{
if (String == NULL)
@@ -36,31 +106,57 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::toString(BSTR __RPC_FAR *Str
return S_OK;
}
+
HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::put_length(long v)
{
return E_NOTIMPL;
}
+
HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::get_length(long __RPC_FAR *p)
{
if (p == NULL)
{
return E_INVALIDARG;
}
- *p = m_cElementList.size();
+ *p = m_cNodeList.size();
return S_OK;
}
+
HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::get__newEnum(IUnknown __RPC_FAR *__RPC_FAR *p)
{
*p = NULL;
return E_NOTIMPL;
}
+
HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::item(VARIANT name, VARIANT index, IDispatch __RPC_FAR *__RPC_FAR *pdisp)
{
+ CComVariant vIndex;
+ if (FAILED(vIndex.ChangeType(VT_I4, &index)))
+ {
+ return E_INVALIDARG;
+ }
+
+ int nIndex = vIndex.lVal;
+ if (nIndex < 0 || nIndex >= m_cNodeList.size())
+ {
+ return E_INVALIDARG;
+ }
+
*pdisp = NULL;
- return E_NOTIMPL;
+
+ IDispatch *pNode = m_cNodeList[nIndex];
+ if (pNode == NULL)
+ {
+ NG_ASSERT(0);
+ return E_UNEXPECTED;
+ }
+
+ pNode->QueryInterface(IID_IDispatch, (void **) pdisp);
+
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE CIEHtmlElementCollection::tags(VARIANT tagName, IDispatch __RPC_FAR *__RPC_FAR *pdisp)
diff --git a/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.h b/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.h
index c52f0efb863..ee955ac78b2 100644
--- a/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.h
+++ b/mozilla/webshell/embed/ActiveX/IEHtmlElementCollection.h
@@ -15,27 +15,33 @@
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
-#ifndef IEHTMLELEMENTCOLLECTION_H
-#define IEHTMLELEMENTCOLLECTION_H
+#ifndef IEHTMLNODECOLLECTION_H
+#define IEHTMLNODECOLLECTION_H
-#include "IEHtmlElement.h"
+#include "IEHtmlNode.h"
class CIEHtmlElementCollection : public CComObjectRootEx,
- public IDispatchImpl
+ public IDispatchImpl
{
- std::list< CIEHtmlElement * > m_cElementList;
+ std::vector< CComQIPtr > m_cNodeList;
public:
CIEHtmlElementCollection();
protected:
virtual ~CIEHtmlElementCollection();
+public:
+ // Adds a node to the collection
+ virtual HRESULT AddNode(IDispatch *pNode);
+
+ // Helper method creates a collection from a parent node
+ static HRESULT CreateFromParentNode(nsIDOMNode *pParentNode, CIEHtmlElementCollection **pInstance);
+
BEGIN_COM_MAP(CIEHtmlElementCollection)
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IHTMLElementCollection)
COM_INTERFACE_ENTRY_IID(IID_IHTMLElementCollection, IHTMLElementCollection)
END_COM_MAP()
-
// IHTMLElementCollection methods
virtual HRESULT STDMETHODCALLTYPE toString(BSTR __RPC_FAR *String);
virtual HRESULT STDMETHODCALLTYPE put_length(long v);
@@ -47,5 +53,4 @@ END_COM_MAP()
typedef CComObject CIEHtmlElementCollectionInstance;
-
#endif
\ No newline at end of file
diff --git a/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp b/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp
index 05ff1c5b3ed..9815f904a00 100644
--- a/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp
+++ b/mozilla/webshell/embed/ActiveX/MozillaBrowser.cpp
@@ -730,10 +730,10 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate(BSTR URL, VARIANT __RPC_FAR
// Extract the launch flags parameter
LONG lFlags = 0;
- if (Flags)
+ if (Flags && Flags->vt != VT_EMPTY && Flags->vt != VT_NULL)
{
CComVariant vFlags;
- if (VariantChangeType(Flags, &vFlags, 0, VT_I4) != S_OK)
+ if (vFlags.ChangeType(VT_I4, Flags) != S_OK)
{
NG_ASSERT(0);
return E_INVALIDARG;
@@ -966,6 +966,13 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Document(IDispatch __RPC_FAR *__R
*ppDisp = NULL;
+ // Get hold of the DOM document
+ nsIDOMDocument *pIDOMDocument = nsnull;
+ if (FAILED(GetDOMDocument(&pIDOMDocument)) || pIDOMDocument == nsnull)
+ {
+ return E_UNEXPECTED;
+ }
+
CIEHtmlDocumentInstance *pDocument = NULL;
CIEHtmlDocumentInstance::CreateInstance(&pDocument);
if (pDocument == NULL)
@@ -974,8 +981,10 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Document(IDispatch __RPC_FAR *__R
}
pDocument->QueryInterface(IID_IDispatch, (void **) ppDisp);
+ pDocument->SetDOMNode(pIDOMDocument);
+ pIDOMDocument->Release();
- return E_NOINTERFACE;
+ return S_OK;
}
HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_TopLevelContainer(VARIANT_BOOL __RPC_FAR *pBool)
@@ -1635,6 +1644,12 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate2(VARIANT __RPC_FAR *URL, VAR
return E_UNEXPECTED;
}
+ if (URL == NULL)
+ {
+ NG_ASSERT(0);
+ return E_INVALIDARG;
+ }
+
CComVariant vURLAsString;
if (vURLAsString.ChangeType(VT_BSTR, URL) != S_OK)
{
diff --git a/mozilla/webshell/embed/ActiveX/MozillaControl.dsp b/mozilla/webshell/embed/ActiveX/MozillaControl.dsp
index e6bef2ce951..6f2290121d2 100644
--- a/mozilla/webshell/embed/ActiveX/MozillaControl.dsp
+++ b/mozilla/webshell/embed/ActiveX/MozillaControl.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="MozillaControl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) External Target" 0x0106
@@ -17,13 +17,12 @@ CFG=MozillaControl - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "MozillaControl - Win32 Release" (based on\
- "Win32 (x86) External Target")
-!MESSAGE "MozillaControl - Win32 Debug" (based on\
- "Win32 (x86) External Target")
+!MESSAGE "MozillaControl - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "MozillaControl - Win32 Debug" (based on "Win32 (x86) External Target")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
@@ -111,6 +110,10 @@ SOURCE=.\IEHtmlElementCollection.cpp
# End Source File
# Begin Source File
+SOURCE=.\IEHtmlNode.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\LegacyPlugin.cpp
# End Source File
# Begin Source File
@@ -199,6 +202,10 @@ SOURCE=.\IEHtmlElementCollection.h
# End Source File
# Begin Source File
+SOURCE=.\IEHtmlNode.h
+# End Source File
+# Begin Source File
+
SOURCE=.\MozillaBrowser.h
# End Source File
# Begin Source File
diff --git a/mozilla/webshell/embed/ActiveX/StdAfx.h b/mozilla/webshell/embed/ActiveX/StdAfx.h
index c9cb182f16a..6078d7667fc 100644
--- a/mozilla/webshell/embed/ActiveX/StdAfx.h
+++ b/mozilla/webshell/embed/ActiveX/StdAfx.h
@@ -93,7 +93,10 @@ typedef long int32;
#include "nsCRT.h"
#include "nsIDocumentViewer.h"
+#include "nsIDOMNode.h"
+#include "nsIDOMNodeList.h"
#include "nsIDOMDocument.h"
+#include "nsIDOMElement.h"
// Mozilla control headers
#include "resource.h"
diff --git a/mozilla/webshell/embed/ActiveX/makefile.win b/mozilla/webshell/embed/ActiveX/makefile.win
index 85846e48f67..882b5051aed 100644
--- a/mozilla/webshell/embed/ActiveX/makefile.win
+++ b/mozilla/webshell/embed/ActiveX/makefile.win
@@ -42,8 +42,9 @@ OBJS = \
.\$(OBJDIR)\ControlSite.obj \
.\$(OBJDIR)\ControlSiteIPFrame.obj \
.\$(OBJDIR)\PropertyBag.obj \
- .\$(OBJDIR)\IEHtmlElement.obj \
+ .\$(OBJDIR)\IEHtmlNode.obj \
.\$(OBJDIR)\IEHtmlElementCollection.obj \
+ .\$(OBJDIR)\IEHtmlElement.obj \
.\$(OBJDIR)\IEHtmlDocument.obj \
!ifdef MOZ_ACTIVEX_PLUGIN_SUPPORT
.\$(OBJDIR)\ActiveXPlugin.obj \
@@ -94,7 +95,7 @@ LLIBS = $(MYLIBS) \
shell32.lib \
-SUBSYSTEM:windows
-LCFLAGS = /D "WIN32" /GX /FR
+LCFLAGS = /D "WIN32" /GX /FR /U "ClientWallet"
LFLAGS = /DLL
include <$(DEPTH)\config\rules.mak>
@@ -128,11 +129,13 @@ ControlSite.cpp \
ControlSiteIPFrame.cpp \
PropertyBag.cpp : StdAfx.h PropertyBag.h ControlSite.h ControlSiteIPFrame.h
-IEHtmlElement.cpp : StdAfx.h IEHtmlElement.h
+IEHtmlNode.cpp : StdAfx.h IEHtmlNode.h
IEHtmlElementCollection.cpp : StdAfx.h IEHtmlElementCollection.h
-IEHtmlDocument.cpp : StdAfx.h IEHtmlDocument.h
+IEHtmlElement.cpp : StdAfx.h IEHtmlNode.h IEHtmlElement.h
+
+IEHtmlDocument.cpp : StdAfx.h IEHtmlNode.h IEHtmlDocument.h
MozillaControl.cpp \
MozillaBrowser.cpp \