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

Unified Diff: chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.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/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc
new file mode 100644
index 0000000000000000000000000000000000000000..00646a8b88949181b137113cae874541b1f2f258
--- /dev/null
+++ b/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc
@@ -0,0 +1,162 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.h"
+
+#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
+#include "grit/browser_resources.h"
+#include "grit/chrome_unscaled_resources.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/webui/web_ui_util.h"
+
+namespace {
+
+const char kJsScreenPath[] = "login.AppLaunchSplashScreen";
+
+} // namespace
+
+namespace chromeos {
+
+AppLaunchSplashScreenHandler::AppLaunchSplashScreenHandler()
+ : BaseScreenHandler(kJsScreenPath),
+ delegate_(NULL),
+ show_on_init_(false),
+ state_(APP_LAUNCH_STATE_LOADING_AUTH_FILE) {
+}
+
+AppLaunchSplashScreenHandler::~AppLaunchSplashScreenHandler() {
+}
+
+void AppLaunchSplashScreenHandler::DeclareLocalizedValues(
+ LocalizedValuesBuilder* builder) {
+
+ builder->Add("appStartMessage", IDS_APP_START_NETWORK_WAIT_MESSAGE);
+
+ const string16 product_os_name =
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_OS_NAME);
+ builder->Add(
+ "shortcutInfo",
+ l10n_util::GetStringFUTF16(IDS_APP_START_BAILOUT_SHORTCUT_FORMAT,
+ product_os_name));
+
+ builder->Add(
+ "productName",
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_OS_NAME));
+}
+
+void AppLaunchSplashScreenHandler::Initialize() {
+ if (show_on_init_) {
+ show_on_init_ = false;
+ Show(app_id_);
+ }
+}
+
+void AppLaunchSplashScreenHandler::Show(const std::string& app_id) {
+ app_id_ = app_id;
+ if (!page_is_ready()) {
+ show_on_init_ = true;
+ return;
+ }
+
+ base::DictionaryValue data;
+ data.SetBoolean("shortcutEnabled",
+ !KioskAppManager::Get()->GetDisableBailoutShortcut());
+
+ // |data| will take ownership of |app_info|.
+ base::DictionaryValue *app_info = new base::DictionaryValue();
+ PopulateAppInfo(app_info);
+ data.Set("appInfo", app_info);
+
+ SetLaunchText(l10n_util::GetStringUTF8(GetProgressMessageFromState(state_)));
+ ShowScreen(OobeUI::kScreenAppLaunchSplash, &data);
+}
+
+void AppLaunchSplashScreenHandler::RegisterMessages() {
+ AddCallback("configureNetwork",
+ &AppLaunchSplashScreenHandler::HandleConfigureNetwork);
+ AddCallback("cancelAppLaunch",
+ &AppLaunchSplashScreenHandler::HandleCancelAppLaunch);
+}
+
+void AppLaunchSplashScreenHandler::PrepareToShow() {
+}
+
+void AppLaunchSplashScreenHandler::Hide() {
+}
+
+void AppLaunchSplashScreenHandler::ToggleNetworkConfig(bool visible) {
+ // TODO(tengs): Implement network configuration in app launch.
+}
+
+void AppLaunchSplashScreenHandler::UpdateAppLaunchState(AppLaunchState state) {
+ if (state == state_)
+ return;
+
+ state_ = state;
+ if (page_is_ready()) {
+ SetLaunchText(
+ l10n_util::GetStringUTF8(GetProgressMessageFromState(state_)));
+ }
+}
+
+void AppLaunchSplashScreenHandler::SetDelegate(
+ AppLaunchSplashScreenHandler::Delegate* delegate) {
+ delegate_ = delegate;
+}
+
+void AppLaunchSplashScreenHandler::PopulateAppInfo(
+ base::DictionaryValue* out_info) {
+ KioskAppManager::App app;
+ KioskAppManager::Get()->GetApp(app_id_, &app);
+
+ if (app.name.empty())
+ app.name = l10n_util::GetStringUTF8(IDS_SHORT_PRODUCT_NAME);
+
+ if (app.icon.isNull()) {
+ app.icon = *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
+ IDR_PRODUCT_LOGO_128);
+ }
+
+ out_info->SetString("name", app.name);
+ out_info->SetString("iconURL", webui::GetBitmapDataUrl(*app.icon.bitmap()));
+}
+
+void AppLaunchSplashScreenHandler::SetLaunchText(const std::string& text) {
+ CallJS("updateMessage", text);
+}
+
+int AppLaunchSplashScreenHandler::GetProgressMessageFromState(
+ AppLaunchState state) {
+ switch (state) {
+ case APP_LAUNCH_STATE_LOADING_AUTH_FILE:
+ case APP_LAUNCH_STATE_LOADING_TOKEN_SERVICE:
+ // TODO(zelidrag): Add better string for this one than "Please wait..."
+ return IDS_SYNC_SETUP_SPINNER_TITLE;
+ case APP_LAUNCH_STATE_PREPARING_NETWORK:
+ return IDS_APP_START_NETWORK_WAIT_MESSAGE;
+ case APP_LAUNCH_STATE_INSTALLING_APPLICATION:
+ return IDS_APP_START_APP_WAIT_MESSAGE;
+ }
+ return IDS_APP_START_NETWORK_WAIT_MESSAGE;
+}
+
+void AppLaunchSplashScreenHandler::HandleConfigureNetwork() {
+ if (delegate_)
+ delegate_->OnConfigureNetwork();
+ else
+ LOG(WARNING) << "No delegate set to handle network configuration.";
+}
+
+void AppLaunchSplashScreenHandler::HandleCancelAppLaunch() {
+ if (delegate_)
+ delegate_->OnCancelAppLaunch();
+ else
+ LOG(WARNING) << "No delegate set to handle cancel app launch";
+}
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698