diff options
author | peria@chromium.org <peria@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-27 10:33:15 +0000 |
---|---|---|
committer | peria@chromium.org <peria@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-27 10:33:15 +0000 |
commit | 9bc48646f77da626baf7f1f1aed4ccc7db3a4ea6 (patch) | |
tree | 7e603f73756b288588b61acecf0c5db8e6ccf7c3 /chrome/browser/ui | |
parent | 5c2a198b6d137e3698af4ac3224575e789032510 (diff) | |
download | chromium_src-9bc48646f77da626baf7f1f1aed4ccc7db3a4ea6.zip chromium_src-9bc48646f77da626baf7f1f1aed4ccc7db3a4ea6.tar.gz chromium_src-9bc48646f77da626baf7f1f1aed4ccc7db3a4ea6.tar.bz2 |
On timeout of setting up sync, show a dialog to tell users the task longer time than expected and to enable them to close spinner window.
BUG=128692
TEST=manually
Review URL: https://chromiumcodereview.appspot.com/10539128
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148740 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui')
-rw-r--r-- | chrome/browser/ui/webui/sync_setup_handler.cc | 44 | ||||
-rw-r--r-- | chrome/browser/ui/webui/sync_setup_handler.h | 11 | ||||
-rw-r--r-- | chrome/browser/ui/webui/sync_setup_handler_unittest.cc | 3 |
3 files changed, 57 insertions, 1 deletions
diff --git a/chrome/browser/ui/webui/sync_setup_handler.cc b/chrome/browser/ui/webui/sync_setup_handler.cc index e334eb1..b680a7d 100644 --- a/chrome/browser/ui/webui/sync_setup_handler.cc +++ b/chrome/browser/ui/webui/sync_setup_handler.cc @@ -285,6 +285,8 @@ void SyncSetupHandler::GetStaticLocalizedValues( static OptionsStringResource resources[] = { { "syncSetupConfigureTitle", IDS_SYNC_SETUP_CONFIGURE_TITLE }, + { "syncSetupTimeoutTitle", IDS_SYNC_SETUP_TIME_OUT_TITLE }, + { "syncSetupTimeoutContent", IDS_SYNC_SETUP_TIME_OUT_CONTENT }, { "cannotBeBlank", IDS_SYNC_CANNOT_BE_BLANK }, { "emailLabel", IDS_SYNC_LOGIN_EMAIL_NEW_LINE }, { "passwordLabel", IDS_SYNC_LOGIN_PASSWORD_NEW_LINE }, @@ -487,6 +489,9 @@ void SyncSetupHandler::RegisterMessages() { "SyncSetupDoSignOutOnAuthError", base::Bind(&SyncSetupHandler::HandleDoSignOutOnAuthError, base::Unretained(this))); + web_ui()->RegisterMessageCallback("CloseTimeout", + base::Bind(&SyncSetupHandler::HandleCloseTimeout, + base::Unretained(this))); web_ui()->RegisterMessageCallback("SyncSetupStopSyncing", base::Bind(&SyncSetupHandler::HandleStopSyncing, base::Unretained(this))); @@ -591,6 +596,29 @@ void SyncSetupHandler::DisplaySpinner() { configuring_sync_ = true; StringValue page("spinner"); DictionaryValue args; + + const int kTimeoutSec = 30; + DCHECK(!backend_start_timer_.get()); + backend_start_timer_.reset(new base::OneShotTimer<SyncSetupHandler>()); + backend_start_timer_->Start(FROM_HERE, + base::TimeDelta::FromSeconds(kTimeoutSec), + this, &SyncSetupHandler::DisplayTimeout); + + web_ui()->CallJavascriptFunction( + "SyncSetupOverlay.showSyncSetupPage", page, args); +} + +// TODO(kochi): Handle error conditions other than timeout. +// http://crbug.com/128692 +void SyncSetupHandler::DisplayTimeout() { + // Stop a timer to handle timeout in waiting for checking network connection. + backend_start_timer_.reset(); + + // Do not listen to signin events. + signin_tracker_.reset(); + + StringValue page("timeout"); + DictionaryValue args; web_ui()->CallJavascriptFunction( "SyncSetupOverlay.showSyncSetupPage", page, args); } @@ -717,6 +745,9 @@ void SyncSetupHandler::GaiaCredentialsValid() { } void SyncSetupHandler::SigninFailed(const GoogleServiceAuthError& error) { + // Stop a timer to handle timeout in waiting for checking network connection. + backend_start_timer_.reset(); + last_signin_error_ = error; // Got a failed signin - this is either just a typical auth error, or a // sync error (treat sync errors as "fatal errors" - i.e. non-auth errors). @@ -741,6 +772,9 @@ ProfileSyncService* SyncSetupHandler::GetSyncService() const { void SyncSetupHandler::SigninSuccess() { DCHECK(GetSyncService()->sync_initialized()); + // Stop a timer to handle timeout in waiting for checking network connection. + backend_start_timer_.reset(); + // If we have signed in while sync is already setup, it must be due to some // kind of re-authentication flow. In that case, just close the signin dialog // rather than forcing the user to go through sync configuration. @@ -900,6 +934,10 @@ void SyncSetupHandler::HandleStopSyncing(const ListValue* args) { } } +void SyncSetupHandler::HandleCloseTimeout(const ListValue* args) { + CloseSyncSetup(); +} + void SyncSetupHandler::CloseSyncSetup() { // TODO(atwilson): Move UMA tracking of signin events out of sync module. ProfileSyncService* sync_service = GetSyncService(); @@ -943,6 +981,9 @@ void SyncSetupHandler::CloseSyncSetup() { configuring_sync_ = false; signin_tracker_.reset(); + + // Stop a timer to handle timeout in waiting for checking network connection. + backend_start_timer_.reset(); } void SyncSetupHandler::OpenSyncSetup(bool force_login) { @@ -1012,6 +1053,9 @@ LoginUIService* SyncSetupHandler::GetLoginUIService() const { } void SyncSetupHandler::CloseOverlay() { + // Stop a timer to handle timeout in waiting for sync setup. + backend_start_timer_.reset(); + CloseSyncSetup(); web_ui()->CallJavascriptFunction("OptionsPage.closeOverlay"); } diff --git a/chrome/browser/ui/webui/sync_setup_handler.h b/chrome/browser/ui/webui/sync_setup_handler.h index b2505d0..d319476 100644 --- a/chrome/browser/ui/webui/sync_setup_handler.h +++ b/chrome/browser/ui/webui/sync_setup_handler.h @@ -7,6 +7,7 @@ #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" +#include "base/timer.h" #include "chrome/browser/signin/signin_tracker.h" #include "chrome/browser/ui/webui/options2/options_ui.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" @@ -109,6 +110,7 @@ class SyncSetupHandler : public options2::OptionsPageUIHandler, void HandleShowSetupUIWithoutLogin(const base::ListValue* args); void HandleDoSignOutOnAuthError(const base::ListValue* args); void HandleStopSyncing(const base::ListValue* args); + void HandleCloseTimeout(const base::ListValue* args); // Helper routine that gets the Profile associated with this object (virtual // so tests can override). @@ -141,7 +143,10 @@ class SyncSetupHandler : public options2::OptionsPageUIHandler, // is running in the background. void DisplaySpinner(); - // Returns true if this is the active login object. + // Displays an error dialog which shows timeout of starting the sync backend. + void DisplayTimeout(); + + // Returns true if this object is the active login object. bool IsActiveLogin() const; // Initiates a login via the signin manager. @@ -192,6 +197,10 @@ class SyncSetupHandler : public options2::OptionsPageUIHandler, // When setup starts without login UI, do not retry login and fail. bool retry_on_signin_failure_; + // The OneShotTimer object used to timeout of starting the sync backend + // service. + scoped_ptr<base::OneShotTimer<SyncSetupHandler> > backend_start_timer_; + DISALLOW_COPY_AND_ASSIGN(SyncSetupHandler); }; diff --git a/chrome/browser/ui/webui/sync_setup_handler_unittest.cc b/chrome/browser/ui/webui/sync_setup_handler_unittest.cc index f8ac644..ae1b4be 100644 --- a/chrome/browser/ui/webui/sync_setup_handler_unittest.cc +++ b/chrome/browser/ui/webui/sync_setup_handler_unittest.cc @@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/json/json_writer.h" #include "base/memory/scoped_ptr.h" +#include "base/message_loop.h" #include "base/stl_util.h" #include "base/values.h" #include "chrome/browser/prefs/pref_service.h" @@ -421,6 +422,8 @@ class SyncSetupHandlerTest : public testing::TestWithParam<bool> { scoped_ptr<Profile> profile_; ProfileSyncServiceMock* mock_pss_; GoogleServiceAuthError error_; + // MessageLoop instance is required to work with OneShotTimer. + MessageLoop message_loop_; SigninManagerMock* mock_signin_; TestWebUI web_ui_; scoped_ptr<TestingSyncSetupHandler> handler_; |