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

Side by Side Diff: chrome/browser/chromeos/arc/arc_android_management_checker.cc

Issue 2441563002: arc: Create intermediate directories in c/b/c/arc (Closed)
Patch Set: Re-rebase to ToT 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/arc/arc_android_management_checker.h"
6
7 #include "base/bind.h"
8 #include "base/threading/thread_task_runner_handle.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/browser_process_platform_part.h"
11 #include "chrome/browser/chromeos/arc/arc_android_management_checker_delegate.h"
12 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
13 #include "components/policy/core/common/cloud/device_management_service.h"
14 #include "components/signin/core/browser/profile_oauth2_token_service.h"
15
16 namespace arc {
17
18 namespace {
19
20 constexpr int kRetryTimeMinMs = 10 * 1000; // 10 sec.
21 constexpr int kRetryTimeMaxMs = 1 * 60 * 60 * 1000; // 1 hour.
22
23 policy::DeviceManagementService* GetDeviceManagementService() {
24 policy::BrowserPolicyConnectorChromeOS* const connector =
25 g_browser_process->platform_part()->browser_policy_connector_chromeos();
26 return connector->device_management_service();
27 }
28
29 } // namespace
30
31 ArcAndroidManagementChecker::ArcAndroidManagementChecker(
32 ArcAndroidManagementCheckerDelegate* delegate,
33 ProfileOAuth2TokenService* token_service,
34 const std::string& account_id,
35 bool background_mode)
36 : delegate_(delegate),
37 token_service_(token_service),
38 account_id_(account_id),
39 background_mode_(background_mode),
40 retry_time_ms_(kRetryTimeMinMs),
41 android_management_client_(GetDeviceManagementService(),
42 g_browser_process->system_request_context(),
43 account_id,
44 token_service),
45 weak_ptr_factory_(this) {
46 if (token_service_->RefreshTokenIsAvailable(account_id_)) {
47 StartCheck();
48 } else {
49 DCHECK(background_mode_);
50 token_service_->AddObserver(this);
51 }
52 }
53
54 ArcAndroidManagementChecker::~ArcAndroidManagementChecker() {
55 token_service_->RemoveObserver(this);
56 }
57
58 // static
59 void ArcAndroidManagementChecker::StartClient() {
60 GetDeviceManagementService()->ScheduleInitialization(0);
61 }
62
63 void ArcAndroidManagementChecker::OnRefreshTokenAvailable(
64 const std::string& account_id) {
65 if (account_id != account_id_)
66 return;
67 OnRefreshTokensLoaded();
68 }
69
70 void ArcAndroidManagementChecker::OnRefreshTokensLoaded() {
71 token_service_->RemoveObserver(this);
72 StartCheck();
73 }
74
75 void ArcAndroidManagementChecker::StartCheck() {
76 if (!token_service_->RefreshTokenIsAvailable(account_id_)) {
77 VLOG(2) << "No refresh token is available for android management check.";
78 OnAndroidManagementChecked(
79 policy::AndroidManagementClient::Result::RESULT_ERROR);
80 return;
81 }
82
83 VLOG(2) << "Start android management check.";
84 android_management_client_.StartCheckAndroidManagement(
85 base::Bind(&ArcAndroidManagementChecker::OnAndroidManagementChecked,
86 weak_ptr_factory_.GetWeakPtr()));
87 }
88
89 void ArcAndroidManagementChecker::ScheduleCheck() {
90 DCHECK(background_mode_);
91
92 VLOG(2) << "Schedule next android management check in " << retry_time_ms_
93 << " ms.";
94
95 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
96 FROM_HERE, base::Bind(&ArcAndroidManagementChecker::StartCheck,
97 weak_ptr_factory_.GetWeakPtr()),
98 base::TimeDelta::FromMilliseconds(retry_time_ms_));
99 retry_time_ms_ *= 2;
100 if (retry_time_ms_ > kRetryTimeMaxMs)
101 retry_time_ms_ = kRetryTimeMaxMs;
102 }
103
104 void ArcAndroidManagementChecker::DispatchResult(
105 policy::AndroidManagementClient::Result result) {
106 DCHECK(delegate_);
107 delegate_->OnAndroidManagementChecked(result);
108 }
109
110 void ArcAndroidManagementChecker::OnAndroidManagementChecked(
111 policy::AndroidManagementClient::Result result) {
112 VLOG(2) << "Android management check done " << result << ".";
113 if (background_mode_ &&
114 result == policy::AndroidManagementClient::Result::RESULT_ERROR) {
115 ScheduleCheck();
116 return;
117 }
118
119 base::ThreadTaskRunnerHandle::Get()->PostTask(
120 FROM_HERE, base::Bind(&ArcAndroidManagementChecker::DispatchResult,
121 weak_ptr_factory_.GetWeakPtr(), result));
122 }
123
124 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698