diff options
author | kkimlabs <kkimlabs@chromium.org> | 2015-04-03 03:08:09 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-03 10:08:37 +0000 |
commit | 16a0d2a22d17e3932432dab4559e63c5134aaccc (patch) | |
tree | cb3602e115c8dc531195283d2c417825005f00ad /components/enhanced_bookmarks/test_image_store.cc | |
parent | a4c00a7ec01b3308c98cfad88b4bf3af1b4fde2b (diff) | |
download | chromium_src-16a0d2a22d17e3932432dab4559e63c5134aaccc.zip chromium_src-16a0d2a22d17e3932432dab4559e63c5134aaccc.tar.gz chromium_src-16a0d2a22d17e3932432dab4559e63c5134aaccc.tar.bz2 |
Fix crashes due to gfx::Image unsafe thread passing
gfx::Image has |storage_| member which is base::RefCounted, not thread
safe. Thus passing around gfx::Image to other threads by copying is
incorrect.
Workaround by using scoped_ptr and making ImageRecord class
RefCountedThreadSafe.
Related discussion:
https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/8LqVoXQ_2bo
BUG=471800
Review URL: https://codereview.chromium.org/1031293002
Cr-Commit-Position: refs/heads/master@{#323720}
Diffstat (limited to 'components/enhanced_bookmarks/test_image_store.cc')
-rw-r--r-- | components/enhanced_bookmarks/test_image_store.cc | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/components/enhanced_bookmarks/test_image_store.cc b/components/enhanced_bookmarks/test_image_store.cc index 9b11cdf..28c8de0 100644 --- a/components/enhanced_bookmarks/test_image_store.cc +++ b/components/enhanced_bookmarks/test_image_store.cc @@ -17,12 +17,13 @@ bool TestImageStore::HasKey(const GURL& page_url) { return store_.find(page_url) != store_.end(); } -void TestImageStore::Insert(const GURL& page_url, - const enhanced_bookmarks::ImageRecord& image) { +void TestImageStore::Insert( + const GURL& page_url, + scoped_refptr<enhanced_bookmarks::ImageRecord> image_record) { DCHECK(sequence_checker_.CalledOnValidSequencedThread()); Erase(page_url); - store_.insert(std::make_pair(page_url, image)); + store_.insert(std::make_pair(page_url, image_record)); } void TestImageStore::Erase(const GURL& page_url) { @@ -31,11 +32,14 @@ void TestImageStore::Erase(const GURL& page_url) { store_.erase(page_url); } -enhanced_bookmarks::ImageRecord TestImageStore::Get(const GURL& page_url) { +scoped_refptr<enhanced_bookmarks::ImageRecord> TestImageStore::Get( + const GURL& page_url) { DCHECK(sequence_checker_.CalledOnValidSequencedThread()); - if (store_.find(page_url) == store_.end()) - return enhanced_bookmarks::ImageRecord(); + if (store_.find(page_url) == store_.end()) { + return scoped_refptr<enhanced_bookmarks::ImageRecord>( + new enhanced_bookmarks::ImageRecord()); + } return store_[page_url]; } @@ -47,7 +51,7 @@ gfx::Size TestImageStore::GetSize(const GURL& page_url) { if (pair_enumerator == store_.end()) return gfx::Size(); - return store_[page_url].image.Size(); + return store_[page_url]->image->Size(); } void TestImageStore::GetAllPageUrls(std::set<GURL>* urls) { @@ -72,10 +76,10 @@ int64 TestImageStore::GetStoreSizeInBytes() { size += sizeof(it->first); size += it->first.spec().length(); size += sizeof(it->second); - SkBitmap bitmap = it->second.image.AsBitmap(); + SkBitmap bitmap = it->second->image->AsBitmap(); size += bitmap.getSize(); - size += it->second.url.spec().length(); - size += sizeof(it->second.dominant_color); + size += it->second->url.spec().length(); + size += sizeof(it->second->dominant_color); } return size; } |