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

Unified Diff: ppapi/proxy/ppb_flash_clipboard_proxy.cc

Issue 9212066: Modified the flash cipboard interface to add html clipboard support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 10 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
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..f8c8f45712d15cf8d10572a21af110b9e898787a 100644
--- a/ppapi/proxy/ppb_flash_clipboard_proxy.cc
+++ b/ppapi/proxy/ppb_flash_clipboard_proxy.cc
@@ -92,6 +92,57 @@ int32_t PPB_Flash_Clipboard_Proxy::WritePlainText(
return PP_OK;
}
+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_ReadData(
+ API_ID_PPB_FLASH_CLIPBOARD, instance,
+ static_cast<int>(clipboard_type), static_cast<int>(format), &result));
+ return result.Return(dispatcher());
+}
+
+
+int32_t PPB_Flash_Clipboard_Proxy::WriteData(
+ PP_Instance instance,
+ PP_Flash_Clipboard_Type clipboard_type,
+ uint32_t data_item_count,
+ const struct
+ PP_Flash_Clipboard_Data_Item data_items[]) {
+ if (!IsValidClipboardType(clipboard_type))
+ return PP_ERROR_BADARGUMENT;
+
+ // 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),
+ formats_converted,
+ data_converted));
+ // Assume success, since it allows us to avoid a sync IPC.
+ return PP_OK;
+}
+
bool PPB_Flash_Clipboard_Proxy::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PPB_Flash_Clipboard_Proxy, msg)
@@ -101,6 +152,10 @@ bool PPB_Flash_Clipboard_Proxy::OnMessageReceived(const IPC::Message& msg) {
OnMsgReadPlainText)
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_WritePlainText,
OnMsgWritePlainText)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_ReadData,
+ OnMsgReadData)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlashClipboard_WriteData,
+ OnMsgWriteData)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -151,5 +206,54 @@ void PPB_Flash_Clipboard_Proxy::OnMsgWritePlainText(
}
}
+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()->ReadData(
+ instance,
+ static_cast<PP_Flash_Clipboard_Type>(clipboard_type),
+ static_cast<PP_Flash_Clipboard_Format>(format)));
+ }
+}
+
+void PPB_Flash_Clipboard_Proxy::OnMsgWriteData(
+ PP_Instance instance,
+ int clipboard_type,
+ SerializedVarVectorReceiveInput formats_vector,
+ SerializedVarVectorReceiveInput data_vector) {
+ EnterFlashClipboardNoLock enter(instance, true);
+ if (enter.succeeded()) {
+ // 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);
+
+ struct PP_Flash_Clipboard_Data_Item data_items[formats_size];
+
+ 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),
+ data_size,
+ data_items);
+ DLOG_IF(WARNING, result != PP_OK)
+ << "Write to clipboard failed unexpectedly.";
+ (void)result; // Prevent warning in release mode.
+ }
+}
+
} // namespace proxy
} // namespace ppapi

Powered by Google App Engine
This is Rietveld 408576698