158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 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) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/options/managed_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" 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/signin_error_controller.h" 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_ui.h" 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "grit/generated_resources.h" 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/theme_resources.h" 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace { 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)scoped_ptr<base::ListValue> GetAvatarIcons() { 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<base::ListValue> avatar_icons(new base::ListValue); 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (size_t i = 0; i < profiles::GetDefaultAvatarIconCount(); ++i) { 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string avatar_url = profiles::GetDefaultAvatarIconUrl(i); 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) avatar_icons->Append(new base::StringValue(avatar_url)); 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return avatar_icons.Pass(); 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace options { 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ManagedUserImportHandler::ManagedUserImportHandler() 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : observer_(this), 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) weak_ptr_factory_(this) {} 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ManagedUserImportHandler::~ManagedUserImportHandler() { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!profile->IsSupervised()) { 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService* service = 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncServiceFactory::GetForProfile(profile); 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (service) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service->RemoveObserver(this); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) subscription_.reset(); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void ManagedUserImportHandler::GetLocalizedValues( 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::DictionaryValue* localized_strings) { 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(localized_strings); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static OptionsStringResource resources[] = { 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "managedUserImportTitle", IDS_IMPORT_EXISTING_MANAGED_USER_TITLE }, 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "managedUserImportText", IDS_IMPORT_EXISTING_MANAGED_USER_TEXT }, 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "createNewUserLink", IDS_CREATE_NEW_USER_LINK }, 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "managedUserImportOk", IDS_IMPORT_EXISTING_MANAGED_USER_OK }, 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { "managedUserImportSigninError", IDS_MANAGED_USER_IMPORT_SIGN_IN_ERROR }, 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "managedUserAlreadyOnThisDevice", 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) IDS_MANAGED_USER_ALREADY_ON_THIS_DEVICE }, 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "noExistingManagedUsers", IDS_MANAGED_USER_NO_EXISTING_ERROR }, 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "managedUserSelectAvatarTitle", IDS_MANAGED_USER_SELECT_AVATAR_TITLE }, 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "managedUserSelectAvatarText", IDS_MANAGED_USER_SELECT_AVATAR_TEXT }, 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "managedUserSelectAvatarOk", IDS_MANAGED_USER_SELECT_AVATAR_OK }, 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RegisterStrings(localized_strings, resources, arraysize(resources)); 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) localized_strings->Set("avatarIcons", GetAvatarIcons().release()); 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ManagedUserImportHandler::InitializeHandler() { 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!profile->IsSupervised()) { 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService* sync_service = 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncServiceFactory::GetForProfile(profile); 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (sync_service) { 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sync_service->AddObserver(this); 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) observer_.Add(ProfileOAuth2TokenServiceFactory::GetForProfile(profile)-> 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) signin_error_controller()); 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsService* settings_service = 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext( 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) subscription_ = settings_service->Subscribe( 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ManagedUserImportHandler::OnSharedSettingChanged, 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext( 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile)); 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!ProfileOAuth2TokenServiceFactory::GetForProfile(profile)); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void ManagedUserImportHandler::RegisterMessages() { 111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) web_ui()->RegisterMessageCallback("requestManagedUserImportUpdate", 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Bind(&ManagedUserImportHandler::RequestManagedUserImportUpdate, 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ManagedUserImportHandler::OnSupervisedUsersChanged() { 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FetchManagedUsers(); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ManagedUserImportHandler::FetchManagedUsers() { 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_ui()->CallJavascriptFunction("options.ManagedUserListData.resetPromise"); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RequestManagedUserImportUpdate(NULL); 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ManagedUserImportHandler::RequestManagedUserImportUpdate( 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::ListValue* /* args */) { 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (Profile::FromWebUI(web_ui())->IsSupervised()) 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (!IsAccountConnected() || HasAuthError()) { 131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ClearManagedUsersAndShowError(); 132d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } else { 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService* supervised_user_sync_service = 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncServiceFactory::GetForProfile( 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile::FromWebUI(web_ui())); 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (supervised_user_sync_service) { 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_sync_service->GetSupervisedUsersAsync( 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(&ManagedUserImportHandler::SendExistingManagedUsers, 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 142d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 143d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 144d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ManagedUserImportHandler::SendExistingManagedUsers( 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* dict) { 146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(dict); 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const ProfileInfoCache& cache = 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) g_browser_process->profile_manager()->GetProfileInfoCache(); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Collect the ids of local supervised user profiles. 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::set<std::string> supervised_user_ids; 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) { 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (cache.ProfileIsSupervisedAtIndex(i)) 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_ids.insert(cache.GetSupervisedUserIdOfProfileAtIndex(i)); 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ListValue supervised_users; 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsService* service = 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(profile); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* value = NULL; 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool success = it.value().GetAsDictionary(&value); 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(success); 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string name; 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) value->GetString(SupervisedUserSyncService::kName, &name); 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* supervised_user = new base::DictionaryValue; 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetString("id", it.key()); 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetString("name", name); 17158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int avatar_index = SupervisedUserSyncService::kNoAvatar; 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* avatar_index_value = 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) service->GetValue(it.key(), supervised_users::kChromeAvatarIndex); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (avatar_index_value) { 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) success = avatar_index_value->GetAsInteger(&avatar_index); 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check if there is a legacy avatar index stored. 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string avatar_str; 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) value->GetString(SupervisedUserSyncService::kChromeAvatar, &avatar_str); 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) success = 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSyncService::GetAvatarIndex(avatar_str, &avatar_index); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(success); 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetBoolean( 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "needAvatar", 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) avatar_index == SupervisedUserSyncService::kNoAvatar); 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 189d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string supervised_user_icon = 190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string(chrome::kChromeUIThemeURL) + 191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "IDR_SUPERVISED_USER_PLACEHOLDER"; 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string avatar_url = 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) avatar_index == SupervisedUserSyncService::kNoAvatar ? 194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) supervised_user_icon : 195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch profiles::GetDefaultAvatarIconUrl(avatar_index); 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetString("iconURL", avatar_url); 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool on_current_device = 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_ids.find(it.key()) != supervised_user_ids.end(); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user->SetBoolean("onCurrentDevice", on_current_device); 20058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_users.Append(supervised_user); 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) web_ui()->CallJavascriptFunction( 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "options.ManagedUserListData.receiveExistingManagedUsers", 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_users); 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 209d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ManagedUserImportHandler::ClearManagedUsersAndShowError() { 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_ui()->CallJavascriptFunction("options.ManagedUserListData.onSigninError"); 211d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 212d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 213d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)bool ManagedUserImportHandler::IsAccountConnected() const { 214d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 215d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SigninManagerBase* signin_manager = 216d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile); 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return signin_manager && !signin_manager->GetAuthenticatedUsername().empty(); 218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 219d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)bool ManagedUserImportHandler::HasAuthError() const { 221d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProfileOAuth2TokenService* token_service = 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile); 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!token_service) 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return true; 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SigninErrorController* error_controller = 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) token_service->signin_error_controller(); 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GoogleServiceAuthError::State state = error_controller->auth_error().state(); 231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 232d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return state == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS || 233d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) state == GoogleServiceAuthError::USER_NOT_SIGNED_UP || 234d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) state == GoogleServiceAuthError::ACCOUNT_DELETED || 235d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) state == GoogleServiceAuthError::ACCOUNT_DISABLED; 236d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ManagedUserImportHandler::OnSharedSettingChanged( 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& supervised_user_id, 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& key) { 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (key == supervised_users::kChromeAvatarIndex) 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FetchManagedUsers(); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ManagedUserImportHandler::OnErrorChanged() { 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FetchManagedUsers(); 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace options 250