Index: chrome_frame/test/mock_ie_event_sink_test.cc |
diff --git a/chrome_frame/test/mock_ie_event_sink_test.cc b/chrome_frame/test/mock_ie_event_sink_test.cc |
deleted file mode 100644 |
index 6f51eae9964c09d2e76b38ee4a7a0e84bb254956..0000000000000000000000000000000000000000 |
--- a/chrome_frame/test/mock_ie_event_sink_test.cc |
+++ /dev/null |
@@ -1,238 +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. |
- |
-#include "chrome_frame/test/mock_ie_event_sink_test.h" |
- |
-#include <sstream> |
- |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/win/scoped_variant.h" |
-#include "chrome_frame/test/mock_ie_event_sink_actions.h" |
- |
-// Needed for CreateFunctor. |
-#define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING |
-#include "testing/gmock_mutant.h" |
- |
-using testing::_; |
-using testing::Cardinality; |
-using testing::Exactly; |
-using testing::ExpectationSet; |
-using testing::InSequence; |
-using testing::StrCaseEq; |
- |
-namespace chrome_frame_test { |
- |
-// MockIEEventSink methods |
-void MockIEEventSink::OnDocumentComplete(IDispatch* dispatch, VARIANT* url) { |
- if (!event_sink_->IsCFRendering()) { |
- HWND renderer_window = event_sink_->GetRendererWindowSafe(); |
- if (renderer_window) { |
- ::NotifyWinEvent(IA2_EVENT_DOCUMENT_LOAD_COMPLETE, |
- renderer_window, |
- OBJID_CLIENT, 0L); |
- } else { |
- VLOG(1) << "Browser does not have renderer window"; |
- } |
- OnLoad(IN_IE, V_BSTR(url)); |
- } |
-} |
- |
-ExpectationSet MockIEEventSink::ExpectNavigationCardinality( |
- const std::wstring& url, Cardinality before_cardinality, |
- Cardinality complete_cardinality) { |
- ExpectationSet navigation; |
- if (url.empty()) { |
- navigation += EXPECT_CALL(*this, OnBeforeNavigate2(_, _, _, _, _, _, _)) |
- .Times(before_cardinality).RetiresOnSaturation(); |
- } else { |
- navigation += EXPECT_CALL(*this, OnBeforeNavigate2(_, |
- testing::Field(&VARIANT::bstrVal, |
- StrCaseEq(url)), _, _, _, _, _)) |
- .Times(before_cardinality).RetiresOnSaturation(); |
- } |
- |
- // Hack: OnFileDownload may occur zero or once (for reasons not understood) |
- // before each OnNavigateComplete2 which causes problems for tests expecting |
- // things in sequence. To redress this, expectations which allow multiple |
- // calls are split into expect statements expecting exactly one call or at |
- // most one call. |
- // TODO(kkania): Consider avoiding this problem by creating a mock without |
- // the OnFileDownload call or by removing the dependency of some tests on |
- // InSequence. |
- LOG_IF(WARNING, complete_cardinality.ConservativeUpperBound() > 1000) |
- << "Cardinality upper bound may be too great to be split up into single " |
- "expect statements. If you do not require this navigation to be in " |
- "sequence, do not call this method."; |
- int call_count = 0; |
- InSequence expect_in_sequence_for_scope; |
- while (!complete_cardinality.IsSaturatedByCallCount(call_count)) { |
- navigation += EXPECT_CALL(*this, OnFileDownload(_, _)) |
- .Times(testing::AtMost(1)) |
- .WillOnce(testing::SetArgumentPointee<1>(VARIANT_TRUE)) |
- .RetiresOnSaturation(); |
- |
- Cardinality split_complete_cardinality = testing::Exactly(1); |
- if (complete_cardinality.IsSatisfiedByCallCount(call_count)) |
- split_complete_cardinality = testing::AtMost(1); |
- |
- if (url.empty()) { |
- navigation += EXPECT_CALL(*this, OnNavigateComplete2(_, _)) |
- .Times(split_complete_cardinality) |
- .RetiresOnSaturation(); |
- } else { |
- navigation += EXPECT_CALL(*this, OnNavigateComplete2(_, |
- testing::Field(&VARIANT::bstrVal, |
- StrCaseEq(url)))) |
- .Times(split_complete_cardinality) |
- .RetiresOnSaturation(); |
- } |
- call_count++; |
- } |
- return navigation; |
-} |
- |
-void MockIEEventSink::ExpectNavigation(bool is_cf, const std::wstring& url) { |
- InSequence expect_in_sequence_for_scope; |
- if (is_cf || GetInstalledIEVersion() == IE_9) { |
- ExpectNavigationCardinality(url, Exactly(1), testing::Between(1, 2)); |
- } else { |
- ExpectNavigationCardinality(url, Exactly(1), Exactly(1)); |
- } |
-} |
- |
-void MockIEEventSink::ExpectNavigationOptionalBefore(bool is_cf, |
- const std::wstring& url) { |
- InSequence expect_in_sequence_for_scope; |
- if (is_cf && GetInstalledIEVersion() == IE_6) { |
- ExpectNavigationCardinality(url, testing::AtMost(1), |
- testing::Between(1, 2)); |
- } else { |
- ExpectNavigation(is_cf, url); |
- } |
-} |
- |
-void MockIEEventSink::ExpectJavascriptWindowOpenNavigation( |
- bool parent_cf, bool new_window_cf, const std::wstring& url) { |
- if (parent_cf) { |
- InSequence expect_in_sequence_for_scope; |
- ExpectNavigation(IN_CF, L""); |
- ExpectNavigationCardinality(L"", testing::AtMost(1), |
- testing::Between(1, 2)); |
- } else { |
- if (new_window_cf) { |
- ExpectNavigationCardinality(url, testing::AtMost(1), testing::AtMost(1)); |
- // Sometimes an extra load occurs here for some reason. |
- EXPECT_CALL(*this, OnLoad(IN_IE, StrCaseEq(url))) |
- .Times(testing::AtMost(1)); |
- ExpectNavigationCardinality(url, testing::AtMost(1), |
- testing::Between(1, 2)); |
- } else { |
- ExpectNavigation(IN_IE, url); |
- } |
- } |
-} |
- |
-void MockIEEventSink::ExpectNewWindow(MockIEEventSink* new_window_mock) { |
- DCHECK(new_window_mock); |
- |
- // IE8 seems to fire one of these events based on version. |
- EXPECT_CALL(*this, OnNewWindow2(_, _)) |
- .Times(testing::AtMost(1)); |
- EXPECT_CALL(*this, OnNewWindow3(_, _, _, _, _)) |
- .Times(testing::AtMost(1)); |
- |
- EXPECT_CALL(*this, OnNewBrowserWindow(_, _)) |
- .WillOnce(testing::WithArgs<0>(testing::Invoke(testing::CreateFunctor( |
- new_window_mock, &MockIEEventSink::Attach)))); |
-} |
- |
-void MockIEEventSink::ExpectAnyNavigations() { |
- EXPECT_CALL(*this, OnBeforeNavigate2(_, _, _, _, _, _, _)) |
- .Times(testing::AnyNumber()); |
- EXPECT_CALL(*this, OnFileDownload(VARIANT_TRUE, _)) |
- .Times(testing::AnyNumber()); |
- EXPECT_CALL(*this, OnNavigateComplete2(_, _)) |
- .Times(testing::AnyNumber()); |
-} |
- |
-void MockIEEventSink::ExpectDocumentReadystate(int ready_state) { |
- base::win::ScopedComPtr<IWebBrowser2> browser(event_sink_->web_browser2()); |
- EXPECT_TRUE(browser != NULL); |
- if (browser) { |
- base::win::ScopedComPtr<IDispatch> document; |
- browser->get_Document(document.Receive()); |
- EXPECT_TRUE(document != NULL); |
- if (document) { |
- DISPPARAMS params = { 0 }; |
- base::win::ScopedVariant result; |
- EXPECT_HRESULT_SUCCEEDED(document->Invoke(DISPID_READYSTATE, IID_NULL, |
- LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, |
- result.Receive(), NULL, NULL)); |
- EXPECT_EQ(VT_I4, result.type()); |
- if (result.type() == VT_I4) { |
- EXPECT_EQ(ready_state, static_cast<int>(V_I4(&result))); |
- } |
- } |
- } |
-} |
- |
-// MockIEEventSinkTest methods |
-MockIEEventSinkTest::MockIEEventSinkTest() |
- : server_mock_(1337, |
- base::ASCIIToWide(chrome_frame_test::GetLocalIPv4Address()), |
- GetTestDataFolder()) { |
- loop_.set_snapshot_on_timeout(true); |
- EXPECT_CALL(server_mock_, Get(_, StrCaseEq(L"/favicon.ico"), _)) |
- .WillRepeatedly(SendFast("HTTP/1.1 404 Not Found", "")); |
-} |
- |
-MockIEEventSinkTest::MockIEEventSinkTest(int port, const std::wstring& address, |
- const base::FilePath& root_dir) |
- : server_mock_(port, address, root_dir) { |
- loop_.set_snapshot_on_timeout(true); |
- EXPECT_CALL(server_mock_, Get(_, StrCaseEq(L"/favicon.ico"), _)) |
- .WillRepeatedly(SendFast("HTTP/1.1 404 Not Found", "")); |
-} |
- |
-void MockIEEventSinkTest::LaunchIEAndNavigate(const std::wstring& url) { |
- LaunchIENavigateAndLoop(url, kChromeFrameLongNavigationTimeout); |
-} |
- |
-void MockIEEventSinkTest::LaunchIENavigateAndLoop(const std::wstring& url, |
- base::TimeDelta timeout) { |
- if (GetInstalledIEVersion() >= IE_8) { |
- chrome_frame_test::ClearIESessionHistory(); |
- } |
- hung_call_detector_ = HungCOMCallDetector::Setup(ceil(timeout.InSecondsF())); |
- EXPECT_TRUE(hung_call_detector_ != NULL); |
- |
- IEEventSink::SetAbnormalShutdown(false); |
- |
- EXPECT_CALL(ie_mock_, OnQuit()) |
- .WillOnce(QUIT_LOOP(loop_)); |
- |
- HRESULT hr = ie_mock_.event_sink()->LaunchIEAndNavigate(url, &ie_mock_); |
- ASSERT_HRESULT_SUCCEEDED(hr); |
- if (hr != S_FALSE) { |
- ASSERT_TRUE(ie_mock_.event_sink()->web_browser2() != NULL); |
- loop_.RunFor(timeout); |
- } |
- |
- if (hung_call_detector_) { |
- IEEventSink::SetAbnormalShutdown(hung_call_detector_->is_hung()); |
- hung_call_detector_->TearDown(); |
- } |
-} |
- |
-base::FilePath MockIEEventSinkTest::GetTestFilePath( |
- const std::wstring& relative_path) { |
- return server_mock_.root_dir().Append(relative_path); |
-} |
- |
-std::wstring MockIEEventSinkTest::GetTestUrl( |
- const std::wstring& relative_path) { |
- return server_mock_.Resolve(relative_path.c_str()); |
-} |
- |
-} // namespace chrome_frame_test |