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

Side by Side Diff: chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_launcher.cc

Issue 2496903003: arc: Add Arc Kiosk app service and ability to launch kiosk apps. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@policy_comp_parse
Patch Set: Address lhchavez@ comments. Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_launcher.h>
6
7 #include "ash/wm/window_util.h"
8 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
9 #include "chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h"
10 #include "ui/aura/env.h"
11
12 namespace chromeos {
13
14 ArcKioskAppLauncher::ArcKioskAppLauncher(content::BrowserContext* context,
15 const std::string& app_id)
16 : app_id_(app_id) {
17 prefs_ = ArcAppListPrefs::Get(context);
18 prefs_->AddObserver(this);
19 aura::Env::GetInstance()->AddObserver(this);
20 // Launching the app by app id in landscape mode.
21 arc::LaunchApp(context, app_id_);
22 }
23
24 ArcKioskAppLauncher::~ArcKioskAppLauncher() {
25 StopObserving();
26 }
27
28 void ArcKioskAppLauncher::OnTaskCreated(int32_t task_id,
29 const std::string& package_name,
30 const std::string& activity) {
31 std::unique_ptr<ArcAppListPrefs::AppInfo> app = prefs_->GetApp(app_id_);
32 if (!app || app->package_name != package_name || app->activity != activity)
33 return;
34 task_id_ = task_id;
35 // The app window may have been created already.
36 for (aura::Window* window : windows_) {
37 if (CheckWindow(window))
38 break;
39 }
40 }
41
42 void ArcKioskAppLauncher::OnWindowInitialized(aura::Window* window) {
43 // The |window|’s task ID is not set yet. We need to observe
44 // the window until the |kApplicationIdKey| property is set.
45 window->AddObserver(this);
46 windows_.insert(window);
47 }
48
49 void ArcKioskAppLauncher::OnWindowPropertyChanged(aura::Window* window,
50 const void* key,
51 intptr_t old) {
52 // If we do not know yet what task ID to look for, do nothing.
53 // Existing windows will be revisited the moment the task ID
54 // becomes known.
55 if (task_id_ == -1)
56 return;
57
58 // We are only interested in changes to |kApplicationIdKey|,
59 // but that constant is not accessible outside shell_surface.cc.
60 // So we react to all property changes.
61 CheckWindow(window);
62 }
63
64 void ArcKioskAppLauncher::OnWindowDestroying(aura::Window* window) {
65 window->RemoveObserver(this);
66 windows_.erase(window);
67 }
68
69 bool ArcKioskAppLauncher::CheckWindow(aura::Window* const window) {
Luis Héctor Chávez 2016/11/16 17:48:46 Can you run trybots? This does not compile.
Sergey Poromov 2016/11/16 18:03:20 Acknowledged.
70 DCHECK_GE(task_id_, 0);
71 if (ArcAppWindowLauncherController::GetWindowTaskId(window) != task_id_)
72 return false;
73 // Stop observing as target window is already found.
74 StopObserving();
75 ash::wm::PinWindow(window, true /* trusted */);
76 return true;
77 }
78
79 void ArcKioskAppLauncher::StopObserving() {
80 aura::Env::GetInstance()->RemoveObserver(this);
81 for (auto* window : windows_)
82 window->RemoveObserver(this);
83 windows_.clear();
84 prefs_->RemoveObserver(this);
85 }
86
87 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698