Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: plugins/update/activex/update3web_control_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 #include "omaha/plugins/update/activex/update3web_control.h"
17 #include <atlbase.h>
18 #include <atlcom.h>
19 #include <windows.h>
20 #include "base/basictypes.h"
21 #include "base/error.h"
22 #include "omaha/testing/unit_test.h"
23
24 namespace omaha {
25
26 namespace {
27
28 #define STUBMETHOD(identifier, ...) \
29 STDMETHOD(identifier)(__VA_ARGS__) {\
30 return E_NOTIMPL;\
31 }
32
33 #define STUBGETPROP(identifier, type) \
34 STUBMETHOD(get_ ## identifier, type*)
35
36 #define STUBPUTPROP(identifier, type) \
37 STUBMETHOD(put_ ## identifier, type)
38
39 #define STUBPROP(identifier, type) \
40 STUBGETPROP(identifier, type)\
41 STUBPUTPROP(identifier, type)
42
43 class ATL_NO_VTABLE MockWebBrowser2
44 : public CComObjectRootEx<CComObjectThreadModel>,
45 public IServiceProviderImpl<MockWebBrowser2>,
46 public IWebBrowser2 {
47 public:
48 MockWebBrowser2() : url_("something-like-a-url") {}
49 virtual ~MockWebBrowser2() {}
50
51 DECLARE_NOT_AGGREGATABLE(MockWebBrowser2);
52
53 BEGIN_COM_MAP(MockWebBrowser2)
54 COM_INTERFACE_ENTRY(IServiceProvider)
55 COM_INTERFACE_ENTRY(IWebBrowser2)
56 END_COM_MAP()
57
58 BEGIN_SERVICE_MAP(MockWebBrowser2)
59 SERVICE_ENTRY(SID_SWebBrowserApp)
60 END_SERVICE_MAP()
61
62 // IDispatch
63 STUBMETHOD(GetIDsOfNames, REFIID, OLECHAR**, unsigned int, LCID, DISPID*);
64 STUBMETHOD(GetTypeInfo, unsigned int, LCID, ITypeInfo**);
65 STUBMETHOD(GetTypeInfoCount, UINT*);
66 STUBMETHOD(Invoke, DISPID, REFIID, LCID, WORD, DISPPARAMS*, VARIANT*,
67 EXCEPINFO*, unsigned int*);
68
69 // IWebBrowser2
70 STUBPROP(AddressBar, VARIANT_BOOL);
71 STUBGETPROP(Application, IDispatch*);
72 STUBGETPROP(Busy, VARIANT_BOOL);
73 STUBMETHOD(ClientToWindow, int*, int*);
74 STUBGETPROP(Container, IDispatch*);
75 STUBGETPROP(Document, IDispatch*);
76 STUBMETHOD(ExecWB, OLECMDID, OLECMDEXECOPT, VARIANT*, VARIANT*);
77 STUBGETPROP(FullName, BSTR);
78 STUBPROP(FullScreen, VARIANT_BOOL);
79 STUBMETHOD(GetProperty, BSTR, VARIANT*);
80 STUBMETHOD(GoBack, VOID);
81 STUBMETHOD(GoForward, VOID);
82 STUBMETHOD(GoHome, VOID);
83 STUBMETHOD(GoSearch, VOID);
84 STUBPROP(Height, LONG);
85 STUBGETPROP(HWND, LONG);
86 STUBPROP(Left, LONG);
87 STUBGETPROP(LocationName, BSTR);
88 STDMETHOD(get_LocationURL)(BSTR* url) {
89 *url = CComBSTR(url_).Detach();
90 return S_OK;
91 }
92 STUBPROP(MenuBar, VARIANT_BOOL);
93 STUBGETPROP(Name, BSTR);
94 STUBMETHOD(Navigate, BSTR, VARIANT*, VARIANT*, VARIANT*, VARIANT*);
95 STUBMETHOD(Navigate2, VARIANT*, VARIANT*, VARIANT*, VARIANT*, VARIANT*);
96 STUBPROP(Offline, VARIANT_BOOL);
97 STUBGETPROP(Path, BSTR);
98 STUBGETPROP(Parent, IDispatch*);
99 STUBMETHOD(PutProperty, BSTR, VARIANT);
100 STUBMETHOD(QueryStatusWB, OLECMDID, OLECMDF*);
101 STUBMETHOD(Quit, VOID);
102 STUBGETPROP(ReadyState, READYSTATE);
103 STUBMETHOD(Refresh, VOID);
104 STUBMETHOD(Refresh2, VARIANT*);
105 STUBPROP(RegisterAsBrowser, VARIANT_BOOL);
106 STUBPROP(RegisterAsDropTarget, VARIANT_BOOL);
107 STUBPROP(Resizable, VARIANT_BOOL);
108 STUBMETHOD(ShowBrowserBar, VARIANT*, VARIANT*, VARIANT*);
109 STUBPROP(Silent, VARIANT_BOOL);
110 STUBPROP(StatusBar, VARIANT_BOOL);
111 STUBPROP(StatusText, BSTR);
112 STUBMETHOD(Stop, VOID);
113 STUBPROP(TheaterMode, VARIANT_BOOL);
114 STUBPROP(ToolBar, int);
115 STUBPROP(Top, LONG);
116 STUBGETPROP(TopLevelContainer, VARIANT_BOOL);
117 STUBPROP(Type, BSTR);
118 STUBPROP(Visible, VARIANT_BOOL);
119 STUBPROP(Width, LONG);
120
121 void set_url(const char* url) { url_ = url; }
122
123 private:
124 CString url_;
125
126 DISALLOW_COPY_AND_ASSIGN(MockWebBrowser2);
127 };
128
129 class ATL_NO_VTABLE MockHTMLDocument2
130 : public CComObjectRootEx<CComObjectThreadModel>,
131 public IServiceProvider,
132 public IOleClientSite,
133 public IOleContainer,
134 public IHTMLDocument2 {
135 public:
136 MockHTMLDocument2() {}
137 virtual ~MockHTMLDocument2() {}
138
139 DECLARE_NOT_AGGREGATABLE(MockHTMLDocument2);
140
141 BEGIN_COM_MAP(MockHTMLDocument2)
142 COM_INTERFACE_ENTRY(IServiceProvider)
143 COM_INTERFACE_ENTRY(IOleClientSite)
144 COM_INTERFACE_ENTRY(IOleContainer)
145 COM_INTERFACE_ENTRY(IHTMLDocument2)
146 END_COM_MAP()
147
148 // IServiceProvider
149 STUBMETHOD(QueryService, REFGUID, REFIID, void**);
150
151 // IOleContainer
152 STDMETHOD(GetContainer)(IOleContainer** container) {
153 return QueryInterface(IID_PPV_ARGS(container));
154 }
155 STUBMETHOD(GetMoniker, DWORD, DWORD, IMoniker**);
156 STUBMETHOD(OnShowWindow, BOOL);
157 STUBMETHOD(RequestNewObjectLayout);
158 STUBMETHOD(SaveObject);
159 STUBMETHOD(ShowObject);
160
161 // IOleContainer
162 STUBMETHOD(EnumObjects, DWORD, IEnumUnknown**);
163 STUBMETHOD(LockContainer, BOOL);
164
165 // IDispatch
166 STUBMETHOD(GetIDsOfNames, REFIID, OLECHAR**, unsigned int, LCID, DISPID*);
167 STUBMETHOD(GetTypeInfo, unsigned int, LCID, ITypeInfo**);
168 STUBMETHOD(GetTypeInfoCount, UINT*);
169 STUBMETHOD(Invoke, DISPID, REFIID, LCID, WORD, DISPPARAMS*, VARIANT*,
170 EXCEPINFO*, unsigned int*);
171
172 // IParseDisplayName
173 STUBMETHOD(ParseDisplayName, IBindCtx*, LPOLESTR, ULONG*, IMoniker**);
174
175 // IHTMLDocument2
176 STUBGETPROP(activeElement, IHTMLElement*);
177 STUBPROP(alinkColor, VARIANT);
178 STUBGETPROP(all, IHTMLElementCollection*);
179 STUBGETPROP(anchors, IHTMLElementCollection*);
180 STUBGETPROP(applets, IHTMLElementCollection*);
181 STUBPROP(bgColor, VARIANT);
182 STUBGETPROP(body, IHTMLElement*);
183 STUBPROP(charset, BSTR);
184 STUBMETHOD(clear, VOID);
185 STUBMETHOD(close, VOID);
186 STUBPROP(cookie, BSTR);
187 STUBMETHOD(createElement, BSTR, IHTMLElement**);
188 STUBMETHOD(createStyleSheet, BSTR, LONG, IHTMLStyleSheet**);
189 STUBPROP(defaultCharset, BSTR);
190 STUBPROP(designMode, BSTR);
191 STUBPROP(domain, BSTR);
192 STUBPROP(elementFromPoint, BSTR);
193 STUBMETHOD(elementFromPoint, LONG, LONG, IHTMLElement**);
194 STUBGETPROP(embeds, IHTMLElementCollection*);
195 STUBMETHOD(execCommand, BSTR, VARIANT_BOOL, VARIANT, VARIANT_BOOL*);
196 STUBMETHOD(execCommandShowHelp, BSTR, VARIANT_BOOL*);
197 STUBPROP(expando, VARIANT_BOOL);
198 STUBPROP(fgColor, VARIANT);
199 STUBGETPROP(fileCreatedDate, BSTR);
200 STUBGETPROP(fileModifiedDate, BSTR);
201 STUBGETPROP(fileSize, BSTR);
202 STUBGETPROP(fileUpdatedDate, BSTR);
203 STUBGETPROP(forms, IHTMLElementCollection*);
204 STUBGETPROP(frames, IHTMLFramesCollection2*);
205 STUBGETPROP(images, IHTMLElementCollection*);
206 STUBGETPROP(lastModified, BSTR);
207 STUBPROP(linkColor, VARIANT);
208 STUBGETPROP(links, IHTMLElementCollection*);
209 STUBGETPROP(location, IHTMLLocation*);
210 STUBGETPROP(mimeType, BSTR);
211 STUBGETPROP(nameProp, BSTR);
212 STUBPROP(onafterupdate, VARIANT);
213 STUBPROP(onbeforeupdate, VARIANT);
214 STUBPROP(onclick, VARIANT);
215 STUBPROP(ondblclick, VARIANT);
216 STUBPROP(ondragstart, VARIANT);
217 STUBPROP(onerrorupdate, VARIANT);
218 STUBPROP(onhelp, VARIANT);
219 STUBPROP(onkeydown, VARIANT);
220 STUBPROP(onkeypress, VARIANT);
221 STUBPROP(onkeyup, VARIANT);
222 STUBPROP(onmousedown, VARIANT);
223 STUBPROP(onmousemove, VARIANT);
224 STUBPROP(onmouseout, VARIANT);
225 STUBPROP(onmouseover, VARIANT);
226 STUBPROP(onmouseup, VARIANT);
227 STUBPROP(onreadystatechange, VARIANT);
228 STUBPROP(onrowenter, VARIANT);
229 STUBPROP(onrowexit, VARIANT);
230 STUBPROP(onselectstart, VARIANT);
231 STUBMETHOD(open, BSTR, VARIANT, VARIANT, VARIANT, IDispatch**);
232 STUBGETPROP(parentWindow, IHTMLWindow2*);
233 STUBGETPROP(plugins, IHTMLElementCollection*);
234 STUBPROP(protocol, BSTR);
235 STUBMETHOD(queryCommandEnabled, BSTR, VARIANT_BOOL*);
236 STUBMETHOD(queryCommandIndeterm, BSTR, VARIANT_BOOL*);
237 STUBMETHOD(queryCommandState, BSTR, VARIANT_BOOL*);
238 STUBMETHOD(queryCommandSupported, BSTR, VARIANT_BOOL*);
239 STUBMETHOD(queryCommandText, BSTR, BSTR*);
240 STUBMETHOD(queryCommandValue, BSTR, VARIANT*);
241 STUBGETPROP(readyState, BSTR);
242 STUBGETPROP(referrer, BSTR);
243 STUBGETPROP(Script, IDispatch*);
244 STUBGETPROP(security, BSTR);
245 STUBGETPROP(selection, IHTMLSelectionObject*);
246 STUBGETPROP(scripts, IHTMLElementCollection*);
247 STUBGETPROP(styleSheets, IHTMLStyleSheetsCollection*);
248 STUBPROP(title, BSTR);
249 STUBMETHOD(toString, BSTR*);
250 STDMETHOD(get_URL)(BSTR* url) {
251 *url = CComBSTR("something-else-like-a-url").Detach();
252 return S_OK;
253 }
254 STUBPUTPROP(URL, BSTR);
255 STUBPROP(vlinkColor, VARIANT);
256 STUBMETHOD(write, SAFEARRAY*);
257 STUBMETHOD(writeln, SAFEARRAY*);
258
259 private:
260 DISALLOW_COPY_AND_ASSIGN(MockHTMLDocument2);
261 };
262
263 #undef STUBMETHOD
264 #undef STUBGETPROP
265 #undef STUBPUTPROP
266 #undef STUBPROP
267
268 template <typename T>
269 HRESULT CComObjectCreatorHelper(CComObject<T>** ptr) {
270 if (!ptr) {
271 return E_POINTER;
272 }
273 CComObject<T>* raw_ptr = NULL;
274 RET_IF_FAILED(CComObject<T>::CreateInstance(&raw_ptr));
275 raw_ptr->AddRef();
276 *ptr = raw_ptr;
277 return S_OK;
278 }
279
280
281 } // namespace
282
283 class Update3WebControlTest : public testing::Test {
284 protected:
285 virtual void SetUp() {
286 ASSERT_SUCCEEDED(CComObjectCreatorHelper(&control_));
287 }
288
289 virtual void TearDown() {
290 }
291
292 HRESULT GetCurrentBrowserUrl(CString* url) {
293 return control_->site_lock_.GetCurrentBrowserUrl(control_, url);
294 }
295
296 CComPtr<CComObject<Update3WebControl> > control_;
297 };
298
299 TEST_F(Update3WebControlTest, SiteLock) {
300 CComPtr<CComObject<MockWebBrowser2> > browser;
301 ASSERT_SUCCEEDED(CComObjectCreatorHelper(&browser));
302 CComPtr<IUnknown> unknown;
303 ASSERT_SUCCEEDED(browser.QueryInterface(&unknown));
304 ASSERT_SUCCEEDED(control_->SetSite(unknown));
305 browser->set_url("http://www.google.com/pack/page.html");
306 EXPECT_EQ(E_POINTER,
307 control_->getInstalledVersion(CComBSTR(), VARIANT_FALSE, NULL));
308 }
309
310 TEST_F(Update3WebControlTest, SiteLock_Negative) {
311 CComPtr<IWebBrowser2> browser;
312 ASSERT_SUCCEEDED(CComCoClass<MockWebBrowser2>::CreateInstance(&browser));
313 ASSERT_SUCCEEDED(control_->SetSite(browser));
314 EXPECT_EQ(GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED,
315 control_->getInstalledVersion(CComBSTR(), VARIANT_FALSE, NULL));
316 }
317
318 TEST_F(Update3WebControlTest, GetCurrentBrowserUrl_FailIfNoSite) {
319 CString url;
320 EXPECT_FALSE(SUCCEEDED(GetCurrentBrowserUrl(&url)));
321 }
322
323 TEST_F(Update3WebControlTest, GetCurrentBrowserUrl_WithIWebBrowser2) {
324 CComPtr<IUnknown> browser;
325 ASSERT_SUCCEEDED(CComCoClass<MockWebBrowser2>::CreateInstance(&browser));
326 ASSERT_SUCCEEDED(control_->SetSite(browser));
327 CString url;
328 EXPECT_EQ(S_OK, GetCurrentBrowserUrl(&url));
329 EXPECT_STREQ(L"something-like-a-url", url);
330 }
331
332 TEST_F(Update3WebControlTest, GetCurrentBrowserUrl_WithIHTMLDocument2) {
333 CComPtr<IUnknown> document;
334 ASSERT_SUCCEEDED(CComCoClass<MockHTMLDocument2>::CreateInstance(&document));
335 ASSERT_SUCCEEDED(control_->SetSite(document));
336 CString url;
337 EXPECT_EQ(S_OK, GetCurrentBrowserUrl(&url));
338 EXPECT_STREQ(L"something-else-like-a-url", url);
339 }
340
341 } // namespace omaha
OLDNEW
« no previous file with comments | « plugins/update/activex/update3web_control.cc ('k') | plugins/update/activex/update_control_idl.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698