Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_support_host.h" | 5 #include "chrome/browser/chromeos/arc/arc_support_host.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "ash/system/devicetype_utils.h" | 10 #include "ash/system/devicetype_utils.h" |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/i18n/timezone.h" | 12 #include "base/i18n/timezone.h" |
| 13 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" |
| 14 #include "base/json/json_writer.h" | 14 #include "base/json/json_writer.h" |
| 15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 16 #include "base/threading/thread_task_runner_handle.h" | 16 #include "base/threading/thread_task_runner_handle.h" |
| 17 #include "base/values.h" | 17 #include "base/values.h" |
| 18 #include "chrome/browser/browser_process.h" | 18 #include "chrome/browser/browser_process.h" |
| 19 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 19 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 20 #include "chrome/browser/extensions/extension_util.h" | 20 #include "chrome/browser/extensions/extension_util.h" |
| 21 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
| 22 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" | 22 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" |
| 23 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" | 23 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" |
| 24 #include "chrome/browser/ui/extensions/app_launch_params.h" | 24 #include "chrome/browser/ui/extensions/app_launch_params.h" |
| 25 #include "chrome/browser/ui/extensions/application_launch.h" | 25 #include "chrome/browser/ui/extensions/application_launch.h" |
| 26 #include "chrome/common/pref_names.h" | |
| 26 #include "chrome/grit/generated_resources.h" | 27 #include "chrome/grit/generated_resources.h" |
| 28 #include "components/prefs/pref_service.h" | |
| 27 #include "components/user_manager/known_user.h" | 29 #include "components/user_manager/known_user.h" |
| 28 #include "extensions/browser/extension_registry.h" | 30 #include "extensions/browser/extension_registry.h" |
| 29 #include "ui/base/l10n/l10n_util.h" | 31 #include "ui/base/l10n/l10n_util.h" |
| 30 #include "ui/base/webui/web_ui_util.h" | 32 #include "ui/base/webui/web_ui_util.h" |
| 31 #include "ui/display/screen.h" | 33 #include "ui/display/screen.h" |
| 32 | 34 |
| 33 namespace { | 35 namespace { |
| 34 constexpr char kAction[] = "action"; | 36 constexpr char kAction[] = "action"; |
| 35 constexpr char kArcManaged[] = "arcManaged"; | 37 constexpr char kArcManaged[] = "arcManaged"; |
| 36 constexpr char kData[] = "data"; | 38 constexpr char kData[] = "data"; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 155 // static | 157 // static |
| 156 const char ArcSupportHost::kStorageId[] = "arc_support"; | 158 const char ArcSupportHost::kStorageId[] = "arc_support"; |
| 157 | 159 |
| 158 ArcSupportHost::ArcSupportHost(Profile* profile) | 160 ArcSupportHost::ArcSupportHost(Profile* profile) |
| 159 : profile_(profile), | 161 : profile_(profile), |
| 160 request_open_app_callback_(base::Bind(&RequestOpenApp)) { | 162 request_open_app_callback_(base::Bind(&RequestOpenApp)) { |
| 161 DCHECK(profile_); | 163 DCHECK(profile_); |
| 162 } | 164 } |
| 163 | 165 |
| 164 ArcSupportHost::~ArcSupportHost() { | 166 ArcSupportHost::~ArcSupportHost() { |
| 167 // Delegates should have been reset to nullptr at this point. | |
| 168 DCHECK(!auth_delegate_); | |
| 169 DCHECK(!tos_delegate_); | |
| 170 DCHECK(!error_delegate_); | |
| 171 | |
| 165 if (message_host_) | 172 if (message_host_) |
| 166 DisconnectMessageHost(); | 173 DisconnectMessageHost(); |
| 167 } | 174 } |
| 168 | 175 |
| 169 void ArcSupportHost::AddObserver(Observer* observer) { | 176 void ArcSupportHost::AddObserver(Observer* observer) { |
| 170 observer_list_.AddObserver(observer); | 177 observer_list_.AddObserver(observer); |
| 171 } | 178 } |
| 172 | 179 |
| 173 void ArcSupportHost::RemoveObserver(Observer* observer) { | 180 void ArcSupportHost::RemoveObserver(Observer* observer) { |
| 174 observer_list_.RemoveObserver(observer); | 181 observer_list_.RemoveObserver(observer); |
| 175 } | 182 } |
| 176 | 183 |
| 177 bool ArcSupportHost::HasObserver(Observer* observer) { | 184 bool ArcSupportHost::HasObserver(Observer* observer) { |
| 178 return observer_list_.HasObserver(observer); | 185 return observer_list_.HasObserver(observer); |
| 179 } | 186 } |
| 180 | 187 |
| 188 void ArcSupportHost::SetAuthDelegate(AuthDelegate* delegate) { | |
| 189 // Since AuthDelegate and TermsOfServiceDelegate should not have overlapping | |
| 190 // life cycle, both delegates can't be non-null at the same time. | |
| 191 DCHECK(!(delegate && tos_delegate_)); | |
| 192 auth_delegate_ = delegate; | |
| 193 } | |
| 194 | |
| 195 void ArcSupportHost::SetTermsOfServiceDelegate( | |
| 196 TermsOfServiceDelegate* delegate) { | |
| 197 // Since AuthDelegate and TermsOfServiceDelegate should not have overlapping | |
| 198 // life cycle, both delegates can't be non-null at the same time. | |
| 199 DCHECK(!(delegate && auth_delegate_)); | |
| 200 tos_delegate_ = delegate; | |
| 201 } | |
| 202 | |
| 203 void ArcSupportHost::SetErrorDelegate(ErrorDelegate* delegate) { | |
| 204 error_delegate_ = delegate; | |
| 205 } | |
| 206 | |
| 181 void ArcSupportHost::SetArcManaged(bool is_arc_managed) { | 207 void ArcSupportHost::SetArcManaged(bool is_arc_managed) { |
| 182 DCHECK(!message_host_); | 208 DCHECK(!message_host_); |
| 183 is_arc_managed_ = is_arc_managed; | 209 is_arc_managed_ = is_arc_managed; |
| 184 } | 210 } |
| 185 | 211 |
| 186 void ArcSupportHost::Close() { | 212 void ArcSupportHost::Close() { |
| 187 ui_page_ = UIPage::NO_PAGE; | 213 ui_page_ = UIPage::NO_PAGE; |
| 188 if (!message_host_) { | 214 if (!message_host_) { |
| 189 VLOG(2) << "ArcSupportHost::Close() is called " | 215 VLOG(2) << "ArcSupportHost::Close() is called " |
| 190 << "but message_host_ is not available."; | 216 << "but message_host_ is not available."; |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 511 } | 537 } |
| 512 | 538 |
| 513 void ArcSupportHost::OnMessage(const base::DictionaryValue& message) { | 539 void ArcSupportHost::OnMessage(const base::DictionaryValue& message) { |
| 514 std::string event; | 540 std::string event; |
| 515 if (!message.GetString(kEvent, &event)) { | 541 if (!message.GetString(kEvent, &event)) { |
| 516 NOTREACHED(); | 542 NOTREACHED(); |
| 517 return; | 543 return; |
| 518 } | 544 } |
| 519 | 545 |
| 520 if (event == kEventOnWindowClosed) { | 546 if (event == kEventOnWindowClosed) { |
| 521 for (auto& observer : observer_list_) | 547 // If ToS negotiation is ongoing, call the specific function. |
| 522 observer.OnWindowClosed(); | 548 if (tos_delegate_) { |
| 549 tos_delegate_->OnTermsRejected(); | |
| 550 } else { | |
| 551 DCHECK(error_delegate_); | |
| 552 error_delegate_->OnWindowClosedTermsAccepted(); | |
| 553 } | |
| 523 } else if (event == kEventOnAuthSucceeded) { | 554 } else if (event == kEventOnAuthSucceeded) { |
| 555 DCHECK(auth_delegate_); | |
| 524 std::string code; | 556 std::string code; |
| 525 if (message.GetString(kCode, &code)) { | 557 if (message.GetString(kCode, &code)) { |
|
Luis Héctor Chávez
2017/05/30 16:06:27
nit: maybe convert to guard clause pattern?
if (!
victorhsieh0
2017/05/30 19:52:42
Done.
| |
| 526 for (auto& observer : observer_list_) | 558 auth_delegate_->OnAuthSucceeded(code); |
| 527 observer.OnAuthSucceeded(code); | |
| 528 } else { | 559 } else { |
| 529 NOTREACHED(); | 560 NOTREACHED(); |
| 530 } | 561 } |
| 531 } else if (event == kEventOnAuthFailed) { | 562 } else if (event == kEventOnAuthFailed) { |
| 532 for (auto& observer : observer_list_) | 563 DCHECK(auth_delegate_); |
| 533 observer.OnAuthFailed(); | 564 auth_delegate_->OnAuthFailed(); |
| 534 } else if (event == kEventOnAgreed) { | 565 } else if (event == kEventOnAgreed) { |
| 566 DCHECK(tos_delegate_); | |
| 535 bool is_metrics_enabled; | 567 bool is_metrics_enabled; |
| 536 bool is_backup_restore_enabled; | 568 bool is_backup_restore_enabled; |
| 537 bool is_location_service_enabled; | 569 bool is_location_service_enabled; |
| 538 if (message.GetBoolean(kIsMetricsEnabled, &is_metrics_enabled) && | 570 if (message.GetBoolean(kIsMetricsEnabled, &is_metrics_enabled) && |
| 539 message.GetBoolean(kIsBackupRestoreEnabled, | 571 message.GetBoolean(kIsBackupRestoreEnabled, |
| 540 &is_backup_restore_enabled) && | 572 &is_backup_restore_enabled) && |
| 541 message.GetBoolean(kIsLocationServiceEnabled, | 573 message.GetBoolean(kIsLocationServiceEnabled, |
| 542 &is_location_service_enabled)) { | 574 &is_location_service_enabled)) { |
| 543 for (auto& observer : observer_list_) { | 575 tos_delegate_->OnTermsAgreed(is_metrics_enabled, |
| 544 observer.OnTermsAgreed(is_metrics_enabled, is_backup_restore_enabled, | 576 is_backup_restore_enabled, |
| 545 is_location_service_enabled); | 577 is_location_service_enabled); |
| 546 } | |
| 547 } else { | 578 } else { |
| 548 NOTREACHED(); | 579 NOTREACHED(); |
| 549 } | 580 } |
| 550 } else if (event == kEventOnRetryClicked) { | 581 } else if (event == kEventOnRetryClicked) { |
| 551 for (auto& observer : observer_list_) | 582 // If ToS negotiation or manual authentication is ongoing, call the |
| 552 observer.OnRetryClicked(); | 583 // corresponding delegate. Otherwise, call the general retry function. |
| 584 if (tos_delegate_) { | |
| 585 tos_delegate_->OnTermsRetryClicked(); | |
| 586 } else if (auth_delegate_) { | |
| 587 auth_delegate_->OnAuthRetryClicked(); | |
| 588 } else { | |
| 589 DCHECK(error_delegate_); | |
| 590 error_delegate_->OnRetryClicked(); | |
| 591 } | |
| 553 } else if (event == kEventOnSendFeedbackClicked) { | 592 } else if (event == kEventOnSendFeedbackClicked) { |
| 554 for (auto& observer : observer_list_) | 593 DCHECK(error_delegate_); |
| 555 observer.OnSendFeedbackClicked(); | 594 error_delegate_->OnSendFeedbackClicked(); |
| 556 } else { | 595 } else { |
| 557 LOG(ERROR) << "Unknown message: " << event; | 596 LOG(ERROR) << "Unknown message: " << event; |
| 558 NOTREACHED(); | 597 NOTREACHED(); |
| 559 } | 598 } |
| 560 } | 599 } |
| OLD | NEW |