| Index: chrome/browser/renderer_host/resource_message_filter.cc
|
| diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc
|
| index aee7604b26783faac6280b7781e8a2001572183a..b9f6678d16f8892ad81ced3246f2cd746910c729 100644
|
| --- a/chrome/browser/renderer_host/resource_message_filter.cc
|
| +++ b/chrome/browser/renderer_host/resource_message_filter.cc
|
| @@ -264,13 +264,16 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
| OnClipboardWriteObjects)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardWriteObjectsSync,
|
| OnClipboardWriteObjects)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardIsFormatAvailable,
|
| - OnClipboardIsFormatAvailable)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardReadText, OnClipboardReadText)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardReadAsciiText,
|
| - OnClipboardReadAsciiText)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardReadHTML,
|
| - OnClipboardReadHTML)
|
| +
|
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ClipboardIsFormatAvailable,
|
| + OnClipboardIsFormatAvailable)
|
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ClipboardReadText,
|
| + OnClipboardReadText)
|
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ClipboardReadAsciiText,
|
| + OnClipboardReadAsciiText)
|
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ClipboardReadHTML,
|
| + OnClipboardReadHTML)
|
| +
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_GetMimeTypeFromExtension,
|
| OnGetMimeTypeFromExtension)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_GetMimeTypeFromFile,
|
| @@ -555,27 +558,52 @@ void ResourceMessageFilter::OnClipboardWriteObjects(
|
| new WriteClipboardTask(long_living_objects));
|
| }
|
|
|
| +#if !defined(OS_LINUX)
|
| +// On non-Linux platforms, clipboard actions can be performed on the IO thread.
|
| +// On Linux, since the clipboard is linked with GTK, we either have to do this
|
| +// with GTK on the UI thread, or with Xlib on the BACKGROUND_X11 thread. In an
|
| +// ideal world, we would do the latter. However, for now we're going to
|
| +// terminate these calls on the UI thread. This risks deadlock in the case of
|
| +// plugins, but it's better than crashing which is what doing on the IO thread
|
| +// gives us.
|
| +//
|
| +// See resource_message_filter_gtk.cc for the Linux implementation of these
|
| +// functions.
|
| +
|
| void ResourceMessageFilter::OnClipboardIsFormatAvailable(
|
| - Clipboard::FormatType format, bool* result) {
|
| - DCHECK(result);
|
| - *result = GetClipboardService()->IsFormatAvailable(format);
|
| + Clipboard::FormatType format, IPC::Message* reply) {
|
| + const bool result = GetClipboardService()->IsFormatAvailable(format);
|
| + ViewHostMsg_ClipboardIsFormatAvailable::WriteReplyParams(reply, result);
|
| + Send(reply);
|
| }
|
|
|
| -void ResourceMessageFilter::OnClipboardReadText(string16* result) {
|
| - GetClipboardService()->ReadText(result);
|
| +void ResourceMessageFilter::OnClipboardReadText(IPC::Message* reply) {
|
| + string16 result;
|
| + GetClipboardService()->ReadText(&result);
|
| + ViewHostMsg_ClipboardReadText::WriteReplyParams(reply, result);
|
| + Send(reply);
|
| }
|
|
|
| -void ResourceMessageFilter::OnClipboardReadAsciiText(std::string* result) {
|
| +void ResourceMessageFilter::OnClipboardReadAsciiText(IPC::Message* reply) {
|
| + std::string result;
|
| GetClipboardService()->ReadAsciiText(result);
|
| + ViewHostMsg_ClipboardReadAsciiText::WriteReplyParams(reply, result);
|
| + Send(reply);
|
| }
|
|
|
| void ResourceMessageFilter::OnClipboardReadHTML(string16* markup,
|
| GURL* src_url) {
|
| std::string src_url_str;
|
| - GetClipboardService()->ReadHTML(markup, &src_url_str);
|
| - *src_url = GURL(src_url_str);
|
| + string16 markup;
|
| + GetClipboardService()->ReadHTML(&markup, &src_url_str);
|
| + const GURL src_url = GURL(src_url_str);
|
| +
|
| + ViewHostMsg_ClipboardReadHTML::WriteReplyParams(reply, markup, src_url);
|
| + Send(reply);
|
| }
|
|
|
| +#endif
|
| +
|
| void ResourceMessageFilter::OnGetMimeTypeFromExtension(
|
| const FilePath::StringType& ext, std::string* mime_type) {
|
| net::GetMimeTypeFromExtension(ext, mime_type);
|
|
|