browser_non_client_frame_view.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" 6 7#include "chrome/browser/browser_process.h" 8#include "chrome/browser/managed_mode/managed_mode.h" 9#include "chrome/browser/profiles/avatar_menu_model.h" 10#include "chrome/browser/profiles/profile.h" 11#include "chrome/browser/profiles/profile_info_cache.h" 12#include "chrome/browser/profiles/profile_manager.h" 13#include "chrome/browser/ui/views/avatar_menu_button.h" 14#include "chrome/browser/ui/views/frame/browser_view.h" 15#include "grit/theme_resources.h" 16#include "ui/base/resource/resource_bundle.h" 17#include "ui/gfx/image/image.h" 18 19BrowserNonClientFrameView::BrowserNonClientFrameView(BrowserFrame* frame, 20 BrowserView* browser_view) 21 : frame_(frame), 22 browser_view_(browser_view) { 23} 24 25BrowserNonClientFrameView::~BrowserNonClientFrameView() { 26} 27 28void BrowserNonClientFrameView::UpdateAvatarInfo() { 29 if (browser_view_->ShouldShowAvatar()) { 30 if (!avatar_button_.get()) { 31 avatar_button_.reset( 32 new AvatarMenuButton(browser_view_->browser(), 33 browser_view_->IsOffTheRecord())); 34 AddChildView(avatar_button_.get()); 35 frame_->GetRootView()->Layout(); 36 } 37 } else if (avatar_button_.get()) { 38 RemoveChildView(avatar_button_.get()); 39 avatar_button_.reset(); 40 frame_->GetRootView()->Layout(); 41 } 42 43 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 44 gfx::Image avatar; 45 string16 text; 46 bool is_gaia_picture = false; 47 if (browser_view_->IsOffTheRecord()) { 48 avatar = rb.GetImageNamed(browser_view_->GetOTRIconResourceID()); 49 } else if (ManagedMode::IsInManagedMode()) { 50 avatar = rb.GetImageNamed(IDR_MANAGED_MODE_AVATAR); 51 } else if (AvatarMenuModel::ShouldShowAvatarMenu()) { 52 ProfileInfoCache& cache = 53 g_browser_process->profile_manager()->GetProfileInfoCache(); 54 Profile* profile = browser_view_->browser()->profile(); 55 size_t index = cache.GetIndexOfProfileWithPath(profile->GetPath()); 56 if (index == std::string::npos) 57 return; 58 is_gaia_picture = 59 cache.IsUsingGAIAPictureOfProfileAtIndex(index) && 60 cache.GetGAIAPictureOfProfileAtIndex(index); 61 avatar = cache.GetAvatarIconOfProfileAtIndex(index); 62 text = cache.GetNameOfProfileAtIndex(index); 63 } 64 if (avatar_button_.get()) { 65 avatar_button_->SetAvatarIcon(avatar, is_gaia_picture); 66 if (!text.empty()) 67 avatar_button_->SetText(text); 68 } 69 70 // For popups and panels which don't have the avatar button, we still 71 // need to draw the taskbar decoration. 72 if (AvatarMenuModel::ShouldShowAvatarMenu() || 73 ManagedMode::IsInManagedMode()) { 74 DrawTaskBarDecoration(frame_->GetNativeWindow(), &avatar); 75 } else { 76 DrawTaskBarDecoration(frame_->GetNativeWindow(), NULL); 77 } 78} 79 80void BrowserNonClientFrameView::VisibilityChanged(views::View* starting_from, 81 bool is_visible) { 82 if (!is_visible) 83 return; 84 // The first time UpdateAvatarInfo() is called the window is not visible so 85 // DrawTaskBarDecoration() has no effect. Therefore we need to call it again 86 // once the window is visible. 87 UpdateAvatarInfo(); 88} 89