diff options
Diffstat (limited to 'chrome_frame/test/navigation_test.cc')
-rw-r--r-- | chrome_frame/test/navigation_test.cc | 82 |
1 files changed, 70 insertions, 12 deletions
diff --git a/chrome_frame/test/navigation_test.cc b/chrome_frame/test/navigation_test.cc index 457793d..7e157ee 100644 --- a/chrome_frame/test/navigation_test.cc +++ b/chrome_frame/test/navigation_test.cc @@ -11,6 +11,7 @@ #include "chrome_frame/test/chrome_frame_ui_test_utils.h" #include "chrome_frame/test/mock_ie_event_sink_actions.h" #include "chrome_frame/test/mock_ie_event_sink_test.h" +#include "net/http/http_util.h" // Needed for CreateFunctor. #define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING @@ -922,19 +923,20 @@ TEST_P(FullTabNavigationTest, RefreshContents) { return; } + const char kHeaders[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n" + "X-UA-Compatible: chrome=1\r\n"; + + const char kBody[] = "<html><body>Hi there. Got new content?" + "</body></html>"; + std::wstring src_url = server_mock_.Resolve(L"/refresh_src.html"); EXPECT_CALL(server_mock_, Get(_, StrEq(L"/refresh_src.html"), _)) .Times(2) - .WillRepeatedly( - SendFast( - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/html\r\n", - "<html>" - "<head><meta http-equiv=\"x-ua-compatible\" content=\"chrome=1\"" - "/></head>" - "<body>Hi there. Got new content?" - "</body></html>")); + .WillOnce(SendFast(kHeaders, kBody)) + .WillOnce(testing::DoAll( + SendFast(kHeaders, kBody), + DelayCloseBrowserMock(&loop_, 4000, &ie_mock_))); EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber()); @@ -945,9 +947,7 @@ TEST_P(FullTabNavigationTest, RefreshContents) { EXPECT_CALL(ie_mock_, OnNavigateComplete2(_, testing::Field(&VARIANT::bstrVal, StrEq(src_url)))) - .WillOnce(testing::DoAll( - DelayRefresh(&ie_mock_, &loop_, 2000), - DelayCloseBrowserMock(&loop_, 4000, &ie_mock_))); + .WillOnce(DelayRefresh(&ie_mock_, &loop_, 2000)); EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(src_url))) .Times(2); @@ -1104,4 +1104,62 @@ TEST_F(FullTabDownloadTest, TopLevelPostReissueFromChromeFramePage) { LaunchIENavigateAndLoop(src_url, kChromeFrameLongNavigationTimeoutInSeconds); } +MATCHER_P(UserAgentHeaderMatcher, ua_string, "") { + std::string headers = arg.headers(); + StringToUpperASCII(&headers); + + std::string ua_string_to_search = ua_string; + StringToUpperASCII(&ua_string_to_search); + + net::HttpUtil::HeadersIterator it(headers.begin(), headers.end(), + "\r\n"); + while (it.GetNext()) { + if (lstrcmpiA(it.name().c_str(), "User-Agent") == 0) { + if (it.values().find(ua_string_to_search) != std::string::npos) + return true; + } + } + return false; +} + +// Tests refreshing causes a page load and that the chrome frame user agent +// string is appended to the UA in the incoming top level HTTP requests. +TEST_P(FullTabNavigationTest, RefreshContentsUATest) { + const char kBody[] = "<html><head></head>" + "<body>Hi there. Got new content?" + "</body></html>"; + + std::string headers = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"; + bool in_cf = GetParam().invokes_cf(); + if (in_cf) { + headers.append("X-UA-Compatible: chrome=1\r\n"); + } + + std::wstring src_url = server_mock_.Resolve(L"/refresh_src.html"); + + EXPECT_CALL(server_mock_, Get(_, StrEq(L"/refresh_src.html"), + UserAgentHeaderMatcher("chromeframe"))) + .Times(2) + .WillOnce(SendFast(headers, kBody)) + .WillOnce(testing::DoAll( + SendFast(headers, kBody), + DelayCloseBrowserMock(&loop_, 4000, &ie_mock_))); + + EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber()); + + EXPECT_CALL(ie_mock_, + OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal, + StrEq(src_url)), + _, _, _, _, _)); + EXPECT_CALL(ie_mock_, + OnNavigateComplete2(_, testing::Field(&VARIANT::bstrVal, + StrEq(src_url)))) + .WillOnce(DelayRefresh(&ie_mock_, &loop_, 2000)); + + EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(src_url))) + .Times(testing::AtMost(2)); + + LaunchIEAndNavigate(src_url); +} + } // namespace chrome_frame_test |