Index: chrome/browser/dom_ui/fileicon_source.cc |
=================================================================== |
--- chrome/browser/dom_ui/fileicon_source.cc (revision 0) |
+++ chrome/browser/dom_ui/fileicon_source.cc (revision 0) |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/dom_ui/fileicon_source.h" |
+ |
+#include "base/gfx/png_encoder.h" |
+#include "base/string_util.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/common/time_format.h" |
+ |
+#include "generated_resources.h" |
+ |
+// The path used in internal URLs to file icon data. |
+static const char kFileIconPath[] = "fileicon"; |
+ |
+FileIconSource::FileIconSource() |
+ : DataSource(kFileIconPath, MessageLoop::current()) {} |
+ |
+FileIconSource::~FileIconSource() { |
+ cancelable_consumer_.CancelAllRequests(); |
+} |
+ |
+void FileIconSource::StartDataRequest(const std::string& path, |
+ int request_id) { |
+ IconManager* im = g_browser_process->icon_manager(); |
+ |
+ // Fast look up. |
+ SkBitmap* icon = im->LookupIcon(UTF8ToWide(path), IconLoader::NORMAL); |
+ |
+ if (icon) { |
+ std::vector<unsigned char> png_bytes; |
+ PNGEncoder::EncodeBGRASkBitmap(*icon, false, &png_bytes); |
+ |
+ scoped_refptr<RefCountedBytes> icon_data = new RefCountedBytes(png_bytes); |
+ SendResponse(request_id, icon_data); |
+ } else { |
+ // Icon was not in cache, go fetch it slowly. |
+ IconManager::Handle h = im->LoadIcon(UTF8ToWide(path), IconLoader::NORMAL, |
+ &cancelable_consumer_, |
+ NewCallback(this, &FileIconSource::OnFileIconDataAvailable)); |
+ |
+ // Attach the ChromeURLDataManager request ID to the history request. |
+ cancelable_consumer_.SetClientData(im, h, request_id); |
+ } |
+} |
+ |
+void FileIconSource::OnFileIconDataAvailable(IconManager::Handle handle, |
+ SkBitmap* icon) { |
+ IconManager* im = g_browser_process->icon_manager(); |
+ int request_id = cancelable_consumer_.GetClientData(im, handle); |
+ |
+ if (icon) { |
+ std::vector<unsigned char> png_bytes; |
+ PNGEncoder::EncodeBGRASkBitmap(*icon, false, &png_bytes); |
+ |
+ scoped_refptr<RefCountedBytes> icon_data = new RefCountedBytes(png_bytes); |
+ SendResponse(request_id, icon_data); |
+ } else { |
+ // TODO(glen): send a dummy icon. |
+ SendResponse(request_id, NULL); |
+ } |
+} |
Property changes on: chrome\browser\dom_ui\fileicon_source.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |