Index: ppapi/cpp/private/flash_clipboard.cc |
diff --git a/ppapi/cpp/private/flash_clipboard.cc b/ppapi/cpp/private/flash_clipboard.cc |
index 8634eafc8adde463a9fa2be7609ab2a8dfca857d..47731e136ac7d53016250a716f9164ce6c0bbc22 100644 |
--- a/ppapi/cpp/private/flash_clipboard.cc |
+++ b/ppapi/cpp/private/flash_clipboard.cc |
@@ -4,9 +4,12 @@ |
#include "ppapi/cpp/private/flash_clipboard.h" |
+#include <vector> |
+ |
#include "ppapi/c/pp_bool.h" |
#include "ppapi/c/pp_errors.h" |
#include "ppapi/cpp/instance.h" |
+#include "ppapi/cpp/logging.h" |
#include "ppapi/cpp/module_impl.h" |
#include "ppapi/cpp/var.h" |
@@ -18,6 +21,10 @@ template <> const char* interface_name<PPB_Flash_Clipboard>() { |
return PPB_FLASH_CLIPBOARD_INTERFACE; |
} |
+template <> const char* interface_name<PPB_Flash_Clipboard_3_0>() { |
+ return PPB_FLASH_CLIPBOARD_INTERFACE_3_0; |
+} |
+ |
} // namespace |
namespace flash { |
@@ -40,35 +47,60 @@ bool Clipboard::IsFormatAvailable(Instance* instance, |
} |
// static |
-bool Clipboard::ReadPlainText(Instance* instance, |
- PP_Flash_Clipboard_Type clipboard_type, |
- std::string* text_out) { |
- bool rv = false; |
- if (has_interface<PPB_Flash_Clipboard>()) { |
- Var v(Var::PassRef(), |
- get_interface<PPB_Flash_Clipboard>()->ReadPlainText( |
- instance->pp_instance(), |
- clipboard_type)); |
- if (v.is_string()) { |
- rv = true; |
- *text_out = v.AsString(); |
+bool Clipboard::ReadData(Instance* instance, |
viettrungluu
2012/02/08 22:25:01
nit: Move "Instance* instance," to the next line (
raymes
2012/02/09 00:20:27
Done.
|
+ PP_Flash_Clipboard_Type clipboard_type, |
+ PP_Flash_Clipboard_Format clipboard_format, |
+ PP_Var* out) { |
+ if (has_interface<PPB_Flash_Clipboard>() || |
viettrungluu
2012/02/08 22:25:01
This function is just wrong.
I'd prefer, in any c
raymes
2012/02/09 00:20:27
Umm yes...don't know what I was thinking when I ch
|
+ (has_interface<PPB_Flash_Clipboard_3_0>() && |
+ clipboard_format == PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT)) { |
+ bool rv = false; |
+ if (has_interface<PPB_Flash_Clipboard>()) { |
+ *out = get_interface<PPB_Flash_Clipboard>()->ReadData( |
+ instance->pp_instance(), |
+ clipboard_type, |
+ clipboard_format); |
} |
+ return rv; |
+ } |
+ else { |
+ return false; |
} |
- return rv; |
} |
// static |
-bool Clipboard::WritePlainText(Instance* instance, |
- PP_Flash_Clipboard_Type clipboard_type, |
- const std::string& text) { |
- bool rv = false; |
- if (has_interface<PPB_Flash_Clipboard>()) { |
- rv = (get_interface<PPB_Flash_Clipboard>()->WritePlainText( |
+bool Clipboard::WriteData(Instance* instance, |
+ PP_Flash_Clipboard_Type clipboard_type, |
+ const std::vector<PP_Flash_Clipboard_Data_Item>& data_items) { |
+ if (has_interface<PPB_Flash_Clipboard>() || |
viettrungluu
2012/02/08 22:25:01
Again, I'd prefer the above completed-separated wa
raymes
2012/02/09 00:20:27
Done.
|
+ has_interface<PPB_Flash_Clipboard_3_0>()) { |
+ bool rv = false; |
+ PP_Flash_Clipboard_Data_Item* data_items_array = |
+ new PP_Flash_Clipboard_Data_Item[data_items.size()]; |
+ |
+ uint32_t data_items_array_size = 0; |
+ for (std::vector<PP_Flash_Clipboard_Data_Item>::const_iterator |
+ i = data_items.begin(); i != data_items.end(); ++i) { |
+ if (has_interface<PPB_Flash_Clipboard_3_0>() && |
+ i->format != PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT) { |
+ continue; |
+ } |
+ |
+ data_items_array[data_items_array_size] = *i; |
+ ++data_items_array_size; |
+ } |
+ |
+ rv = (get_interface<PPB_Flash_Clipboard>()->WriteData( |
viettrungluu
2012/02/08 22:25:01
E.g., you'd need to use PPB_Flash_Clipboard_3_0 fo
raymes
2012/02/09 00:20:27
Done.
|
instance->pp_instance(), |
clipboard_type, |
- Var(text).pp_var()) == PP_OK); |
+ data_items_array_size, |
+ data_items_array) == PP_OK); |
+ delete[] data_items_array; |
+ return rv; |
+ } |
+ else { |
+ return false; |
} |
- return rv; |
} |
} // namespace flash |