16 #ifndef H_COMJAVASCRIPTOBJECT
17 #define H_COMJAVASCRIPTOBJECT
19 #include "JSAPI_IDispatchEx.h"
20 #include "ShareableReference.h"
21 #include <boost/make_shared.hpp>
25 class ActiveXBrowserHost;
27 typedef boost::shared_ptr<FB::ShareableReference<IDispatchEx> > SharedIDispatchRef;
28 typedef boost::weak_ptr<FB::ShareableReference<IDispatchEx> > WeakIDispatchRef;
29 template <const GUID* pcls
id,
class ICurObjInterface, const IID* pi
id, const GUID* plib
id>
30 class ATL_NO_VTABLE COMJavascriptObject :
31 public CComObjectRootEx<CComMultiThreadModel>,
32 public CComCoClass<COMJavascriptObject<pclsid, ICurObjInterface, piid, plibid>, pclsid>,
34 public JSAPI_IDispatchEx<COMJavascriptObject<pclsid, ICurObjInterface, piid, plibid>, ICurObjInterface, piid>,
35 public IObjectSafetyImpl<COMJavascriptObject<pclsid, ICurObjInterface, piid, plibid>, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA >,
38 public IProvideClassInfo2Impl<pclsid, NULL, plibid>
41 typedef COMJavascriptObject<pclsid, ICurObjInterface, piid, plibid> CurObjType;
42 COMJavascriptObject(
void)
43 : JSAPI_IDispatchEx<CurObjType, ICurObjInterface, piid>(
"SUBOBJECT")
45 m_sharedRef = boost::make_shared<FB::ShareableReference<IDispatchEx> >(
this);
47 virtual ~COMJavascriptObject(
void)
51 static IDispatchEx *NewObject(ActiveXBrowserHostPtr host,
FB::JSAPIWeakPtr api,
bool auto_release =
false)
53 CComObject<CurObjType> *obj;
54 HRESULT hr = CComObject<CurObjType>::CreateInstance(&obj);
56 obj->setAPI(api, host);
57 obj->m_autoRelease = auto_release;
62 host->retainJSAPIPtr(tmp);
66 hr = obj->QueryInterface(IID_IDispatchEx, (
void **)&retval);
71 const WeakIDispatchRef getWeakReference() {
return m_sharedRef; }
73 DECLARE_NOT_AGGREGATABLE(CurObjType)
75 BEGIN_COM_MAP(CurObjType)
76 COM_INTERFACE_ENTRY_IID((*piid), ICurObjInterface)
77 COM_INTERFACE_ENTRY(IDispatch)
78 COM_INTERFACE_ENTRY(IDispatchEx)
79 COM_INTERFACE_ENTRY(IFireBreathObject)
80 COM_INTERFACE_ENTRY(IObjectSafety)
81 COM_INTERFACE_ENTRY(IConnectionPointContainer)
82 COM_INTERFACE_ENTRY(IConnectionPoint)
83 COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)
84 COM_INTERFACE_ENTRY(IProvideClassInfo)
85 COM_INTERFACE_ENTRY(IProvideClassInfo2)
88 DECLARE_PROTECT_FINAL_CONSTRUCT()
90 HRESULT FinalConstruct()
102 ActiveXBrowserHostPtr host = getHost();
104 host->releaseJSAPIPtr(api);
111 SharedIDispatchRef m_sharedRef;
boost::weak_ptr< FB::JSAPI > JSAPIWeakPtr
Defines an alias for a JSAPI weak_ptr (you should never use a JSAPI* directly)
boost::shared_ptr< FB::JSAPI > JSAPIPtr
Defines an alias for a JSAPI shared_ptr (you should never use a JSAPI* directly)