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

Unified Diff: chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc

Issue 608283003: Remove retail mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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/kiosk_mode/kiosk_mode_screensaver.cc
diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
deleted file mode 100644
index 158eef314628167b13b0ce5ddafe6ecc8881970d..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
+++ /dev/null
@@ -1,324 +0,0 @@
-// Copyright (c) 2012 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/chromeos/kiosk_mode/kiosk_mode_screensaver.h"
-
-#include "ash/screensaver/screensaver_view.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/lazy_instance.h"
-#include "base/logging.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h"
-#include "chrome/browser/chromeos/login/existing_user_controller.h"
-#include "chrome/browser/chromeos/login/signin_specifics.h"
-#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
-#include "chrome/browser/chromeos/policy/app_pack_updater.h"
-#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
-#include "chrome/browser/chromeos/profiles/profile_helper.h"
-#include "chrome/browser/extensions/extension_garbage_collector_chromeos.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/sandboxed_unpacker.h"
-#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
-#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
-#include "chromeos/login/auth/user_context.h"
-#include "chromeos/login/login_state.h"
-#include "chromeos/login/user_names.h"
-#include "components/user_manager/user_type.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_service.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/file_util.h"
-#include "ui/wm/core/user_activity_detector.h"
-
-using extensions::Extension;
-using extensions::ExtensionGarbageCollectorChromeOS;
-using extensions::SandboxedUnpacker;
-
-namespace chromeos {
-
-namespace {
-
-ExtensionService* GetDefaultExtensionService() {
- Profile* default_profile = ProfileHelper::GetSigninProfile();
- if (!default_profile)
- return NULL;
- return extensions::ExtensionSystem::Get(
- default_profile)->extension_service();
-}
-
-ExtensionGarbageCollectorChromeOS* GetDefaultExtensionGarbageCollector() {
- Profile* default_profile = ProfileHelper::GetSigninProfile();
- if (!default_profile)
- return NULL;
- return ExtensionGarbageCollectorChromeOS::Get(default_profile);
-}
-
-typedef base::Callback<void(
- scoped_refptr<Extension>,
- const base::FilePath&)> UnpackCallback;
-
-class ScreensaverUnpackerClient
- : public extensions::SandboxedUnpackerClient {
- public:
- ScreensaverUnpackerClient(const base::FilePath& crx_path,
- const UnpackCallback& unpacker_callback)
- : crx_path_(crx_path),
- unpack_callback_(unpacker_callback) {}
-
- virtual void OnUnpackSuccess(const base::FilePath& temp_dir,
- const base::FilePath& extension_root,
- const base::DictionaryValue* original_manifest,
- const Extension* extension,
- const SkBitmap& install_icon) override;
- virtual void OnUnpackFailure(const base::string16& error) override;
-
- protected:
- virtual ~ScreensaverUnpackerClient() {}
-
- private:
- void LoadScreensaverExtension(
- const base::FilePath& extension_base_path,
- const base::FilePath& screensaver_extension_path);
-
- void NotifyAppPackOfDamagedFile();
-
- base::FilePath crx_path_;
- UnpackCallback unpack_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(ScreensaverUnpackerClient);
-};
-
-void ScreensaverUnpackerClient::OnUnpackSuccess(
- const base::FilePath& temp_dir,
- const base::FilePath& extension_root,
- const base::DictionaryValue* original_manifest,
- const Extension* extension,
- const SkBitmap& install_icon) {
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&ScreensaverUnpackerClient::LoadScreensaverExtension,
- this,
- temp_dir,
- extension_root));
-}
-
-void ScreensaverUnpackerClient::OnUnpackFailure(const base::string16& error) {
- LOG(ERROR) << "Couldn't unpack screensaver extension. Error: " << error;
- NotifyAppPackOfDamagedFile();
-}
-
-void ScreensaverUnpackerClient::LoadScreensaverExtension(
- const base::FilePath& extension_base_path,
- const base::FilePath& screensaver_extension_path) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
-
- // TODO(rkc): This is a HACK, please remove this method from extension
- // service once this code is deprecated. See crbug.com/280363
- ExtensionGarbageCollectorChromeOS* gc = GetDefaultExtensionGarbageCollector();
- if (gc)
- gc->disable_garbage_collection();
-
- std::string error;
- scoped_refptr<Extension> screensaver_extension =
- extensions::file_util::LoadExtension(screensaver_extension_path,
- extensions::Manifest::COMPONENT,
- Extension::NO_FLAGS,
- &error);
- if (!screensaver_extension.get()) {
- LOG(ERROR) << "Could not load screensaver extension from: "
- << screensaver_extension_path.value() << " due to: " << error;
- NotifyAppPackOfDamagedFile();
- return;
- }
-
- content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(
- unpack_callback_,
- screensaver_extension,
- extension_base_path));
-}
-
-void ScreensaverUnpackerClient::NotifyAppPackOfDamagedFile() {
- if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
- content::BrowserThread::PostTask(
- content::BrowserThread::UI, FROM_HERE,
- base::Bind(&ScreensaverUnpackerClient::NotifyAppPackOfDamagedFile,
- this));
- return;
- }
-
- policy::BrowserPolicyConnectorChromeOS* connector =
- g_browser_process->platform_part()->browser_policy_connector_chromeos();
- policy::AppPackUpdater* updater = connector->GetAppPackUpdater();
- if (updater)
- updater->OnDamagedFileDetected(crx_path_);
-}
-
-} // namespace
-
-KioskModeScreensaver::KioskModeScreensaver()
- : weak_ptr_factory_(this) {
- chromeos::KioskModeSettings* kiosk_mode_settings =
- chromeos::KioskModeSettings::Get();
-
- if (kiosk_mode_settings->is_initialized()) {
- GetScreensaverCrxPath();
- } else {
- kiosk_mode_settings->Initialize(base::Bind(
- &KioskModeScreensaver::GetScreensaverCrxPath,
- weak_ptr_factory_.GetWeakPtr()));
- }
-}
-
-KioskModeScreensaver::~KioskModeScreensaver() {
- // If we are shutting down the system might already be gone and we shouldn't
- // do anything (see crbug.com/288216).
- if (!g_browser_process || g_browser_process->IsShuttingDown())
- return;
-
- // If the extension was unpacked.
- if (!extension_base_path_.empty()) {
- // TODO(rkc): This is a HACK, please remove this method from extension
- // service once this code is deprecated. See crbug.com/280363
- ExtensionGarbageCollectorChromeOS* gc =
- GetDefaultExtensionGarbageCollector();
- if (gc)
- gc->enable_garbage_collection();
-
- // Delete it.
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(
- &extensions::file_util::DeleteFile, extension_base_path_, true));
- }
-
- // In case we're shutting down without ever triggering the active
- // notification and/or logging in.
- wm::UserActivityDetector* user_activity_detector =
- wm::UserActivityDetector::Get();
- if (user_activity_detector && user_activity_detector->HasObserver(this))
- user_activity_detector->RemoveObserver(this);
-}
-
-void KioskModeScreensaver::GetScreensaverCrxPath() {
- chromeos::KioskModeSettings::Get()->GetScreensaverPath(
- base::Bind(&KioskModeScreensaver::ScreensaverPathCallback,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void KioskModeScreensaver::ScreensaverPathCallback(
- const base::FilePath& screensaver_crx) {
- if (screensaver_crx.empty())
- return;
-
- ExtensionService* extension_service = GetDefaultExtensionService();
- if (!extension_service)
- return;
- base::FilePath extensions_dir = extension_service->install_directory();
- scoped_refptr<SandboxedUnpacker> screensaver_unpacker(
- new SandboxedUnpacker(
- screensaver_crx,
- extensions::Manifest::COMPONENT,
- Extension::NO_FLAGS,
- extensions_dir,
- content::BrowserThread::GetMessageLoopProxyForThread(
- content::BrowserThread::FILE).get(),
- new ScreensaverUnpackerClient(
- screensaver_crx,
- base::Bind(
- &KioskModeScreensaver::SetupScreensaver,
- weak_ptr_factory_.GetWeakPtr()))));
-
- // Fire off the unpacker on the file thread; don't need it to return.
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(
- &SandboxedUnpacker::Start, screensaver_unpacker.get()));
-}
-
-void KioskModeScreensaver::SetupScreensaver(
- scoped_refptr<Extension> extension,
- const base::FilePath& extension_base_path) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- extension_base_path_ = extension_base_path;
-
- // If the user is already logged in, don't need to display the screensaver.
- if (chromeos::LoginState::Get()->IsUserLoggedIn())
- return;
-
- wm::UserActivityDetector::Get()->AddObserver(this);
-
- ExtensionService* extension_service = GetDefaultExtensionService();
- // Add the extension to the extension service and display the screensaver.
- if (extension_service) {
- extension_service->AddExtension(extension.get());
- ash::ShowScreensaver(
- extensions::AppLaunchInfo::GetFullLaunchURL(extension.get()));
- } else {
- LOG(ERROR) << "Couldn't get extension system. Unable to load screensaver!";
- ShutdownKioskModeScreensaver();
- }
-}
-
-void KioskModeScreensaver::OnUserActivity(const ui::Event* event) {
- // We don't want to handle further user notifications; we'll either login
- // the user and close out or or at least close the screensaver.
- wm::UserActivityDetector::Get()->RemoveObserver(this);
-
- // Find the retail mode login page.
- if (LoginDisplayHostImpl::default_host()) {
- LoginDisplayHostImpl* webui_host =
- static_cast<LoginDisplayHostImpl*>(
- LoginDisplayHostImpl::default_host());
- OobeUI* oobe_ui = webui_host->GetOobeUI();
-
- // Show the login spinner.
- if (oobe_ui)
- oobe_ui->ShowRetailModeLoginSpinner();
-
- // Close the screensaver, our login spinner is already showing.
- ash::CloseScreensaver();
-
- // Log us in.
- ExistingUserController* controller =
- ExistingUserController::current_controller();
- if (controller && !chromeos::LoginState::Get()->IsUserLoggedIn()) {
- controller->Login(UserContext(user_manager::USER_TYPE_RETAIL_MODE,
- chromeos::login::kRetailModeUserName),
- SigninSpecifics());
- }
- } else {
- // No default host for the WebUiLoginDisplay means that we're already in the
- // process of logging in - shut down screensaver and do nothing else.
- ash::CloseScreensaver();
- }
-
- ShutdownKioskModeScreensaver();
-}
-
-static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL;
-
-void InitializeKioskModeScreensaver() {
- if (g_kiosk_mode_screensaver) {
- LOG(WARNING) << "Screensaver was already initialized";
- return;
- }
-
- g_kiosk_mode_screensaver = new KioskModeScreensaver();
-}
-
-void ShutdownKioskModeScreensaver() {
- delete g_kiosk_mode_screensaver;
- g_kiosk_mode_screensaver = NULL;
-}
-
-} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h ('k') | chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698