diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-18 21:10:09 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-18 21:10:09 +0000 |
commit | 256e43f5af154eed4bbef574adb0ed29d988246e (patch) | |
tree | 2a4c9227cd2e2d4df2aa89850f8389a54b0e2a5c /chrome/browser/browser_theme_provider.cc | |
parent | 43b7725b6686228f86ef1306703e6dade09dcc27 (diff) | |
download | chromium_src-256e43f5af154eed4bbef574adb0ed29d988246e.zip chromium_src-256e43f5af154eed4bbef574adb0ed29d988246e.tar.gz chromium_src-256e43f5af154eed4bbef574adb0ed29d988246e.tar.bz2 |
Track and free generated images in the browser theme provider.
Review URL: http://codereview.chromium.org/115478
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16311 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_theme_provider.cc')
-rw-r--r-- | chrome/browser/browser_theme_provider.cc | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/chrome/browser/browser_theme_provider.cc b/chrome/browser/browser_theme_provider.cc index ad15e38..a169005 100644 --- a/chrome/browser/browser_theme_provider.cc +++ b/chrome/browser/browser_theme_provider.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "browser_theme_provider.h" +#include "chrome/browser/browser_theme_provider.h" #include "base/gfx/png_decoder.h" #include "base/string_util.h" @@ -19,7 +19,7 @@ #include "net/base/net_errors.h" #include "skia/ext/image_operations.h" #include "skia/ext/skia_utils.h" -#include "SkBitmap.h" +#include "third_party/skia/include/core/SkBitmap.h" // Strings used by themes to identify colors for different parts of our UI. static const char* kColorFrame = "frame"; @@ -105,7 +105,9 @@ BrowserThemeProvider::BrowserThemeProvider() } } -BrowserThemeProvider::~BrowserThemeProvider() { } +BrowserThemeProvider::~BrowserThemeProvider() { + FreeImages(); +} void BrowserThemeProvider::Init(Profile* profile) { DCHECK(CalledOnValidThread()); @@ -207,7 +209,7 @@ SkColor BrowserThemeProvider::GetColor(int id) { void BrowserThemeProvider::SetTheme(Extension* extension) { // Clear our image cache. - image_cache_.clear(); + FreeImages(); DCHECK(extension); DCHECK(extension->IsTheme()); @@ -228,7 +230,7 @@ void BrowserThemeProvider::SetTheme(Extension* extension) { void BrowserThemeProvider::UseDefaultTheme() { // Clear our image cache. - image_cache_.clear(); + FreeImages(); images_.clear(); colors_.clear(); @@ -461,6 +463,7 @@ SkBitmap* BrowserThemeProvider::GenerateBitmap(int id) { skia::ImageOperations::CreateBlurredBitmap(*frame, 5); SkBitmap* bg_tab = new SkBitmap(TintBitmap(blurred, TINT_BACKGROUND_TAB)); + generated_images_.push_back(bg_tab); return bg_tab; } } @@ -556,3 +559,12 @@ void BrowserThemeProvider::SaveTintData() { } } } + +void BrowserThemeProvider::FreeImages() { + for (std::vector<SkBitmap*>::iterator i = generated_images_.begin(); + i != generated_images_.end(); i++) { + delete *i; + } + generated_images_.clear(); + image_cache_.clear(); +} |