summaryrefslogtreecommitdiffstats
path: root/chrome_frame/test/net/fake_external_tab.cc
diff options
context:
space:
mode:
authorjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-12 21:34:24 +0000
committerjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-12 21:34:24 +0000
commitf9b85d83b284fa4e7d1f12ef153883d38ddf3258 (patch)
tree0998eb6ab997d77ae8870f72db707122b6122aa2 /chrome_frame/test/net/fake_external_tab.cc
parent810aa6d08ed39089b1f4c1f71ad48ed0c918feca (diff)
downloadchromium_src-f9b85d83b284fa4e7d1f12ef153883d38ddf3258.zip
chromium_src-f9b85d83b284fa4e7d1f12ef153883d38ddf3258.tar.gz
chromium_src-f9b85d83b284fa4e7d1f12ef153883d38ddf3258.tar.bz2
This goes most of the way to re-enabling chrome_frame_net_tests by making it a content::BrowserMainParts. The tests are still disabled until we are able to test them on IE8 and older; on IE9 all tests currently pass except for a few that hang.
Additionally, this makes chrome_frame_net_tests determine protocol version using the exact same version information as npchrome_frame.dll does, so that version mismatch due to the RC dependency problems we have sometimes seen should not happen any more with this test suite. While in there, I also updated the poor_mans_trybot.bat script. BUG=105435 Review URL: http://codereview.chromium.org/8894008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114080 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/test/net/fake_external_tab.cc')
-rw-r--r--chrome_frame/test/net/fake_external_tab.cc500
1 files changed, 304 insertions, 196 deletions
diff --git a/chrome_frame/test/net/fake_external_tab.cc b/chrome_frame/test/net/fake_external_tab.cc
index 931e2a9..34a728a 100644
--- a/chrome_frame/test/net/fake_external_tab.cc
+++ b/chrome_frame/test/net/fake_external_tab.cc
@@ -27,8 +27,8 @@
#include "base/win/scoped_com_initializer.h"
#include "base/win/scoped_comptr.h"
#include "base/win/scoped_handle.h"
+#include "chrome/app/chrome_main_delegate.h"
#include "chrome/browser/automation/automation_provider_list.h"
-#include "chrome/browser/browser_process_impl.h" // TODO(joi): Remove
#include "chrome/browser/chrome_content_browser_client.h"
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/prefs/pref_service.h"
@@ -49,12 +49,15 @@
#include "chrome_frame/test/simulate_input.h"
#include "chrome_frame/test/win_event_receiver.h"
#include "chrome_frame/utils.h"
+#include "content/app/content_main.h"
#include "content/browser/plugin_service.h"
#include "content/browser/notification_service_impl.h"
+#include "content/public/app/startup_helper_win.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_paths.h"
-#include "content/test/test_browser_thread.h" // TODO(joi): Remove
+#include "sandbox/src/sandbox_types.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/ui_base_paths.h"
@@ -63,6 +66,13 @@ using content::BrowserThread;
namespace {
+// We must store this globally so that our main delegate can set it.
+static CFUrlRequestUnittestRunner* g_test_suite = NULL;
+
+// Copied here for access by CreateBrowserMainParts and InitGoogleTest.
+static int g_argc = 0;
+static char** g_argv = NULL;
+
// A special command line switch to allow developers to manually launch the
// browser and debug CF inside the browser.
const char kManualBrowserLaunch[] = "manual-browser";
@@ -113,6 +123,176 @@ bool SetFocusToAccessibleWindow(HWND hwnd) {
return ret;
}
+class FakeContentBrowserClient : public chrome::ChromeContentBrowserClient {
+ public:
+ virtual ~FakeContentBrowserClient() {}
+
+ virtual content::BrowserMainParts* CreateBrowserMainParts(
+ const content::MainFunctionParams& parameters) OVERRIDE;
+};
+
+base::LazyInstance<chrome::ChromeContentClient>
+ g_chrome_content_client = LAZY_INSTANCE_INITIALIZER;
+
+// Override the default ContentBrowserClient to let Chrome participate in
+// content logic. Must be done before any tabs are created.
+base::LazyInstance<FakeContentBrowserClient>
+ g_browser_client = LAZY_INSTANCE_INITIALIZER;
+
+base::LazyInstance<chrome::ChromeContentRendererClient>
+ g_renderer_client = LAZY_INSTANCE_INITIALIZER;
+
+class FakeMainDelegate : public content::ContentMainDelegate {
+ public:
+ virtual ~FakeMainDelegate() {}
+
+ virtual bool BasicStartupComplete(int* exit_code) OVERRIDE {
+ return false;
+ }
+
+ virtual void PreSandboxStartup() OVERRIDE {
+ // Initialize the content client.
+ content::SetContentClient(&g_chrome_content_client.Get());
+
+ // Override the default ContentBrowserClient to let Chrome participate in
+ // content logic. We use a subclass of Chrome's implementation,
+ // FakeContentBrowserClient, to override CreateBrowserMainParts. Must
+ // be done before any tabs are created.
+ content::GetContentClient()->set_browser(&g_browser_client.Get());
+
+ content::GetContentClient()->set_renderer(&g_renderer_client.Get());
+ }
+
+ virtual void SandboxInitialized(const std::string& process_type) OVERRIDE {}
+
+ virtual int RunProcess(
+ const std::string& process_type,
+ const content::MainFunctionParams& main_function_params) OVERRIDE {
+ return -1;
+ }
+ virtual void ProcessExiting(const std::string& process_type) OVERRIDE {}
+};
+
+void FilterDisabledTests() {
+ if (::testing::FLAGS_gtest_filter.length() &&
+ ::testing::FLAGS_gtest_filter.Compare("*") != 0) {
+ // Don't override user specified filters.
+ return;
+ }
+
+ const char* disabled_tests[] = {
+ // Tests disabled since they're testing the same functionality used
+ // by the TestAutomationProvider.
+ "URLRequestTest.Intercept",
+ "URLRequestTest.InterceptNetworkError",
+ "URLRequestTest.InterceptRestartRequired",
+ "URLRequestTest.InterceptRespectsCancelMain",
+ "URLRequestTest.InterceptRespectsCancelRedirect",
+ "URLRequestTest.InterceptRespectsCancelFinal",
+ "URLRequestTest.InterceptRespectsCancelInRestart",
+ "URLRequestTest.InterceptRedirect",
+ "URLRequestTest.InterceptServerError",
+ "URLRequestTestFTP.*",
+
+ // Tests that are currently not working:
+
+ // Temporarily disabled because they needs user input (login dialog).
+ "URLRequestTestHTTP.BasicAuth",
+ "URLRequestTestHTTP.BasicAuthWithCookies",
+
+ // HTTPS tests temporarily disabled due to the certificate error dialog.
+ // TODO(tommi): The tests currently fail though, so need to fix.
+ "HTTPSRequestTest.HTTPSMismatchedTest",
+ "HTTPSRequestTest.HTTPSExpiredTest",
+ "HTTPSRequestTest.ClientAuthTest",
+
+ // Tests chrome's network stack's cache (might not apply to CF).
+ "URLRequestTestHTTP.VaryHeader",
+ "URLRequestTestHTTP.GetZippedTest",
+
+ // I suspect we can only get this one to work (if at all) on IE8 and
+ // later by using the new INTERNET_OPTION_SUPPRESS_BEHAVIOR flags
+ // See http://msdn.microsoft.com/en-us/library/aa385328(VS.85).aspx
+ "URLRequestTest.DoNotSaveCookies",
+ "URLRequestTest.DelayedCookieCallback",
+
+ // TODO(ananta): This test has been consistently failing. Disabling it for
+ // now.
+ "URLRequestTestHTTP.GetTest_NoCache",
+
+ // These tests have been disabled as the Chrome cookie policies don't make
+ // sense or have not been implemented for the host network stack.
+ "URLRequestTest.DoNotSaveCookies_ViaPolicy",
+ "URLRequestTest.DoNotSendCookies_ViaPolicy",
+ "URLRequestTest.DoNotSaveCookies_ViaPolicy_Async",
+ "URLRequestTest.CookiePolicy_ForceSession",
+ "URLRequestTest.DoNotSendCookies",
+ "URLRequestTest.DoNotSendCookies_ViaPolicy_Async",
+ "URLRequestTest.CancelTest_During_OnGetCookies",
+ "URLRequestTest.CancelTest_During_OnSetCookie",
+
+ // These tests are disabled as the rely on functionality provided by
+ // Chrome's HTTP stack like the ability to set the proxy for a URL, etc.
+ "URLRequestTestHTTP.ProxyTunnelRedirectTest",
+ "URLRequestTestHTTP.UnexpectedServerAuthTest",
+
+ // This test is disabled as it expects an empty UA to be echoed back from
+ // the server which is not the case in ChromeFrame.
+ "URLRequestTestHTTP.DefaultUserAgent",
+ // This test modifies the UploadData object after it has been marshaled to
+ // ChromeFrame. We don't support this.
+ "URLRequestTestHTTP.TestPostChunkedDataAfterStart",
+
+ // Do not work in CF, it may well be that IE is unconditionally
+ // adding Accept-Encoding header by default to outgoing requests.
+ "URLRequestTestHTTP.DefaultAcceptEncoding",
+ "URLRequestTestHTTP.OverrideAcceptEncoding",
+
+ // Not supported in ChromeFrame as we use IE's network stack.
+ "URLRequestTest.NetworkDelegateProxyError",
+
+ // URLRequestAutomationJob needs to support NeedsAuth.
+ // http://crbug.com/98446
+ "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredSyncNoAction",
+ "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredSyncSetAuth",
+ "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredSyncCancel",
+ "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredAsyncNoAction",
+ "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredAsyncSetAuth",
+ "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredAsyncCancel",
+
+ // Flaky on the tryservers, http://crbug.com/103097
+ "URLRequestTestHTTP.MultipleRedirectTest",
+ "URLRequestTestHTTP.NetworkDelegateRedirectRequest",
+ };
+
+ const char* ie9_disabled_tests[] = {
+ // These always hang on Joi's box with IE9, http://crbug.com/105435.
+ // Several other tests, e.g. URLRequestTestHTTP.CancelTest2, 3 and
+ // 5, often hang but not always.
+ "URLRequestTestHTTP.NetworkDelegateRedirectRequestPost",
+ "URLRequestTestHTTP.GetTest",
+ "HTTPSRequestTest.HTTPSPreloadedHSTSTest",
+ };
+
+ std::string filter("-"); // All following filters will be negative.
+ for (int i = 0; i < arraysize(disabled_tests); ++i) {
+ if (i > 0)
+ filter += ":";
+ filter += disabled_tests[i];
+ }
+
+ if (chrome_frame_test::GetInstalledIEVersion() >= IE_9) {
+ for (int i = 0; i < arraysize(ie9_disabled_tests); ++i) {
+ filter += ":";
+ filter += ie9_disabled_tests[i];
+ }
+ }
+
+ ::testing::FLAGS_gtest_filter = filter;
+}
+
+} // namespace
+
// Same as BrowserProcessImpl, but uses custom profile manager.
class FakeBrowserProcessImpl : public BrowserProcessImpl {
public:
@@ -121,7 +301,9 @@ class FakeBrowserProcessImpl : public BrowserProcessImpl {
profiles_dir_.CreateUniqueTempDir();
}
- virtual ProfileManager* profile_manager() {
+ virtual ~FakeBrowserProcessImpl() {}
+
+ virtual ProfileManager* profile_manager() OVERRIDE {
if (!profile_manager_.get()) {
profile_manager_.reset(
new ProfileManagerWithoutInit(profiles_dir_.path()));
@@ -129,29 +311,19 @@ class FakeBrowserProcessImpl : public BrowserProcessImpl {
return profile_manager_.get();
}
- virtual MetricsService* metrics_service() {
+ virtual MetricsService* metrics_service() OVERRIDE {
return NULL;
}
+ void DestroyProfileManager() {
+ profile_manager_.reset();
+ }
+
private:
ScopedTempDir profiles_dir_;
scoped_ptr<ProfileManager> profile_manager_;
};
-base::LazyInstance<chrome::ChromeContentClient>
- g_chrome_content_client = LAZY_INSTANCE_INITIALIZER;
-
-// Override the default ContentBrowserClient to let Chrome participate in
-// content logic. Must be done before any tabs are created.
-base::LazyInstance<chrome::ChromeContentBrowserClient>
- g_browser_client = LAZY_INSTANCE_INITIALIZER;
-
-base::LazyInstance<chrome::ChromeContentRendererClient>
- g_renderer_client = LAZY_INSTANCE_INITIALIZER;
-
-} // namespace
-
-
class SupplyProxyCredentials : public WindowObserver {
public:
SupplyProxyCredentials(const char* username, const char* password);
@@ -238,19 +410,8 @@ FakeExternalTab::~FakeExternalTab() {
void FakeExternalTab::Initialize() {
DCHECK(g_browser_process == NULL);
- notificaton_service_.reset(new NotificationServiceImpl);
-
- base::SystemMonitor system_monitor;
-
- icu_util::Initialize();
TestTimeouts::Initialize();
- // Do not call chrome::RegisterPathProvider() since it is also called by our
- // test runner, CFUrlRequestUnittestRunner, and calling it twice unfortunately
- // causes a DCHECK().
- content::RegisterPathProvider();
- ui::RegisterPathProvider();
-
// Load Chrome.dll as our resource dll.
FilePath dll;
PathService::Get(base::DIR_MODULE, &dll);
@@ -275,15 +436,6 @@ void FakeExternalTab::Initialize() {
browser_process_->local_state()->RegisterBooleanPref(
prefs::kMetricsReportingEnabled, false);
-
- // Initialize the content client which that code uses to talk to Chrome.
- content::SetContentClient(&g_chrome_content_client.Get());
-
- // Override the default ContentBrowserClient to let Chrome participate in
- // content logic. Must be done before any tabs are created.
- content::GetContentClient()->set_browser(&g_browser_client.Get());
-
- content::GetContentClient()->set_renderer(&g_renderer_client.Get());
}
void FakeExternalTab::InitializePostThreadsCreated() {
@@ -300,46 +452,18 @@ void FakeExternalTab::Shutdown() {
ResourceBundle::CleanupSharedInstance();
}
-// TODO(joi): Remove!
-class ChromeFrameFriendOfBrowserProcessImpl {
- public:
- static void CreateIOThreadState() {
- reinterpret_cast<BrowserProcessImpl*>(
- g_browser_process)->CreateIOThreadState();
- }
-};
+FakeBrowserProcessImpl* FakeExternalTab::browser_process() const {
+ return browser_process_.get();
+}
CFUrlRequestUnittestRunner::CFUrlRequestUnittestRunner(int argc, char** argv)
: NetTestSuite(argc, argv),
chrome_frame_html_("/chrome_frame", kChromeFrameHtml),
registrar_(chrome_frame_test::GetTestBedType()),
test_result_(0) {
- // Register the main thread by instantiating it, but don't call any methods.
- main_thread_.reset(new content::TestBrowserThread(
- BrowserThread::UI, MessageLoop::current()));
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- fake_chrome_.Initialize();
-
- db_thread_.reset(new content::TestBrowserThread(BrowserThread::DB));
- db_thread_->Start();
-
- file_thread_.reset(new content::TestBrowserThread(BrowserThread::FILE));
- file_thread_->Start();
-
- ChromeFrameFriendOfBrowserProcessImpl::CreateIOThreadState();
-
- io_thread_.reset(new content::TestBrowserThread(BrowserThread::IO));
- io_thread_->StartIOThread();
-
- fake_chrome_.InitializePostThreadsCreated();
-
- pss_subclass_.reset(new ProcessSingletonSubclass(this));
- EXPECT_TRUE(pss_subclass_->Subclass(fake_chrome_.user_data()));
- StartChromeFrameInHostBrowser();
}
CFUrlRequestUnittestRunner::~CFUrlRequestUnittestRunner() {
- fake_chrome_.Shutdown();
}
void CFUrlRequestUnittestRunner::StartChromeFrameInHostBrowser() {
@@ -382,14 +506,13 @@ void CFUrlRequestUnittestRunner::Initialize() {
// directly because it will attempt to initialize some things such as
// ICU that have already been initialized for this process.
CFUrlRequestUnittestRunner::InitializeLogging();
- base::Time::EnableHighResolutionTimer(true);
SuppressErrorDialogs();
base::debug::SetSuppressDebugUI(true);
logging::SetLogAssertHandler(UnitTestAssertHandler);
// Next, do some initialization for NetTestSuite.
- NetTestSuite::InitializeTestThread();
+ NetTestSuite::InitializeTestThreadNoNetworkChangeNotifier();
}
void CFUrlRequestUnittestRunner::Shutdown() {
@@ -401,7 +524,7 @@ void CFUrlRequestUnittestRunner::Shutdown() {
void CFUrlRequestUnittestRunner::OnConnectAutomationProviderToChannel(
const std::string& channel_id) {
Profile* profile = g_browser_process->profile_manager()->
- GetDefaultProfile(fake_chrome_.user_data());
+ GetDefaultProfile(fake_chrome_->user_data());
AutomationProviderList* list = g_browser_process->GetAutomationProviderList();
DCHECK(list);
@@ -414,12 +537,6 @@ void CFUrlRequestUnittestRunner::OnInitialTabLoaded() {
StartTests();
}
-void CFUrlRequestUnittestRunner::RunMainUIThread() {
- DCHECK(MessageLoop::current());
- DCHECK(MessageLoop::current()->type() == MessageLoop::TYPE_UI);
- MessageLoop::current()->Run();
-}
-
void CFUrlRequestUnittestRunner::StartTests() {
if (PromptAfterSetup())
MessageBoxA(NULL, "click ok to run", "", MB_OK);
@@ -433,13 +550,12 @@ void CFUrlRequestUnittestRunner::StartTests() {
// static
DWORD CFUrlRequestUnittestRunner::RunAllUnittests(void* param) {
base::PlatformThread::SetName("CFUrlRequestUnittestRunner");
- // Needed for some url request tests like the intercept job tests, etc.
- NotificationServiceImpl service;
CFUrlRequestUnittestRunner* me =
reinterpret_cast<CFUrlRequestUnittestRunner*>(param);
me->test_result_ = me->Run();
- me->fake_chrome_.ui_loop()->PostTask(FROM_HERE,
- base::Bind(TakeDownBrowser, me));
+ BrowserThread::PostTask(BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(TakeDownBrowser, me));
return 0;
}
@@ -450,9 +566,10 @@ void CFUrlRequestUnittestRunner::TakeDownBrowser(
MessageBoxA(NULL, "click ok to exit", "", MB_OK);
me->ShutDownHostBrowser();
- me->fake_chrome_.ui_loop()->PostDelayedTask(FROM_HERE,
- MessageLoop::QuitClosure(),
- TestTimeouts::tiny_timeout_ms());
+ BrowserThread::PostDelayedTask(BrowserThread::UI,
+ FROM_HERE,
+ MessageLoop::QuitClosure(),
+ TestTimeouts::tiny_timeout_ms());
}
void CFUrlRequestUnittestRunner::InitializeLogging() {
@@ -470,106 +587,76 @@ void CFUrlRequestUnittestRunner::InitializeLogging() {
logging::SetLogItems(true, true, true, true);
}
-void FilterDisabledTests() {
- if (::testing::FLAGS_gtest_filter.length() &&
- ::testing::FLAGS_gtest_filter.Compare("*") != 0) {
- // Don't override user specified filters.
- return;
- }
+void CFUrlRequestUnittestRunner::PreEarlyInitialization() {
+ testing::InitGoogleTest(&g_argc, g_argv);
+ FilterDisabledTests();
+}
- const char* disabled_tests[] = {
- // Tests disabled since they're testing the same functionality used
- // by the TestAutomationProvider.
- "URLRequestTest.Intercept",
- "URLRequestTest.InterceptNetworkError",
- "URLRequestTest.InterceptRestartRequired",
- "URLRequestTest.InterceptRespectsCancelMain",
- "URLRequestTest.InterceptRespectsCancelRedirect",
- "URLRequestTest.InterceptRespectsCancelFinal",
- "URLRequestTest.InterceptRespectsCancelInRestart",
- "URLRequestTest.InterceptRedirect",
- "URLRequestTest.InterceptServerError",
- "URLRequestTestFTP.*",
+void CFUrlRequestUnittestRunner::PreCreateThreads() {
+ fake_chrome_.reset(new FakeExternalTab());
+ fake_chrome_->Initialize();
- // Tests that are currently not working:
+ pss_subclass_.reset(new ProcessSingletonSubclass(this));
+ EXPECT_TRUE(pss_subclass_->Subclass(fake_chrome_->user_data()));
+ StartChromeFrameInHostBrowser();
+}
- // Temporarily disabled because they needs user input (login dialog).
- "URLRequestTestHTTP.BasicAuth",
- "URLRequestTestHTTP.BasicAuthWithCookies",
+void CFUrlRequestUnittestRunner::PreStartThread(BrowserThread::ID identifier) {
+ fake_chrome_->browser_process()->PreStartThread(identifier);
+}
- // HTTPS tests temporarily disabled due to the certificate error dialog.
- // TODO(tommi): The tests currently fail though, so need to fix.
- "HTTPSRequestTest.HTTPSMismatchedTest",
- "HTTPSRequestTest.HTTPSExpiredTest",
- "HTTPSRequestTest.ClientAuthTest",
+void CFUrlRequestUnittestRunner::PostStartThread(BrowserThread::ID identifier) {
+ fake_chrome_->browser_process()->PostStartThread(identifier);
+}
- // Tests chrome's network stack's cache (might not apply to CF).
- "URLRequestTestHTTP.VaryHeader",
- "URLRequestTestHTTP.GetZippedTest",
+void CFUrlRequestUnittestRunner::PreMainMessageLoopRun() {
+ fake_chrome_->InitializePostThreadsCreated();
+}
- // I suspect we can only get this one to work (if at all) on IE8 and
- // later by using the new INTERNET_OPTION_SUPPRESS_BEHAVIOR flags
- // See http://msdn.microsoft.com/en-us/library/aa385328(VS.85).aspx
- "URLRequestTest.DoNotSaveCookies",
- "URLRequestTest.DelayedCookieCallback",
+bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) {
+ DCHECK(MessageLoop::current());
+ DCHECK(MessageLoop::current()->type() == MessageLoop::TYPE_UI);
- // TODO(ananta): This test has been consistently failing. Disabling it for
- // now.
- "URLRequestTestHTTP.GetTest_NoCache",
+ // We need to allow IO on the main thread for these tests.
+ base::ThreadRestrictions::SetIOAllowed(true);
- // These tests have been disabled as the Chrome cookie policies don't make
- // sense or have not been implemented for the host network stack.
- "URLRequestTest.DoNotSaveCookies_ViaPolicy",
- "URLRequestTest.DoNotSendCookies_ViaPolicy",
- "URLRequestTest.DoNotSaveCookies_ViaPolicy_Async",
- "URLRequestTest.CookiePolicy_ForceSession",
- "URLRequestTest.DoNotSendCookies",
- "URLRequestTest.DoNotSendCookies_ViaPolicy_Async",
- "URLRequestTest.CancelTest_During_OnGetCookies",
- "URLRequestTest.CancelTest_During_OnSetCookie",
+ return false;
+}
- // These tests are disabled as the rely on functionality provided by
- // Chrome's HTTP stack like the ability to set the proxy for a URL, etc.
- "URLRequestTestHTTP.ProxyTunnelRedirectTest",
- "URLRequestTestHTTP.UnexpectedServerAuthTest",
+void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() {
+ fake_chrome_->browser_process()->StartTearDown();
- // This test is disabled as it expects an empty UA to be echoed back from
- // the server which is not the case in ChromeFrame.
- "URLRequestTestHTTP.DefaultUserAgent",
- // This test modifies the UploadData object after it has been marshaled to
- // ChromeFrame. We don't support this.
- "URLRequestTestHTTP.TestPostChunkedDataAfterStart",
+ // Must do this separately as the mock profile_manager_ is not the
+ // same member as BrowserProcessImpl::StartTearDown resets.
+ fake_chrome_->browser_process()->DestroyProfileManager();
- // Do not work in CF, it may well be that IE is unconditionally
- // adding Accept-Encoding header by default to outgoing requests.
- "URLRequestTestHTTP.DefaultAcceptEncoding",
- "URLRequestTestHTTP.OverrideAcceptEncoding",
+ if (crash_service_)
+ base::KillProcess(crash_service_, 0, false);
- // Not supported in ChromeFrame as we use IE's network stack.
- "URLRequestTest.NetworkDelegateProxyError",
+ base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL);
+ base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL);
+}
- // URLRequestAutomationJob needs to support NeedsAuth.
- // http://crbug.com/98446
- "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredSyncNoAction",
- "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredSyncSetAuth",
- "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredSyncCancel",
- "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredAsyncNoAction",
- "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredAsyncSetAuth",
- "URLRequestTestHTTP.NetworkDelegateOnAuthRequiredAsyncCancel",
+void CFUrlRequestUnittestRunner::PreStopThread(
+ content::BrowserThread::ID identifier) {
+ fake_chrome_->browser_process()->PreStopThread(identifier);
+}
- // Flaky on the tryservers, http://crbug.com/103097
- "URLRequestTestHTTP.MultipleRedirectTest",
- "URLRequestTestHTTP.NetworkDelegateRedirectRequest",
- };
+void CFUrlRequestUnittestRunner::PostStopThread(
+ content::BrowserThread::ID identifier) {
+ fake_chrome_->browser_process()->PostStopThread(identifier);
+}
- std::string filter("-"); // All following filters will be negative.
- for (int i = 0; i < arraysize(disabled_tests); ++i) {
- if (i > 0)
- filter += ":";
- filter += disabled_tests[i];
- }
+void CFUrlRequestUnittestRunner::PostDestroyThreads() {
+ fake_chrome_->Shutdown();
+ fake_chrome_.reset();
- ::testing::FLAGS_gtest_filter = filter;
+#ifndef NDEBUG
+ // Avoid CRT cleanup in debug test runs to ensure that webkit ASSERTs which
+ // check if globals are created and destroyed on the same thread don't fire.
+ // Webkit global objects are created on the inproc renderer thread.
+ ExitProcess(test_result());
+#endif
}
// We need a module since some of the accessibility code that gets pulled
@@ -608,54 +695,75 @@ const char* IEVersionToString(IEVersion version) {
}
}
+content::BrowserMainParts* FakeContentBrowserClient::CreateBrowserMainParts(
+ const content::MainFunctionParams& parameters) {
+ // We never delete this, as the content module takes ownership.
+ //
+ // We must not construct this earlier, or we will have out-of-order
+ // AtExitManager creation/destruction.
+ g_test_suite = new CFUrlRequestUnittestRunner(g_argc, g_argv);
+ g_test_suite->set_crash_service(chrome_frame_test::StartCrashService());
+ return g_test_suite;
+}
+
+// We must provide a few functions content/ expects to link with. They
+// are never called for this executable.
+int PluginMain(const content::MainFunctionParams& parameters) {
+ NOTREACHED();
+ return 0;
+}
+
+int PpapiBrokerMain(const content::MainFunctionParams& parameters) {
+ return PluginMain(parameters);
+}
+
+int PpapiPluginMain(const content::MainFunctionParams& parameters) {
+ return PluginMain(parameters);
+}
+
+int WorkerMain(const content::MainFunctionParams& parameters) {
+ return PluginMain(parameters);
+}
+
int main(int argc, char** argv) {
- // TODO(joi): Remove the "true" part here and fix the log statement below.
+ g_argc = argc;
+ g_argv = argv;
+
+ // Temporarily disabled, http://crbug.com/105435.
if (true || chrome_frame_test::GetInstalledIEVersion() >= IE_9) {
// Adding this here as the command line and the logging stuff gets
// initialized in the NetTestSuite constructor. Did not want to break that.
base::AtExitManager at_exit_manager;
CommandLine::Init(argc, argv);
CFUrlRequestUnittestRunner::InitializeLogging();
- LOG(INFO) << "Temporarily not running any ChromeFrame "
- << "net tests (http://crbug.com/105435)";
+ LOG(INFO) << "Temporarily not running ChromeFrame net tests.";
+ //LOG(INFO) << "Not running ChromeFrame net tests on IE9+";
return 0;
}
google_breakpad::scoped_ptr<google_breakpad::ExceptionHandler> breakpad(
InitializeCrashReporting(HEADLESS));
- // TODO(tommi): Stuff be broke. Needs a fixin'.
- // This is awkward: the TestSuite derived CFUrlRequestUnittestRunner contains
- // the instance of the AtExitManager that RegisterPathProvider() and others
- // below require. So we have to instantiate this first.
- CFUrlRequestUnittestRunner test_suite(argc, argv);
-
// Display the IE version we run with. This must be done after
// CFUrlRequestUnittestRunner is constructed since that initializes logging.
IEVersion ie_version = chrome_frame_test::GetInstalledIEVersion();
LOG(INFO) << "Running CF net tests with IE version: "
<< IEVersionToString(ie_version);
- base::ProcessHandle crash_service = chrome_frame_test::StartCrashService();
-
- WindowWatchdog watchdog;
// See url_request_unittest.cc for these credentials.
SupplyProxyCredentials credentials("user", "secret");
+ WindowWatchdog watchdog;
watchdog.AddObserver(&credentials, "Windows Security", "");
- testing::InitGoogleTest(&argc, argv);
- FilterDisabledTests();
- test_suite.RunMainUIThread();
- if (crash_service)
- base::KillProcess(crash_service, 0, false);
-
- base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL);
- base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL);
- // Avoid CRT cleanup in debug test runs to ensure that webkit ASSERTs which
- // check if globals are created and destroyed on the same thread don't fire.
- // Webkit global objects are created on the inproc renderer thread.
-#if !defined(NDEBUG)
- ExitProcess(test_suite.test_result());
-#endif // NDEBUG
- return test_suite.test_result();
+ sandbox::SandboxInterfaceInfo sandbox_info = {0};
+ // This would normally be done, but is probably not needed for these tests.
+ // content::InitializeSandboxInfo(&sandbox_info);
+ FakeMainDelegate delegate;
+ content::ContentMain(
+ reinterpret_cast<HINSTANCE>(GetModuleHandle(NULL)),
+ &sandbox_info,
+ &delegate);
+
+ // Note: In debug builds, we ExitProcess during PostDestroyThreads.
+ return g_test_suite->test_result();
}