Chromium Code Reviews| Index: ppapi/cpp/private/flash_clipboard.cc |
| diff --git a/ppapi/cpp/private/flash_clipboard.cc b/ppapi/cpp/private/flash_clipboard.cc |
| index 6107f98526f1c60b9907f248f8a4b687576bd2b0..8c2467dc53575a7b992b53fb52356c13bf69e544 100644 |
| --- a/ppapi/cpp/private/flash_clipboard.cc |
| +++ b/ppapi/cpp/private/flash_clipboard.cc |
| @@ -20,23 +20,43 @@ template <> const char* interface_name<PPB_Flash_Clipboard_4_0>() { |
| return PPB_FLASH_CLIPBOARD_INTERFACE_4_0; |
| } |
| +template <> const char* interface_name<PPB_Flash_Clipboard_5_0>() { |
| + return PPB_FLASH_CLIPBOARD_INTERFACE_5_0; |
| +} |
| + |
| } // namespace |
| namespace flash { |
| // static |
| bool Clipboard::IsAvailable() { |
| - return has_interface<PPB_Flash_Clipboard_4_0>(); |
| + return has_interface<PPB_Flash_Clipboard_5_0>() || |
| + has_interface<PPB_Flash_Clipboard_4_0>() ; |
| +} |
| + |
| +// static |
| +uint32_t Clipboard::RegisterCustomFormat(const InstanceHandle& instance, |
| + const std::string& format_name) { |
| + uint32_t rv = PP_FLASH_CLIPBOARD_FORMAT_INVALID; |
| + if (has_interface<PPB_Flash_Clipboard_5_0>()) { |
| + rv = get_interface<PPB_Flash_Clipboard_5_0>()->RegisterCustomFormat( |
| + instance.pp_instance(), format_name.c_str()); |
|
yzshen1
2012/10/29 17:58:04
wrong indent. (You worked on Flapper code for too
raymes
2012/10/29 18:44:58
Done.
|
| + } |
| + return rv; |
| } |
| // static |
| bool Clipboard::IsFormatAvailable(const InstanceHandle& instance, |
| PP_Flash_Clipboard_Type clipboard_type, |
| - PP_Flash_Clipboard_Format format) { |
| + uint32_t format) { |
| bool rv = false; |
| - if (has_interface<PPB_Flash_Clipboard_4_0>()) { |
| - rv = PP_ToBool(get_interface<PPB_Flash_Clipboard_4_0>()->IsFormatAvailable( |
| + if (has_interface<PPB_Flash_Clipboard_5_0>()) { |
| + rv = PP_ToBool(get_interface<PPB_Flash_Clipboard_5_0>()->IsFormatAvailable( |
| instance.pp_instance(), clipboard_type, format)); |
| + } else if (has_interface<PPB_Flash_Clipboard_4_0>()) { |
| + rv = PP_ToBool(get_interface<PPB_Flash_Clipboard_4_0>()->IsFormatAvailable( |
| + instance.pp_instance(), clipboard_type, |
| + static_cast<PP_Flash_Clipboard_Format>(format))); |
| } |
| return rv; |
| } |
| @@ -45,14 +65,21 @@ bool Clipboard::IsFormatAvailable(const InstanceHandle& instance, |
| bool Clipboard::ReadData( |
| const InstanceHandle& instance, |
| PP_Flash_Clipboard_Type clipboard_type, |
| - PP_Flash_Clipboard_Format clipboard_format, |
| + uint32_t format, |
| Var* out) { |
| bool rv = false; |
| - if (has_interface<PPB_Flash_Clipboard_4_0>()) { |
| + if (has_interface<PPB_Flash_Clipboard_5_0>()) { |
| + PP_Var result = get_interface<PPB_Flash_Clipboard_5_0>()->ReadData( |
| + instance.pp_instance(), |
| + clipboard_type, |
| + format); |
| + *out = Var(PASS_REF, result); |
| + rv = true; |
| + } else if (has_interface<PPB_Flash_Clipboard_4_0>()) { |
| PP_Var result = get_interface<PPB_Flash_Clipboard_4_0>()->ReadData( |
| instance.pp_instance(), |
| clipboard_type, |
| - clipboard_format); |
| + static_cast<PP_Flash_Clipboard_Format>(format)); |
| *out = Var(PASS_REF, result); |
| rv = true; |
| } |
| @@ -63,13 +90,13 @@ bool Clipboard::ReadData( |
| bool Clipboard::WriteData( |
| const InstanceHandle& instance, |
| PP_Flash_Clipboard_Type clipboard_type, |
| - const std::vector<PP_Flash_Clipboard_Format>& formats, |
| + const std::vector<uint32_t>& formats, |
| const std::vector<Var>& data_items) { |
| if (formats.size() != data_items.size()) |
| return false; |
| bool rv = false; |
| - if (has_interface<PPB_Flash_Clipboard_4_0>()) { |
| + if (has_interface<PPB_Flash_Clipboard_5_0>()) { |
| // Convert vector of pp::Var into a vector of PP_Var. |
| std::vector<PP_Var> data_items_vector; |
| for (uint32_t i = 0; i < data_items.size(); ++i) |
| @@ -78,13 +105,38 @@ bool Clipboard::WriteData( |
| // Ensure that we don't dereference the memory in empty vectors. We still |
| // want to call WriteData because it has the effect of clearing the |
| // clipboard. |
| - const PP_Flash_Clipboard_Format* formats_ptr(NULL); |
| + const uint32_t* formats_ptr(NULL); |
| const PP_Var* data_items_ptr(NULL); |
| if (data_items.size() > 0) { |
| formats_ptr = &formats[0]; |
| data_items_ptr = &data_items_vector[0]; |
| } |
| + rv = (get_interface<PPB_Flash_Clipboard_5_0>()->WriteData( |
| + instance.pp_instance(), |
| + clipboard_type, |
| + data_items.size(), |
| + formats_ptr, |
| + data_items_ptr) == PP_OK); |
| + } else if (has_interface<PPB_Flash_Clipboard_4_0>()) { |
| + // Convert vector of pp::Var into a vector of PP_Var. |
| + std::vector<PP_Var> data_items_vector; |
| + std::vector<PP_Flash_Clipboard_Format> old_formats; |
| + for (uint32_t i = 0; i < data_items.size(); ++i) { |
| + data_items_vector.push_back(data_items[i].pp_var()); |
| + old_formats.push_back(static_cast<PP_Flash_Clipboard_Format>(formats[i])); |
| + } |
| + |
| + // Ensure that we don't dereference the memory in empty vectors. We still |
| + // want to call WriteData because it has the effect of clearing the |
| + // clipboard. |
| + const PP_Flash_Clipboard_Format* formats_ptr(NULL); |
| + const PP_Var* data_items_ptr(NULL); |
| + if (data_items.size() > 0) { |
| + formats_ptr = &old_formats[0]; |
| + data_items_ptr = &data_items_vector[0]; |
| + } |
| + |
| rv = (get_interface<PPB_Flash_Clipboard_4_0>()->WriteData( |
| instance.pp_instance(), |
| clipboard_type, |