1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ppapi/shared_impl/flash_clipboard_format_registry.h"
13 // These values are chosen arbitrarily. Flash will never exceed these but if
14 // the interface becomes public, we can reconsider these.
15 const size_t kMaxNumFormats
= 10;
16 const size_t kMaxFormatNameLength
= 50;
18 // All formats in PP_Flash_Clipboard_Format should be added here.
19 const PP_Flash_Clipboard_Format kPredefinedFormats
[] = {
20 PP_FLASH_CLIPBOARD_FORMAT_INVALID
, PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT
,
21 PP_FLASH_CLIPBOARD_FORMAT_HTML
, PP_FLASH_CLIPBOARD_FORMAT_RTF
};
23 // The first custom format ID will be the ID after that max value in
24 // PP_Flash_Clipboard_Format.
25 const size_t kFirstCustomFormat
= arraysize(kPredefinedFormats
);
27 // Checks the validity of the given format name.
28 bool IsValidFormatName(const std::string
& format_name
) {
29 if (format_name
.empty() || format_name
.length() > kMaxFormatNameLength
)
36 FlashClipboardFormatRegistry::FlashClipboardFormatRegistry() {}
38 FlashClipboardFormatRegistry::~FlashClipboardFormatRegistry() {}
40 uint32_t FlashClipboardFormatRegistry::RegisterFormat(
41 const std::string
& format_name
) {
42 if (!IsValidFormatName(format_name
) ||
43 custom_formats_
.size() > kMaxNumFormats
) {
44 return PP_FLASH_CLIPBOARD_FORMAT_INVALID
;
46 uint32_t key
= kFirstCustomFormat
+ custom_formats_
.size();
47 custom_formats_
[key
] = format_name
;
51 void FlashClipboardFormatRegistry::SetRegisteredFormat(
52 const std::string
& format_name
,
54 custom_formats_
[format
] = format_name
;
57 bool FlashClipboardFormatRegistry::IsFormatRegistered(uint32_t format
) const {
58 return custom_formats_
.find(format
) != custom_formats_
.end();
61 std::string
FlashClipboardFormatRegistry::GetFormatName(uint32_t format
) const {
62 FormatMap::const_iterator it
= custom_formats_
.find(format
);
63 if (it
== custom_formats_
.end())
68 uint32_t FlashClipboardFormatRegistry::GetFormatID(
69 const std::string
& format_name
) const {
70 for (FormatMap::const_iterator it
= custom_formats_
.begin();
71 it
!= custom_formats_
.end();
73 if (it
->second
== format_name
)
76 return PP_FLASH_CLIPBOARD_FORMAT_INVALID
;
80 bool FlashClipboardFormatRegistry::IsValidPredefinedFormat(uint32_t format
) {
81 if (format
== PP_FLASH_CLIPBOARD_FORMAT_INVALID
)
83 return format
< kFirstCustomFormat
;