1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2007 Apple Computer, Inc. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (c) 2007, 2008, 2009, Google Inc. All rights reserved. 4e14391e94c850b8bd03680c23b38978db68687a8John Reck * Copyright (C) 2010 Company 100, Inc. 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FontCustomPlatformData.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 36d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Base64.h" 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "OpenTypeUtilities.h" 39ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "PlatformBridge.h" 40e14391e94c850b8bd03680c23b38978db68687a8John Reck#elif OS(LINUX) || OS(FREEBSD) || PLATFORM(BREWMP) 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "SkStream.h" 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FontPlatformData.h" 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "NotImplemented.h" 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "OpenTypeSanitizer.h" 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "SharedBuffer.h" 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 49d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <objbase.h> 51e14391e94c850b8bd03680c23b38978db68687a8John Reck#elif OS(LINUX) || OS(FREEBSD) || PLATFORM(BREWMP) 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <cstring> 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectFontCustomPlatformData::~FontCustomPlatformData() 58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 59d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_fontReference) 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RemoveFontMemResourceEx(m_fontReference); 62e14391e94c850b8bd03680c23b38978db68687a8John Reck#elif OS(LINUX) || OS(FREEBSD) || PLATFORM(BREWMP) 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_fontReference) 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_fontReference->unref(); 65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 682bde8e466a4451c7319e3a072d118917957d6554Steve BlockFontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation orientation, 692bde8e466a4451c7319e3a072d118917957d6554Steve Block TextOrientation textOrientation, FontWidthVariant, FontRenderingMode mode) 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 71d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(m_fontReference); 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project LOGFONT logFont; 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // m_name comes from createUniqueFontName, which, in turn, gets 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // it from base64-encoded uuid (128-bit). So, m_name 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // can never be longer than LF_FACESIZE (32). 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_name.length() + 1 >= LF_FACESIZE) { 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT_NOT_REACHED(); 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return FontPlatformData(); 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block memcpy(logFont.lfFaceName, m_name.charactersWithNullTermination(), 83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block sizeof(logFont.lfFaceName[0]) * (1 + m_name.length())); 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME: almost identical to FillLogFont in FontCacheWin.cpp. 86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Need to refactor. 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfHeight = -size; 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfWidth = 0; 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfEscapement = 0; 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfOrientation = 0; 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfUnderline = false; 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfStrikeOut = false; 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfCharSet = DEFAULT_CHARSET; 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfOutPrecision = OUT_TT_ONLY_PRECIS; 95ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch logFont.lfQuality = PlatformBridge::layoutTestMode() ? 96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NONANTIALIASED_QUALITY : 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFAULT_QUALITY; // Honor user's desktop settings. 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfItalic = italic; 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project logFont.lfWeight = bold ? 700 : 400; 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project HFONT hfont = CreateFontIndirect(&logFont); 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return FontPlatformData(hfont, size); 104e14391e94c850b8bd03680c23b38978db68687a8John Reck#elif OS(LINUX) || OS(FREEBSD) || PLATFORM(BREWMP) 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(m_fontReference); 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block return FontPlatformData(m_fontReference, "", size, bold && !m_fontReference->isBold(), italic && !m_fontReference->isItalic(), orientation, textOrientation); 107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return FontPlatformData(); 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 113d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// Creates a unique and unpredictable font name, in order to avoid collisions and to 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// not allow access from CSS. 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic String createUniqueFontName() 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block GUID fontUuid; 1192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block CoCreateGuid(&fontUuid); 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block String fontName = base64Encode(reinterpret_cast<char*>(&fontUuid), sizeof(fontUuid)); 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(fontName.length() < LF_FACESIZE); 1232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return fontName; 124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 127e14391e94c850b8bd03680c23b38978db68687a8John Reck#if OS(LINUX) || OS(FREEBSD) || PLATFORM(BREWMP) 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass RemoteFontStream : public SkStream { 1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic: 1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch explicit RemoteFontStream(PassRefPtr<SharedBuffer> buffer) 1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : m_buffer(buffer) 1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_offset(0) 1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual ~RemoteFontStream() 1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual bool rewind() 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_offset = 0; 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual size_t read(void* buffer, size_t size) 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!buffer && !size) { 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This is request for the length of the stream. 1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_buffer->size(); 1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 152cad810f21b803229eb11403f9209855525a25d57Steve Block // This is a request to read bytes or skip bytes (when buffer is 0). 1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_buffer->data() || !m_buffer->size()) 1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return 0; 1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch size_t left = m_buffer->size() - m_offset; 156cad810f21b803229eb11403f9209855525a25d57Steve Block size_t bytesToConsume = std::min(left, size); 157cad810f21b803229eb11403f9209855525a25d57Steve Block if (buffer) 158cad810f21b803229eb11403f9209855525a25d57Steve Block std::memcpy(buffer, m_buffer->data() + m_offset, bytesToConsume); 159cad810f21b803229eb11403f9209855525a25d57Steve Block m_offset += bytesToConsume; 160cad810f21b803229eb11403f9209855525a25d57Steve Block return bytesToConsume; 1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate: 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<SharedBuffer> m_buffer; 1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch size_t m_offset; 1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectFontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer) 170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT_ARG(buffer, buffer); 172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(OPENTYPE_SANITIZER) 174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block OpenTypeSanitizer sanitizer(buffer); 175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RefPtr<SharedBuffer> transcodeBuffer = sanitizer.sanitize(); 176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!transcodeBuffer) 177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0; // validation failed. 178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block buffer = transcodeBuffer.get(); 179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 181d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Introduce the font to GDI. AddFontMemResourceEx should be used with care, because it will pollute the process's 183635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // font namespace (Windows has no API for creating an HFONT from data without exposing the font to the 184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // entire process first). 185635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project String fontName = createUniqueFontName(); 186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HANDLE fontReference = renameAndActivateFont(buffer, fontName); 187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!fontReference) 188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return new FontCustomPlatformData(fontReference, fontName); 190e14391e94c850b8bd03680c23b38978db68687a8John Reck#elif OS(LINUX) || OS(FREEBSD) || PLATFORM(BREWMP) 191d0825bca7fe65beaee391d30da42e937db621564Steve Block RemoteFontStream* stream = new RemoteFontStream(buffer); 192d0825bca7fe65beaee391d30da42e937db621564Steve Block SkTypeface* typeface = SkTypeface::CreateFromStream(stream); 1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!typeface) 1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return 0; 1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return new FontCustomPlatformData(typeface); 196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else 1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notImplemented(); 198635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 199635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 200635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 201635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 202db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockbool FontCustomPlatformData::supportsFormat(const String& format) 203db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 204db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return equalIgnoringCase(format, "truetype") || equalIgnoringCase(format, "opentype") 205db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#if ENABLE(OPENTYPE_SANITIZER) 206db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block || equalIgnoringCase(format, "woff") 207db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#endif 208db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block ; 209db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 210db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 212