icon_loader.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/icon_loader.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/nix/mime_util_xdg.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IconLoader::IconLoader(const IconGroupID& group, IconSize size,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       Delegate* delegate)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : target_message_loop_(NULL),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      group_(group),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      icon_size_(size),
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      image_(NULL),
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delegate_(delegate) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IconLoader::~IconLoader() {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void IconLoader::Start() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  target_message_loop_ = base::MessageLoopProxy::current();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This call must happen on the UI thread before we can start loading icons.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::nix::DetectGtkTheme();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&IconLoader::ReadIcon, this));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void IconLoader::NotifyDelegate() {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the delegate takes ownership of the Image, release it from the scoped
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pointer.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (delegate_->OnImageLoaded(this, image_.get()))
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ignore_result(image_.release());  // Can't ignore return value.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
47