Chromium Code Reviews| Index: ppapi/proxy/ppb_flash_clipboard_proxy.cc |
| diff --git a/ppapi/proxy/ppb_flash_clipboard_proxy.cc b/ppapi/proxy/ppb_flash_clipboard_proxy.cc |
| index df6cc59946bce0775b9360c94a93e88854280a95..9d5e9885b1a20933d1dc69f603f7e4e283f349d4 100644 |
| --- a/ppapi/proxy/ppb_flash_clipboard_proxy.cc |
| +++ b/ppapi/proxy/ppb_flash_clipboard_proxy.cc |
| @@ -66,28 +66,66 @@ PP_Bool PPB_Flash_Clipboard_Proxy::IsFormatAvailable( |
| PP_Var PPB_Flash_Clipboard_Proxy::ReadPlainText( |
| PP_Instance instance, |
| PP_Flash_Clipboard_Type clipboard_type) { |
| - if (!IsValidClipboardType(clipboard_type)) |
| + return ReadData(instance, clipboard_type, |
| + PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT); |
| +} |
| + |
| +int32_t PPB_Flash_Clipboard_Proxy::WritePlainText( |
| + PP_Instance instance, |
| + PP_Flash_Clipboard_Type clipboard_type, |
| + const PP_Var& text) { |
| + PP_Flash_Clipboard_Data_Item data_item = |
| + {PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT, text}; |
|
viettrungluu
2012/02/08 22:25:01
style nit: indentation is off (and I think we want
raymes
2012/02/09 00:20:27
Done. Spaces inside the braces are optional accord
|
| + return WriteData(instance, clipboard_type, 1, &data_item); |
| +} |
| + |
| +PP_Var PPB_Flash_Clipboard_Proxy::ReadData( |
| + PP_Instance instance, |
| + PP_Flash_Clipboard_Type clipboard_type, |
| + PP_Flash_Clipboard_Format format) { |
| + if (!IsValidClipboardType(clipboard_type) || !IsValidClipboardFormat(format)) |
| return PP_MakeUndefined(); |
| ReceiveSerializedVarReturnValue result; |
| - dispatcher()->Send(new PpapiHostMsg_PPBFlashClipboard_ReadPlainText( |
| + dispatcher()->Send(new PpapiHostMsg_PPBFlashClipboard_ReadData( |
| API_ID_PPB_FLASH_CLIPBOARD, instance, |
| - static_cast<int>(clipboard_type), &result)); |
| + static_cast<int>(clipboard_type), static_cast<int>(format), &result)); |
| return result.Return(dispatcher()); |
| } |
| -int32_t PPB_Flash_Clipboard_Proxy::WritePlainText( |
| + |
| +int32_t PPB_Flash_Clipboard_Proxy::WriteData( |
| PP_Instance instance, |
| PP_Flash_Clipboard_Type clipboard_type, |
| - const PP_Var& text) { |
| + uint32_t data_item_count, |
| + const struct |
| + PP_Flash_Clipboard_Data_Item data_items[]) { |
| if (!IsValidClipboardType(clipboard_type)) |
| return PP_ERROR_BADARGUMENT; |
| - dispatcher()->Send(new PpapiHostMsg_PPBFlashClipboard_WritePlainText( |
| + // Convert the array of PP_Flash_Clipboard_Data_Item into two parallel |
| + // arrays of format and corresponding data. |
| + PP_Var formats[data_item_count]; |
| + PP_Var data[data_item_count]; |
| + |
| + for (uint32_t i = 0; i < data_item_count; ++i) { |
| + formats[i] = PP_MakeInt32(data_items[i].format); |
| + data[i] = data_items[i].data; |
| + } |
| + |
| + std::vector<SerializedVar> formats_converted; |
| + std::vector<SerializedVar> data_converted; |
| + SerializedVarSendInput::ConvertVector(dispatcher(), formats, data_item_count, |
| + &formats_converted); |
| + SerializedVarSendInput::ConvertVector(dispatcher(), data, data_item_count, |
| + &data_converted); |
| + |
| + dispatcher()->Send(new PpapiHostMsg_PPBFlashClipboard_WriteData( |
| API_ID_PPB_FLASH_CLIPBOARD, |
| instance, |
| static_cast<int>(clipboard_type), |
| - SerializedVarSendInput(dispatcher(), text))); |
| + formats_converted, |
| + data_converted)); |
| // Assume success, since it allows us to avoid a sync IPC. |
| return PP_OK; |
| } |
| @@ -97,10 +135,10 @@ bool PPB_Flash_Clipboard_Proxy::OnMessageReceived(const IPC::Message& msg) { |
| IPC_BEGIN_MESSAGE_MAP(PPB_Flash_Clipboard_Proxy, msg) |
| IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_IsFormatAvailable, |
| OnMsgIsFormatAvailable) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_ReadPlainText, |
| - OnMsgReadPlainText) |
| - IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_WritePlainText, |
| - OnMsgWritePlainText) |
| + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_ReadData, |
| + OnMsgReadData) |
|
viettrungluu
2012/02/08 22:25:01
nit: alignment
raymes
2012/02/09 00:20:27
Done.
|
| + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_WriteData, |
| + OnMsgWriteData) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -122,29 +160,49 @@ void PPB_Flash_Clipboard_Proxy::OnMsgIsFormatAvailable( |
| } |
| } |
| -void PPB_Flash_Clipboard_Proxy::OnMsgReadPlainText( |
| +void PPB_Flash_Clipboard_Proxy::OnMsgReadData( |
| PP_Instance instance, |
| int clipboard_type, |
| + int format, |
| SerializedVarReturnValue result) { |
| EnterFlashClipboardNoLock enter(instance, true); |
| if (enter.succeeded()) { |
| result.Return(dispatcher(), |
| - enter.functions()->ReadPlainText( |
| + enter.functions()->ReadData( |
| instance, |
| - static_cast<PP_Flash_Clipboard_Type>(clipboard_type))); |
| + static_cast<PP_Flash_Clipboard_Type>(clipboard_type), |
| + static_cast<PP_Flash_Clipboard_Format>(format))); |
| } |
| } |
| -void PPB_Flash_Clipboard_Proxy::OnMsgWritePlainText( |
| +void PPB_Flash_Clipboard_Proxy::OnMsgWriteData( |
| PP_Instance instance, |
| int clipboard_type, |
| - SerializedVarReceiveInput text) { |
| + SerializedVarVectorReceiveInput formats_vector, |
| + SerializedVarVectorReceiveInput data_vector) { |
| EnterFlashClipboardNoLock enter(instance, true); |
| if (enter.succeeded()) { |
| - int32_t result = enter.functions()->WritePlainText( |
| + // Convert parallel arrays of PP_Var into an array of |
| + // PP_Flash_Clipboard_Data_Item structs. |
| + uint32_t formats_size; |
| + uint32_t data_size; |
| + PP_Var* formats = formats_vector.Get(dispatcher(), &formats_size); |
| + PP_Var* data = data_vector.Get(dispatcher(), &data_size); |
| + DCHECK(formats_size == data_size); |
|
viettrungluu
2012/02/08 22:25:01
This may as well be a CHECK, imo.
raymes
2012/02/09 00:20:27
Done.
|
| + |
| + struct PP_Flash_Clipboard_Data_Item data_items[formats_size]; |
|
viettrungluu
2012/02/08 22:25:01
nit: no struct
raymes
2012/02/09 00:20:27
Done.
|
| + |
| + for (uint32_t i = 0; i < formats_size; ++i) { |
| + data_items[i].format = |
| + static_cast<PP_Flash_Clipboard_Format>(formats[i].value.as_int); |
| + data_items[i].data = data[i]; |
| + } |
| + |
| + int32_t result = enter.functions()->WriteData( |
| instance, |
| static_cast<PP_Flash_Clipboard_Type>(clipboard_type), |
| - text.Get(dispatcher())); |
| + data_size, |
| + data_items); |
| DLOG_IF(WARNING, result != PP_OK) |
| << "Write to clipboard failed unexpectedly."; |
| (void)result; // Prevent warning in release mode. |