| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 #ifndef CHROME_FRAME_TEST_CHROME_FRAME_UNITTESTS_H_ | 4 #ifndef CHROME_FRAME_TEST_CHROME_FRAME_UNITTESTS_H_ |
| 5 #define CHROME_FRAME_TEST_CHROME_FRAME_UNITTESTS_H_ | 5 #define CHROME_FRAME_TEST_CHROME_FRAME_UNITTESTS_H_ |
| 6 | 6 |
| 7 #include <atlbase.h> | 7 #include <atlbase.h> |
| 8 #include <atlcom.h> | 8 #include <atlcom.h> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <exdisp.h> | 10 #include <exdisp.h> |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 } | 97 } |
| 98 return ""; | 98 return ""; |
| 99 } | 99 } |
| 100 | 100 |
| 101 BrowserKind browser_; | 101 BrowserKind browser_; |
| 102 std::wstring results_dir_; | 102 std::wstring results_dir_; |
| 103 ScopedHandle browser_handle_; | 103 ScopedHandle browser_handle_; |
| 104 ChromeFrameHTTPServer server_; | 104 ChromeFrameHTTPServer server_; |
| 105 }; | 105 }; |
| 106 | 106 |
| 107 // This class sets up event sinks to the IWebBrowser interface. Currently it | |
| 108 // subscribes to the following events:- | |
| 109 // 1. DISPID_BEFORENAVIGATE2 | |
| 110 // 2. DISPID_NAVIGATEERROR | |
| 111 // 3. DISPID_NAVIGATECOMPLETE2 | |
| 112 // 4. DISPID_NEWWINDOW3 | |
| 113 // Other events can be subscribed to on an if needed basis. | |
| 114 class WebBrowserEventSink | |
| 115 : public CComObjectRootEx<CComSingleThreadModel>, | |
| 116 public IDispEventSimpleImpl<0, WebBrowserEventSink, | |
| 117 &DIID_DWebBrowserEvents2> { | |
| 118 public: | |
| 119 typedef IDispEventSimpleImpl<0, WebBrowserEventSink, | |
| 120 &DIID_DWebBrowserEvents2> DispEventsImpl; | |
| 121 WebBrowserEventSink() | |
| 122 : ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 123 onmessage_(this, &WebBrowserEventSink::OnMessageInternal)), | |
| 124 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 125 onloaderror_(this, &WebBrowserEventSink::OnLoadErrorInternal)), | |
| 126 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 127 onload_(this, &WebBrowserEventSink::OnLoadInternal)) { | |
| 128 } | |
| 129 | |
| 130 ~WebBrowserEventSink() { | |
| 131 Uninitialize(); | |
| 132 } | |
| 133 | |
| 134 void Uninitialize(); | |
| 135 | |
| 136 // Helper function to launch IE and navigate to a URL. | |
| 137 // Returns S_OK on success, S_FALSE if the test was not run, other | |
| 138 // errors on failure. | |
| 139 HRESULT LaunchIEAndNavigate(const std::wstring& navigate_url); | |
| 140 | |
| 141 HRESULT Navigate(const std::wstring& navigate_url); | |
| 142 | |
| 143 // Set input focus to chrome frame window. | |
| 144 void SetFocusToChrome(); | |
| 145 | |
| 146 // Send keyboard input to the renderer window hosted in chrome using | |
| 147 // SendInput API | |
| 148 void SendInputToChrome(const std::string& input_string); | |
| 149 | |
| 150 BEGIN_COM_MAP(WebBrowserEventSink) | |
| 151 END_COM_MAP() | |
| 152 | |
| 153 BEGIN_SINK_MAP(WebBrowserEventSink) | |
| 154 SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, | |
| 155 OnBeforeNavigate2Internal, &kBeforeNavigate2Info) | |
| 156 SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_DOWNLOADBEGIN, | |
| 157 OnDownloadBegin, &kVoidMethodInfo) | |
| 158 SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, | |
| 159 OnNavigateComplete2Internal, &kNavigateComplete2Info) | |
| 160 SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NAVIGATEERROR, | |
| 161 OnNavigateError, &kNavigateErrorInfo) | |
| 162 SINK_ENTRY_INFO(0, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW3, | |
| 163 OnNewWindow3, &kNewWindow3Info) | |
| 164 END_SINK_MAP() | |
| 165 | |
| 166 STDMETHOD_(void, OnNavigateError)(IDispatch* dispatch, VARIANT* url, | |
| 167 VARIANT* frame_name, VARIANT* status_code, | |
| 168 VARIANT* cancel) { | |
| 169 DLOG(INFO) << __FUNCTION__; | |
| 170 } | |
| 171 | |
| 172 STDMETHOD(OnBeforeNavigate2)(IDispatch* dispatch, VARIANT* url, VARIANT* | |
| 173 flags, VARIANT* target_frame_name, | |
| 174 VARIANT* post_data, VARIANT* headers, | |
| 175 VARIANT_BOOL* cancel) { | |
| 176 return S_OK; | |
| 177 } | |
| 178 | |
| 179 STDMETHOD(OnBeforeNavigate2Internal)(IDispatch* dispatch, VARIANT* url, | |
| 180 VARIANT* flags, | |
| 181 VARIANT* target_frame_name, | |
| 182 VARIANT* post_data, VARIANT* headers, | |
| 183 VARIANT_BOOL* cancel); | |
| 184 STDMETHOD_(void, OnDownloadBegin)() {} | |
| 185 STDMETHOD_(void, OnNavigateComplete2Internal)(IDispatch* dispatch, | |
| 186 VARIANT* url); | |
| 187 STDMETHOD_(void, OnNavigateComplete2)(IDispatch* dispatch, VARIANT* url) {} | |
| 188 STDMETHOD_(void, OnNewWindow3)(IDispatch** dispatch, VARIANT_BOOL* Cancel, | |
| 189 DWORD flags, BSTR url_context, BSTR url) {} | |
| 190 | |
| 191 #ifdef _DEBUG | |
| 192 STDMETHOD(Invoke)(DISPID dispid, REFIID riid, | |
| 193 LCID lcid, WORD flags, DISPPARAMS* params, VARIANT* result, | |
| 194 EXCEPINFO* except_info, UINT* arg_error) { | |
| 195 DLOG(INFO) << __FUNCTION__ << L" disp id :" << dispid; | |
| 196 return DispEventsImpl::Invoke(dispid, riid, lcid, flags, params, result, | |
| 197 except_info, arg_error); | |
| 198 } | |
| 199 #endif // _DEBUG | |
| 200 | |
| 201 // Chrome frame callbacks | |
| 202 virtual void OnLoad(const wchar_t* url) {} | |
| 203 virtual void OnLoadError(const wchar_t* url) {} | |
| 204 virtual void OnMessage(const wchar_t* message) {} | |
| 205 | |
| 206 IWebBrowser2* web_browser2() { | |
| 207 return web_browser2_.get(); | |
| 208 } | |
| 209 | |
| 210 protected: | |
| 211 // IChromeFrame callbacks | |
| 212 HRESULT OnLoadInternal(const VARIANT* param); | |
| 213 HRESULT OnLoadErrorInternal(const VARIANT* param); | |
| 214 HRESULT OnMessageInternal(const VARIANT* param); | |
| 215 | |
| 216 void ConnectToChromeFrame(); | |
| 217 HWND GetChromeRendererWindow(); | |
| 218 | |
| 219 public: | |
| 220 ScopedComPtr<IWebBrowser2> web_browser2_; | |
| 221 ScopedComPtr<IChromeFrame> chrome_frame_; | |
| 222 DispCallback<WebBrowserEventSink> onmessage_; | |
| 223 DispCallback<WebBrowserEventSink> onloaderror_; | |
| 224 DispCallback<WebBrowserEventSink> onload_; | |
| 225 | |
| 226 protected: | |
| 227 static _ATL_FUNC_INFO kBeforeNavigate2Info; | |
| 228 static _ATL_FUNC_INFO kNavigateComplete2Info; | |
| 229 static _ATL_FUNC_INFO kNavigateErrorInfo; | |
| 230 static _ATL_FUNC_INFO kNewWindow3Info; | |
| 231 static _ATL_FUNC_INFO kVoidMethodInfo; | |
| 232 }; | |
| 233 | |
| 234 #endif // CHROME_FRAME_TEST_CHROME_FRAME_UNITTESTS_H_ | 107 #endif // CHROME_FRAME_TEST_CHROME_FRAME_UNITTESTS_H_ |
| 235 | 108 |
| OLD | NEW |