Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Unified Diff: chrome/browser/chromeos/app_mode/startup_app_launcher.cc

Issue 22914008: Refactor kiosk app launch to be part of login screen UI flow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/app_mode/startup_app_launcher.cc
diff --git a/chrome/browser/chromeos/app_mode/startup_app_launcher.cc b/chrome/browser/chromeos/app_mode/startup_app_launcher.cc
index 8308bf05ba7566771231d1b25fc3d5df79840646..9f6bc11eaa9b56b4f451389cbf313299328a8ab5 100644
--- a/chrome/browser/chromeos/app_mode/startup_app_launcher.cc
+++ b/chrome/browser/chromeos/app_mode/startup_app_launcher.cc
@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/app_mode/startup_app_launcher.h"
-#include "ash/shell.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/json/json_file_value_serializer.h"
@@ -15,7 +14,6 @@
#include "chrome/browser/chromeos/app_mode/app_session_lifetime.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
#include "chrome/browser/chromeos/login/user_manager.h"
-#include "chrome/browser/chromeos/ui/app_launch_view.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/webstore_startup_installer.h"
@@ -49,9 +47,6 @@ const char kOAuthClientSecret[] = "client_secret";
const base::FilePath::CharType kOAuthFileName[] =
FILE_PATH_LITERAL("kiosk_auth");
-// Application install splash screen minimum show time in milliseconds.
-const int kAppInstallSplashScreenMinTimeMS = 3000;
-
bool IsAppInstalled(Profile* profile, const std::string& app_id) {
return extensions::ExtensionSystem::Get(profile)->extension_service()->
GetInstalledExtension(app_id);
@@ -59,31 +54,35 @@ bool IsAppInstalled(Profile* profile, const std::string& app_id) {
} // namespace
+
StartupAppLauncher::StartupAppLauncher(Profile* profile,
const std::string& app_id)
: profile_(profile),
- app_id_(app_id),
- launch_splash_start_time_(0) {
+ app_id_(app_id) {
DCHECK(profile_);
DCHECK(Extension::IdIsValid(app_id_));
- DCHECK(ash::Shell::HasInstance());
- ash::Shell::GetInstance()->AddPreTargetHandler(this);
}
StartupAppLauncher::~StartupAppLauncher() {
- DCHECK(ash::Shell::HasInstance());
- ash::Shell::GetInstance()->RemovePreTargetHandler(this);
}
void StartupAppLauncher::Start() {
- launch_splash_start_time_ = base::TimeTicks::Now().ToInternalValue();
DVLOG(1) << "Starting... connection = "
<< net::NetworkChangeNotifier::GetConnectionType();
- chromeos::ShowAppLaunchSplashScreen(app_id_);
StartLoadingOAuthFile();
}
+void StartupAppLauncher::AddObserver(Observer* observer) {
+ observer_list_.AddObserver(observer);
+}
+
+void StartupAppLauncher::RemoveObserver(Observer* observer) {
+ observer_list_.RemoveObserver(observer);
+}
+
void StartupAppLauncher::StartLoadingOAuthFile() {
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnLoadingOAuthFile());
+
KioskOAuthParams* auth_params = new KioskOAuthParams();
BrowserThread::PostBlockingPoolTaskAndReply(
FROM_HERE,
@@ -134,8 +133,8 @@ void StartupAppLauncher::OnOAuthFileLoaded(KioskOAuthParams* auth_params) {
}
void StartupAppLauncher::InitializeNetwork() {
- chromeos::UpdateAppLaunchSplashScreenState(
- chromeos::APP_LAUNCH_STATE_PREPARING_NETWORK);
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnInitializingNetwork());
+
// Set a maximum allowed wait time for network.
const int kMaxNetworkWaitSeconds = 5 * 60;
network_wait_timer_.Start(
@@ -148,8 +147,8 @@ void StartupAppLauncher::InitializeNetwork() {
}
void StartupAppLauncher::InitializeTokenService() {
- chromeos::UpdateAppLaunchSplashScreenState(
- chromeos::APP_LAUNCH_STATE_LOADING_TOKEN_SERVICE);
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnInitializingTokenService());
+
ProfileOAuth2TokenService* profile_token_service =
ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
if (profile_token_service->RefreshTokenIsAvailable()) {
@@ -199,40 +198,15 @@ void StartupAppLauncher::OnRefreshTokensLoaded() {
InitializeNetwork();
}
-void StartupAppLauncher::Cleanup() {
- chromeos::CloseAppLaunchSplashScreen();
-
- delete this;
-}
-
void StartupAppLauncher::OnLaunchSuccess() {
- const int64 time_taken_ms = (base::TimeTicks::Now() -
- base::TimeTicks::FromInternalValue(launch_splash_start_time_)).
- InMilliseconds();
-
- // Enforce that we show app install splash screen for some minimum amount
- // of time.
- if (time_taken_ms < kAppInstallSplashScreenMinTimeMS) {
- BrowserThread::PostDelayedTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&StartupAppLauncher::OnLaunchSuccess, AsWeakPtr()),
- base::TimeDelta::FromMilliseconds(
- kAppInstallSplashScreenMinTimeMS - time_taken_ms));
- return;
- }
-
- Cleanup();
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnLaunchSucceeded());
}
void StartupAppLauncher::OnLaunchFailure(KioskAppLaunchError::Error error) {
+ LOG(ERROR) << "App launch failed";
DCHECK_NE(KioskAppLaunchError::NONE, error);
- // Saves the error and ends the session to go back to login screen.
- KioskAppLaunchError::Save(error);
- chrome::AttemptUserExit();
-
- Cleanup();
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnLaunchFailed(error));
}
void StartupAppLauncher::Launch() {
@@ -261,12 +235,11 @@ void StartupAppLauncher::Launch() {
}
void StartupAppLauncher::BeginInstall() {
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnInstallingApp());
+
DVLOG(1) << "BeginInstall... connection = "
<< net::NetworkChangeNotifier::GetConnectionType();
- chromeos::UpdateAppLaunchSplashScreenState(
- chromeos::APP_LAUNCH_STATE_INSTALLING_APPLICATION);
-
if (IsAppInstalled(profile_, app_id_)) {
Launch();
return;
@@ -293,13 +266,18 @@ void StartupAppLauncher::InstallCallback(bool success,
return;
}
- LOG(ERROR) << "Failed to install app with error: " << error;
+ // TODO: revert this.
+ LOG(ERROR) << "Failed to install app with error: " << error << ".";
+ LOG(ERROR) << " " << app_id_;
OnLaunchFailure(KioskAppLaunchError::UNABLE_TO_INSTALL);
}
void StartupAppLauncher::OnNetworkWaitTimedout() {
LOG(WARNING) << "OnNetworkWaitTimedout... connection = "
<< net::NetworkChangeNotifier::GetConnectionType();
+
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnNetworkWaitTimedout());
+
// Timeout in waiting for online. Try the install anyway.
net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
BeginInstall();
@@ -320,20 +298,4 @@ void StartupAppLauncher::OnNetworkChanged(
}
}
-void StartupAppLauncher::OnKeyEvent(ui::KeyEvent* event) {
- if (event->type() != ui::ET_KEY_PRESSED)
- return;
-
- if (KioskAppManager::Get()->GetDisableBailoutShortcut())
- return;
-
- if (event->key_code() != ui::VKEY_S ||
- !(event->flags() & ui::EF_CONTROL_DOWN) ||
- !(event->flags() & ui::EF_ALT_DOWN)) {
- return;
- }
-
- OnLaunchFailure(KioskAppLaunchError::USER_CANCEL);
-}
-
} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/app_mode/startup_app_launcher.h ('k') | chrome/browser/chromeos/chrome_browser_main_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698