Index: chrome_frame/chrome_frame_activex.h |
=================================================================== |
--- chrome_frame/chrome_frame_activex.h (revision 0) |
+++ chrome_frame/chrome_frame_activex.h (revision 0) |
@@ -0,0 +1,140 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_FRAME_CHROME_FRAME_ACTIVEX_H_ |
+#define CHROME_FRAME_CHROME_FRAME_ACTIVEX_H_ |
+ |
+#include <atlbase.h> |
+#include <atlcom.h> |
+#include <atlctl.h> |
+ |
+#include <set> |
+#include <string> |
+ |
+#include "base/scoped_bstr_win.h" |
+#include "base/scoped_comptr_win.h" |
+#include "base/scoped_variant_win.h" |
+#include "chrome_frame/chrome_frame_activex_base.h" |
+#include "chrome_frame/com_type_info_holder.h" |
+#include "grit/chrome_frame_resources.h" |
+ |
+// Include without path to make GYP build see it. |
+#include "chrome_tab.h" // NOLINT |
+ |
+// ChromeFrameActivex: Implementation of the ActiveX control that is |
+// responsible for hosting a chrome frame, i.e. an iframe like widget which |
+// hosts the the chrome window. This object delegates to Chrome.exe |
+// (via the Chrome IPC-based automation mechanism) for the actual rendering. |
+class ATL_NO_VTABLE ChromeFrameActivex |
+ : public ChromeFrameActivexBase<ChromeFrameActivex, CLSID_ChromeFrame>, |
+ public IObjectSafetyImpl<ChromeFrameActivex, |
+ INTERFACESAFE_FOR_UNTRUSTED_CALLER | |
+ INTERFACESAFE_FOR_UNTRUSTED_DATA>, |
+ public IPersistPropertyBag { |
+ public: |
+ typedef ChromeFrameActivexBase<ChromeFrameActivex, CLSID_ChromeFrame> Base; |
+ ChromeFrameActivex(); |
+ ~ChromeFrameActivex(); |
+ |
+DECLARE_REGISTRY_RESOURCEID(IDR_CHROMEFRAME) |
+ |
+BEGIN_COM_MAP(ChromeFrameActivex) |
+ COM_INTERFACE_ENTRY(IObjectSafety) |
+ COM_INTERFACE_ENTRY(IPersistPropertyBag) |
+ COM_INTERFACE_ENTRY(IConnectionPointContainer) |
+ COM_INTERFACE_ENTRY_CHAIN(Base) |
+END_COM_MAP() |
+ |
+BEGIN_MSG_MAP(ChromeFrameActivex) |
+ MESSAGE_HANDLER(WM_CREATE, OnCreate) |
+ CHAIN_MSG_MAP(Base) |
+END_MSG_MAP() |
+ |
+ HRESULT FinalConstruct(); |
+ |
+ virtual HRESULT OnDraw(ATL_DRAWINFO& draw_info); |
+ |
+ // IPersistPropertyBag implementation |
+ STDMETHOD(GetClassID)(CLSID* class_id) { |
+ if (class_id != NULL) |
+ *class_id = GetObjectCLSID(); |
+ return S_OK; |
+ } |
+ |
+ STDMETHOD(InitNew)() { |
+ return S_OK; |
+ } |
+ |
+ STDMETHOD(Load)(IPropertyBag* bag, IErrorLog* error_log); |
+ |
+ STDMETHOD(Save)(IPropertyBag* bag, BOOL clear_dirty, BOOL save_all) { |
+ return E_NOTIMPL; |
+ } |
+ |
+ // Used to setup the document_url_ member needed for completing navigation. |
+ // Create external tab (possibly in incognito mode). |
+ HRESULT IOleObject_SetClientSite(IOleClientSite *pClientSite); |
+ |
+ // Overridden to perform security checks. |
+ STDMETHOD(put_src)(BSTR src); |
+ |
+ protected: |
+ virtual void OnAcceleratorPressed(int tab_handle, const MSG& accel_message); |
+ virtual void OnLoad(int tab_handle, const GURL& url); |
+ virtual void OnMessageFromChromeFrame(int tab_handle, |
+ const std::string& message, |
+ const std::string& origin, |
+ const std::string& target); |
+ |
+ private: |
+ |
+ LRESULT OnCreate(UINT message, WPARAM wparam, LPARAM lparam, |
+ BOOL& handled); // NO_LINT |
+ |
+ // ChromeFrameDelegate overrides |
+ virtual void ChromeFrameActivex::OnAutomationServerLaunchFailed( |
+ AutomationLaunchResult reason, const std::string& server_version); |
+ virtual void OnLoadFailed(int error_code, const std::string& url); |
+ |
+ // Helper function to execute a function on a script IDispatch interface. |
+ HRESULT InvokeScriptFunction(const VARIANT& script, const std::string& param); |
+ HRESULT InvokeScriptFunction(const VARIANT& script, VARIANT* param); |
+ HRESULT GetContainingDocument(IHTMLDocument2** doc); |
+ HRESULT GetDocumentWindow(IHTMLWindow2** window); |
+ |
+ // Gets the value of the 'id' attribute of the object element. |
+ HRESULT GetObjectScriptId(IHTMLObjectElement* object_elem, BSTR* id); |
+ |
+ // Returns the object element in the HTML page. |
+ // Note that if we're not being hosted inside an HTML |
+ // document, then this call will fail. |
+ HRESULT GetObjectElement(IHTMLObjectElement** element); |
+ |
+ HRESULT CreateScriptBlockForEvent(IHTMLElement2* insert_after, |
+ BSTR instance_id, BSTR script, |
+ BSTR event_name); |
+ |
+ // Creates a new event object that supports the |data| property. |
+ // Note: you should supply an empty string for |origin| unless you're |
+ // creating a "message" event. |
+ HRESULT CreateDomEvent(const std::string& event_type, const std::string& data, |
+ const std::string& origin, IDispatch** event); |
+ |
+ // Utility function that checks the size of the vector and if > 0 creates |
+ // a variant for the string argument and forwards the call to the other |
+ // FireEvent method. |
+ void FireEvent(const EventHandlers& handlers, const std::string& arg); |
+ |
+ // Invokes all registered handlers in a vector of event handlers. |
+ void FireEvent(const EventHandlers& handlers, IDispatch* event); |
+ |
+ // This variant is used for the privatemessage handler only. |
+ void FireEvent(const EventHandlers& handlers, IDispatch* event, |
+ BSTR target); |
+ |
+}; |
+ |
+OBJECT_ENTRY_AUTO(__uuidof(ChromeFrame), ChromeFrameActivex) |
+ |
+#endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_H_ |