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

Side by Side Diff: chrome_frame/test/net/fake_external_tab.cc

Issue 9959106: Modify chrome_frame_net_tests to integrate the refactoring to ProcessSingleton. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync. Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "chrome/common/chrome_paths_internal.h" 44 #include "chrome/common/chrome_paths_internal.h"
45 #include "chrome/common/chrome_switches.h" 45 #include "chrome/common/chrome_switches.h"
46 #include "chrome/common/pref_names.h" 46 #include "chrome/common/pref_names.h"
47 #include "chrome/renderer/chrome_content_renderer_client.h" 47 #include "chrome/renderer/chrome_content_renderer_client.h"
48 #include "chrome/test/base/ui_test_utils.h" 48 #include "chrome/test/base/ui_test_utils.h"
49 #include "chrome/test/logging/win/file_logger.h" 49 #include "chrome/test/logging/win/file_logger.h"
50 #include "chrome/test/logging/win/log_file_printer.h" 50 #include "chrome/test/logging/win/log_file_printer.h"
51 #include "chrome/test/logging/win/test_log_collector.h" 51 #include "chrome/test/logging/win/test_log_collector.h"
52 #include "chrome_frame/crash_server_init.h" 52 #include "chrome_frame/crash_server_init.h"
53 #include "chrome_frame/test/chrome_frame_test_utils.h" 53 #include "chrome_frame/test/chrome_frame_test_utils.h"
54 #include "chrome_frame/test/ie_configurator.h"
54 #include "chrome_frame/test/net/test_automation_resource_message_filter.h" 55 #include "chrome_frame/test/net/test_automation_resource_message_filter.h"
55 #include "chrome_frame/test/simulate_input.h" 56 #include "chrome_frame/test/simulate_input.h"
56 #include "chrome_frame/test/win_event_receiver.h" 57 #include "chrome_frame/test/win_event_receiver.h"
57 #include "chrome_frame/utils.h" 58 #include "chrome_frame/utils.h"
58 #include "content/public/app/content_main.h" 59 #include "content/public/app/content_main.h"
59 #include "content/public/app/startup_helper_win.h" 60 #include "content/public/app/startup_helper_win.h"
60 #include "content/public/browser/browser_thread.h" 61 #include "content/public/browser/browser_thread.h"
61 #include "content/public/browser/notification_service.h" 62 #include "content/public/browser/notification_service.h"
62 #include "content/public/browser/render_process_host.h" 63 #include "content/public/browser/render_process_host.h"
63 #include "content/public/common/content_client.h" 64 #include "content/public/common/content_client.h"
64 #include "content/public/common/content_paths.h" 65 #include "content/public/common/content_paths.h"
65 #include "net/base/net_util.h" 66 #include "net/base/net_util.h"
67 #include "net/url_request/url_request_test_util.h"
66 #include "sandbox/win/src/sandbox_types.h" 68 #include "sandbox/win/src/sandbox_types.h"
67 #include "testing/gtest/include/gtest/gtest.h" 69 #include "testing/gtest/include/gtest/gtest.h"
68 #include "ui/base/resource/resource_bundle.h" 70 #include "ui/base/resource/resource_bundle.h"
69 #include "ui/base/ui_base_paths.h" 71 #include "ui/base/ui_base_paths.h"
70 72
71 using content::BrowserThread; 73 using content::BrowserThread;
72 74
73 namespace { 75 namespace {
74 76
75 // We must store this globally so that our main delegate can set it. 77 // We must store this globally so that our main delegate can set it.
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 if (file_util::PathExists(user_data_dir_)) { 436 if (file_util::PathExists(user_data_dir_)) {
435 VLOG(1) << __FUNCTION__ << " deleting IE Profile user data directory " 437 VLOG(1) << __FUNCTION__ << " deleting IE Profile user data directory "
436 << user_data_dir_.value(); 438 << user_data_dir_.value();
437 bool deleted = file_util::Delete(user_data_dir_, true); 439 bool deleted = file_util::Delete(user_data_dir_, true);
438 LOG_IF(ERROR, !deleted) << "Failed to delete user data directory directory " 440 LOG_IF(ERROR, !deleted) << "Failed to delete user data directory directory "
439 << user_data_dir_.value(); 441 << user_data_dir_.value();
440 } 442 }
441 443
442 PathService::Get(chrome::DIR_USER_DATA, &overridden_user_dir_); 444 PathService::Get(chrome::DIR_USER_DATA, &overridden_user_dir_);
443 PathService::Override(chrome::DIR_USER_DATA, user_data_dir_); 445 PathService::Override(chrome::DIR_USER_DATA, user_data_dir_);
444 process_singleton_.reset(new ProcessSingleton(user_data_dir_));
445 } 446 }
446 447
447 FakeExternalTab::~FakeExternalTab() { 448 FakeExternalTab::~FakeExternalTab() {
448 if (!overridden_user_dir_.empty()) { 449 if (!overridden_user_dir_.empty()) {
449 PathService::Override(chrome::DIR_USER_DATA, overridden_user_dir_); 450 PathService::Override(chrome::DIR_USER_DATA, overridden_user_dir_);
450 } 451 }
451 } 452 }
452 453
453 void FakeExternalTab::Initialize() { 454 void FakeExternalTab::Initialize() {
454 DCHECK(g_browser_process == NULL); 455 DCHECK(g_browser_process == NULL);
(...skipping 28 matching lines...) Expand all
483 484
484 void FakeExternalTab::InitializePostThreadsCreated() { 485 void FakeExternalTab::InitializePostThreadsCreated() {
485 FilePath profile_path(ProfileManager::GetDefaultProfileDir(user_data())); 486 FilePath profile_path(ProfileManager::GetDefaultProfileDir(user_data()));
486 Profile* profile = 487 Profile* profile =
487 g_browser_process->profile_manager()->GetProfile(profile_path); 488 g_browser_process->profile_manager()->GetProfile(profile_path);
488 } 489 }
489 490
490 void FakeExternalTab::Shutdown() { 491 void FakeExternalTab::Shutdown() {
491 browser_process_.reset(); 492 browser_process_.reset();
492 g_browser_process = NULL; 493 g_browser_process = NULL;
493 process_singleton_.reset();
494 494
495 ResourceBundle::CleanupSharedInstance(); 495 ResourceBundle::CleanupSharedInstance();
496 } 496 }
497 497
498 FakeBrowserProcessImpl* FakeExternalTab::browser_process() const { 498 FakeBrowserProcessImpl* FakeExternalTab::browser_process() const {
499 return browser_process_.get(); 499 return browser_process_.get();
500 } 500 }
501 501
502 CFUrlRequestUnittestRunner::CFUrlRequestUnittestRunner(int argc, char** argv) 502 CFUrlRequestUnittestRunner::CFUrlRequestUnittestRunner(int argc, char** argv)
503 : NetTestSuite(argc, argv, false), 503 : NetTestSuite(argc, argv, false),
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 // http://crbug.com/114369 . 585 // http://crbug.com/114369 .
586 OverrideHttpHost(); 586 OverrideHttpHost();
587 } 587 }
588 588
589 void CFUrlRequestUnittestRunner::Shutdown() { 589 void CFUrlRequestUnittestRunner::Shutdown() {
590 DCHECK(::GetCurrentThreadId() == test_thread_id_); 590 DCHECK(::GetCurrentThreadId() == test_thread_id_);
591 NetTestSuite::Shutdown(); 591 NetTestSuite::Shutdown();
592 OleUninitialize(); 592 OleUninitialize();
593 } 593 }
594 594
595 void CFUrlRequestUnittestRunner::OnConnectAutomationProviderToChannel(
596 const std::string& channel_id) {
597 Profile* profile = g_browser_process->profile_manager()->
598 GetDefaultProfile(fake_chrome_->user_data());
599
600 AutomationProviderList* list = g_browser_process->GetAutomationProviderList();
601 DCHECK(list);
602 list->AddProvider(
603 TestAutomationProvider::NewAutomationProvider(profile, channel_id, this));
604 }
605
606 void CFUrlRequestUnittestRunner::OnInitialTabLoaded() { 595 void CFUrlRequestUnittestRunner::OnInitialTabLoaded() {
607 test_http_server_.reset(); 596 test_http_server_.reset();
608 BrowserThread::PostTask( 597 BrowserThread::PostTask(
609 BrowserThread::UI, 598 BrowserThread::UI,
610 FROM_HERE, 599 FROM_HERE,
611 base::Bind(&CFUrlRequestUnittestRunner::CancelInitializationTimeout, 600 base::Bind(&CFUrlRequestUnittestRunner::CancelInitializationTimeout,
612 base::Unretained(this))); 601 base::Unretained(this)));
613 StartTests(); 602 StartTests();
614 } 603 }
615 604
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 void CFUrlRequestUnittestRunner::PreEarlyInitialization() { 732 void CFUrlRequestUnittestRunner::PreEarlyInitialization() {
744 testing::InitGoogleTest(&g_argc, g_argv); 733 testing::InitGoogleTest(&g_argc, g_argv);
745 FilterDisabledTests(); 734 FilterDisabledTests();
746 StartFileLogger(); 735 StartFileLogger();
747 } 736 }
748 737
749 int CFUrlRequestUnittestRunner::PreCreateThreads() { 738 int CFUrlRequestUnittestRunner::PreCreateThreads() {
750 fake_chrome_.reset(new FakeExternalTab()); 739 fake_chrome_.reset(new FakeExternalTab());
751 fake_chrome_->Initialize(); 740 fake_chrome_->Initialize();
752 fake_chrome_->browser_process()->PreCreateThreads(); 741 fake_chrome_->browser_process()->PreCreateThreads();
742 process_singleton_.reset(new ProcessSingleton(fake_chrome_->user_data()));
743 process_singleton_->Lock(NULL);
744 return 0;
745 }
753 746
754 pss_subclass_.reset(new ProcessSingletonSubclass(this)); 747 bool CFUrlRequestUnittestRunner::ProcessSingletonNotificationCallback(
755 EXPECT_TRUE(pss_subclass_->Subclass(fake_chrome_->user_data())); 748 const CommandLine& command_line, const FilePath& current_directory) {
756 StartChromeFrameInHostBrowser(); 749 std::string channel_id = command_line.GetSwitchValueASCII(
757 return 0; 750 switches::kAutomationClientChannelID);
751 EXPECT_FALSE(channel_id.empty());
752
753 Profile* profile = g_browser_process->profile_manager()->GetDefaultProfile(
754 fake_chrome_->user_data());
755
756 AutomationProviderList* list = g_browser_process->GetAutomationProviderList();
757 DCHECK(list);
758 list->AddProvider(
759 TestAutomationProvider::NewAutomationProvider(profile, channel_id, this));
760 return true;
758 } 761 }
759 762
760 void CFUrlRequestUnittestRunner::PreMainMessageLoopRun() { 763 void CFUrlRequestUnittestRunner::PreMainMessageLoopRun() {
761 fake_chrome_->InitializePostThreadsCreated(); 764 fake_chrome_->InitializePostThreadsCreated();
765 ProcessSingleton::NotificationCallback callback(
766 base::Bind(
767 &CFUrlRequestUnittestRunner::ProcessSingletonNotificationCallback,
768 base::Unretained(this)));
769 if (!process_singleton_->Create(callback)) {
770 LOG(FATAL) << "Failed to start up ProcessSingleton. Is another test "
771 << "executable or Chrome Frame running?";
772 if (crash_service_)
773 base::KillProcess(crash_service_, 0, false);
774 ::ExitProcess(1);
775 }
776
777 StartChromeFrameInHostBrowser();
762 } 778 }
763 779
764 bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) { 780 bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) {
765 DCHECK(MessageLoop::current()); 781 DCHECK(MessageLoop::current());
766 DCHECK(MessageLoop::current()->type() == MessageLoop::TYPE_UI); 782 DCHECK(MessageLoop::current()->type() == MessageLoop::TYPE_UI);
767 783
768 // We need to allow IO on the main thread for these tests. 784 // We need to allow IO on the main thread for these tests.
769 base::ThreadRestrictions::SetIOAllowed(true); 785 base::ThreadRestrictions::SetIOAllowed(true);
770 786 process_singleton_->Unlock();
771 StartInitializationTimeout(); 787 StartInitializationTimeout();
772 return false; 788 return false;
773 } 789 }
774 790
775 void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() { 791 void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() {
792 process_singleton_->Cleanup();
776 fake_chrome_->browser_process()->StartTearDown(); 793 fake_chrome_->browser_process()->StartTearDown();
777 794
778 // Must do this separately as the mock profile_manager_ is not the 795 // Must do this separately as the mock profile_manager_ is not the
779 // same member as BrowserProcessImpl::StartTearDown resets. 796 // same member as BrowserProcessImpl::StartTearDown resets.
780 fake_chrome_->browser_process()->DestroyProfileManager(); 797 fake_chrome_->browser_process()->DestroyProfileManager();
781 798
782 if (crash_service_) 799 if (crash_service_)
783 base::KillProcess(crash_service_, 0, false); 800 base::KillProcess(crash_service_, 0, false);
784 801
785 base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL); 802 base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL);
786 base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL); 803 base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL);
787 } 804 }
788 805
789 void CFUrlRequestUnittestRunner::PostDestroyThreads() { 806 void CFUrlRequestUnittestRunner::PostDestroyThreads() {
807 process_singleton_.reset();
790 fake_chrome_->browser_process()->PostDestroyThreads(); 808 fake_chrome_->browser_process()->PostDestroyThreads();
791 fake_chrome_->Shutdown(); 809 fake_chrome_->Shutdown();
792 fake_chrome_.reset(); 810 fake_chrome_.reset();
793 811
794 #ifndef NDEBUG 812 #ifndef NDEBUG
795 // Avoid CRT cleanup in debug test runs to ensure that webkit ASSERTs which 813 // Avoid CRT cleanup in debug test runs to ensure that webkit ASSERTs which
796 // check if globals are created and destroyed on the same thread don't fire. 814 // check if globals are created and destroyed on the same thread don't fire.
797 // Webkit global objects are created on the inproc renderer thread. 815 // Webkit global objects are created on the inproc renderer thread.
798 ::ExitProcess(test_result()); 816 ::ExitProcess(test_result());
799 #endif 817 #endif
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 // content::InitializeSandboxInfo(&sandbox_info); 923 // content::InitializeSandboxInfo(&sandbox_info);
906 FakeMainDelegate delegate; 924 FakeMainDelegate delegate;
907 content::ContentMain( 925 content::ContentMain(
908 reinterpret_cast<HINSTANCE>(GetModuleHandle(NULL)), 926 reinterpret_cast<HINSTANCE>(GetModuleHandle(NULL)),
909 &sandbox_info, 927 &sandbox_info,
910 &delegate); 928 &delegate);
911 929
912 // Note: In debug builds, we ExitProcess during PostDestroyThreads. 930 // Note: In debug builds, we ExitProcess during PostDestroyThreads.
913 return g_test_suite->test_result(); 931 return g_test_suite->test_result();
914 } 932 }
OLDNEW
« no previous file with comments | « chrome_frame/test/net/fake_external_tab.h ('k') | chrome_frame/test/net/process_singleton_subclass.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698