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

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

Issue 2887363003: Read container_instance_id. (Closed)
Patch Set: Address comments. Created 3 years, 7 months 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
« no previous file with comments | « no previous file | chromeos/dbus/fake_session_manager_client.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/arc/arc_session_manager.h" 5 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 205
206 void ArcSessionManager::OnSessionStopped(ArcStopReason reason, 206 void ArcSessionManager::OnSessionStopped(ArcStopReason reason,
207 bool restarting) { 207 bool restarting) {
208 if (restarting) { 208 if (restarting) {
209 // If ARC is being restarted, here do nothing, and just wait for its 209 // If ARC is being restarted, here do nothing, and just wait for its
210 // next run. 210 // next run.
211 VLOG(1) << "ARC session is stopped, but being restarted: " << reason; 211 VLOG(1) << "ARC session is stopped, but being restarted: " << reason;
212 return; 212 return;
213 } 213 }
214 214
215 SetState(State::STOPPED);
216
215 // TODO(crbug.com/625923): Use |reason| to report more detailed errors. 217 // TODO(crbug.com/625923): Use |reason| to report more detailed errors.
216 if (arc_sign_in_timer_.IsRunning()) 218 if (arc_sign_in_timer_.IsRunning())
217 OnProvisioningFinished(ProvisioningResult::ARC_STOPPED); 219 OnProvisioningFinished(ProvisioningResult::ARC_STOPPED);
218 220
219 for (auto& observer : observer_list_) 221 for (auto& observer : observer_list_)
220 observer.OnArcSessionStopped(reason); 222 observer.OnArcSessionStopped(reason);
221 223
222 // Transition to the ARC data remove state.
223 if (!profile_->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)) {
224 // TODO(crbug.com/665316): This is the workaround for the bug.
225 // If it is not necessary to remove the data, MaybeStartArcDataRemoval()
226 // synchronously calls MaybeReenableArc(), which causes unexpected
227 // ARC session stop. (Please see the bug for details).
228 SetState(State::REMOVING_DATA_DIR);
229 base::ThreadTaskRunnerHandle::Get()->PostTask(
230 FROM_HERE, base::Bind(&ArcSessionManager::MaybeReenableArc,
231 weak_ptr_factory_.GetWeakPtr()));
232 return;
233 }
234
235 MaybeStartArcDataRemoval(); 224 MaybeStartArcDataRemoval();
236 } 225 }
237 226
238 void ArcSessionManager::OnProvisioningFinished(ProvisioningResult result) { 227 void ArcSessionManager::OnProvisioningFinished(ProvisioningResult result) {
239 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 228 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
240 229
241 // If the Mojo message to notify finishing the provisioning is already sent 230 // If the Mojo message to notify finishing the provisioning is already sent
242 // from the container, it will be processed even after requesting to stop the 231 // from the container, it will be processed even after requesting to stop the
243 // container. Ignore all |result|s arriving while ARC is disabled, in order to 232 // container. Ignore all |result|s arriving while ARC is disabled, in order to
244 // avoid popping up an error message triggered below. This code intentionally 233 // avoid popping up an error message triggered below. This code intentionally
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 ShutdownSession(); 861 ShutdownSession();
873 if (support_host_) 862 if (support_host_)
874 support_host_->Close(); 863 support_host_->Close();
875 } 864 }
876 865
877 void ArcSessionManager::MaybeStartArcDataRemoval() { 866 void ArcSessionManager::MaybeStartArcDataRemoval() {
878 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 867 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
879 DCHECK(profile_); 868 DCHECK(profile_);
880 // Data removal cannot run in parallel with ARC session. 869 // Data removal cannot run in parallel with ARC session.
881 DCHECK(arc_session_runner_->IsStopped()); 870 DCHECK(arc_session_runner_->IsStopped());
882 871 DCHECK_EQ(State::STOPPED, state_);
883 // TODO(hidehiko): DCHECK the previous state, when the state machine is
884 // fixed.
885 SetState(State::REMOVING_DATA_DIR); 872 SetState(State::REMOVING_DATA_DIR);
886 873
887 // TODO(hidehiko): Extract the implementation of data removal, so that 874 // TODO(hidehiko): Extract the implementation of data removal, so that
888 // shutdown can cancel the operation not to call OnArcDataRemoved callback. 875 // shutdown can cancel the operation not to call OnArcDataRemoved callback.
889 if (!profile_->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)) { 876 if (!profile_->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)) {
890 // ARC data removal is not requested. Just move to the next state. 877 // ARC data removal is not requested. Just move to the next state.
891 MaybeReenableArc(); 878 MaybeReenableArc();
892 return; 879 return;
893 } 880 }
894 881
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 1036
1050 #undef MAP_STATE 1037 #undef MAP_STATE
1051 1038
1052 // Some compilers report an error even if all values of an enum-class are 1039 // Some compilers report an error even if all values of an enum-class are
1053 // covered exhaustively in a switch statement. 1040 // covered exhaustively in a switch statement.
1054 NOTREACHED() << "Invalid value " << static_cast<int>(state); 1041 NOTREACHED() << "Invalid value " << static_cast<int>(state);
1055 return os; 1042 return os;
1056 } 1043 }
1057 1044
1058 } // namespace arc 1045 } // namespace arc
OLDNEW
« no previous file with comments | « no previous file | chromeos/dbus/fake_session_manager_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698