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

Side by Side Diff: chrome/browser/cocoa/extensions/browser_action_button.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
« no previous file with comments | « no previous file | chrome/browser/cocoa/extensions/extension_action_context_menu.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/extensions/browser_action_button.h" 5 #import "chrome/browser/cocoa/extensions/browser_action_button.h"
6 6
7 #include "base/sys_string_conversions.h" 7 #include "base/sys_string_conversions.h"
8 #include "chrome/browser/cocoa/extensions/extension_action_context_menu.h" 8 #include "chrome/browser/cocoa/extensions/extension_action_context_menu.h"
9 #include "chrome/browser/extensions/image_loading_tracker.h" 9 #include "chrome/browser/extensions/image_loading_tracker.h"
10 #include "chrome/common/extensions/extension.h" 10 #include "chrome/common/extensions/extension.h"
(...skipping 24 matching lines...) Expand all
35 const CGFloat kShadowOffset = 2.0; 35 const CGFloat kShadowOffset = 2.0;
36 } // anonymous namespace 36 } // anonymous namespace
37 37
38 // A helper class to bridge the asynchronous Skia bitmap loading mechanism to 38 // A helper class to bridge the asynchronous Skia bitmap loading mechanism to
39 // the extension's button. 39 // the extension's button.
40 class ExtensionImageTrackerBridge : public NotificationObserver, 40 class ExtensionImageTrackerBridge : public NotificationObserver,
41 public ImageLoadingTracker::Observer { 41 public ImageLoadingTracker::Observer {
42 public: 42 public:
43 ExtensionImageTrackerBridge(BrowserActionButton* owner, Extension* extension) 43 ExtensionImageTrackerBridge(BrowserActionButton* owner, Extension* extension)
44 : owner_(owner), 44 : owner_(owner),
45 tracker_(NULL) { 45 tracker_(this) {
46 // The Browser Action API does not allow the default icon path to be 46 // The Browser Action API does not allow the default icon path to be
47 // changed at runtime, so we can load this now and cache it. 47 // changed at runtime, so we can load this now and cache it.
48 std::string path = extension->browser_action()->default_icon_path(); 48 std::string path = extension->browser_action()->default_icon_path();
49 if (!path.empty()) { 49 if (!path.empty()) {
50 tracker_ = new ImageLoadingTracker(this, 1); 50 tracker_.LoadImage(extension->GetResource(path),
51 tracker_->PostLoadImageTask(extension->GetResource(path),
52 gfx::Size(Extension::kBrowserActionIconMaxSize, 51 gfx::Size(Extension::kBrowserActionIconMaxSize,
53 Extension::kBrowserActionIconMaxSize)); 52 Extension::kBrowserActionIconMaxSize));
54 } 53 }
55 registrar_.Add(this, NotificationType::EXTENSION_BROWSER_ACTION_UPDATED, 54 registrar_.Add(this, NotificationType::EXTENSION_BROWSER_ACTION_UPDATED,
56 Source<ExtensionAction>(extension->browser_action())); 55 Source<ExtensionAction>(extension->browser_action()));
57 } 56 }
58 57
59 ~ExtensionImageTrackerBridge() { 58 ~ExtensionImageTrackerBridge() {
60 if (tracker_)
61 tracker_->StopTrackingImageLoad();
62 } 59 }
63 60
64 // ImageLoadingTracker::Observer implementation. 61 // ImageLoadingTracker::Observer implementation.
65 void OnImageLoaded(SkBitmap* image, size_t index) { 62 void OnImageLoaded(SkBitmap* image, ExtensionResource resource, int index) {
66 if (image) 63 if (image)
67 [owner_ setDefaultIcon:gfx::SkBitmapToNSImage(*image)]; 64 [owner_ setDefaultIcon:gfx::SkBitmapToNSImage(*image)];
68 tracker_ = NULL;
69 [owner_ updateState]; 65 [owner_ updateState];
70 } 66 }
71 67
72 // Overridden from NotificationObserver. 68 // Overridden from NotificationObserver.
73 void Observe(NotificationType type, 69 void Observe(NotificationType type,
74 const NotificationSource& source, 70 const NotificationSource& source,
75 const NotificationDetails& details) { 71 const NotificationDetails& details) {
76 if (type == NotificationType::EXTENSION_BROWSER_ACTION_UPDATED) 72 if (type == NotificationType::EXTENSION_BROWSER_ACTION_UPDATED)
77 [owner_ updateState]; 73 [owner_ updateState];
78 else 74 else
79 NOTREACHED(); 75 NOTREACHED();
80 } 76 }
81 77
82 private: 78 private:
83 // Weak. Owns us. 79 // Weak. Owns us.
84 BrowserActionButton* owner_; 80 BrowserActionButton* owner_;
85 81
86 // Loads the button's icons for us on the file thread. Weak. 82 // Loads the button's icons for us on the file thread.
87 ImageLoadingTracker* tracker_; 83 ImageLoadingTracker tracker_;
88 84
89 // Used for registering to receive notifications and automatic clean up. 85 // Used for registering to receive notifications and automatic clean up.
90 NotificationRegistrar registrar_; 86 NotificationRegistrar registrar_;
91 87
92 DISALLOW_COPY_AND_ASSIGN(ExtensionImageTrackerBridge); 88 DISALLOW_COPY_AND_ASSIGN(ExtensionImageTrackerBridge);
93 }; 89 };
94 90
95 @interface BrowserActionCell(Internals) 91 @interface BrowserActionCell(Internals)
96 - (void)setIconShadow; 92 - (void)setIconShadow;
97 - (void)drawBadgeWithinFrame:(NSRect)frame; 93 - (void)drawBadgeWithinFrame:(NSRect)frame;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 [super drawInteriorWithFrame:cellFrame inView:controlView]; 243 [super drawInteriorWithFrame:cellFrame inView:controlView];
248 cellFrame.origin.y += kBrowserActionBadgeOriginYOffset; 244 cellFrame.origin.y += kBrowserActionBadgeOriginYOffset;
249 [self drawBadgeWithinFrame:cellFrame]; 245 [self drawBadgeWithinFrame:cellFrame];
250 [NSGraphicsContext restoreGraphicsState]; 246 [NSGraphicsContext restoreGraphicsState];
251 } 247 }
252 248
253 @synthesize tabId = tabId_; 249 @synthesize tabId = tabId_;
254 @synthesize extensionAction = extensionAction_; 250 @synthesize extensionAction = extensionAction_;
255 251
256 @end 252 @end
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/cocoa/extensions/extension_action_context_menu.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698