Index: chrome_frame/test/ie_event_sink.h |
diff --git a/chrome_frame/test/ie_event_sink.h b/chrome_frame/test/ie_event_sink.h |
deleted file mode 100644 |
index 9d95145864f83828aa306bf19a37ca8c094b6d6e..0000000000000000000000000000000000000000 |
--- a/chrome_frame/test/ie_event_sink.h |
+++ /dev/null |
@@ -1,276 +0,0 @@ |
-// Copyright (c) 2012 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_TEST_IE_EVENT_SINK_H_ |
-#define CHROME_FRAME_TEST_IE_EVENT_SINK_H_ |
- |
-#include <atlbase.h> |
-#include <atlwin.h> |
-#include <exdispid.h> |
-#include <string> |
- |
-#include "base/win/scoped_comptr.h" |
-#include "chrome_frame/chrome_tab.h" |
-#include "chrome_frame/test/simulate_input.h" |
-#include "chrome_frame/test_utils.h" |
- |
-namespace chrome_frame_test { |
- |
-// Listener for all events from the IEEventSink, defined below. This includes |
-// IE and CF events. Unfortunately some of these events are unreliable or have |
-// strange behavior across different platforms/browsers. See notes besides |
-// each method. |
-class IEEventListener { |
- public: |
- virtual ~IEEventListener() {} |
- |
- // IE callbacks |
- virtual void OnNavigateError(IDispatch* dispatch, VARIANT* url, |
- VARIANT* frame_name, VARIANT* status_code, |
- VARIANT* cancel) {} |
- // This does not occur in IE 6 in CF when navigating between fragments |
- // on the same page, although it does occur with back/forward across such. |
- virtual void OnBeforeNavigate2(IDispatch* dispatch, VARIANT* url, |
- VARIANT* flags, VARIANT* target_frame_name, |
- VARIANT* post_data, VARIANT* headers, |
- VARIANT_BOOL* cancel) {} |
- virtual void OnDownloadBegin() {} |
- virtual void OnNavigateComplete2(IDispatch* dispatch, VARIANT* url) {} |
- virtual void OnNewWindow2(IDispatch** dispatch, VARIANT_BOOL* cancel) {} |
- virtual void OnNewWindow3(IDispatch** dispatch, VARIANT_BOOL* cancel, |
- DWORD flags, BSTR url_context, BSTR url) {} |
- // This occurs twice on IE >= 7 after window.open calls. |
- virtual void OnDocumentComplete(IDispatch* dispatch, VARIANT* url_variant) {} |
- virtual void OnFileDownload(VARIANT_BOOL active_doc, VARIANT_BOOL* cancel) {} |
- virtual void OnQuit() {} |
- |
- // CF callbacks |
- virtual void OnLoad(const wchar_t* url) {} |
- virtual void OnLoadError(const wchar_t* url) {} |
- virtual void OnMessage(const wchar_t* message, const wchar_t* origin, |
- const wchar_t* source) {} |
- virtual void OnNewBrowserWindow(IDispatch* new_window, const wchar_t* url) {} |
-}; |
- |
-// Listener for IPropertyNotifySink. |
-class PropertyNotifySinkListener { |
- public: |
- virtual ~PropertyNotifySinkListener() {} |
- virtual void OnChanged(DISPID dispid) {} |
- virtual void OnRequestEdit(DISPID dispid) {} |
-}; |
- |
-// This class sets up event sinks to the IWebBrowser interface. It forwards |
-// all events to its listener. |
-class IEEventSink |
- : public CComObjectRootEx<CComSingleThreadModel>, |
- public IDispEventSimpleImpl<0, IEEventSink, |
- &DIID_DWebBrowserEvents2>, |
- public IUnknown { |
- public: |
- typedef IDispEventSimpleImpl<0, IEEventSink, |
- &DIID_DWebBrowserEvents2> DispEventsImpl; |
- IEEventSink(); |
- ~IEEventSink(); |
- |
- // Launches IE, sets up the sink to forward events to the listener, and |
- // navigates to the given page. |
- HRESULT LaunchIEAndNavigate(const std::wstring& navigate_url, |
- IEEventListener* listener); |
- |
- // Navigate to the given url. |
- HRESULT Navigate(const std::wstring& navigate_url); |
- |
- // Listen to events from this |browser_disp|, which should be queryable for |
- // IWebBrowser2. |
- void Attach(IDispatch* browser_disp); |
- |
- // Listen to events from the given browser. |
- HRESULT Attach(IWebBrowser2* browser); |
- |
- // Stop listening to the associated web browser and possibly wait for it to |
- // close, if this browser has its own process. |
- void Uninitialize(); |
- |
- // Closes the web browser in such a way that the OnQuit notification will |
- // be fired when the window closes (async). |
- HRESULT CloseWebBrowser(); |
- |
- // Posts a message to the given target in ChromeFrame. |target| may be "*". |
- void PostMessageToCF(const std::wstring& message, const std::wstring& target); |
- |
- // Set input focus to chrome frame window. |
- void SetFocusToRenderer(); |
- |
- // Send keyboard input to the renderer window hosted in chrome using direct |
- // key down/up messages. |
- void SendKeys(const char* input_string); |
- |
- // Send mouse click to the renderer window hosted in chrome using |
- // SendInput API. |
- void SendMouseClick(int x, int y, simulate_input::MouseButton button); |
- |
- // Get the HWND for the browser's main window. Will fail test if window |
- // not found. |
- HWND GetBrowserWindow(); |
- |
- // Get the HWND for the browser's renderer window. Will fail test if |
- // renderer window not found. |
- HWND GetRendererWindow(); |
- |
- // Same as above, but does not fail the test if the window cannot be found. |
- // In that case, the returned handle will be NULL. |
- HWND GetRendererWindowSafe(); |
- |
- // Returns whether CF is rendering the current page. |
- bool IsCFRendering(); |
- |
- // Expect the renderer window to have focus. |
- void ExpectRendererWindowHasFocus(); |
- |
- // Expect the address bar to have |url|. |
- void ExpectAddressBarUrl(const std::wstring& url); |
- |
- // These methods are just simple wrappers of the IWebBrowser2 methods. |
- // They are needed because you cannot post tasks to IWebBrowser2. |
- void GoBack() { |
- web_browser2_->GoBack(); |
- } |
- |
- void GoForward() { |
- web_browser2_->GoForward(); |
- } |
- |
- void Refresh(); |
- |
- void Exec(const GUID* cmd_group_guid, DWORD command_id, |
- DWORD cmd_exec_opt, VARIANT* in_args, VARIANT* out_args); |
- |
- // Set the listener for this sink, which can be NULL. |
- void set_listener(IEEventListener* listener) { listener_ = listener; } |
- |
- IWebBrowser2* web_browser2() { return web_browser2_.get(); } |
- |
- // Used only for debugging/logging purposes. |
- bool reference_count() { return m_dwRef; } |
- |
- static void SetAbnormalShutdown(bool abnormal_shutdown); |
- |
- private: |
- void ConnectToChromeFrame(); |
- void DisconnectFromChromeFrame(); |
- void FindIEProcessId(); |
- |
- // IE callbacks. |
-BEGIN_COM_MAP(IEEventSink) |
- COM_INTERFACE_ENTRY(IUnknown) |
-END_COM_MAP() |
- |
-BEGIN_SINK_MAP(IEEventSink) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, |
- OnBeforeNavigate2, &kBeforeNavigate2Info) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_DOWNLOADBEGIN, |
- OnDownloadBegin, &kVoidMethodInfo) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, |
- OnNavigateComplete2, &kNavigateComplete2Info) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NAVIGATEERROR, |
- OnNavigateError, &kNavigateErrorInfo) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW2, |
- OnNewWindow2, &kNewWindow2Info) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW3, |
- OnNewWindow3, &kNewWindow3Info) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, |
- OnDocumentComplete, &kDocumentCompleteInfo) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_FILEDOWNLOAD, |
- OnFileDownload, &kFileDownloadInfo) |
- SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_ONQUIT, |
- OnQuit, &kVoidMethodInfo) |
-END_SINK_MAP() |
- |
- STDMETHOD_(void, OnNavigateError)(IDispatch* dispatch, VARIANT* url, |
- VARIANT* frame_name, VARIANT* status_code, |
- VARIANT* cancel); |
- STDMETHOD(OnBeforeNavigate2)(IDispatch* dispatch, VARIANT* url, |
- VARIANT* flags, VARIANT* target_frame_name, |
- VARIANT* post_data, VARIANT* headers, |
- VARIANT_BOOL* cancel); |
- STDMETHOD_(void, OnDownloadBegin)(); |
- STDMETHOD_(void, OnNavigateComplete2)(IDispatch* dispatch, VARIANT* url); |
- STDMETHOD_(void, OnNewWindow2)(IDispatch** dispatch, VARIANT_BOOL* cancel); |
- STDMETHOD_(void, OnNewWindow3)(IDispatch** dispatch, VARIANT_BOOL* cancel, |
- DWORD flags, BSTR url_context, BSTR url); |
- STDMETHOD_(void, OnDocumentComplete)(IDispatch* dispatch, |
- VARIANT* url_variant); |
- STDMETHOD_(void, OnFileDownload)(VARIANT_BOOL active_doc, |
- VARIANT_BOOL* cancel); |
- STDMETHOD_(void, OnQuit)(); |
- |
- STDMETHOD(Invoke)(DISPID dispid, |
- REFIID riid, LCID lcid, |
- WORD flags, |
- DISPPARAMS* params, |
- VARIANT* result, |
- EXCEPINFO* except_info, |
- UINT* arg_error); |
- |
- // IChromeFrame callbacks |
- HRESULT OnLoad(const VARIANT* param); |
- HRESULT OnLoadError(const VARIANT* param); |
- HRESULT OnMessage(const VARIANT* param); |
- |
- base::win::ScopedComPtr<IWebBrowser2> web_browser2_; |
- base::win::ScopedComPtr<IChromeFrame> chrome_frame_; |
- DispCallback<IEEventSink> onmessage_; |
- DispCallback<IEEventSink> onloaderror_; |
- DispCallback<IEEventSink> onload_; |
- IEEventListener* listener_; |
- base::ProcessId ie_process_id_; |
- bool did_receive_on_quit_; |
- static bool abnormal_shutdown_; |
- |
- static _ATL_FUNC_INFO kBeforeNavigate2Info; |
- static _ATL_FUNC_INFO kNavigateComplete2Info; |
- static _ATL_FUNC_INFO kNavigateErrorInfo; |
- static _ATL_FUNC_INFO kNewWindow2Info; |
- static _ATL_FUNC_INFO kNewWindow3Info; |
- static _ATL_FUNC_INFO kVoidMethodInfo; |
- static _ATL_FUNC_INFO kDocumentCompleteInfo; |
- static _ATL_FUNC_INFO kFileDownloadInfo; |
-}; |
- |
-class PropertyNotifySinkImpl |
- : public CComObjectRootEx<CComSingleThreadModel>, |
- public IPropertyNotifySink { |
- public: |
- PropertyNotifySinkImpl() : listener_(NULL) { |
- } |
- |
-BEGIN_COM_MAP(PropertyNotifySinkImpl) |
- COM_INTERFACE_ENTRY(IPropertyNotifySink) |
-END_COM_MAP() |
- |
- STDMETHOD(OnChanged)(DISPID dispid) { |
- if (listener_) |
- listener_->OnChanged(dispid); |
- return S_OK; |
- } |
- |
- STDMETHOD(OnRequestEdit)(DISPID dispid) { |
- if (listener_) |
- listener_->OnRequestEdit(dispid); |
- return S_OK; |
- } |
- |
- void set_listener(PropertyNotifySinkListener* listener) { |
- DCHECK(listener_ == NULL || listener == NULL); |
- listener_ = listener; |
- } |
- |
- protected: |
- PropertyNotifySinkListener* listener_; |
-}; |
- |
-} // namespace chrome_frame_test |
- |
-#endif // CHROME_FRAME_TEST_IE_EVENT_SINK_H_ |