summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authordavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-28 22:37:50 +0000
committerdavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-28 22:37:50 +0000
commit116cbdfa5c289732b7c17ba11fc15ac8c4ab358b (patch)
treea6a55526a8fd0ab36c909325ca4acff4041288a9 /chrome/browser
parent46a7491aedb0ed1f6bd5244e7c09e6ae00090924 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/chromeos/boot_times_loader.cc2
-rw-r--r--chrome/browser/chromeos/login/existing_user_controller.cc1
-rw-r--r--chrome/browser/chromeos/login/login_utils.cc41
-rw-r--r--chrome/browser/chromeos/login/login_utils.h3
-rw-r--r--chrome/browser/chromeos/login/mock_authenticator.h3
-rw-r--r--chrome/browser/chromeos/login/network_screen_browsertest.cc6
-rw-r--r--chrome/browser/chromeos/login/update_screen_browsertest.cc14
-rw-r--r--chrome/browser/chromeos/login/wizard_controller.cc1
-rw-r--r--chrome/browser/sessions/session_restore.cc4
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) {