Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome_frame/test/net/fake_external_tab.h" | 5 #include "chrome_frame/test/net/fake_external_tab.h" |
| 6 | 6 |
| 7 #include <atlbase.h> | 7 #include <atlbase.h> |
| 8 #include <atlcom.h> | 8 #include <atlcom.h> |
| 9 #include <exdisp.h> | 9 #include <exdisp.h> |
| 10 #include <Winsock2.h> | 10 #include <Winsock2.h> |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 #include "chrome/common/chrome_paths.h" | 42 #include "chrome/common/chrome_paths.h" |
| 43 #include "chrome/common/chrome_paths_internal.h" | 43 #include "chrome/common/chrome_paths_internal.h" |
| 44 #include "chrome/common/chrome_switches.h" | 44 #include "chrome/common/chrome_switches.h" |
| 45 #include "chrome/common/pref_names.h" | 45 #include "chrome/common/pref_names.h" |
| 46 #include "chrome/renderer/chrome_content_renderer_client.h" | 46 #include "chrome/renderer/chrome_content_renderer_client.h" |
| 47 #include "chrome/test/logging/win/file_logger.h" | 47 #include "chrome/test/logging/win/file_logger.h" |
| 48 #include "chrome/test/logging/win/log_file_printer.h" | 48 #include "chrome/test/logging/win/log_file_printer.h" |
| 49 #include "chrome/test/logging/win/test_log_collector.h" | 49 #include "chrome/test/logging/win/test_log_collector.h" |
| 50 #include "chrome_frame/crash_server_init.h" | 50 #include "chrome_frame/crash_server_init.h" |
| 51 #include "chrome_frame/test/chrome_frame_test_utils.h" | 51 #include "chrome_frame/test/chrome_frame_test_utils.h" |
| 52 #include "chrome_frame/test/ie_configurator.h" | |
| 52 #include "chrome_frame/test/net/test_automation_resource_message_filter.h" | 53 #include "chrome_frame/test/net/test_automation_resource_message_filter.h" |
| 53 #include "chrome_frame/test/simulate_input.h" | 54 #include "chrome_frame/test/simulate_input.h" |
| 54 #include "chrome_frame/test/win_event_receiver.h" | 55 #include "chrome_frame/test/win_event_receiver.h" |
| 55 #include "chrome_frame/utils.h" | 56 #include "chrome_frame/utils.h" |
| 56 #include "content/public/app/content_main.h" | 57 #include "content/public/app/content_main.h" |
| 57 #include "content/public/app/startup_helper_win.h" | 58 #include "content/public/app/startup_helper_win.h" |
| 58 #include "content/public/browser/browser_thread.h" | 59 #include "content/public/browser/browser_thread.h" |
| 59 #include "content/public/browser/notification_service.h" | 60 #include "content/public/browser/notification_service.h" |
| 60 #include "content/public/browser/render_process_host.h" | 61 #include "content/public/browser/render_process_host.h" |
| 61 #include "content/public/common/content_client.h" | 62 #include "content/public/common/content_client.h" |
| 62 #include "content/public/common/content_paths.h" | 63 #include "content/public/common/content_paths.h" |
| 63 #include "net/base/net_util.h" | 64 #include "net/base/net_util.h" |
| 65 #include "net/url_request/url_request_test_util.h" | |
| 64 #include "sandbox/src/sandbox_types.h" | 66 #include "sandbox/src/sandbox_types.h" |
| 65 #include "testing/gtest/include/gtest/gtest.h" | 67 #include "testing/gtest/include/gtest/gtest.h" |
| 66 #include "ui/base/resource/resource_bundle.h" | 68 #include "ui/base/resource/resource_bundle.h" |
| 67 #include "ui/base/ui_base_paths.h" | 69 #include "ui/base/ui_base_paths.h" |
| 68 | 70 |
| 69 using content::BrowserThread; | 71 using content::BrowserThread; |
| 70 | 72 |
| 71 namespace { | 73 namespace { |
| 72 | 74 |
| 73 // We must store this globally so that our main delegate can set it. | 75 // We must store this globally so that our main delegate can set it. |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 427 if (file_util::PathExists(user_data_dir_)) { | 429 if (file_util::PathExists(user_data_dir_)) { |
| 428 VLOG(1) << __FUNCTION__ << " deleting IE Profile user data directory " | 430 VLOG(1) << __FUNCTION__ << " deleting IE Profile user data directory " |
| 429 << user_data_dir_.value(); | 431 << user_data_dir_.value(); |
| 430 bool deleted = file_util::Delete(user_data_dir_, true); | 432 bool deleted = file_util::Delete(user_data_dir_, true); |
| 431 LOG_IF(ERROR, !deleted) << "Failed to delete user data directory directory " | 433 LOG_IF(ERROR, !deleted) << "Failed to delete user data directory directory " |
| 432 << user_data_dir_.value(); | 434 << user_data_dir_.value(); |
| 433 } | 435 } |
| 434 | 436 |
| 435 PathService::Get(chrome::DIR_USER_DATA, &overridden_user_dir_); | 437 PathService::Get(chrome::DIR_USER_DATA, &overridden_user_dir_); |
| 436 PathService::Override(chrome::DIR_USER_DATA, user_data_dir_); | 438 PathService::Override(chrome::DIR_USER_DATA, user_data_dir_); |
| 437 process_singleton_.reset(new ProcessSingleton(user_data_dir_)); | |
| 438 } | 439 } |
| 439 | 440 |
| 440 FakeExternalTab::~FakeExternalTab() { | 441 FakeExternalTab::~FakeExternalTab() { |
| 441 if (!overridden_user_dir_.empty()) { | 442 if (!overridden_user_dir_.empty()) { |
| 442 PathService::Override(chrome::DIR_USER_DATA, overridden_user_dir_); | 443 PathService::Override(chrome::DIR_USER_DATA, overridden_user_dir_); |
| 443 } | 444 } |
| 444 } | 445 } |
| 445 | 446 |
| 446 void FakeExternalTab::Initialize() { | 447 void FakeExternalTab::Initialize() { |
| 447 DCHECK(g_browser_process == NULL); | 448 DCHECK(g_browser_process == NULL); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 476 | 477 |
| 477 void FakeExternalTab::InitializePostThreadsCreated() { | 478 void FakeExternalTab::InitializePostThreadsCreated() { |
| 478 FilePath profile_path(ProfileManager::GetDefaultProfileDir(user_data())); | 479 FilePath profile_path(ProfileManager::GetDefaultProfileDir(user_data())); |
| 479 Profile* profile = | 480 Profile* profile = |
| 480 g_browser_process->profile_manager()->GetProfile(profile_path); | 481 g_browser_process->profile_manager()->GetProfile(profile_path); |
| 481 } | 482 } |
| 482 | 483 |
| 483 void FakeExternalTab::Shutdown() { | 484 void FakeExternalTab::Shutdown() { |
| 484 browser_process_.reset(); | 485 browser_process_.reset(); |
| 485 g_browser_process = NULL; | 486 g_browser_process = NULL; |
| 486 process_singleton_.reset(); | |
| 487 | 487 |
| 488 ResourceBundle::CleanupSharedInstance(); | 488 ResourceBundle::CleanupSharedInstance(); |
| 489 } | 489 } |
| 490 | 490 |
| 491 FakeBrowserProcessImpl* FakeExternalTab::browser_process() const { | 491 FakeBrowserProcessImpl* FakeExternalTab::browser_process() const { |
| 492 return browser_process_.get(); | 492 return browser_process_.get(); |
| 493 } | 493 } |
| 494 | 494 |
| 495 CFUrlRequestUnittestRunner::CFUrlRequestUnittestRunner(int argc, char** argv) | 495 CFUrlRequestUnittestRunner::CFUrlRequestUnittestRunner(int argc, char** argv) |
| 496 : NetTestSuite(argc, argv, false), | 496 : NetTestSuite(argc, argv, false), |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 575 // http://crbug.com/114369 . | 575 // http://crbug.com/114369 . |
| 576 OverrideHttpHost(); | 576 OverrideHttpHost(); |
| 577 } | 577 } |
| 578 | 578 |
| 579 void CFUrlRequestUnittestRunner::Shutdown() { | 579 void CFUrlRequestUnittestRunner::Shutdown() { |
| 580 DCHECK(::GetCurrentThreadId() == test_thread_id_); | 580 DCHECK(::GetCurrentThreadId() == test_thread_id_); |
| 581 NetTestSuite::Shutdown(); | 581 NetTestSuite::Shutdown(); |
| 582 OleUninitialize(); | 582 OleUninitialize(); |
| 583 } | 583 } |
| 584 | 584 |
| 585 void CFUrlRequestUnittestRunner::OnConnectAutomationProviderToChannel( | |
| 586 const std::string& channel_id) { | |
| 587 Profile* profile = g_browser_process->profile_manager()-> | |
| 588 GetDefaultProfile(fake_chrome_->user_data()); | |
| 589 | |
| 590 AutomationProviderList* list = g_browser_process->GetAutomationProviderList(); | |
| 591 DCHECK(list); | |
| 592 list->AddProvider( | |
| 593 TestAutomationProvider::NewAutomationProvider(profile, channel_id, this)); | |
| 594 } | |
| 595 | |
| 596 void CFUrlRequestUnittestRunner::OnInitialTabLoaded() { | 585 void CFUrlRequestUnittestRunner::OnInitialTabLoaded() { |
| 597 test_http_server_.reset(); | 586 test_http_server_.reset(); |
| 598 BrowserThread::PostTask( | 587 BrowserThread::PostTask( |
| 599 BrowserThread::UI, | 588 BrowserThread::UI, |
| 600 FROM_HERE, | 589 FROM_HERE, |
| 601 base::Bind(&CFUrlRequestUnittestRunner::CancelInitializationTimeout, | 590 base::Bind(&CFUrlRequestUnittestRunner::CancelInitializationTimeout, |
| 602 base::Unretained(this))); | 591 base::Unretained(this))); |
| 603 StartTests(); | 592 StartTests(); |
| 604 } | 593 } |
| 605 | 594 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 755 } | 744 } |
| 756 | 745 |
| 757 MessageLoop* CFUrlRequestUnittestRunner::GetMainMessageLoop() { | 746 MessageLoop* CFUrlRequestUnittestRunner::GetMainMessageLoop() { |
| 758 return NULL; | 747 return NULL; |
| 759 } | 748 } |
| 760 | 749 |
| 761 int CFUrlRequestUnittestRunner::PreCreateThreads() { | 750 int CFUrlRequestUnittestRunner::PreCreateThreads() { |
| 762 fake_chrome_.reset(new FakeExternalTab()); | 751 fake_chrome_.reset(new FakeExternalTab()); |
| 763 fake_chrome_->Initialize(); | 752 fake_chrome_->Initialize(); |
| 764 fake_chrome_->browser_process()->PreCreateThreads(); | 753 fake_chrome_->browser_process()->PreCreateThreads(); |
| 754 process_singleton_.reset(new ProcessSingleton(fake_chrome_->user_data())); | |
| 755 process_singleton_->Lock(NULL); | |
| 756 return 0; | |
| 757 } | |
| 765 | 758 |
| 766 pss_subclass_.reset(new ProcessSingletonSubclass(this)); | 759 bool CFUrlRequestUnittestRunner::ProcessSingletonNotificationCallback( |
| 767 EXPECT_TRUE(pss_subclass_->Subclass(fake_chrome_->user_data())); | 760 const CommandLine& command_line, const FilePath& current_directory) { |
| 768 StartChromeFrameInHostBrowser(); | 761 std::string channel_id = command_line.GetSwitchValueASCII( |
| 769 return 0; | 762 switches::kAutomationClientChannelID); |
| 763 EXPECT_FALSE(channel_id.empty()); | |
| 764 | |
| 765 Profile* profile = g_browser_process->profile_manager()->GetDefaultProfile( | |
| 766 fake_chrome_->user_data()); | |
| 767 | |
| 768 AutomationProviderList* list = g_browser_process->GetAutomationProviderList(); | |
| 769 DCHECK(list); | |
| 770 list->AddProvider( | |
| 771 TestAutomationProvider::NewAutomationProvider(profile, channel_id, this)); | |
| 772 return true; | |
| 770 } | 773 } |
| 771 | 774 |
| 772 void CFUrlRequestUnittestRunner::PreMainMessageLoopRun() { | 775 void CFUrlRequestUnittestRunner::PreMainMessageLoopRun() { |
| 773 fake_chrome_->InitializePostThreadsCreated(); | 776 fake_chrome_->InitializePostThreadsCreated(); |
| 777 ProcessSingleton::NotificationCallback callback( | |
| 778 base::Bind( | |
| 779 &CFUrlRequestUnittestRunner::ProcessSingletonNotificationCallback, | |
| 780 base::Unretained(this))); | |
| 781 if (!process_singleton_->Create(callback)) { | |
| 782 LOG(FATAL) << "Failed to start up ProcessSingleton. Is another test " | |
| 783 << "executable or Chrome Frame running?"; | |
| 784 if (crash_service_) | |
| 785 base::KillProcess(crash_service_, 0, false); | |
| 786 ::ExitProcess(1); | |
| 787 } | |
| 788 | |
| 789 StartChromeFrameInHostBrowser(); | |
| 774 } | 790 } |
| 775 | 791 |
| 776 bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) { | 792 bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) { |
| 777 DCHECK(MessageLoop::current()); | 793 DCHECK(MessageLoop::current()); |
| 778 DCHECK(MessageLoop::current()->type() == MessageLoop::TYPE_UI); | 794 DCHECK(MessageLoop::current()->type() == MessageLoop::TYPE_UI); |
|
robertshield
2012/04/05 17:24:45
I suggest adding a DCHECK(process_singleton_) here
| |
| 779 | 795 |
| 780 // We need to allow IO on the main thread for these tests. | 796 // We need to allow IO on the main thread for these tests. |
| 781 base::ThreadRestrictions::SetIOAllowed(true); | 797 base::ThreadRestrictions::SetIOAllowed(true); |
| 782 | 798 process_singleton_->Unlock(); |
| 783 StartInitializationTimeout(); | 799 StartInitializationTimeout(); |
| 784 return false; | 800 return false; |
| 785 } | 801 } |
| 786 | 802 |
| 787 void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() { | 803 void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() { |
| 804 process_singleton_->Cleanup(); | |
| 788 fake_chrome_->browser_process()->StartTearDown(); | 805 fake_chrome_->browser_process()->StartTearDown(); |
| 789 | 806 |
| 790 // Must do this separately as the mock profile_manager_ is not the | 807 // Must do this separately as the mock profile_manager_ is not the |
| 791 // same member as BrowserProcessImpl::StartTearDown resets. | 808 // same member as BrowserProcessImpl::StartTearDown resets. |
| 792 fake_chrome_->browser_process()->DestroyProfileManager(); | 809 fake_chrome_->browser_process()->DestroyProfileManager(); |
| 793 | 810 |
| 794 if (crash_service_) | 811 if (crash_service_) |
| 795 base::KillProcess(crash_service_, 0, false); | 812 base::KillProcess(crash_service_, 0, false); |
| 796 | 813 |
| 797 base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL); | 814 base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL); |
| 798 base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL); | 815 base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL); |
| 799 } | 816 } |
| 800 | 817 |
| 801 void CFUrlRequestUnittestRunner::PostDestroyThreads() { | 818 void CFUrlRequestUnittestRunner::PostDestroyThreads() { |
| 819 process_singleton_.reset(); | |
| 802 fake_chrome_->browser_process()->PostDestroyThreads(); | 820 fake_chrome_->browser_process()->PostDestroyThreads(); |
| 803 fake_chrome_->Shutdown(); | 821 fake_chrome_->Shutdown(); |
| 804 fake_chrome_.reset(); | 822 fake_chrome_.reset(); |
| 805 | 823 |
| 806 #ifndef NDEBUG | 824 #ifndef NDEBUG |
| 807 // Avoid CRT cleanup in debug test runs to ensure that webkit ASSERTs which | 825 // Avoid CRT cleanup in debug test runs to ensure that webkit ASSERTs which |
| 808 // check if globals are created and destroyed on the same thread don't fire. | 826 // check if globals are created and destroyed on the same thread don't fire. |
| 809 // Webkit global objects are created on the inproc renderer thread. | 827 // Webkit global objects are created on the inproc renderer thread. |
| 810 ::ExitProcess(test_result()); | 828 ::ExitProcess(test_result()); |
| 811 #endif | 829 #endif |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 917 // content::InitializeSandboxInfo(&sandbox_info); | 935 // content::InitializeSandboxInfo(&sandbox_info); |
| 918 FakeMainDelegate delegate; | 936 FakeMainDelegate delegate; |
| 919 content::ContentMain( | 937 content::ContentMain( |
| 920 reinterpret_cast<HINSTANCE>(GetModuleHandle(NULL)), | 938 reinterpret_cast<HINSTANCE>(GetModuleHandle(NULL)), |
| 921 &sandbox_info, | 939 &sandbox_info, |
| 922 &delegate); | 940 &delegate); |
| 923 | 941 |
| 924 // Note: In debug builds, we ExitProcess during PostDestroyThreads. | 942 // Note: In debug builds, we ExitProcess during PostDestroyThreads. |
| 925 return g_test_suite->test_result(); | 943 return g_test_suite->test_result(); |
| 926 } | 944 } |
| OLD | NEW |