Move flash clipboard to the new proxy and add custom format support

This moves the flash clipboard interface to the new pepper proxy. It also adds support for copying/pasting data of custom data formats (which is needed for flash). 


BUG=154497
TEST=Added new pepper tests


Review URL: https://chromiumcodereview.appspot.com/11225021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165548 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ppapi/thunk/ppb_flash_clipboard_thunk.cc b/ppapi/thunk/ppb_flash_clipboard_thunk.cc
index 084b937..d982cd5 100644
--- a/ppapi/thunk/ppb_flash_clipboard_thunk.cc
+++ b/ppapi/thunk/ppb_flash_clipboard_thunk.cc
@@ -2,70 +2,92 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/memory/scoped_ptr.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/c/private/ppb_flash_clipboard.h"
 #include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_flash_clipboard_api.h"
 #include "ppapi/thunk/thunk.h"
-#include "ppapi/thunk/ppb_flash_api.h"
 
 namespace ppapi {
 namespace thunk {
 
 namespace {
 
-PP_Bool IsFormatAvailable(PP_Instance instance,
-                          PP_Flash_Clipboard_Type clipboard_type,
-                          PP_Flash_Clipboard_Format format) {
+uint32_t RegisterCustomFormat(PP_Instance instance,
+                              const char* format_name) {
   EnterInstance enter(instance);
   if (enter.failed())
     return PP_FALSE;
-  return enter.functions()->GetFlashAPI()->IsClipboardFormatAvailable(
-      instance, clipboard_type, format);
+  return enter.functions()->GetFlashClipboardAPI(
+      instance)->RegisterCustomFormat(instance, format_name);
+}
+
+PP_Bool IsFormatAvailable(PP_Instance instance,
+                          PP_Flash_Clipboard_Type clipboard_type,
+                          uint32_t format) {
+  EnterInstance enter(instance);
+  if (enter.failed())
+    return PP_FALSE;
+  return enter.functions()->GetFlashClipboardAPI(
+      instance)->IsFormatAvailable(instance, clipboard_type, format);
 }
 
 PP_Var ReadData(PP_Instance instance,
                 PP_Flash_Clipboard_Type clipboard_type,
-                PP_Flash_Clipboard_Format format) {
+                uint32_t format) {
   EnterInstance enter(instance);
   if (enter.failed())
     return PP_MakeUndefined();
-  return enter.functions()->GetFlashAPI()->ReadClipboardData(
+  return enter.functions()->GetFlashClipboardAPI(instance)->ReadData(
       instance, clipboard_type, format);
 }
 
 int32_t WriteData(PP_Instance instance,
                   PP_Flash_Clipboard_Type clipboard_type,
                   uint32_t data_item_count,
-                  const PP_Flash_Clipboard_Format formats[],
+                  const uint32_t formats[],
                   const PP_Var data_items[]) {
   EnterInstance enter(instance);
   if (enter.failed())
     return enter.retval();
-  return enter.functions()->GetFlashAPI()->WriteClipboardData(
+  return enter.functions()->GetFlashClipboardAPI(instance)->WriteData(
       instance, clipboard_type, data_item_count, formats, data_items);
 }
 
-PP_Var ReadPlainText(PP_Instance instance,
-                     PP_Flash_Clipboard_Type clipboard_type) {
-  return ReadData(instance,
-                  clipboard_type,
-                  PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT);
+PP_Bool IsFormatAvailable_4_0(PP_Instance instance,
+                              PP_Flash_Clipboard_Type clipboard_type,
+                              PP_Flash_Clipboard_Format format) {
+  return IsFormatAvailable(instance, clipboard_type,
+                           static_cast<uint32_t>(format));
 }
 
-int32_t WritePlainText(PP_Instance instance,
-                       PP_Flash_Clipboard_Type clipboard_type,
-                       PP_Var text) {
-  PP_Flash_Clipboard_Format format = PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT;
-  return WriteData(instance, clipboard_type, 1, &format, &text);
+PP_Var ReadData_4_0(PP_Instance instance,
+                    PP_Flash_Clipboard_Type clipboard_type,
+                    PP_Flash_Clipboard_Format format) {
+  return ReadData(instance, clipboard_type, static_cast<uint32_t>(format));
 }
 
-const PPB_Flash_Clipboard_3_0 g_ppb_flash_clipboard_thunk_3_0 = {
-  &IsFormatAvailable,
-  &ReadPlainText,
-  &WritePlainText
-};
+int32_t WriteData_4_0(PP_Instance instance,
+                      PP_Flash_Clipboard_Type clipboard_type,
+                      uint32_t data_item_count,
+                      const PP_Flash_Clipboard_Format formats[],
+                      const PP_Var data_items[]) {
+  scoped_array<uint32_t> new_formats(new uint32_t[data_item_count]);
+  for (uint32_t i = 0; i < data_item_count; ++i)
+    new_formats[i] = static_cast<uint32_t>(formats[i]);
+  return WriteData(instance, clipboard_type, data_item_count,
+                   new_formats.get(), data_items);
+}
 
 const PPB_Flash_Clipboard_4_0 g_ppb_flash_clipboard_thunk_4_0 = {
+  &IsFormatAvailable_4_0,
+  &ReadData_4_0,
+  &WriteData_4_0
+};
+
+const PPB_Flash_Clipboard_5_0 g_ppb_flash_clipboard_thunk_5_0 = {
+  &RegisterCustomFormat,
   &IsFormatAvailable,
   &ReadData,
   &WriteData
@@ -73,13 +95,13 @@
 
 }  // namespace
 
-const PPB_Flash_Clipboard_3_0* GetPPB_Flash_Clipboard_3_0_Thunk() {
-  return &g_ppb_flash_clipboard_thunk_3_0;
-}
-
 const PPB_Flash_Clipboard_4_0* GetPPB_Flash_Clipboard_4_0_Thunk() {
   return &g_ppb_flash_clipboard_thunk_4_0;
 }
 
+const PPB_Flash_Clipboard_5_0* GetPPB_Flash_Clipboard_5_0_Thunk() {
+  return &g_ppb_flash_clipboard_thunk_5_0;
+}
+
 }  // namespace thunk
 }  // namespace ppapi