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

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

Issue 115478: Track and free generated images in the browser theme provider. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 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 | « chrome/browser/browser_theme_provider.h ('k') | no next file » | 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "browser_theme_provider.h" 5 #include "chrome/browser/browser_theme_provider.h"
6 6
7 #include "base/gfx/png_decoder.h" 7 #include "base/gfx/png_decoder.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/browser_list.h" 10 #include "chrome/browser/browser_list.h"
11 #include "chrome/browser/extensions/extension.h" 11 #include "chrome/browser/extensions/extension.h"
12 #include "chrome/browser/metrics/user_metrics.h" 12 #include "chrome/browser/metrics/user_metrics.h"
13 #include "chrome/browser/profile.h" 13 #include "chrome/browser/profile.h"
14 #include "chrome/browser/theme_resources_util.h" 14 #include "chrome/browser/theme_resources_util.h"
15 #include "chrome/common/pref_names.h" 15 #include "chrome/common/pref_names.h"
16 #include "chrome/common/pref_service.h" 16 #include "chrome/common/pref_service.h"
17 #include "grit/theme_resources.h" 17 #include "grit/theme_resources.h"
18 #include "net/base/file_stream.h" 18 #include "net/base/file_stream.h"
19 #include "net/base/net_errors.h" 19 #include "net/base/net_errors.h"
20 #include "skia/ext/image_operations.h" 20 #include "skia/ext/image_operations.h"
21 #include "skia/ext/skia_utils.h" 21 #include "skia/ext/skia_utils.h"
22 #include "SkBitmap.h" 22 #include "third_party/skia/include/core/SkBitmap.h"
23 23
24 // Strings used by themes to identify colors for different parts of our UI. 24 // Strings used by themes to identify colors for different parts of our UI.
25 static const char* kColorFrame = "frame"; 25 static const char* kColorFrame = "frame";
26 static const char* kColorFrameInactive = "frame_inactive"; 26 static const char* kColorFrameInactive = "frame_inactive";
27 static const char* kColorFrameIncognito = "frame_incognito"; 27 static const char* kColorFrameIncognito = "frame_incognito";
28 static const char* kColorFrameIncognitoInactive = 28 static const char* kColorFrameIncognitoInactive =
29 "frame_incognito_inactive"; 29 "frame_incognito_inactive";
30 static const char* kColorToolbar = "toolbar"; 30 static const char* kColorToolbar = "toolbar";
31 static const char* kColorTabText = "tab_text"; 31 static const char* kColorTabText = "tab_text";
32 static const char* kColorBackgroundTabText = "background_tab_text"; 32 static const char* kColorBackgroundTabText = "background_tab_text";
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 button_images_[kToolbarButtonIDs[i]] = true; 98 button_images_[kToolbarButtonIDs[i]] = true;
99 } 99 }
100 frame_tints_[IDR_THEME_FRAME] = TINT_FRAME; 100 frame_tints_[IDR_THEME_FRAME] = TINT_FRAME;
101 frame_tints_[IDR_THEME_FRAME_INACTIVE] = TINT_FRAME_INACTIVE; 101 frame_tints_[IDR_THEME_FRAME_INACTIVE] = TINT_FRAME_INACTIVE;
102 frame_tints_[IDR_THEME_FRAME_INCOGNITO] = TINT_FRAME_INCOGNITO; 102 frame_tints_[IDR_THEME_FRAME_INCOGNITO] = TINT_FRAME_INCOGNITO;
103 frame_tints_[IDR_THEME_FRAME_INCOGNITO_INACTIVE] = 103 frame_tints_[IDR_THEME_FRAME_INCOGNITO_INACTIVE] =
104 TINT_FRAME_INCOGNITO_INACTIVE; 104 TINT_FRAME_INCOGNITO_INACTIVE;
105 } 105 }
106 } 106 }
107 107
108 BrowserThemeProvider::~BrowserThemeProvider() { } 108 BrowserThemeProvider::~BrowserThemeProvider() {
109 FreeImages();
110 }
109 111
110 void BrowserThemeProvider::Init(Profile* profile) { 112 void BrowserThemeProvider::Init(Profile* profile) {
111 DCHECK(CalledOnValidThread()); 113 DCHECK(CalledOnValidThread());
112 profile_ = profile; 114 profile_ = profile;
113 LoadThemePrefs(); 115 LoadThemePrefs();
114 } 116 }
115 117
116 SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) { 118 SkBitmap* BrowserThemeProvider::GetBitmapNamed(int id) {
117 DCHECK(CalledOnValidThread()); 119 DCHECK(CalledOnValidThread());
118 120
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 default: 202 default:
201 NOTREACHED() << "Unknown color requested"; 203 NOTREACHED() << "Unknown color requested";
202 } 204 }
203 205
204 // Return a debugging red color. 206 // Return a debugging red color.
205 return 0xffff0000; 207 return 0xffff0000;
206 } 208 }
207 209
208 void BrowserThemeProvider::SetTheme(Extension* extension) { 210 void BrowserThemeProvider::SetTheme(Extension* extension) {
209 // Clear our image cache. 211 // Clear our image cache.
210 image_cache_.clear(); 212 FreeImages();
211 213
212 DCHECK(extension); 214 DCHECK(extension);
213 DCHECK(extension->IsTheme()); 215 DCHECK(extension->IsTheme());
214 SetImageData(extension->GetThemeImages(), 216 SetImageData(extension->GetThemeImages(),
215 extension->path()); 217 extension->path());
216 SetColorData(extension->GetThemeColors()); 218 SetColorData(extension->GetThemeColors());
217 SetTintData(extension->GetThemeTints()); 219 SetTintData(extension->GetThemeTints());
218 GenerateFrameColors(); 220 GenerateFrameColors();
219 GenerateFrameImages(); 221 GenerateFrameImages();
220 222
221 SaveImageData(extension->GetThemeImages()); 223 SaveImageData(extension->GetThemeImages());
222 SaveColorData(); 224 SaveColorData();
223 SaveTintData(); 225 SaveTintData();
224 226
225 NotifyThemeChanged(); 227 NotifyThemeChanged();
226 UserMetrics::RecordAction(L"Themes_Installed", profile_); 228 UserMetrics::RecordAction(L"Themes_Installed", profile_);
227 } 229 }
228 230
229 void BrowserThemeProvider::UseDefaultTheme() { 231 void BrowserThemeProvider::UseDefaultTheme() {
230 // Clear our image cache. 232 // Clear our image cache.
231 image_cache_.clear(); 233 FreeImages();
232 234
233 images_.clear(); 235 images_.clear();
234 colors_.clear(); 236 colors_.clear();
235 tints_.clear(); 237 tints_.clear();
236 238
237 SaveImageData(NULL); 239 SaveImageData(NULL);
238 SaveColorData(); 240 SaveColorData();
239 SaveTintData(); 241 SaveTintData();
240 242
241 NotifyThemeChanged(); 243 NotifyThemeChanged();
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 int base_id = (id == IDR_THEME_TAB_BACKGROUND) ? 456 int base_id = (id == IDR_THEME_TAB_BACKGROUND) ?
455 IDR_THEME_FRAME : IDR_THEME_FRAME_INCOGNITO; 457 IDR_THEME_FRAME : IDR_THEME_FRAME_INCOGNITO;
456 458
457 std::map<int, SkBitmap*>::iterator it = image_cache_.find(base_id); 459 std::map<int, SkBitmap*>::iterator it = image_cache_.find(base_id);
458 if (it != image_cache_.end()) { 460 if (it != image_cache_.end()) {
459 SkBitmap* frame = it->second; 461 SkBitmap* frame = it->second;
460 SkBitmap blurred = 462 SkBitmap blurred =
461 skia::ImageOperations::CreateBlurredBitmap(*frame, 5); 463 skia::ImageOperations::CreateBlurredBitmap(*frame, 5);
462 SkBitmap* bg_tab = 464 SkBitmap* bg_tab =
463 new SkBitmap(TintBitmap(blurred, TINT_BACKGROUND_TAB)); 465 new SkBitmap(TintBitmap(blurred, TINT_BACKGROUND_TAB));
466 generated_images_.push_back(bg_tab);
464 return bg_tab; 467 return bg_tab;
465 } 468 }
466 } 469 }
467 470
468 return NULL; 471 return NULL;
469 } 472 }
470 473
471 void BrowserThemeProvider::NotifyThemeChanged() { 474 void BrowserThemeProvider::NotifyThemeChanged() {
472 // TODO(glen): If we're in glass and IDR_THEME_FRAME has been provided, 475 // TODO(glen): If we're in glass and IDR_THEME_FRAME has been provided,
473 // swap us back to opaque frame. 476 // swap us back to opaque frame.
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 skia::HSL hsl = (*iter).second; 552 skia::HSL hsl = (*iter).second;
550 ListValue* hsl_list = new ListValue(); 553 ListValue* hsl_list = new ListValue();
551 hsl_list->Set(0, Value::CreateRealValue(hsl.h)); 554 hsl_list->Set(0, Value::CreateRealValue(hsl.h));
552 hsl_list->Set(1, Value::CreateRealValue(hsl.s)); 555 hsl_list->Set(1, Value::CreateRealValue(hsl.s));
553 hsl_list->Set(2, Value::CreateRealValue(hsl.l)); 556 hsl_list->Set(2, Value::CreateRealValue(hsl.l));
554 pref_tints->Set(UTF8ToWide((*iter).first), hsl_list); 557 pref_tints->Set(UTF8ToWide((*iter).first), hsl_list);
555 ++iter; 558 ++iter;
556 } 559 }
557 } 560 }
558 } 561 }
562
563 void BrowserThemeProvider::FreeImages() {
564 for (std::vector<SkBitmap*>::iterator i = generated_images_.begin();
565 i != generated_images_.end(); i++) {
566 delete *i;
567 }
568 generated_images_.clear();
569 image_cache_.clear();
570 }
OLDNEW
« no previous file with comments | « chrome/browser/browser_theme_provider.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698