Index: chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc |
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc |
index 8f6ea5225d706e15e180b8c14e197241257e68cb..0c1462352d63c56c488971d91ff4c09182d82a14 100644 |
--- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc |
+++ b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc |
@@ -7,10 +7,20 @@ |
#include "base/command_line.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
+#include "chrome/browser/browser_process_impl.h" |
+#include "chrome/browser/browser_shutdown.h" |
+#include "chrome/browser/chrome_browser_main.h" |
+#include "chrome/browser/intranet_redirect_detector.h" |
+#include "chrome/browser/managed_mode.h" |
+#include "chrome/browser/metrics/metrics_log.h" |
+#include "chrome/browser/metrics/metrics_service.h" |
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" |
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" |
+#include "chrome/browser/profiles/profile_info_cache.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/service/service_process_control.h" |
#include "chrome/browser/ui/startup/startup_browser_creator.h" |
+#include "chrome/browser/ui/webui/flags_ui.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/cloud_print/cloud_print_proxy_info.h" |
#include "chrome/common/pref_names.h" |
@@ -19,7 +29,12 @@ |
#include "chrome/test/base/testing_pref_service.h" |
#include "chrome/test/base/testing_profile.h" |
#include "chrome/test/base/testing_profile_manager.h" |
+#include "content/public/browser/browser_main_parts.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/content_browser_client.h" |
+#include "content/public/common/content_client.h" |
+#include "content/public/common/main_function_params.h" |
+#include "content/public/common/result_codes.h" |
#include "content/public/test/test_browser_thread.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -31,6 +46,7 @@ using ::testing::DoAll; |
using ::testing::Invoke; |
using ::testing::Property; |
using ::testing::Return; |
+using ::testing::ReturnNull; |
using ::testing::ReturnPointee; |
using ::testing::WithArgs; |
using ::testing::WithoutArgs; |
@@ -449,3 +465,131 @@ TEST_F(CloudPrintProxyPolicyTest, StartupBrowserCreatorWithCommandLine) { |
EXPECT_FALSE(LaunchBrowser(command_line, &profile_)); |
MessageLoop::current()->RunAllPending(); |
} |
+ |
+ProfileKeyedService* TestCloudPrintProxyServiceFactoryNoExpectations( |
+ Profile* profile) { |
+ TestCloudPrintProxyService* service = new TestCloudPrintProxyService(profile); |
+ |
+ service->Initialize(); |
+ MessageLoop::current()->RunAllPending(); |
+ return service; |
+} |
+ |
+class MockBrowserProcessImpl : public BrowserProcessImpl { |
+ public: |
+ explicit MockBrowserProcessImpl(const CommandLine& command_line, |
+ BrowserProcess* original_browser_process) |
+ : BrowserProcessImpl(command_line) { } |
+ |
+ MOCK_METHOD0(PreMainMessageLoopRun, void()); |
+ MOCK_METHOD0(metrics_service, MetricsService*()); |
+ MOCK_METHOD0(watchdog_thread, WatchDogThread*()); |
+ MOCK_METHOD0(profile_manager, ProfileManager*()); |
+ MOCK_METHOD0(local_state, PrefService*()); |
+ MOCK_METHOD0(notification_ui_manager, NotificationUIManager*()); |
+ MOCK_METHOD0(component_updater, ComponentUpdateService*()); |
+}; |
+ |
+class MockProcessSingleton : public ProcessSingleton { |
+ public: |
+ explicit MockProcessSingleton(const FilePath& user_data_dir) |
+ : ProcessSingleton(user_data_dir) { } |
+ |
+ MOCK_METHOD1(NotifyOtherProcessOrCreate, |
+ NotifyResult(const NotificationCallback&)); |
+}; |
+ |
+class MockProfileManager : public ProfileManagerWithoutInit { |
+ public: |
+ explicit MockProfileManager(const FilePath& user_data_dir) |
+ : ProfileManagerWithoutInit(user_data_dir) { } |
+ |
+ MOCK_METHOD1(GetDefaultProfile, Profile*(const FilePath&)); |
+ MOCK_METHOD1(GetLastUsedProfile, Profile*(const FilePath&)); |
+}; |
+ |
+TEST_F(CloudPrintProxyPolicyTest, CheckCommandLineCrossTalk) { |
Paweł Hajdan Jr.
2012/06/23 07:23:37
Aren't you mocking too much here? Would it make se
Scott Byer
2012/06/27 19:29:06
Yes, yes I am. I started in and ended up "pot comm
|
+ base::ShadowingAtExitManager at_exit_manager; |
+ TestCloudPrintProxyService service(&profile_); |
+ |
+ // Otherwise, other unit tests that start up sub-processes can leave a global |
+ // variable (g_url_requests_started) set, which trips up the enforcing cookie |
+ // routine during startup. |
+ ChromeBrowserMainParts::disable_enforcing_cookie_policies_for_tests_ = true; |
+ |
+ CloudPrintProxyServiceFactory::GetInstance()-> |
+ SetTestingFactory(&profile_, |
+ TestCloudPrintProxyServiceFactoryNoExpectations); |
+ |
+ CommandLine command_line(CommandLine::NO_PROGRAM); |
+ command_line.AppendSwitch(switches::kCheckCloudPrintConnectorPolicy); |
+ command_line.AppendSwitch(switches::kDisableInternalFlash); |
+ |
+ BrowserProcess* original_browser_process = g_browser_process; |
+ |
+ { |
Paweł Hajdan Jr.
2012/06/23 07:23:37
nit: When you use braces, indent the following lin
|
+ scoped_ptr<MockProfileManager> mock_profile_manager( |
+ new MockProfileManager(FilePath())); |
+ |
+ EXPECT_CALL(*mock_profile_manager, GetDefaultProfile(_)). |
+ WillRepeatedly(Return(&profile_)); |
+ EXPECT_CALL(*mock_profile_manager, GetLastUsedProfile(_)). |
+ WillRepeatedly(Return(&profile_)); |
+ |
+ content::MainFunctionParams parameters(command_line); |
+ |
+ TestingPrefService* prefs = profile_.GetTestingPrefService(); |
+ browser_shutdown::RegisterPrefs(prefs); |
+ ManagedMode::RegisterPrefs(prefs); |
+ ProfileInfoCache::RegisterPrefs(prefs); |
+ IntranetRedirectDetector::RegisterPrefs(prefs); |
+ MetricsService::RegisterPrefs(prefs); |
+ MetricsLog::RegisterPrefs(prefs); |
+ FlagsUI::RegisterPrefs(prefs); |
+ |
+ MockBrowserProcessImpl* mock_browser_process( |
+ new MockBrowserProcessImpl(command_line, g_browser_process)); |
+ mock_browser_process->SetApplicationLocale("en_US"); |
+ |
+ EXPECT_CALL(*mock_browser_process, PreMainMessageLoopRun()).Times(1); |
+ EXPECT_CALL(*mock_browser_process, metrics_service()). |
+ WillRepeatedly(ReturnNull()); |
+ EXPECT_CALL(*mock_browser_process, watchdog_thread()). |
+ WillRepeatedly(ReturnNull()); |
+ EXPECT_CALL(*mock_browser_process, profile_manager()). |
+ WillRepeatedly(Return(mock_profile_manager.get())); |
+ EXPECT_CALL(*mock_browser_process, local_state()). |
+ WillRepeatedly(Return(prefs)); |
+ EXPECT_CALL(*mock_browser_process, notification_ui_manager()). |
+ WillRepeatedly(ReturnNull()); |
+ EXPECT_CALL(*mock_browser_process, component_updater()). |
+ WillRepeatedly(ReturnNull()); |
+ |
+ scoped_ptr<ChromeBrowserMainParts> parts( |
+ reinterpret_cast<ChromeBrowserMainParts*>( |
+ content::GetContentClient()->browser()-> |
+ CreateBrowserMainParts(parameters))); |
+ |
+ MockProcessSingleton* mock_process_singleton( |
+ new MockProcessSingleton(FilePath())); |
+ |
+ EXPECT_CALL(*mock_process_singleton, NotifyOtherProcessOrCreate(_)).Times(0); |
+ |
+ parts->process_singleton_.reset(mock_process_singleton); |
+ parts->browser_process_.reset(mock_browser_process); |
+ parts->browser_creator_.reset(new StartupBrowserCreator()); |
+ parts->local_state_ = prefs; |
+ |
+ int result = parts->PreMainMessageLoopRunImpl(); |
+ EXPECT_EQ(content::RESULT_CODE_NORMAL_EXIT, result); |
+ EXPECT_EQ(ProcessSingleton::PROCESS_NONE, parts->notify_result_); |
+ |
+ parts->PostMainMessageLoopRun(); |
+ |
+ // Clear out a global variable. |
+ mock_browser_process->SetApplicationLocale(""); |
+ } |
+ |
+ EXPECT_EQ(NULL, g_browser_process); |
+ g_browser_process = original_browser_process; |
Paweł Hajdan Jr.
2012/06/23 07:23:37
We have AutoReset or something for that.
|
+} |