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

Unified Diff: chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.cc

Issue 1826903002: updated UI, default profile name, check for existing supervised user before create (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.cc
diff --git a/chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.cc b/chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b321a7042cfb561228038c45d1c1d5d5df22675f
--- /dev/null
+++ b/chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.cc
@@ -0,0 +1,227 @@
+// Copyright 2016 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/ui/webui/signin/signin_supervised_user_import_handler.h"
+
+#include <stddef.h>
+
+#include <set>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/macros.h"
+#include "base/value_conversions.h"
+#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_avatar_icon_util.h"
+#include "chrome/browser/profiles/profile_info_cache.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/signin/signin_error_controller_factory.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_service.h"
+#include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_service_factory.h"
+#include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h"
+#include "chrome/browser/supervised_user/legacy/supervised_user_sync_service_factory.h"
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/prefs/pref_service.h"
+#include "components/signin/core/browser/signin_error_controller.h"
+#include "components/signin/core/browser/signin_manager.h"
+#include "content/public/browser/web_ui.h"
+#include "grit/theme_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+
+
+SigninSupervisedUserImportHandler::SigninSupervisedUserImportHandler()
+ : weak_ptr_factory_(this) {
+}
+
+SigninSupervisedUserImportHandler::~SigninSupervisedUserImportHandler() {
+}
+
+void SigninSupervisedUserImportHandler::RegisterMessages() {
+ web_ui()->RegisterMessageCallback("getExistingSupervisedUsers",
+ base::Bind(&SigninSupervisedUserImportHandler::
+ GetExistingSupervisedUsers,
+ base::Unretained(this)));
+}
+
+void SigninSupervisedUserImportHandler::AssignWebUICallbackId(
+ const base::ListValue* args) {
+ CHECK_LE(1U, args->GetSize());
+ CHECK(webui_callback_id_.empty());
+ CHECK(args->GetString(0, &webui_callback_id_));
+}
+
+void SigninSupervisedUserImportHandler::GetExistingSupervisedUsers(
+ const base::ListValue* args) {
+ CHECK_EQ(2U, args->GetSize());
+ AssignWebUICallbackId(args);
+
+ base::FilePath custodian_profile_path;
+ const base::Value* profile_path_value;
+ bool success = args->Get(1, &profile_path_value);
+ DCHECK(success);
+ success = base::GetValueAsFilePath(*profile_path_value,
+ &custodian_profile_path);
+ DCHECK(success);
+
+ // Load custodian profile.
+ g_browser_process->profile_manager()->CreateProfileAsync(
+ custodian_profile_path,
+ base::Bind(
+ &SigninSupervisedUserImportHandler::LoadCustodianProfileCallback,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::string16(), std::string(), std::string());
+}
+
+void SigninSupervisedUserImportHandler::LoadCustodianProfileCallback(
+ Profile* profile, Profile::CreateStatus status) {
+
+ // This method gets called once before with Profile::CREATE_STATUS_CREATED.
+ switch (status) {
+ case Profile::CREATE_STATUS_LOCAL_FAIL: {
+ // TODO(mahmadi): see if a better error message is required here.
+ RejectCallback(GetLocalErorrMessage());
+ break;
+ }
+ case Profile::CREATE_STATUS_CREATED: {
+ // Ignore the intermediate status.
+ break;
+ }
+ case Profile::CREATE_STATUS_INITIALIZED: {
+ // We are only interested in Profile::CREATE_STATUS_INITIALIZED when
+ // everything is ready.
+ if (profile->IsSupervised())
+ return;
+
+ if (!IsAccountConnected(profile) || HasAuthError(profile)) {
+ RejectCallback(GetAuthErorrMessage());
+ return;
+ }
+
+ SupervisedUserSyncService* supervised_user_sync_service =
+ SupervisedUserSyncServiceFactory::GetForProfile(profile);
+ if (supervised_user_sync_service) {
+ supervised_user_sync_service->GetSupervisedUsersAsync(
+ base::Bind(
+ &SigninSupervisedUserImportHandler::SendExistingSupervisedUsers,
+ weak_ptr_factory_.GetWeakPtr(), profile));
+ }
+ break;
+ }
+ case Profile::CREATE_STATUS_CANCELED:
+ case Profile::CREATE_STATUS_REMOTE_FAIL:
+ case Profile::MAX_CREATE_STATUS: {
+ NOTREACHED();
+ break;
+ }
+ }
+}
+
+void SigninSupervisedUserImportHandler::RejectCallback(
+ const base::string16& error) {
+ web_ui()->CallJavascriptFunction("cr.webUIResponse",
+ base::StringValue(webui_callback_id_),
+ base::FundamentalValue(false),
+ base::StringValue(error));
+ webui_callback_id_.clear();
+}
+
+base::string16 SigninSupervisedUserImportHandler::GetLocalErorrMessage() const {
+ return l10n_util::GetStringUTF16(
+ IDS_LEGACY_SUPERVISED_USER_IMPORT_LOCAL_ERROR);
+}
+
+base::string16 SigninSupervisedUserImportHandler::GetAuthErorrMessage() const {
+ return l10n_util::GetStringUTF16(
+ IDS_PROFILES_CREATE_CUSTODIAN_ACCOUNT_DETAILS_OUT_OF_DATE_ERROR);
+}
+
+void SigninSupervisedUserImportHandler::SendExistingSupervisedUsers(
+ Profile* profile,
+ const base::DictionaryValue* dict) {
+ DCHECK(dict);
+ ProfileInfoCache& cache =
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+ std::vector<ProfileAttributesEntry*> entries =
+ cache.GetAllProfilesAttributes();
+
+ // Collect the ids of local supervised user profiles.
+ std::set<std::string> supervised_user_ids;
+ for (auto& entry : entries) {
+ // Filter out omitted profiles. These are currently being imported, and
+ // shouldn't show up as "already on this device" just yet.
+ if (entry->IsLegacySupervised() && !entry->IsOmitted()) {
+ supervised_user_ids.insert(entry->GetSupervisedUserId());
+ }
+ }
+
+ base::ListValue supervised_users;
+ SupervisedUserSharedSettingsService* service =
+ SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(profile);
+ for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
+ const base::DictionaryValue* value = NULL;
+ bool success = it.value().GetAsDictionary(&value);
+ DCHECK(success);
+ std::string name;
+ value->GetString(SupervisedUserSyncService::kName, &name);
+
+ base::DictionaryValue* supervised_user = new base::DictionaryValue;
+ supervised_user->SetString("id", it.key());
+ supervised_user->SetString("name", name);
+
+ int avatar_index = SupervisedUserSyncService::kNoAvatar;
+ const base::Value* avatar_index_value =
+ service->GetValue(it.key(), supervised_users::kChromeAvatarIndex);
+ if (avatar_index_value) {
+ success = avatar_index_value->GetAsInteger(&avatar_index);
+ } else {
+ // Check if there is a legacy avatar index stored.
+ std::string avatar_str;
+ value->GetString(SupervisedUserSyncService::kChromeAvatar, &avatar_str);
+ success =
+ SupervisedUserSyncService::GetAvatarIndex(avatar_str, &avatar_index);
+ }
+ DCHECK(success);
+
+ std::string avatar_url =
+ avatar_index == SupervisedUserSyncService::kNoAvatar ?
+ profiles::GetDefaultAvatarIconUrl(
+ profiles::GetPlaceholderAvatarIndex()) :
+ profiles::GetDefaultAvatarIconUrl(avatar_index);
+ supervised_user->SetString("iconURL", avatar_url);
+ bool on_current_device =
+ supervised_user_ids.find(it.key()) != supervised_user_ids.end();
+ supervised_user->SetBoolean("onCurrentDevice", on_current_device);
+
+ supervised_users.Append(supervised_user);
+ }
+
+ // Resolve callback with response.
+ web_ui()->CallJavascriptFunction("cr.webUIResponse",
+ base::StringValue(webui_callback_id_),
+ base::FundamentalValue(true),
+ supervised_users);
+ webui_callback_id_.clear();
+}
+
+bool SigninSupervisedUserImportHandler::IsAccountConnected(
+ Profile* profile) const {
+ SigninManagerBase* signin_manager =
+ SigninManagerFactory::GetForProfile(profile);
+ return signin_manager && signin_manager->IsAuthenticated();
+}
+
+bool SigninSupervisedUserImportHandler::HasAuthError(Profile* profile) const {
+ SigninErrorController* error_controller =
+ SigninErrorControllerFactory::GetForProfile(profile);
+ if (!error_controller)
+ return true;
+
+ GoogleServiceAuthError::State state = error_controller->auth_error().state();
+ return state != GoogleServiceAuthError::NONE;
+}
« no previous file with comments | « chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698