1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/webui/options/supervised_user_import_handler.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <set> 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/bind.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/prefs/pref_service.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/values.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/browser_process.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_constants.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service.h" 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service_factory.h" 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_sync_service.h" 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h" 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/pref_names.h" 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/common/url_constants.h" 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/signin_error_controller.h" 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_ui.h" 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/theme_resources.h" 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace { 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)scoped_ptr<base::ListValue> GetAvatarIcons() { 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<base::ListValue> avatar_icons(new base::ListValue); 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < profiles::GetDefaultAvatarIconCount(); ++i) { 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string avatar_url = profiles::GetDefaultAvatarIconUrl(i); 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) avatar_icons->Append(new base::StringValue(avatar_url)); 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return avatar_icons.Pass(); 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace options { 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 49116680a4aac90f2aa7413d9095a592090648e557Ben MurdochSupervisedUserImportHandler::SupervisedUserImportHandler() 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : observer_(this), 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) weak_ptr_factory_(this) {} 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53116680a4aac90f2aa7413d9095a592090648e557Ben MurdochSupervisedUserImportHandler::~SupervisedUserImportHandler() { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!profile->IsSupervised()) { 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService* service = 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncServiceFactory::GetForProfile(profile); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (service) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service->RemoveObserver(this); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) subscription_.reset(); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::GetLocalizedValues( 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::DictionaryValue* localized_strings) { 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(localized_strings); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static OptionsStringResource resources[] = { 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserImportTitle", 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_IMPORT_EXISTING_SUPERVISED_USER_TITLE }, 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserImportText", IDS_IMPORT_EXISTING_SUPERVISED_USER_TEXT }, 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "createNewUserLink", IDS_CREATE_NEW_USER_LINK }, 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserImportOk", IDS_IMPORT_EXISTING_SUPERVISED_USER_OK }, 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserImportSigninError", 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IDS_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR }, 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserAlreadyOnThisDevice", 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IDS_SUPERVISED_USER_ALREADY_ON_THIS_DEVICE }, 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "noExistingSupervisedUsers", IDS_SUPERVISED_USER_NO_EXISTING_ERROR }, 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserSelectAvatarTitle", 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IDS_SUPERVISED_USER_SELECT_AVATAR_TITLE }, 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserSelectAvatarText", 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_SUPERVISED_USER_SELECT_AVATAR_TEXT }, 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "supervisedUserSelectAvatarOk", IDS_SUPERVISED_USER_SELECT_AVATAR_OK }, 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RegisterStrings(localized_strings, resources, arraysize(resources)); 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) localized_strings->Set("avatarIcons", GetAvatarIcons().release()); 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::InitializeHandler() { 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!profile->IsSupervised()) { 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService* sync_service = 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncServiceFactory::GetForProfile(profile); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (sync_service) { 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sync_service->AddObserver(this); 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) observer_.Add(ProfileOAuth2TokenServiceFactory::GetForProfile(profile)-> 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) signin_error_controller()); 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsService* settings_service = 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext( 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) subscription_ = settings_service->Subscribe( 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&SupervisedUserImportHandler::OnSharedSettingChanged, 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext( 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile)); 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!ProfileOAuth2TokenServiceFactory::GetForProfile(profile)); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::RegisterMessages() { 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_ui()->RegisterMessageCallback("requestSupervisedUserImportUpdate", 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&SupervisedUserImportHandler:: 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RequestSupervisedUserImportUpdate, 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::OnSupervisedUsersChanged() { 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FetchSupervisedUsers(); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::FetchSupervisedUsers() { 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_ui()->CallJavascriptFunction( 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "options.SupervisedUserListData.resetPromise"); 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RequestSupervisedUserImportUpdate(NULL); 128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::RequestSupervisedUserImportUpdate( 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::ListValue* /* args */) { 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (Profile::FromWebUI(web_ui())->IsSupervised()) 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (!IsAccountConnected() || HasAuthError()) { 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ClearSupervisedUsersAndShowError(); 137d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } else { 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService* supervised_user_sync_service = 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncServiceFactory::GetForProfile( 140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile::FromWebUI(web_ui())); 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (supervised_user_sync_service) { 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_sync_service->GetSupervisedUsersAsync( 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&SupervisedUserImportHandler::SendExistingSupervisedUsers, 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::SendExistingSupervisedUsers( 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* dict) { 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(dict); 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const ProfileInfoCache& cache = 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) g_browser_process->profile_manager()->GetProfileInfoCache(); 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Collect the ids of local supervised user profiles. 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::set<std::string> supervised_user_ids; 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) { 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (cache.ProfileIsSupervisedAtIndex(i)) 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_ids.insert(cache.GetSupervisedUserIdOfProfileAtIndex(i)); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ListValue supervised_users; 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsService* service = 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(profile); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* value = NULL; 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool success = it.value().GetAsDictionary(&value); 16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(success); 17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string name; 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) value->GetString(SupervisedUserSyncService::kName, &name); 17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* supervised_user = new base::DictionaryValue; 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetString("id", it.key()); 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetString("name", name); 17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int avatar_index = SupervisedUserSyncService::kNoAvatar; 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* avatar_index_value = 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) service->GetValue(it.key(), supervised_users::kChromeAvatarIndex); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (avatar_index_value) { 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) success = avatar_index_value->GetAsInteger(&avatar_index); 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check if there is a legacy avatar index stored. 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string avatar_str; 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) value->GetString(SupervisedUserSyncService::kChromeAvatar, &avatar_str); 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) success = 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService::GetAvatarIndex(avatar_str, &avatar_index); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(success); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetBoolean( 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "needAvatar", 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) avatar_index == SupervisedUserSyncService::kNoAvatar); 19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string supervised_user_icon = 195d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string(chrome::kChromeUIThemeURL) + 196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "IDR_SUPERVISED_USER_PLACEHOLDER"; 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string avatar_url = 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) avatar_index == SupervisedUserSyncService::kNoAvatar ? 199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) supervised_user_icon : 200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch profiles::GetDefaultAvatarIconUrl(avatar_index); 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetString("iconURL", avatar_url); 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool on_current_device = 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_ids.find(it.key()) != supervised_user_ids.end(); 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetBoolean("onCurrentDevice", on_current_device); 20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_users.Append(supervised_user); 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) web_ui()->CallJavascriptFunction( 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "options.SupervisedUserListData.receiveExistingSupervisedUsers", 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_users); 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::ClearSupervisedUsersAndShowError() { 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) web_ui()->CallJavascriptFunction( 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "options.SupervisedUserListData.onSigninError"); 217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool SupervisedUserImportHandler::IsAccountConnected() const { 220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 221d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SigninManagerBase* signin_manager = 222d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile); 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return signin_manager && signin_manager->IsAuthenticated(); 224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 225d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool SupervisedUserImportHandler::HasAuthError() const { 227d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProfileOAuth2TokenService* token_service = 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile); 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!token_service) 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return true; 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SigninErrorController* error_controller = 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) token_service->signin_error_controller(); 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GoogleServiceAuthError::State state = error_controller->auth_error().state(); 237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 238d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return state == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS || 239d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) state == GoogleServiceAuthError::USER_NOT_SIGNED_UP || 240d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) state == GoogleServiceAuthError::ACCOUNT_DELETED || 241d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) state == GoogleServiceAuthError::ACCOUNT_DISABLED; 242d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 243d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::OnSharedSettingChanged( 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& supervised_user_id, 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& key) { 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (key == supervised_users::kChromeAvatarIndex) 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FetchSupervisedUsers(); 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SupervisedUserImportHandler::OnErrorChanged() { 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FetchSupervisedUsers(); 253a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace options 256