Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / extensions / chromeos / kiosk_apps_handler.cc
index e7cd953..d8a0567 100644 (file)
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/strings/string_util.h"
 #include "base/sys_info.h"
 #include "base/values.h"
-#include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
-#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/settings/cros_settings_names.h"
+#include "components/crx_file/id_util.h"
+#include "components/user_manager/user_manager.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_data_source.h"
-#include "extensions/common/extension.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
+#include "extensions/common/extension_urls.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/webui/web_ui_util.h"
 #include "url/gurl.h"
@@ -41,6 +42,9 @@ void PopulateAppDict(const KioskAppManager::App& app_data,
   if (!app_data.icon.isNull())
     icon_url = webui::GetBitmapDataUrl(*app_data.icon.bitmap());
 
+  // The items which are to be written into app_dict are also described in
+  // chrome/browser/resources/extensions/chromeos/kiosk_app_list.js in @typedef
+  // for AppDict. Please update it whenever you add or remove any keys here.
   app_dict->SetString("id", app_data.app_id);
   app_dict->SetString("name", app_data.name);
   app_dict->SetString("iconURL", icon_url);
@@ -56,7 +60,7 @@ void PopulateAppDict(const KioskAppManager::App& app_data,
 // Returns false if an app id could not be derived out of the input.
 bool ExtractsAppIdFromInput(const std::string& input,
                             std::string* app_id) {
-  if (extensions::Extension::IdIsValid(input)) {
+  if (crx_file::id_util::IdIsValid(input)) {
     *app_id = input;
     return true;
   }
@@ -81,7 +85,7 @@ bool ExtractsAppIdFromInput(const std::string& input,
     return false;
 
   const std::string candidate_id = path.substr(last_slash + 1);
-  if (!extensions::Extension::IdIsValid(candidate_id))
+  if (!crx_file::id_util::IdIsValid(candidate_id))
     return false;
 
   *app_id = candidate_id;
@@ -178,30 +182,28 @@ void KioskAppsHandler::GetLocalizedValues(content::WebUIDataSource* source) {
 }
 
 void KioskAppsHandler::OnKioskAppDataChanged(const std::string& app_id) {
-  KioskAppManager::App app_data;
-  if (!kiosk_app_manager_->GetApp(app_id, &app_data))
-    return;
-
-  base::DictionaryValue app_dict;
-  PopulateAppDict(app_data, &app_dict);
-
-  web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.updateApp",
-                                   app_dict);
+  UpdateApp(app_id);
 }
 
 void KioskAppsHandler::OnKioskAppDataLoadFailure(const std::string& app_id) {
-  base::StringValue app_id_value(app_id);
-  web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.showError",
-                                   app_id_value);
+  ShowError(app_id);
+}
+
+void KioskAppsHandler::OnKioskExtensionLoadedInCache(
+    const std::string& app_id) {
+  UpdateApp(app_id);
 }
 
+void KioskAppsHandler::OnKioskExtensionDownloadFailed(
+    const std::string& app_id) {
+  ShowError(app_id);
+}
 
 void KioskAppsHandler::OnGetConsumerKioskAutoLaunchStatus(
     chromeos::KioskAppManager::ConsumerKioskAutoLaunchStatus status) {
   initialized_ = true;
-  is_kiosk_enabled_ =
-      chromeos::UserManager::Get()->IsCurrentUserOwner() ||
-      !base::SysInfo::IsRunningOnChromeOS();
+  is_kiosk_enabled_ = user_manager::UserManager::Get()->IsCurrentUserOwner() ||
+                      !base::SysInfo::IsRunningOnChromeOS();
 
   is_auto_launch_enabled_ =
       status == KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_ENABLED ||
@@ -234,6 +236,8 @@ void KioskAppsHandler::SendKioskAppSettings() {
 
   base::DictionaryValue settings;
   settings.SetBoolean("disableBailout", !enable_bailout_shortcut);
+  settings.SetBoolean("hasAutoLaunchApp",
+                      !kiosk_app_manager_->GetAutoLaunchApp().empty());
 
   KioskAppManager::Apps apps;
   kiosk_app_manager_->GetApps(&apps);
@@ -329,4 +333,24 @@ void KioskAppsHandler::HandleSetDisableBailoutShortcut(
       !disable_bailout_shortcut);
 }
 
+void KioskAppsHandler::UpdateApp(const std::string& app_id) {
+  KioskAppManager::App app_data;
+  if (!kiosk_app_manager_->GetApp(app_id, &app_data))
+    return;
+
+  base::DictionaryValue app_dict;
+  PopulateAppDict(app_data, &app_dict);
+
+  web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.updateApp",
+                                   app_dict);
+}
+
+void KioskAppsHandler::ShowError(const std::string& app_id) {
+  base::StringValue app_id_value(app_id);
+  web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.showError",
+                                   app_id_value);
+
+  kiosk_app_manager_->RemoveApp(app_id);
+}
+
 }  // namespace chromeos