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 18 IconGroupID IconLoader::ReadGroupIDFromFilepath( 19 const base::FilePath& filepath) { 20 return filepath.Extension(); 21 } 22 23 bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) { 24 return false; 25 } 26 27 void IconLoader::ReadIcon() { 28 NSString* group = base::SysUTF8ToNSString(group_); 29 NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; 30 NSImage* icon = [workspace iconForFileType:group]; 31 32 if (icon_size_ == ALL) { 33 // The NSImage already has all sizes. 34 image_.reset(new gfx::Image([icon retain])); 35 } else { 36 NSSize size = NSZeroSize; 37 switch (icon_size_) { 38 case IconLoader::SMALL: 39 size = NSMakeSize(16, 16); 40 break; 41 case IconLoader::NORMAL: 42 size = NSMakeSize(32, 32); 43 break; 44 default: 45 NOTREACHED(); 46 } 47 gfx::ImageSkia image_skia(gfx::ImageSkiaFromResizedNSImage(icon, size)); 48 if (!image_skia.isNull()) { 49 image_skia.MakeThreadSafe(); 50 image_.reset(new gfx::Image(image_skia)); 51 } 52 } 53 54 target_message_loop_->PostTask(FROM_HERE, 55 base::Bind(&IconLoader::NotifyDelegate, this)); 56 } 57