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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "chrome/browser/browser_process_impl.h" | |
| 11 #include "chrome/browser/browser_shutdown.h" | |
| 12 #include "chrome/browser/chrome_browser_main.h" | |
| 13 #include "chrome/browser/intranet_redirect_detector.h" | |
| 14 #include "chrome/browser/managed_mode.h" | |
| 15 #include "chrome/browser/metrics/metrics_log.h" | |
| 16 #include "chrome/browser/metrics/metrics_service.h" | |
| 10 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" | 17 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" |
| 11 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory. h" | 18 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory. h" |
| 19 #include "chrome/browser/profiles/profile_info_cache.h" | |
| 20 #include "chrome/browser/profiles/profile_manager.h" | |
| 12 #include "chrome/browser/service/service_process_control.h" | 21 #include "chrome/browser/service/service_process_control.h" |
| 13 #include "chrome/browser/ui/startup/startup_browser_creator.h" | 22 #include "chrome/browser/ui/startup/startup_browser_creator.h" |
| 23 #include "chrome/browser/ui/webui/flags_ui.h" | |
| 14 #include "chrome/common/chrome_switches.h" | 24 #include "chrome/common/chrome_switches.h" |
| 15 #include "chrome/common/cloud_print/cloud_print_proxy_info.h" | 25 #include "chrome/common/cloud_print/cloud_print_proxy_info.h" |
| 16 #include "chrome/common/pref_names.h" | 26 #include "chrome/common/pref_names.h" |
| 17 #include "chrome/common/service_messages.h" | 27 #include "chrome/common/service_messages.h" |
| 18 #include "chrome/test/base/testing_browser_process.h" | 28 #include "chrome/test/base/testing_browser_process.h" |
| 19 #include "chrome/test/base/testing_pref_service.h" | 29 #include "chrome/test/base/testing_pref_service.h" |
| 20 #include "chrome/test/base/testing_profile.h" | 30 #include "chrome/test/base/testing_profile.h" |
| 21 #include "chrome/test/base/testing_profile_manager.h" | 31 #include "chrome/test/base/testing_profile_manager.h" |
| 32 #include "content/public/browser/browser_main_parts.h" | |
| 22 #include "content/public/browser/browser_thread.h" | 33 #include "content/public/browser/browser_thread.h" |
| 34 #include "content/public/browser/content_browser_client.h" | |
| 35 #include "content/public/common/content_client.h" | |
| 36 #include "content/public/common/main_function_params.h" | |
| 37 #include "content/public/common/result_codes.h" | |
| 23 #include "content/public/test/test_browser_thread.h" | 38 #include "content/public/test/test_browser_thread.h" |
| 24 #include "testing/gmock/include/gmock/gmock.h" | 39 #include "testing/gmock/include/gmock/gmock.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 40 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 41 |
| 27 using ::testing::Assign; | 42 using ::testing::Assign; |
| 28 using ::testing::AtMost; | 43 using ::testing::AtMost; |
| 29 using ::testing::DeleteArg; | 44 using ::testing::DeleteArg; |
| 30 using ::testing::DoAll; | 45 using ::testing::DoAll; |
| 31 using ::testing::Invoke; | 46 using ::testing::Invoke; |
| 32 using ::testing::Property; | 47 using ::testing::Property; |
| 33 using ::testing::Return; | 48 using ::testing::Return; |
| 49 using ::testing::ReturnNull; | |
| 34 using ::testing::ReturnPointee; | 50 using ::testing::ReturnPointee; |
| 35 using ::testing::WithArgs; | 51 using ::testing::WithArgs; |
| 36 using ::testing::WithoutArgs; | 52 using ::testing::WithoutArgs; |
| 37 using ::testing::_; | 53 using ::testing::_; |
| 38 | 54 |
| 39 class MockServiceProcessControl : public ServiceProcessControl { | 55 class MockServiceProcessControl : public ServiceProcessControl { |
| 40 public: | 56 public: |
| 41 static std::string EnabledUserId(); | 57 static std::string EnabledUserId(); |
| 42 | 58 |
| 43 MockServiceProcessControl() : connected_(false) { } | 59 MockServiceProcessControl() : connected_(false) { } |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 | 458 |
| 443 CloudPrintProxyServiceFactory::GetInstance()-> | 459 CloudPrintProxyServiceFactory::GetInstance()-> |
| 444 SetTestingFactory(&profile_, TestCloudPrintProxyServiceFactory); | 460 SetTestingFactory(&profile_, TestCloudPrintProxyServiceFactory); |
| 445 | 461 |
| 446 CommandLine command_line(CommandLine::NO_PROGRAM); | 462 CommandLine command_line(CommandLine::NO_PROGRAM); |
| 447 command_line.AppendSwitch(switches::kCheckCloudPrintConnectorPolicy); | 463 command_line.AppendSwitch(switches::kCheckCloudPrintConnectorPolicy); |
| 448 | 464 |
| 449 EXPECT_FALSE(LaunchBrowser(command_line, &profile_)); | 465 EXPECT_FALSE(LaunchBrowser(command_line, &profile_)); |
| 450 MessageLoop::current()->RunAllPending(); | 466 MessageLoop::current()->RunAllPending(); |
| 451 } | 467 } |
| 468 | |
| 469 ProfileKeyedService* TestCloudPrintProxyServiceFactoryNoExpectations( | |
| 470 Profile* profile) { | |
| 471 TestCloudPrintProxyService* service = new TestCloudPrintProxyService(profile); | |
| 472 | |
| 473 service->Initialize(); | |
| 474 MessageLoop::current()->RunAllPending(); | |
| 475 return service; | |
| 476 } | |
| 477 | |
| 478 class MockBrowserProcessImpl : public BrowserProcessImpl { | |
| 479 public: | |
| 480 explicit MockBrowserProcessImpl(const CommandLine& command_line, | |
| 481 BrowserProcess* original_browser_process) | |
| 482 : BrowserProcessImpl(command_line) { } | |
| 483 | |
| 484 MOCK_METHOD0(PreMainMessageLoopRun, void()); | |
| 485 MOCK_METHOD0(metrics_service, MetricsService*()); | |
| 486 MOCK_METHOD0(watchdog_thread, WatchDogThread*()); | |
| 487 MOCK_METHOD0(profile_manager, ProfileManager*()); | |
| 488 MOCK_METHOD0(local_state, PrefService*()); | |
| 489 MOCK_METHOD0(notification_ui_manager, NotificationUIManager*()); | |
| 490 MOCK_METHOD0(component_updater, ComponentUpdateService*()); | |
| 491 }; | |
| 492 | |
| 493 class MockProcessSingleton : public ProcessSingleton { | |
| 494 public: | |
| 495 explicit MockProcessSingleton(const FilePath& user_data_dir) | |
| 496 : ProcessSingleton(user_data_dir) { } | |
| 497 | |
| 498 MOCK_METHOD1(NotifyOtherProcessOrCreate, | |
| 499 NotifyResult(const NotificationCallback&)); | |
| 500 }; | |
| 501 | |
| 502 class MockProfileManager : public ProfileManagerWithoutInit { | |
| 503 public: | |
| 504 explicit MockProfileManager(const FilePath& user_data_dir) | |
| 505 : ProfileManagerWithoutInit(user_data_dir) { } | |
| 506 | |
| 507 MOCK_METHOD1(GetDefaultProfile, Profile*(const FilePath&)); | |
| 508 MOCK_METHOD1(GetLastUsedProfile, Profile*(const FilePath&)); | |
| 509 }; | |
| 510 | |
| 511 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
| |
| 512 base::ShadowingAtExitManager at_exit_manager; | |
| 513 TestCloudPrintProxyService service(&profile_); | |
| 514 | |
| 515 // Otherwise, other unit tests that start up sub-processes can leave a global | |
| 516 // variable (g_url_requests_started) set, which trips up the enforcing cookie | |
| 517 // routine during startup. | |
| 518 ChromeBrowserMainParts::disable_enforcing_cookie_policies_for_tests_ = true; | |
| 519 | |
| 520 CloudPrintProxyServiceFactory::GetInstance()-> | |
| 521 SetTestingFactory(&profile_, | |
| 522 TestCloudPrintProxyServiceFactoryNoExpectations); | |
| 523 | |
| 524 CommandLine command_line(CommandLine::NO_PROGRAM); | |
| 525 command_line.AppendSwitch(switches::kCheckCloudPrintConnectorPolicy); | |
| 526 command_line.AppendSwitch(switches::kDisableInternalFlash); | |
| 527 | |
| 528 BrowserProcess* original_browser_process = g_browser_process; | |
| 529 | |
| 530 { | |
|
Paweł Hajdan Jr.
2012/06/23 07:23:37
nit: When you use braces, indent the following lin
| |
| 531 scoped_ptr<MockProfileManager> mock_profile_manager( | |
| 532 new MockProfileManager(FilePath())); | |
| 533 | |
| 534 EXPECT_CALL(*mock_profile_manager, GetDefaultProfile(_)). | |
| 535 WillRepeatedly(Return(&profile_)); | |
| 536 EXPECT_CALL(*mock_profile_manager, GetLastUsedProfile(_)). | |
| 537 WillRepeatedly(Return(&profile_)); | |
| 538 | |
| 539 content::MainFunctionParams parameters(command_line); | |
| 540 | |
| 541 TestingPrefService* prefs = profile_.GetTestingPrefService(); | |
| 542 browser_shutdown::RegisterPrefs(prefs); | |
| 543 ManagedMode::RegisterPrefs(prefs); | |
| 544 ProfileInfoCache::RegisterPrefs(prefs); | |
| 545 IntranetRedirectDetector::RegisterPrefs(prefs); | |
| 546 MetricsService::RegisterPrefs(prefs); | |
| 547 MetricsLog::RegisterPrefs(prefs); | |
| 548 FlagsUI::RegisterPrefs(prefs); | |
| 549 | |
| 550 MockBrowserProcessImpl* mock_browser_process( | |
| 551 new MockBrowserProcessImpl(command_line, g_browser_process)); | |
| 552 mock_browser_process->SetApplicationLocale("en_US"); | |
| 553 | |
| 554 EXPECT_CALL(*mock_browser_process, PreMainMessageLoopRun()).Times(1); | |
| 555 EXPECT_CALL(*mock_browser_process, metrics_service()). | |
| 556 WillRepeatedly(ReturnNull()); | |
| 557 EXPECT_CALL(*mock_browser_process, watchdog_thread()). | |
| 558 WillRepeatedly(ReturnNull()); | |
| 559 EXPECT_CALL(*mock_browser_process, profile_manager()). | |
| 560 WillRepeatedly(Return(mock_profile_manager.get())); | |
| 561 EXPECT_CALL(*mock_browser_process, local_state()). | |
| 562 WillRepeatedly(Return(prefs)); | |
| 563 EXPECT_CALL(*mock_browser_process, notification_ui_manager()). | |
| 564 WillRepeatedly(ReturnNull()); | |
| 565 EXPECT_CALL(*mock_browser_process, component_updater()). | |
| 566 WillRepeatedly(ReturnNull()); | |
| 567 | |
| 568 scoped_ptr<ChromeBrowserMainParts> parts( | |
| 569 reinterpret_cast<ChromeBrowserMainParts*>( | |
| 570 content::GetContentClient()->browser()-> | |
| 571 CreateBrowserMainParts(parameters))); | |
| 572 | |
| 573 MockProcessSingleton* mock_process_singleton( | |
| 574 new MockProcessSingleton(FilePath())); | |
| 575 | |
| 576 EXPECT_CALL(*mock_process_singleton, NotifyOtherProcessOrCreate(_)).Times(0); | |
| 577 | |
| 578 parts->process_singleton_.reset(mock_process_singleton); | |
| 579 parts->browser_process_.reset(mock_browser_process); | |
| 580 parts->browser_creator_.reset(new StartupBrowserCreator()); | |
| 581 parts->local_state_ = prefs; | |
| 582 | |
| 583 int result = parts->PreMainMessageLoopRunImpl(); | |
| 584 EXPECT_EQ(content::RESULT_CODE_NORMAL_EXIT, result); | |
| 585 EXPECT_EQ(ProcessSingleton::PROCESS_NONE, parts->notify_result_); | |
| 586 | |
| 587 parts->PostMainMessageLoopRun(); | |
| 588 | |
| 589 // Clear out a global variable. | |
| 590 mock_browser_process->SetApplicationLocale(""); | |
| 591 } | |
| 592 | |
| 593 EXPECT_EQ(NULL, g_browser_process); | |
| 594 g_browser_process = original_browser_process; | |
|
Paweł Hajdan Jr.
2012/06/23 07:23:37
We have AutoReset or something for that.
| |
| 595 } | |
| OLD | NEW |