1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/icon_loader.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/message_loop/message_loop.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/nix/mime_util_xdg.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/linux_ui/linux_ui.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IconGroupID IconLoader::ReadGroupIDFromFilepath(
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const base::FilePath& filepath) {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return base::nix::GetFileMimeType(filepath);
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) {
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return false;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)content::BrowserThread::ID IconLoader::ReadIconThreadID() {
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // ReadIcon() calls into views::LinuxUI and GTK2 code, so it must be on the UI
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // thread.
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return content::BrowserThread::UI;
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void IconLoader::ReadIcon() {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  int size_pixels = 0;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  switch (icon_size_) {
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case IconLoader::SMALL:
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      size_pixels = 16;
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      break;
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case IconLoader::NORMAL:
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      size_pixels = 32;
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      break;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case IconLoader::LARGE:
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      size_pixels = 48;
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      break;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    default:
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      NOTREACHED();
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::LinuxUI* ui = views::LinuxUI::instance();
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (ui) {
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    gfx::Image image = ui->GetIconForContentType(group_, size_pixels);
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (!image.IsEmpty())
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      image_.reset(new gfx::Image(image));
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  target_message_loop_->PostTask(
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      FROM_HERE, base::Bind(&IconLoader::NotifyDelegate, this));
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
56