|  | // Copyright (c) 2015 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/ash/session_util.h" | 
|  |  | 
|  | #include "ash/content/shell_content_state.h" | 
|  | #include "ash/session/session_state_delegate.h" | 
|  | #include "ash/shell.h" | 
|  | #include "build/build_config.h" | 
|  | #include "chrome/browser/profiles/profile.h" | 
|  | #include "chrome/browser/profiles/profile_manager.h" | 
|  | #include "content/public/browser/browser_context.h" | 
|  | #include "grit/ash_resources.h" | 
|  | #include "ui/aura/window.h" | 
|  | #include "ui/base/resource/resource_bundle.h" | 
|  | #include "ui/gfx/image/image_skia_operations.h" | 
|  |  | 
|  | #if defined(OS_CHROMEOS) | 
|  | #include "chrome/browser/chromeos/profiles/profile_helper.h" | 
|  | #include "components/user_manager/user_manager.h" | 
|  | #endif | 
|  |  | 
|  | content::BrowserContext* GetActiveBrowserContext() { | 
|  | #if defined(OS_CHROMEOS) | 
|  | DCHECK(user_manager::UserManager::Get()->GetLoggedInUsers().size()); | 
|  | #endif | 
|  | return ProfileManager::GetActiveUserProfile(); | 
|  | } | 
|  |  | 
|  | bool CanShowWindowForUser( | 
|  | aura::Window* window, | 
|  | const GetActiveBrowserContextCallback& get_context_callback) { | 
|  | ash::SessionStateDelegate* delegate = | 
|  | ash::Shell::GetInstance()->session_state_delegate(); | 
|  | if (delegate->NumberOfLoggedInUsers() > 1) { | 
|  | content::BrowserContext* active_browser_context = | 
|  | get_context_callback.Run(); | 
|  | ash::ShellContentState* state = ash::ShellContentState::GetInstance(); | 
|  | content::BrowserContext* owner_browser_context = | 
|  | state->GetBrowserContextForWindow(window); | 
|  | content::BrowserContext* shown_browser_context = | 
|  | state->GetUserPresentingBrowserContextForWindow(window); | 
|  |  | 
|  | if (owner_browser_context && active_browser_context && | 
|  | owner_browser_context != active_browser_context && | 
|  | shown_browser_context != active_browser_context) { | 
|  | return false; | 
|  | } | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | namespace { | 
|  | #if defined(OS_CHROMEOS) | 
|  | user_manager::UserInfo* GetUserInfoForContext( | 
|  | content::BrowserContext* context) { | 
|  | return chromeos::ProfileHelper::Get()->GetUserByProfile( | 
|  | Profile::FromBrowserContext(context)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | gfx::ImageSkia GetAvatarImageForContext(content::BrowserContext* context) { | 
|  | #if defined(OS_CHROMEOS) | 
|  | static const gfx::ImageSkia* holder = | 
|  | ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 
|  | IDR_AVATAR_HOLDER); | 
|  | static const gfx::ImageSkia* holder_mask = | 
|  | ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 
|  | IDR_AVATAR_HOLDER_MASK); | 
|  |  | 
|  | gfx::ImageSkia user_image = GetUserInfoForContext(context)->GetImage(); | 
|  | gfx::ImageSkia resized = gfx::ImageSkiaOperations::CreateResizedImage( | 
|  | user_image, skia::ImageOperations::RESIZE_BEST, holder->size()); | 
|  | gfx::ImageSkia masked = | 
|  | gfx::ImageSkiaOperations::CreateMaskedImage(resized, *holder_mask); | 
|  | return gfx::ImageSkiaOperations::CreateSuperimposedImage(*holder, masked); | 
|  | #else | 
|  | return gfx::ImageSkia(); | 
|  | #endif | 
|  | } |