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

Side by Side Diff: chrome/browser/cocoa/location_bar_view_mac.mm

Issue 1075006: Eliminate all UI thread decoding of extension images.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #import "chrome/browser/cocoa/location_bar_view_mac.h" 5 #import "chrome/browser/cocoa/location_bar_view_mac.h"
6 6
7 #include "app/l10n_util_mac.h" 7 #include "app/l10n_util_mac.h"
8 #include "app/resource_bundle.h" 8 #include "app/resource_bundle.h"
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/nsimage_cache_mac.h" 10 #include "base/nsimage_cache_mac.h"
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 Extension* extension = profile->GetExtensionsService()->GetExtensionById( 623 Extension* extension = profile->GetExtensionsService()->GetExtensionById(
624 page_action->extension_id(), false); 624 page_action->extension_id(), false);
625 DCHECK(extension); 625 DCHECK(extension);
626 626
627 // Load all the icons declared in the manifest. This is the contents of the 627 // Load all the icons declared in the manifest. This is the contents of the
628 // icons array, plus the default_icon property, if any. 628 // icons array, plus the default_icon property, if any.
629 std::vector<std::string> icon_paths(*page_action->icon_paths()); 629 std::vector<std::string> icon_paths(*page_action->icon_paths());
630 if (!page_action_->default_icon_path().empty()) 630 if (!page_action_->default_icon_path().empty())
631 icon_paths.push_back(page_action_->default_icon_path()); 631 icon_paths.push_back(page_action_->default_icon_path());
632 632
633 tracker_ = new ImageLoadingTracker(this, icon_paths.size());
634 for (std::vector<std::string>::iterator iter = icon_paths.begin(); 633 for (std::vector<std::string>::iterator iter = icon_paths.begin();
635 iter != icon_paths.end(); ++iter) { 634 iter != icon_paths.end(); ++iter) {
636 tracker_->PostLoadImageTask(extension->GetResource(*iter), 635 tracker_.PostLoadImageTask(extension->GetResource(*iter),
637 gfx::Size(Extension::kPageActionIconMaxSize, 636 gfx::Size(Extension::kPageActionIconMaxSize,
638 Extension::kPageActionIconMaxSize)); 637 Extension::kPageActionIconMaxSize));
639 } 638 }
640 639
641 registrar_.Add(this, NotificationType::EXTENSION_HOST_VIEW_SHOULD_CLOSE, 640 registrar_.Add(this, NotificationType::EXTENSION_HOST_VIEW_SHOULD_CLOSE,
642 Source<Profile>(profile_)); 641 Source<Profile>(profile_));
643 } 642 }
644 643
645 LocationBarViewMac::PageActionImageView::~PageActionImageView() { 644 LocationBarViewMac::PageActionImageView::~PageActionImageView() {
646 if (tracker_)
647 tracker_->StopTrackingImageLoad();
648 } 645 }
649 646
650 NSSize LocationBarViewMac::PageActionImageView::GetPreferredImageSize() { 647 NSSize LocationBarViewMac::PageActionImageView::GetPreferredImageSize() {
651 NSImage* image = GetImage(); 648 NSImage* image = GetImage();
652 if (image) { 649 if (image) {
653 return [image size]; 650 return [image size];
654 } else { 651 } else {
655 return NSMakeSize(Extension::kPageActionIconMaxSize, 652 return NSMakeSize(Extension::kPageActionIconMaxSize,
656 Extension::kPageActionIconMaxSize); 653 Extension::kPageActionIconMaxSize);
657 } 654 }
(...skipping 24 matching lines...) Expand all
682 anchoredAt:arrowPoint 679 anchoredAt:arrowPoint
683 arrowLocation:kTopRight]; 680 arrowLocation:kTopRight];
684 } else { 681 } else {
685 ExtensionBrowserEventRouter::GetInstance()->PageActionExecuted( 682 ExtensionBrowserEventRouter::GetInstance()->PageActionExecuted(
686 profile_, page_action_->extension_id(), page_action_->id(), 683 profile_, page_action_->extension_id(), page_action_->id(),
687 current_tab_id_, current_url_.spec(), 684 current_tab_id_, current_url_.spec(),
688 1); 685 1);
689 } 686 }
690 } 687 }
691 688
692 void LocationBarViewMac::PageActionImageView::OnImageLoaded(SkBitmap* image, 689 void LocationBarViewMac::PageActionImageView::OnImageLoaded(
693 size_t index) { 690 SkBitmap* image, int index) {
694 // We loaded icons()->size() icons, plus one extra if the Page Action had 691 // We loaded icons()->size() icons, plus one extra if the Page Action had
695 // a default icon. 692 // a default icon.
696 int total_icons = page_action_->icon_paths()->size(); 693 int total_icons = static_cast<int>(page_action_->icon_paths()->size());
697 if (!page_action_->default_icon_path().empty()) 694 if (!page_action_->default_icon_path().empty())
698 total_icons++; 695 total_icons++;
699 DCHECK(static_cast<int>(index) < total_icons); 696 DCHECK(index < total_icons);
700 697
701 // Map the index of the loaded image back to its name. If we ever get an 698 // Map the index of the loaded image back to its name. If we ever get an
702 // index greater than the number of icons, it must be the default icon. 699 // index greater than the number of icons, it must be the default icon.
703 if (image) { 700 if (image) {
704 if (index < page_action_->icon_paths()->size()) 701 if (index < total_icons)
705 page_action_icons_[page_action_->icon_paths()->at(index)] = *image; 702 page_action_icons_[page_action_->icon_paths()->at(index)] = *image;
706 else 703 else
707 page_action_icons_[page_action_->default_icon_path()] = *image; 704 page_action_icons_[page_action_->default_icon_path()] = *image;
708 } 705 }
709 706
710 // If we are done, release the tracker.
711 if (static_cast<int>(index) == (total_icons - 1))
712 tracker_ = NULL;
713
714 owner_->UpdatePageActions(); 707 owner_->UpdatePageActions();
715 708
716 if (preview_enabled_) 709 if (preview_enabled_)
717 [owner_->GetAutocompleteTextField() display]; 710 [owner_->GetAutocompleteTextField() display];
718 } 711 }
719 712
720 void LocationBarViewMac::PageActionImageView::UpdateVisibility( 713 void LocationBarViewMac::PageActionImageView::UpdateVisibility(
721 TabContents* contents, const GURL& url) { 714 TabContents* contents, const GURL& url) {
722 // Save this off so we can pass it back to the extension when the action gets 715 // Save this off so we can pass it back to the extension when the action gets
723 // executed. See PageActionImageView::OnMousePressed. 716 // executed. See PageActionImageView::OnMousePressed.
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 ++result; 944 ++result;
952 } 945 }
953 return result; 946 return result;
954 } 947 }
955 948
956 void LocationBarViewMac::PageActionViewList::OnMousePressed(NSRect iconFrame, 949 void LocationBarViewMac::PageActionViewList::OnMousePressed(NSRect iconFrame,
957 size_t index) { 950 size_t index) {
958 ViewAt(index)->OnMousePressed(iconFrame); 951 ViewAt(index)->OnMousePressed(iconFrame);
959 } 952 }
960 953
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698