summaryrefslogtreecommitdiffstats
path: root/chrome_frame/test
diff options
context:
space:
mode:
Diffstat (limited to 'chrome_frame/test')
-rw-r--r--chrome_frame/test/http_negotiate_unittest.cc106
-rw-r--r--chrome_frame/test/navigation_test.cc82
2 files changed, 70 insertions, 118 deletions
diff --git a/chrome_frame/test/http_negotiate_unittest.cc b/chrome_frame/test/http_negotiate_unittest.cc
index c56034b..857197e 100644
--- a/chrome_frame/test/http_negotiate_unittest.cc
+++ b/chrome_frame/test/http_negotiate_unittest.cc
@@ -16,112 +16,6 @@
#include "gtest/gtest.h"
#include "gmock/gmock.h"
-class HttpNegotiateTest : public testing::Test {
- protected:
- HttpNegotiateTest() {
- }
-};
-
-class TestHttpNegotiate
- : public CComObjectRootEx<CComMultiThreadModel>,
- public IHttpNegotiate {
- public:
- TestHttpNegotiate()
- : beginning_transaction_ret_(S_OK), additional_headers_(NULL) {
- }
-
-BEGIN_COM_MAP(TestHttpNegotiate)
- COM_INTERFACE_ENTRY(IHttpNegotiate)
-END_COM_MAP()
- STDMETHOD(BeginningTransaction)(LPCWSTR url, LPCWSTR headers, // NOLINT
- DWORD reserved, // NOLINT
- LPWSTR* additional_headers) { // NOLINT
- if (additional_headers_) {
- int len = lstrlenW(additional_headers_);
- len++;
- *additional_headers = reinterpret_cast<wchar_t*>(
- ::CoTaskMemAlloc(len * sizeof(wchar_t)));
- lstrcpyW(*additional_headers, additional_headers_);
- }
- return beginning_transaction_ret_;
- }
-
- STDMETHOD(OnResponse)(DWORD response_code, LPCWSTR response_header,
- LPCWSTR request_header,
- LPWSTR* additional_request_headers) {
- return S_OK;
- }
-
- HRESULT beginning_transaction_ret_;
- const wchar_t* additional_headers_;
-};
-
-TEST_F(HttpNegotiateTest, BeginningTransaction) {
- static const int kBeginningTransactionIndex = 3;
- CComObjectStackEx<TestHttpNegotiate> test_http;
- IHttpNegotiate_BeginningTransaction_Fn original =
- reinterpret_cast<IHttpNegotiate_BeginningTransaction_Fn>(
- (*reinterpret_cast<void***>(
- static_cast<IHttpNegotiate*>(
- &test_http)))[kBeginningTransactionIndex]);
-
- std::wstring cf_ua(
- ASCIIToWide(http_utils::GetDefaultUserAgentHeaderWithCFTag()));
- std::wstring cf_tag(
- ASCIIToWide(http_utils::GetChromeFrameUserAgent()));
-
- EXPECT_NE(std::wstring::npos, cf_ua.find(cf_tag));
-
- struct TestCase {
- const std::wstring original_headers_;
- const std::wstring delegate_additional_;
- const std::wstring expected_additional_;
- HRESULT delegate_return_value_;
- } test_cases[] = {
- { L"Accept: */*\r\n",
- L"",
- cf_ua + L"\r\n",
- S_OK },
- { L"Accept: */*\r\n",
- L"",
- L"",
- E_OUTOFMEMORY },
- { L"",
- L"Accept: */*\r\n",
- L"Accept: */*\r\n" + cf_ua + L"\r\n",
- S_OK },
- { L"User-Agent: Bingo/1.0\r\n",
- L"",
- L"User-Agent: Bingo/1.0 " + cf_tag + L"\r\n",
- S_OK },
- { L"User-Agent: NotMe/1.0\r\n",
- L"User-Agent: MeMeMe/1.0\r\n",
- L"User-Agent: MeMeMe/1.0 " + cf_tag + L"\r\n",
- S_OK },
- { L"",
- L"User-Agent: MeMeMe/1.0\r\n",
- L"User-Agent: MeMeMe/1.0 " + cf_tag + L"\r\n",
- S_OK },
- };
-
- for (int i = 0; i < arraysize(test_cases); ++i) {
- TestCase& test = test_cases[i];
- wchar_t* additional = NULL;
- test_http.beginning_transaction_ret_ = test.delegate_return_value_;
- test_http.additional_headers_ = test.delegate_additional_.c_str();
- HttpNegotiatePatch::BeginningTransaction(original, &test_http,
- L"http://www.google.com", test.original_headers_.c_str(), 0,
- &additional);
- EXPECT_TRUE(additional != NULL);
-
- if (additional) {
- // Check against the expected additional headers.
- EXPECT_EQ(test.expected_additional_, std::wstring(additional));
- ::CoTaskMemFree(additional);
- }
- }
-}
-
class TestInternetProtocolSink
: public CComObjectRootEx<CComMultiThreadModel>,
public IInternetProtocolSink {
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