• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/icon_loader.h"
6
7#import <AppKit/AppKit.h>
8
9#include "base/bind.h"
10#include "base/files/file_path.h"
11#include "base/message_loop/message_loop.h"
12#include "base/strings/sys_string_conversions.h"
13#include "base/threading/thread.h"
14#include "ui/gfx/image/image_skia.h"
15#include "ui/gfx/image/image_skia_util_mac.h"
16
17// static
18IconGroupID IconLoader::ReadGroupIDFromFilepath(
19    const base::FilePath& filepath) {
20  return filepath.Extension();
21}
22
23// static
24bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) {
25  return false;
26}
27
28// static
29content::BrowserThread::ID IconLoader::ReadIconThreadID() {
30  return content::BrowserThread::FILE;
31}
32
33void IconLoader::ReadIcon() {
34  NSString* group = base::SysUTF8ToNSString(group_);
35  NSWorkspace* workspace = [NSWorkspace sharedWorkspace];
36  NSImage* icon = [workspace iconForFileType:group];
37
38  if (icon_size_ == ALL) {
39    // The NSImage already has all sizes.
40    image_.reset(new gfx::Image([icon retain]));
41  } else {
42    NSSize size = NSZeroSize;
43    switch (icon_size_) {
44      case IconLoader::SMALL:
45        size = NSMakeSize(16, 16);
46        break;
47      case IconLoader::NORMAL:
48        size = NSMakeSize(32, 32);
49        break;
50      default:
51        NOTREACHED();
52    }
53    gfx::ImageSkia image_skia(gfx::ImageSkiaFromResizedNSImage(icon, size));
54    if (!image_skia.isNull()) {
55      image_skia.MakeThreadSafe();
56      image_.reset(new gfx::Image(image_skia));
57    }
58  }
59
60  target_message_loop_->PostTask(FROM_HERE,
61      base::Bind(&IconLoader::NotifyDelegate, this));
62}
63