diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-28 22:37:50 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-28 22:37:50 +0000 |
commit | 116cbdfa5c289732b7c17ba11fc15ac8c4ab358b (patch) | |
tree | a6a55526a8fd0ab36c909325ca4acff4041288a9 /chrome/browser | |
parent | 46a7491aedb0ed1f6bd5244e7c09e6ae00090924 (diff) | |
download | chromium_src-116cbdfa5c289732b7c17ba11fc15ac8c4ab358b.zip chromium_src-116cbdfa5c289732b7c17ba11fc15ac8c4ab358b.tar.gz chromium_src-116cbdfa5c289732b7c17ba11fc15ac8c4ab358b.tar.bz2 |
Fixed test expectations, also made network observer a separate object
TBR:nkostylev@chromium.org
3rd attempt to land http://codereview.chromium.org/4003006
BUG=chromium-os:7971
TEST=Login and examine /tmp/login-times-sent
Review URL: http://codereview.chromium.org/4141009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64325 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
9 files changed, 67 insertions, 8 deletions
diff --git a/chrome/browser/chromeos/boot_times_loader.cc b/chrome/browser/chromeos/boot_times_loader.cc index 00151b8..db9aa4b 100644 --- a/chrome/browser/chromeos/boot_times_loader.cc +++ b/chrome/browser/chromeos/boot_times_loader.cc @@ -334,7 +334,7 @@ void BootTimesLoader::Observe( // and the page is reloaded. if (NetworkStateNotifier::Get()->is_connected()) { // Post difference between first tab and login success time. - AddLoginTimeMarker("LoginDone", false); + AddLoginTimeMarker("LoginDone", true); RecordCurrentStats(kChromeFirstRender); // Post chrome first render stat. registrar_.Remove(this, NotificationType::LOAD_START, diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc index c7f7b69..35a9537 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.cc +++ b/chrome/browser/chromeos/login/existing_user_controller.cc @@ -177,6 +177,7 @@ void ExistingUserController::Init() { WmMessageListener::instance()->AddObserver(this); + LoginUtils::Get()->PrewarmAuthentication(); if (CrosLibrary::Get()->EnsureLoaded()) CrosLibrary::Get()->GetLoginLibrary()->EmitLoginPromptReady(); } diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc index 6a8a6da..f872733 100644 --- a/chrome/browser/chromeos/login/login_utils.cc +++ b/chrome/browser/chromeos/login/login_utils.cc @@ -19,6 +19,7 @@ #include "chrome/browser/browser_thread.h" #include "chrome/browser/chromeos/boot_times_loader.h" #include "chrome/browser/chromeos/cros/login_library.h" +#include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/chromeos/external_cookie_handler.h" #include "chrome/browser/chromeos/input_method/input_method_util.h" #include "chrome/browser/chromeos/login/cookie_fetcher.h" @@ -29,6 +30,7 @@ #include "chrome/browser/chromeos/login/user_manager.h" #include "chrome/browser/extensions/extensions_service.h" #include "chrome/browser/net/gaia/token_service.h" +#include "chrome/browser/net/preconnect.h" #include "chrome/browser/prefs/pref_member.h" #include "chrome/browser/profile.h" #include "chrome/browser/profile_manager.h" @@ -36,6 +38,7 @@ #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/logging_chrome.h" +#include "chrome/common/net/gaia/gaia_authenticator2.h" #include "chrome/common/net/gaia/gaia_constants.h" #include "chrome/common/net/url_request_context_getter.h" #include "chrome/common/pref_names.h" @@ -84,6 +87,9 @@ class LoginUtilsImpl : public LoginUtils { // Returns if browser launch enabled now or not. virtual bool IsBrowserLaunchEnabled() const; + // Warms the url used by authentication. + virtual void PrewarmAuthentication(); + private: // Indicates if DoBrowserLaunch will actually launch the browser or not. bool browser_launch_enabled_; @@ -289,6 +295,41 @@ bool LoginUtilsImpl::IsBrowserLaunchEnabled() const { return browser_launch_enabled_; } +// We use a special class for this so that it can be safely leaked if we +// never connect. At shutdown the order is not well defined, and it's possible +// for the infrastructure needed to unregister might be unstable and crash. +class WarmingObserver : public NetworkLibrary::Observer { + public: + WarmingObserver() { + NetworkLibrary *network = CrosLibrary::Get()->GetNetworkLibrary(); + network->AddObserver(this); + } + + // If we're now connected, prewarm the auth url. + void NetworkChanged(NetworkLibrary* network) { + if (network->Connected()) { + chrome_browser_net::Preconnect::PreconnectOnUIThread( + GURL(GaiaAuthenticator2::kClientLoginUrl), + chrome_browser_net::UrlInfo::EARLY_LOAD_MOTIVATED); + network->RemoveObserver(this); + delete this; + } + } +}; + +void LoginUtilsImpl::PrewarmAuthentication() { + if (CrosLibrary::Get()->EnsureLoaded()) { + NetworkLibrary *network = CrosLibrary::Get()->GetNetworkLibrary(); + if (network->Connected()) { + chrome_browser_net::Preconnect::PreconnectOnUIThread( + GURL(GaiaAuthenticator2::kClientLoginUrl), + chrome_browser_net::UrlInfo::EARLY_LOAD_MOTIVATED); + } else { + new WarmingObserver(); + } + } +} + LoginUtils* LoginUtils::Get() { return Singleton<LoginUtilsWrapper>::get()->get(); } diff --git a/chrome/browser/chromeos/login/login_utils.h b/chrome/browser/chromeos/login/login_utils.h index a7c1786..26c4c50 100644 --- a/chrome/browser/chromeos/login/login_utils.h +++ b/chrome/browser/chromeos/login/login_utils.h @@ -56,6 +56,9 @@ class LoginUtils { // Returns if browser launch enabled now or not. virtual bool IsBrowserLaunchEnabled() const = 0; + // Prewarms the authentication network connection. + virtual void PrewarmAuthentication() = 0; + }; } // namespace chromeos diff --git a/chrome/browser/chromeos/login/mock_authenticator.h b/chrome/browser/chromeos/login/mock_authenticator.h index 6100f5c..d58c110 100644 --- a/chrome/browser/chromeos/login/mock_authenticator.h +++ b/chrome/browser/chromeos/login/mock_authenticator.h @@ -136,6 +136,9 @@ class MockLoginUtils : public LoginUtils { return auth_token_; } + virtual void PrewarmAuthentication() { + } + private: std::string expected_username_; std::string expected_password_; diff --git a/chrome/browser/chromeos/login/network_screen_browsertest.cc b/chrome/browser/chromeos/login/network_screen_browsertest.cc index bce1a6f..4e5d819 100644 --- a/chrome/browser/chromeos/login/network_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/network_screen_browsertest.cc @@ -82,13 +82,15 @@ class NetworkScreenTest : public WizardInProcessBrowserTest { .Times(3) .WillRepeatedly(Return(false)); EXPECT_CALL(*mock_network_library_, Connected()) - .Times(3) + .Times(4) .WillRepeatedly(Return(false)); + // Add a Connecting for prewarming auth url check. EXPECT_CALL(*mock_network_library_, Connecting()) .Times(2) .WillRepeatedly(Return(false)); + // Add an AddObserver for prewarming auth url check. EXPECT_CALL(*mock_network_library_, AddObserver(_)) - .Times(2); + .Times(3); EXPECT_CALL(*mock_network_library_, RemoveObserver(_)) .Times(2); diff --git a/chrome/browser/chromeos/login/update_screen_browsertest.cc b/chrome/browser/chromeos/login/update_screen_browsertest.cc index 73e08fc..f6f616d 100644 --- a/chrome/browser/chromeos/login/update_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/update_screen_browsertest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "chrome/browser/chromeos/cros/mock_login_library.h" +#include "chrome/browser/chromeos/cros/mock_network_library.h" #include "chrome/browser/chromeos/cros/mock_update_library.h" #include "chrome/browser/chromeos/login/mock_screen_observer.h" #include "chrome/browser/chromeos/login/update_screen.h" @@ -20,7 +21,8 @@ class UpdateScreenTest : public WizardInProcessBrowserTest { public: UpdateScreenTest() : WizardInProcessBrowserTest("update"), mock_login_library_(NULL), - mock_update_library_(NULL) {} + mock_update_library_(NULL), + mock_network_library_(NULL){} protected: virtual void SetUpInProcessBrowserTestFixture() { @@ -47,6 +49,15 @@ class UpdateScreenTest : public WizardInProcessBrowserTest { EXPECT_CALL(*mock_update_library_, CheckForUpdate()) .Times(1) .WillOnce(Return(true)); + + mock_network_library_ = cros_mock_->mock_network_library(); + EXPECT_CALL(*mock_network_library_, Connected()) + .Times(1) // also called by NetworkMenu::InitMenuItems() + .WillRepeatedly((Return(false))) + .RetiresOnSaturation(); + EXPECT_CALL(*mock_network_library_, AddObserver(_)) + .Times(1) + .RetiresOnSaturation(); } virtual void TearDownInProcessBrowserTestFixture() { @@ -56,6 +67,7 @@ class UpdateScreenTest : public WizardInProcessBrowserTest { MockLoginLibrary* mock_login_library_; MockUpdateLibrary* mock_update_library_; + MockNetworkLibrary* mock_network_library_; private: DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc index cb2629a..4899525 100644 --- a/chrome/browser/chromeos/login/wizard_controller.cc +++ b/chrome/browser/chromeos/login/wizard_controller.cc @@ -981,6 +981,7 @@ void ShowLoginWizard(const std::string& first_screen_name, controller->Init(first_screen_name, screen_bounds); controller->Show(); + chromeos::LoginUtils::Get()->PrewarmAuthentication(); if (chromeos::CrosLibrary::Get()->EnsureLoaded()) chromeos::CrosLibrary::Get()->GetLoginLibrary()->EmitLoginPromptReady(); diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc index 77cf37e..48cea7f 100644 --- a/chrome/browser/sessions/session_restore.cc +++ b/chrome/browser/sessions/session_restore.cc @@ -503,10 +503,6 @@ class SessionRestoreImpl : public NotificationObserver { } void RestoreTabsToBrowser(const SessionWindow& window, Browser* browser) { -#if defined(OS_CHROMEOS) - chromeos::BootTimesLoader::Get()->AddLoginTimeMarker( - "SessionRestore", true); -#endif DCHECK(!window.tabs.empty()); for (std::vector<SessionTab*>::const_iterator i = window.tabs.begin(); i != window.tabs.end(); ++i) { |