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