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

Unified Diff: chrome_frame/test/test_with_web_server.cc

Issue 3433026: Add a unit test for refresh in mshtml to see where we're not tagging the user... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/test/test_with_web_server.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/test/test_with_web_server.cc
===================================================================
--- chrome_frame/test/test_with_web_server.cc (revision 60471)
+++ chrome_frame/test/test_with_web_server.cc (working copy)
@@ -17,6 +17,7 @@
#include "chrome_frame/test/chrome_frame_test_utils.h"
#include "chrome_frame/test/mock_ie_event_sink_actions.h"
#include "net/base/mime_util.h"
+#include "net/http/http_util.h"
using chrome_frame_test::kChromeFrameLongNavigationTimeoutInSeconds;
using testing::_;
@@ -946,7 +947,8 @@
};
SimpleWebServerTest server(46664);
- server.PopulateStaticFileList(kPages, arraysize(kPages), GetCFTestFilePath());
+ server.PopulateStaticFileListT<test_server::FileResponse>(kPages,
+ arraysize(kPages), GetCFTestFilePath());
ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
@@ -982,7 +984,8 @@
SimpleWebServerTest server(46664);
- server.PopulateStaticFileList(kPages, arraysize(kPages), GetCFTestFilePath());
+ server.PopulateStaticFileListT<test_server::FileResponse>(kPages,
+ arraysize(kPages), GetCFTestFilePath());
ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
@@ -1015,3 +1018,102 @@
SimpleBrowserTest(IE, kXHRConditionalHeaderTestUrl);
}
+std::string GetHeaderValue(const std::string& headers,
+ const char* header_name) {
+ net::HttpUtil::HeadersIterator it(headers.begin(), headers.end(),
+ "\r\n");
+ while (it.GetNext()) {
+ if (lstrcmpiA(it.name().c_str(), header_name) == 0) {
+ return it.values();
+ }
+ }
+ return "";
+}
+
+// Specialized implementation of test_server::FileResponse that supports
+// adding the request's User-Agent header to the returned document.
+// The class also supports $request_id$ which will be replaced with an
+// id that's incremented each time the response is sent over a socket.
+class UaTemplateFileResponse : public test_server::FileResponse {
+ public:
+ typedef test_server::FileResponse SuperClass;
+
+ UaTemplateFileResponse(const char* request_path, const FilePath& file_path)
+ : test_server::FileResponse(request_path, file_path), request_id_(0) {
+ }
+
+ virtual bool Matches(const test_server::Request& r) const {
+ bool ret = SuperClass::Matches(r);
+ if (ret)
+ ua_ = GetHeaderValue(r.headers(), "User-Agent");
+ return ret;
+ }
+
+ virtual size_t ContentLength() const {
+ const char kRequestIdTemplate[] = "$request_id$";
+ const char kUserAgentTemplate[] = "$UA$";
+
+ size_t length = SuperClass::ContentLength();
+ DCHECK(length);
+ content_.assign(reinterpret_cast<const char*>(file_->data()),
+ file_->length());
+ size_t i = content_.find(kUserAgentTemplate);
+ if (i != std::string::npos)
+ content_.replace(i, arraysize(kUserAgentTemplate) - 1, ua_);
+ i = content_.find(kRequestIdTemplate);
+ if (i != std::string::npos) {
+ content_.replace(i, arraysize(kRequestIdTemplate) - 1,
+ StringPrintf("%i", request_id_));
+ }
+ return content_.length();
+ }
+
+ virtual void WriteContents(ListenSocket* socket) const {
+ DCHECK(content_.length());
+ socket->Send(content_.c_str(), content_.length(), false);
+ request_id_++;
+ }
+
+ protected:
+ mutable std::string ua_;
+ mutable std::string content_;
+ mutable int request_id_;
+};
+
+// This test simulates a URL that on first request returns a document
+// that should be rendered in mshtml, then pops up a sign-in page that
+// after signing in, refreshes the original page that should then return
+// a page that needs to be rendered in GCF.
+//
+// This test currently fails because GCF does not add the chromeframe header
+// to requests that mshtml initiates via IInternetSession::CreateBinding.
+TEST_F(ChromeFrameTestWithWebServer, FAILS_FullTabModeIE_RefreshMshtmlTest) {
+ const wchar_t* kPages[] = {
+ L"mshtml_refresh_test.html",
+ L"mshtml_refresh_test_popup.html",
+ };
+
+ SimpleWebServerTest server(46664);
+ server.PopulateStaticFileListT<UaTemplateFileResponse>(kPages,
+ arraysize(kPages), GetCFTestFilePath());
+
+ ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
+
+ loop_.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
+
+ test_server::SimpleWebServer* ws = server.web_server();
+ const test_server::ConnectionList& connections = ws->connections();
+ test_server::ConnectionList::const_iterator it = connections.begin();
+ int requests_for_first_page = 0;
+ for (; it != connections.end(); ++it) {
+ test_server::Connection* c = (*it);
+ const test_server::Request& r = c->request();
+ if (ASCIIToWide(r.path().substr(1)).compare(kPages[0]) == 0) {
+ requests_for_first_page++;
+ std::string ua(GetHeaderValue(r.headers(), "User-Agent"));
+ EXPECT_NE(std::string::npos, ua.find("chromeframe"));
+ }
+ }
+ EXPECT_GT(requests_for_first_page, 1);
+}
+
« no previous file with comments | « chrome_frame/test/test_with_web_server.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698