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
,
21 PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT
,
22 PP_FLASH_CLIPBOARD_FORMAT_HTML
,
23 PP_FLASH_CLIPBOARD_FORMAT_RTF
26 // The first custom format ID will be the ID after that max value in
27 // PP_Flash_Clipboard_Format.
28 const size_t kFirstCustomFormat
= arraysize(kPredefinedFormats
);
30 // Checks the validity of the given format name.
31 bool IsValidFormatName(const std::string
& format_name
) {
32 if (format_name
.empty() || format_name
.length() > kMaxFormatNameLength
)
39 FlashClipboardFormatRegistry::FlashClipboardFormatRegistry() {
42 FlashClipboardFormatRegistry::~FlashClipboardFormatRegistry() {
45 uint32_t FlashClipboardFormatRegistry::RegisterFormat(
46 const std::string
& format_name
) {
47 if (!IsValidFormatName(format_name
) ||
48 custom_formats_
.size() > kMaxNumFormats
) {
49 return PP_FLASH_CLIPBOARD_FORMAT_INVALID
;
51 uint32_t key
= kFirstCustomFormat
+ custom_formats_
.size();
52 custom_formats_
[key
] = format_name
;
56 void FlashClipboardFormatRegistry::SetRegisteredFormat(
57 const std::string
& format_name
,
59 custom_formats_
[format
] = format_name
;
62 bool FlashClipboardFormatRegistry::IsFormatRegistered(uint32_t format
) const {
63 return custom_formats_
.find(format
) != custom_formats_
.end();
66 std::string
FlashClipboardFormatRegistry::GetFormatName(
67 uint32_t format
) const {
68 FormatMap::const_iterator it
= custom_formats_
.find(format
);
69 if (it
== custom_formats_
.end())
74 uint32_t FlashClipboardFormatRegistry::GetFormatID(
75 const std::string
& format_name
) const {
76 for (FormatMap::const_iterator it
= custom_formats_
.begin();
77 it
!= custom_formats_
.end(); ++it
) {
78 if (it
->second
== format_name
)
81 return PP_FLASH_CLIPBOARD_FORMAT_INVALID
;
85 bool FlashClipboardFormatRegistry::IsValidPredefinedFormat(uint32_t format
) {
86 if (format
== PP_FLASH_CLIPBOARD_FORMAT_INVALID
)
88 return format
< kFirstCustomFormat
;