summaryrefslogtreecommitdiffstats
path: root/components/enhanced_bookmarks/test_image_store.cc
diff options
context:
space:
mode:
authorkkimlabs <kkimlabs@chromium.org>2015-04-03 03:08:09 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-03 10:08:37 +0000
commit16a0d2a22d17e3932432dab4559e63c5134aaccc (patch)
treecb3602e115c8dc531195283d2c417825005f00ad /components/enhanced_bookmarks/test_image_store.cc
parenta4c00a7ec01b3308c98cfad88b4bf3af1b4fde2b (diff)
downloadchromium_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.cc24
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;
}