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

Unified Diff: ppapi/proxy/ppb_font_proxy.cc

Issue 7629006: Make sure ppapi::WebKitForwarding::Font is deleted on the WebKit thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/ppb_font_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppb_font_proxy.cc
diff --git a/ppapi/proxy/ppb_font_proxy.cc b/ppapi/proxy/ppb_font_proxy.cc
index 4ce65431fb3065fb6d5c45961d6ecd5d3b06b0fe..6202babc99bb2a118e1ac5601619195207623dc4 100644
--- a/ppapi/proxy/ppb_font_proxy.cc
+++ b/ppapi/proxy/ppb_font_proxy.cc
@@ -101,17 +101,17 @@ Font::Font(const HostResource& resource,
WebKitForwarding* forwarding = GetDispatcher()->GetWebKitForwarding();
- WebKitForwarding::Font* result = NULL;
- RunOnWebKitThread(base::Bind(&WebKitForwarding::CreateFontForwarding,
+ RunOnWebKitThread(true,
+ base::Bind(&WebKitForwarding::CreateFontForwarding,
base::Unretained(forwarding),
&webkit_event_, desc,
face.get() ? face->value() : std::string(),
GetDispatcher()->preferences(),
- &result));
- font_forwarding_.reset(result);
+ &font_forwarding_));
}
Font::~Font() {
+ RunOnWebKitThread(false, base::Bind(&DeleteFontForwarding, font_forwarding_));
}
ppapi::thunk::PPB_Font_API* Font::AsPPB_Font_API() {
@@ -127,8 +127,9 @@ PP_Bool Font::Describe(PP_FontDescription_Dev* description,
TRACE_EVENT0("ppapi proxy", "Font::Describe");
std::string face;
PP_Bool result = PP_FALSE;
- RunOnWebKitThread(base::Bind(&WebKitForwarding::Font::Describe,
- base::Unretained(font_forwarding_.get()),
+ RunOnWebKitThread(true,
+ base::Bind(&WebKitForwarding::Font::Describe,
+ base::Unretained(font_forwarding_),
&webkit_event_, description, &face, metrics,
&result));
@@ -168,12 +169,13 @@ PP_Bool Font::DrawTextAt(PP_Resource pp_image_data,
image_data->Unmap();
return PP_FALSE;
}
- RunOnWebKitThread(base::Bind(
- &WebKitForwarding::Font::DrawTextAt,
- base::Unretained(font_forwarding_.get()),
- &webkit_event_,
- WebKitForwarding::Font::DrawTextParams(canvas, run, position, color,
- clip, image_data_is_opaque)));
+ RunOnWebKitThread(
+ true,
+ base::Bind(&WebKitForwarding::Font::DrawTextAt,
+ base::Unretained(font_forwarding_), &webkit_event_,
+ WebKitForwarding::Font::DrawTextParams(canvas, run, position,
+ color, clip,
+ image_data_is_opaque)));
if (needs_unmapping)
image_data->Unmap();
@@ -186,8 +188,9 @@ int32_t Font::MeasureText(const PP_TextRun_Dev* text) {
if (!PPTextRunToTextRun(text, &run))
return -1;
int32_t result = -1;
- RunOnWebKitThread(base::Bind(&WebKitForwarding::Font::MeasureText,
- base::Unretained(font_forwarding_.get()),
+ RunOnWebKitThread(true,
+ base::Bind(&WebKitForwarding::Font::MeasureText,
+ base::Unretained(font_forwarding_),
&webkit_event_, run, &result));
return result;
}
@@ -199,8 +202,9 @@ uint32_t Font::CharacterOffsetForPixel(const PP_TextRun_Dev* text,
if (!PPTextRunToTextRun(text, &run))
return -1;
uint32_t result = -1;
- RunOnWebKitThread(base::Bind(&WebKitForwarding::Font::CharacterOffsetForPixel,
- base::Unretained(font_forwarding_.get()),
+ RunOnWebKitThread(true,
+ base::Bind(&WebKitForwarding::Font::CharacterOffsetForPixel,
+ base::Unretained(font_forwarding_),
&webkit_event_, run, pixel_position, &result));
return result;
}
@@ -212,15 +216,23 @@ int32_t Font::PixelOffsetForCharacter(const PP_TextRun_Dev* text,
if (!PPTextRunToTextRun(text, &run))
return -1;
int32_t result = -1;
- RunOnWebKitThread(base::Bind(&WebKitForwarding::Font::PixelOffsetForCharacter,
- base::Unretained(font_forwarding_.get()),
+ RunOnWebKitThread(true,
+ base::Bind(&WebKitForwarding::Font::PixelOffsetForCharacter,
+ base::Unretained(font_forwarding_),
&webkit_event_, run, char_offset, &result));
return result;
}
-void Font::RunOnWebKitThread(const base::Closure& task) {
+void Font::RunOnWebKitThread(bool blocking, const base::Closure& task) {
GetDispatcher()->PostToWebKitThread(FROM_HERE, task);
- webkit_event_.Wait();
+ if (blocking)
+ webkit_event_.Wait();
+}
+
+// static
+void Font::DeleteFontForwarding(
+ ppapi::WebKitForwarding::Font* font_forwarding) {
+ delete font_forwarding;
}
} // namespace proxy
« no previous file with comments | « ppapi/proxy/ppb_font_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698