| Index: chrome/browser/background/background_mode_manager.cc
|
| diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc
|
| index 7cd746708b3c3ce691492e25eb8333998d96fe41..d7d18bbdeb1443d6c94c6a00db3c2f1d19e8df41 100644
|
| --- a/chrome/browser/background/background_mode_manager.cc
|
| +++ b/chrome/browser/background/background_mode_manager.cc
|
| @@ -61,6 +61,10 @@
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include "chrome/browser/app_icon_win.h"
|
| +#endif
|
| +
|
| using base::UserMetricsAction;
|
| using extensions::Extension;
|
|
|
| @@ -856,6 +860,33 @@ void BackgroundModeManager::OnBackgroundClientInstalled(
|
| DisplayClientInstalledNotification(name);
|
| }
|
|
|
| +// Gets the image for the status tray icon, at the correct size for the current
|
| +// platform and display settings.
|
| +gfx::ImageSkia GetStatusTrayIcon() {
|
| +#if defined(OS_WIN)
|
| + // On Windows, use GetSmallAppIconSize to get the correct image size. The
|
| + // user's "text size" setting in Windows determines how large the system tray
|
| + // icon should be.
|
| + gfx::Size size = GetSmallAppIconSize();
|
| +
|
| + // This loads all of the icon images, which is a bit wasteful because we're
|
| + // going to pick one and throw the rest away, but that is the price of using
|
| + // the ImageFamily abstraction. Note: We could just use the LoadImage function
|
| + // from the Windows API, but that does a *terrible* job scaling images.
|
| + // Therefore, we fetch the images and do our own high-quality scaling.
|
| + scoped_ptr<gfx::ImageFamily> family = GetAppIconImageFamily();
|
| + DCHECK(family);
|
| + if (!family)
|
| + return gfx::ImageSkia();
|
| +
|
| + return family->CreateExact(size).AsImageSkia();
|
| +#else
|
| + // On other platforms, just get a static resource image.
|
| + return *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| + IDR_STATUS_TRAY_ICON);
|
| +#endif
|
| +}
|
| +
|
| void BackgroundModeManager::CreateStatusTrayIcon() {
|
| // Only need status icons on windows/linux. ChromeOS doesn't allow exiting
|
| // Chrome and Mac can use the dock icon instead.
|
| @@ -872,12 +903,8 @@ void BackgroundModeManager::CreateStatusTrayIcon() {
|
| if (!status_tray_ || status_icon_)
|
| return;
|
|
|
| - gfx::ImageSkia* image_skia = ui::ResourceBundle::GetSharedInstance().
|
| - GetImageSkiaNamed(IDR_STATUS_TRAY_ICON);
|
| -
|
| status_icon_ = status_tray_->CreateStatusIcon(
|
| - StatusTray::BACKGROUND_MODE_ICON,
|
| - *image_skia,
|
| + StatusTray::BACKGROUND_MODE_ICON, GetStatusTrayIcon(),
|
| l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
|
| if (!status_icon_)
|
| return;
|
|
|