Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / extensions / chromeos / kiosk_apps_handler.cc
index 3fdaecf..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;
@@ -94,6 +98,7 @@ KioskAppsHandler::KioskAppsHandler()
     : kiosk_app_manager_(KioskAppManager::Get()),
       initialized_(false),
       is_kiosk_enabled_(false),
+      is_auto_launch_enabled_(false),
       weak_ptr_factory_(this) {
   kiosk_app_manager_->AddObserver(this);
 }
@@ -177,36 +182,39 @@ 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::OnGetConsumerKioskModeStatus(
-    chromeos::KioskAppManager::ConsumerKioskModeStatus status) {
+void KioskAppsHandler::OnKioskExtensionDownloadFailed(
+    const std::string& app_id) {
+  ShowError(app_id);
+}
+
+void KioskAppsHandler::OnGetConsumerKioskAutoLaunchStatus(
+    chromeos::KioskAppManager::ConsumerKioskAutoLaunchStatus status) {
   initialized_ = true;
-  is_kiosk_enabled_ =
-      ((status == KioskAppManager::CONSUMER_KIOSK_MODE_ENABLED) &&
-          chromeos::UserManager::Get()->IsCurrentUserOwner()) ||
+  is_kiosk_enabled_ = user_manager::UserManager::Get()->IsCurrentUserOwner() ||
+                      !base::SysInfo::IsRunningOnChromeOS();
+
+  is_auto_launch_enabled_ =
+      status == KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_ENABLED ||
       !base::SysInfo::IsRunningOnChromeOS();
 
   if (is_kiosk_enabled_) {
-    base::FundamentalValue enabled(is_kiosk_enabled_);
+    base::DictionaryValue kiosk_params;
+    kiosk_params.SetBoolean("kioskEnabled", is_kiosk_enabled_);
+    kiosk_params.SetBoolean("autoLaunchEnabled", is_auto_launch_enabled_);
     web_ui()->CallJavascriptFunction("extensions.KioskAppsOverlay.enableKiosk",
-                                     enabled);
+                                     kiosk_params);
   }
 }
 
@@ -228,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);
@@ -248,8 +258,8 @@ void KioskAppsHandler::SendKioskAppSettings() {
 
 void KioskAppsHandler::HandleInitializeKioskAppSettings(
     const base::ListValue* args) {
-  KioskAppManager::Get()->GetConsumerKioskModeStatus(
-      base::Bind(&KioskAppsHandler::OnGetConsumerKioskModeStatus,
+  KioskAppManager::Get()->GetConsumerKioskAutoLaunchStatus(
+      base::Bind(&KioskAppsHandler::OnGetConsumerKioskAutoLaunchStatus,
                  weak_ptr_factory_.GetWeakPtr()));
 }
 
@@ -286,7 +296,7 @@ void KioskAppsHandler::HandleRemoveKioskApp(const base::ListValue* args) {
 
 void KioskAppsHandler::HandleEnableKioskAutoLaunch(
     const base::ListValue* args) {
-  if (!initialized_ || !is_kiosk_enabled_)
+  if (!initialized_ || !is_kiosk_enabled_ || !is_auto_launch_enabled_)
     return;
 
   std::string app_id;
@@ -297,7 +307,7 @@ void KioskAppsHandler::HandleEnableKioskAutoLaunch(
 
 void KioskAppsHandler::HandleDisableKioskAutoLaunch(
     const base::ListValue* args) {
-  if (!initialized_ || !is_kiosk_enabled_)
+  if (!initialized_ || !is_kiosk_enabled_ || !is_auto_launch_enabled_)
     return;
 
   std::string app_id;
@@ -323,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