diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/platform/fonts/win/FontCustomPlatformDataWin.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/platform/fonts/win/FontCustomPlatformDataWin.cpp | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/chromium/third_party/WebKit/Source/platform/fonts/win/FontCustomPlatformDataWin.cpp b/chromium/third_party/WebKit/Source/platform/fonts/win/FontCustomPlatformDataWin.cpp deleted file mode 100644 index 43ae74c825e..00000000000 --- a/chromium/third_party/WebKit/Source/platform/fonts/win/FontCustomPlatformDataWin.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2013 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "platform/fonts/FontCustomPlatformData.h" - -#include "platform/LayoutTestSupport.h" -#include "platform/SharedBuffer.h" -#include "platform/fonts/FontPlatformData.h" -#include "platform/fonts/opentype/OpenTypeSanitizer.h" -#include "platform/fonts/opentype/OpenTypeUtilities.h" -#include "wtf/PassOwnPtr.h" -#include "wtf/RefPtr.h" -#include "wtf/text/Base64.h" - -#include <objbase.h> - -namespace { - -// Creates a unique and unpredictable font name, in order to avoid collisions and to -// not allow access from CSS. -String createUniqueFontName() -{ - GUID fontUuid; - CoCreateGuid(&fontUuid); - - String fontName = base64Encode(reinterpret_cast<char*>(&fontUuid), sizeof(fontUuid)); - ASSERT(fontName.length() < LF_FACESIZE); - return fontName; -} - -} // namespace - -namespace WebCore { - -FontCustomPlatformData::FontCustomPlatformData(HANDLE fontReference, const String& name) - : m_fontReference(fontReference) - , m_name(name) -{ -} - -FontCustomPlatformData::~FontCustomPlatformData() -{ - if (m_fontReference) - RemoveFontMemResourceEx(m_fontReference); -} - -FontPlatformData FontCustomPlatformData::fontPlatformData(float size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant) -{ - ASSERT(m_fontReference); - - LOGFONT logFont; - // m_name comes from createUniqueFontName, which, in turn, gets - // it from base64-encoded uuid (128-bit). So, m_name - // can never be longer than LF_FACESIZE (32). - if (m_name.length() + 1 >= LF_FACESIZE) { - ASSERT_NOT_REACHED(); - return FontPlatformData(); - } - unsigned len = m_name.copyTo(logFont.lfFaceName, 0, LF_FACESIZE - 1); - logFont.lfFaceName[len] = '\0'; - - // FIXME: almost identical to FillLogFont in FontCacheWin.cpp. - // Need to refactor. - logFont.lfHeight = -static_cast<int>(size); - logFont.lfWidth = 0; - logFont.lfEscapement = 0; - logFont.lfOrientation = 0; - logFont.lfUnderline = false; - logFont.lfStrikeOut = false; - logFont.lfCharSet = DEFAULT_CHARSET; - logFont.lfOutPrecision = OUT_TT_ONLY_PRECIS; - logFont.lfQuality = isRunningLayoutTest() ? NONANTIALIASED_QUALITY : DEFAULT_QUALITY; // Honor user's desktop settings. - logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; - logFont.lfItalic = italic; - logFont.lfWeight = bold ? FW_BOLD : FW_DONTCARE; - - HFONT hfont = CreateFontIndirect(&logFont); - return FontPlatformData(hfont, size, orientation); -} - -PassOwnPtr<FontCustomPlatformData> FontCustomPlatformData::create(SharedBuffer* buffer) -{ - ASSERT_ARG(buffer, buffer); - - OpenTypeSanitizer sanitizer(buffer); - RefPtr<SharedBuffer> transcodeBuffer = sanitizer.sanitize(); - if (!transcodeBuffer) - return nullptr; // validation failed. - buffer = transcodeBuffer.get(); - - // Introduce the font to GDI. AddFontMemResourceEx should be used with care, because it will pollute the process's - // font namespace (Windows has no API for creating an HFONT from data without exposing the font to the - // entire process first). - String fontName = createUniqueFontName(); - HANDLE fontReference = renameAndActivateFont(buffer, fontName); - if (!fontReference) - return nullptr; - - return adoptPtr(new FontCustomPlatformData(fontReference, fontName)); -} - -bool FontCustomPlatformData::supportsFormat(const String& format) -{ - return equalIgnoringCase(format, "truetype") || equalIgnoringCase(format, "opentype") || OpenTypeSanitizer::supportsFormat(format); -} - -} // namespace WebCore |