OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 | 4 |
5 #include "chrome_frame/test/mock_ie_event_sink_test.h" | 5 #include "chrome_frame/test/mock_ie_event_sink_test.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "base/scoped_variant_win.h" | 9 #include "base/scoped_variant_win.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 // MockIEEventSink methods | 26 // MockIEEventSink methods |
27 void MockIEEventSink::OnDocumentComplete(IDispatch* dispatch, VARIANT* url) { | 27 void MockIEEventSink::OnDocumentComplete(IDispatch* dispatch, VARIANT* url) { |
28 if (!event_sink_->IsCFRendering()) { | 28 if (!event_sink_->IsCFRendering()) { |
29 HWND renderer_window = event_sink_->GetRendererWindowSafe(); | 29 HWND renderer_window = event_sink_->GetRendererWindowSafe(); |
30 if (renderer_window) { | 30 if (renderer_window) { |
31 ::NotifyWinEvent(IA2_EVENT_DOCUMENT_LOAD_COMPLETE, | 31 ::NotifyWinEvent(IA2_EVENT_DOCUMENT_LOAD_COMPLETE, |
32 renderer_window, | 32 renderer_window, |
33 OBJID_CLIENT, 0L); | 33 OBJID_CLIENT, 0L); |
34 } else { | 34 } else { |
35 DLOG(INFO) << "Browser does not have renderer window"; | 35 DVLOG(1) << "Browser does not have renderer window"; |
36 } | 36 } |
37 OnLoad(IN_IE, V_BSTR(url)); | 37 OnLoad(IN_IE, V_BSTR(url)); |
38 } | 38 } |
39 } | 39 } |
40 | 40 |
41 ExpectationSet MockIEEventSink::ExpectNavigationCardinality( | 41 ExpectationSet MockIEEventSink::ExpectNavigationCardinality( |
42 const std::wstring& url, Cardinality before_cardinality, | 42 const std::wstring& url, Cardinality before_cardinality, |
43 Cardinality complete_cardinality) { | 43 Cardinality complete_cardinality) { |
44 ExpectationSet navigation; | 44 ExpectationSet navigation; |
45 if (url.empty()) { | 45 if (url.empty()) { |
46 navigation += EXPECT_CALL(*this, OnBeforeNavigate2(_, _, _, _, _, _, _)) | 46 navigation += EXPECT_CALL(*this, OnBeforeNavigate2(_, _, _, _, _, _, _)) |
47 .Times(before_cardinality).RetiresOnSaturation(); | 47 .Times(before_cardinality).RetiresOnSaturation(); |
48 } else { | 48 } else { |
49 navigation += EXPECT_CALL(*this, OnBeforeNavigate2(_, | 49 navigation += EXPECT_CALL(*this, OnBeforeNavigate2(_, |
50 testing::Field(&VARIANT::bstrVal, | 50 testing::Field(&VARIANT::bstrVal, |
51 StrCaseEq(url)), _, _, _, _, _)) | 51 StrCaseEq(url)), _, _, _, _, _)) |
52 .Times(before_cardinality).RetiresOnSaturation(); | 52 .Times(before_cardinality).RetiresOnSaturation(); |
53 } | 53 } |
54 | 54 |
55 // Hack: OnFileDownload may occur zero or once (for reasons not understood) | 55 // Hack: OnFileDownload may occur zero or once (for reasons not understood) |
56 // before each OnNavigateComplete2 which causes problems for tests expecting | 56 // before each OnNavigateComplete2 which causes problems for tests expecting |
57 // things in sequence. To redress this, expectations which allow multiple | 57 // things in sequence. To redress this, expectations which allow multiple |
58 // calls are split into expect statements expecting exactly one call or at | 58 // calls are split into expect statements expecting exactly one call or at |
59 // most one call. | 59 // most one call. |
60 // TODO(kkania): Consider avoiding this problem by creating a mock without | 60 // TODO(kkania): Consider avoiding this problem by creating a mock without |
61 // the OnFileDownload call or by removing the dependency of some tests on | 61 // the OnFileDownload call or by removing the dependency of some tests on |
62 // InSequence. | 62 // InSequence. |
63 DLOG_IF(WARNING, complete_cardinality.ConservativeUpperBound() > 1000) | 63 DLOG_IF(WARNING, complete_cardinality.ConservativeUpperBound() > 1000) |
64 << "Cardinality upper bound may be too great to be split up into single " | 64 << "Cardinality upper bound may be too great to be split up into single " |
65 << "expect statements. If you do not require this navigation to be in " | 65 "expect statements. If you do not require this navigation to be in " |
66 << "sequence, do not call this method."; | 66 "sequence, do not call this method."; |
67 int call_count = 0; | 67 int call_count = 0; |
68 InSequence expect_in_sequence_for_scope; | 68 InSequence expect_in_sequence_for_scope; |
69 while (!complete_cardinality.IsSaturatedByCallCount(call_count)) { | 69 while (!complete_cardinality.IsSaturatedByCallCount(call_count)) { |
70 navigation += EXPECT_CALL(*this, OnFileDownload(_, _)) | 70 navigation += EXPECT_CALL(*this, OnFileDownload(_, _)) |
71 .Times(testing::AtMost(1)) | 71 .Times(testing::AtMost(1)) |
72 .RetiresOnSaturation(); | 72 .RetiresOnSaturation(); |
73 | 73 |
74 Cardinality split_complete_cardinality = testing::Exactly(1); | 74 Cardinality split_complete_cardinality = testing::Exactly(1); |
75 if (complete_cardinality.IsSatisfiedByCallCount(call_count)) | 75 if (complete_cardinality.IsSatisfiedByCallCount(call_count)) |
76 split_complete_cardinality = testing::AtMost(1); | 76 split_complete_cardinality = testing::AtMost(1); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 return server_mock_.root_dir().Append(relative_path); | 200 return server_mock_.root_dir().Append(relative_path); |
201 } | 201 } |
202 | 202 |
203 std::wstring MockIEEventSinkTest::GetTestUrl( | 203 std::wstring MockIEEventSinkTest::GetTestUrl( |
204 const std::wstring& relative_path) { | 204 const std::wstring& relative_path) { |
205 return server_mock_.Resolve(relative_path.c_str()); | 205 return server_mock_.Resolve(relative_path.c_str()); |
206 } | 206 } |
207 | 207 |
208 } // namespace chrome_frame_test | 208 } // namespace chrome_frame_test |
209 | 209 |
OLD | NEW |