15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/flash_clipboard_format_registry.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cctype> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These values are chosen arbitrarily. Flash will never exceed these but if 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the interface becomes public, we can reconsider these. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kMaxNumFormats = 10; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kMaxFormatNameLength = 50; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All formats in PP_Flash_Clipboard_Format should be added here. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Flash_Clipboard_Format kPredefinedFormats[] = { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FLASH_CLIPBOARD_FORMAT_INVALID, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FLASH_CLIPBOARD_FORMAT_PLAINTEXT, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FLASH_CLIPBOARD_FORMAT_HTML, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FLASH_CLIPBOARD_FORMAT_RTF 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The first custom format ID will be the ID after that max value in 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PP_Flash_Clipboard_Format. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kFirstCustomFormat = arraysize(kPredefinedFormats); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks the validity of the given format name. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsValidFormatName(const std::string& format_name) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (format_name.empty() || format_name.length() > kMaxFormatNameLength) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FlashClipboardFormatRegistry::FlashClipboardFormatRegistry() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FlashClipboardFormatRegistry::~FlashClipboardFormatRegistry() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t FlashClipboardFormatRegistry::RegisterFormat( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& format_name) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsValidFormatName(format_name) || 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) custom_formats_.size() > kMaxNumFormats) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FLASH_CLIPBOARD_FORMAT_INVALID; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t key = kFirstCustomFormat + custom_formats_.size(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) custom_formats_[key] = format_name; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return key; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FlashClipboardFormatRegistry::SetRegisteredFormat( 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& format_name, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t format) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) custom_formats_[format] = format_name; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FlashClipboardFormatRegistry::IsFormatRegistered(uint32_t format) const { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return custom_formats_.find(format) != custom_formats_.end(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string FlashClipboardFormatRegistry::GetFormatName( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t format) const { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormatMap::const_iterator it = custom_formats_.find(format); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it == custom_formats_.end()) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::string(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return it->second; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t FlashClipboardFormatRegistry::GetFormatID( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& format_name) const { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (FormatMap::const_iterator it = custom_formats_.begin(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != custom_formats_.end(); ++it) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it->second == format_name) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return it->first; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FLASH_CLIPBOARD_FORMAT_INVALID; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FlashClipboardFormatRegistry::IsValidPredefinedFormat(uint32_t format) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (format == PP_FLASH_CLIPBOARD_FORMAT_INVALID) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return format < kFirstCustomFormat; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 92