Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Side by Side Diff: chrome/browser/jumplist_win.cc

Issue 10870022: Change FaviconData to be able to return data for multiple bitmaps for same icon URL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/jumplist_win.h" 5 #include "chrome/browser/jumplist_win.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <shobjidl.h> 8 #include <shobjidl.h>
9 #include <propkey.h> 9 #include <propkey.h>
10 #include <propvarutil.h> 10 #include <propvarutil.h>
(...skipping 26 matching lines...) Expand all
37 #include "chrome/common/chrome_switches.h" 37 #include "chrome/common/chrome_switches.h"
38 #include "chrome/common/url_constants.h" 38 #include "chrome/common/url_constants.h"
39 #include "content/public/browser/browser_thread.h" 39 #include "content/public/browser/browser_thread.h"
40 #include "content/public/browser/notification_source.h" 40 #include "content/public/browser/notification_source.h"
41 #include "googleurl/src/gurl.h" 41 #include "googleurl/src/gurl.h"
42 #include "grit/chromium_strings.h" 42 #include "grit/chromium_strings.h"
43 #include "grit/generated_resources.h" 43 #include "grit/generated_resources.h"
44 #include "third_party/skia/include/core/SkBitmap.h" 44 #include "third_party/skia/include/core/SkBitmap.h"
45 #include "ui/base/l10n/l10n_util.h" 45 #include "ui/base/l10n/l10n_util.h"
46 #include "ui/gfx/codec/png_codec.h" 46 #include "ui/gfx/codec/png_codec.h"
47 #include "ui/gfx/favicon_size.h"
47 #include "ui/gfx/icon_util.h" 48 #include "ui/gfx/icon_util.h"
48 49
49 using content::BrowserThread; 50 using content::BrowserThread;
50 51
51 namespace { 52 namespace {
52 53
53 // COM interfaces used in this file. 54 // COM interfaces used in this file.
54 // These interface declarations are copied from Windows SDK 7.0. 55 // These interface declarations are copied from Windows SDK 7.0.
55 // TODO(hbono): Bug 16903: delete them when we use Windows SDK 7.0. 56 // TODO(hbono): Bug 16903: delete them when we use Windows SDK 7.0.
56 #ifndef __IObjectArray_INTERFACE_DEFINED__ 57 #ifndef __IObjectArray_INTERFACE_DEFINED__
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 { 695 {
695 base::AutoLock auto_lock(list_lock_); 696 base::AutoLock auto_lock(list_lock_);
696 if (icon_urls_.empty()) 697 if (icon_urls_.empty())
697 return false; 698 return false;
698 // Ask FaviconService if it has a favicon of a URL. 699 // Ask FaviconService if it has a favicon of a URL.
699 // When FaviconService has one, it will call OnFaviconDataAvailable(). 700 // When FaviconService has one, it will call OnFaviconDataAvailable().
700 url = GURL(icon_urls_.front().first); 701 url = GURL(icon_urls_.front().first);
701 } 702 }
702 FaviconService* favicon_service = 703 FaviconService* favicon_service =
703 FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); 704 FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
704 handle_ = favicon_service->GetFaviconForURL( 705 handle_ = favicon_service->GetFaviconImageForURL(
705 profile_, url, history::FAVICON, &favicon_consumer_, 706 profile_, url, history::FAVICON, gfx::kFaviconSize, &favicon_consumer_,
706 base::Bind(&JumpList::OnFaviconDataAvailable, base::Unretained(this))); 707 base::Bind(&JumpList::OnFaviconDataAvailable, base::Unretained(this)));
707 return true; 708 return true;
708 } 709 }
709 710
710 void JumpList::OnFaviconDataAvailable( 711 void JumpList::OnFaviconDataAvailable(
711 FaviconService::Handle handle, 712 FaviconService::Handle handle,
712 history::FaviconData favicon) { 713 const history::FaviconImageResult& image_result) {
713 // If there is currently a favicon request in progress, it is now outdated, 714 // If there is currently a favicon request in progress, it is now outdated,
714 // as we have received another, so nullify the handle from the old request. 715 // as we have received another, so nullify the handle from the old request.
715 handle_ = NULL; 716 handle_ = NULL;
716 // lock the list to set icon data and pop the url 717 // lock the list to set icon data and pop the url
717 { 718 {
718 base::AutoLock auto_lock(list_lock_); 719 base::AutoLock auto_lock(list_lock_);
719 // Attach the received data to the ShellLinkItem object. 720 // Attach the received data to the ShellLinkItem object.
720 // This data will be decoded by the RunUpdate method. 721 // This data will be decoded by the RunUpdate method.
721 if (favicon.is_valid()) { 722 if (!image_result.image.IsEmpty()) {
722 if (!icon_urls_.empty() && icon_urls_.front().second) 723 if (!icon_urls_.empty() && icon_urls_.front().second)
723 icon_urls_.front().second->SetIconData(favicon.image_data); 724 icon_urls_.front().second->SetIconData(image_result.image.AsBitmap());
724 } 725 }
725 726
726 if (!icon_urls_.empty()) 727 if (!icon_urls_.empty())
727 icon_urls_.pop_front(); 728 icon_urls_.pop_front();
728 } 729 }
729 // if we need to load more favicons, we send another query and exit. 730 // if we need to load more favicons, we send another query and exit.
730 if (StartLoadingFavicon()) 731 if (StartLoadingFavicon())
731 return; 732 return;
732 733
733 // Finished loading all favicons needed by the application JumpList. 734 // Finished loading all favicons needed by the application JumpList.
(...skipping 23 matching lines...) Expand all
757 // Delete the directory which contains old icon files, rename the current 758 // Delete the directory which contains old icon files, rename the current
758 // icon directory, and create a new directory which contains new JumpList 759 // icon directory, and create a new directory which contains new JumpList
759 // icon files. 760 // icon files.
760 FilePath icon_dir_old(icon_dir_.value() + L"Old"); 761 FilePath icon_dir_old(icon_dir_.value() + L"Old");
761 if (file_util::PathExists(icon_dir_old)) 762 if (file_util::PathExists(icon_dir_old))
762 file_util::Delete(icon_dir_old, true); 763 file_util::Delete(icon_dir_old, true);
763 file_util::Move(icon_dir_, icon_dir_old); 764 file_util::Move(icon_dir_, icon_dir_old);
764 file_util::CreateDirectory(icon_dir_); 765 file_util::CreateDirectory(icon_dir_);
765 766
766 // Create temporary icon files for shortcuts in the "Most Visited" category. 767 // Create temporary icon files for shortcuts in the "Most Visited" category.
767 DecodeIconData(local_most_visited_pages); 768 CreateIconFiles(local_most_visited_pages);
768 769
769 // Create temporary icon files for shortcuts in the "Recently Closed" 770 // Create temporary icon files for shortcuts in the "Recently Closed"
770 // category. 771 // category.
771 DecodeIconData(local_recently_closed_pages); 772 CreateIconFiles(local_recently_closed_pages);
772 773
773 // We finished collecting all resources needed for updating an appliation 774 // We finished collecting all resources needed for updating an appliation
774 // JumpList. So, create a new JumpList and replace the current JumpList 775 // JumpList. So, create a new JumpList and replace the current JumpList
775 // with it. 776 // with it.
776 UpdateJumpList(app_id_.c_str(), local_most_visited_pages, 777 UpdateJumpList(app_id_.c_str(), local_most_visited_pages,
777 local_recently_closed_pages); 778 local_recently_closed_pages);
778 } 779 }
779 780
780 void JumpList::DecodeIconData(const ShellLinkItemList& item_list) { 781 void JumpList::CreateIconFiles(const ShellLinkItemList& item_list) {
781 for (ShellLinkItemList::const_iterator item = item_list.begin(); 782 for (ShellLinkItemList::const_iterator item = item_list.begin();
782 item != item_list.end(); ++item) { 783 item != item_list.end(); ++item) {
783 SkBitmap icon_bitmap; 784 FilePath icon_path;
784 if ((*item)->data().get() && 785 if (CreateIconFile((*item)->data(), icon_dir_, &icon_path))
785 gfx::PNGCodec::Decode((*item)->data()->front(), 786 (*item)->SetIcon(icon_path.value(), 0, true);
786 (*item)->data()->size(),
787 &icon_bitmap)) {
788 FilePath icon_path;
789 if (CreateIconFile(icon_bitmap, icon_dir_, &icon_path))
790 (*item)->SetIcon(icon_path.value(), 0, true);
791 }
792 } 787 }
793 } 788 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698