OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
51 else if (data[0] == 'w' && data[1] == 'O' && data[2] == 'F' && data[3] = = '2') | 51 else if (data[0] == 'w' && data[1] == 'O' && data[2] == 'F' && data[3] = = '2') |
52 histogramName = "WebFont.DecodeSpeed.WOFF2"; | 52 histogramName = "WebFont.DecodeSpeed.WOFF2"; |
53 } | 53 } |
54 | 54 |
55 double kbPerSecond = decodedSize / (1000 * decodeTime); | 55 double kbPerSecond = decodedSize / (1000 * decodeTime); |
56 Platform::current()->histogramCustomCounts(histogramName, kbPerSecond, 1000, 300000, 50); | 56 Platform::current()->histogramCustomCounts(histogramName, kbPerSecond, 1000, 300000, 50); |
57 } | 57 } |
58 | 58 |
59 PassRefPtr<SharedBuffer> OpenTypeSanitizer::sanitize() | 59 PassRefPtr<SharedBuffer> OpenTypeSanitizer::sanitize() |
60 { | 60 { |
61 // OTS parsing is not called yet, setting parsing error for OTS as false | |
62 setParsingError(false); | |
jungshik at Google
2015/06/01 23:22:19
You don't need to call an accessor. Why don't you
h.joshi
2015/06/04 15:19:16
Done.
| |
61 if (!m_buffer) | 63 if (!m_buffer) |
jungshik at Google
2015/06/01 23:22:19
Set the error message to 'Empty Buffer' or somethi
h.joshi
2015/06/04 15:19:16
Done.
| |
62 return nullptr; | 64 return nullptr; |
63 | 65 |
64 // This is the largest web font size which we'll try to transcode. | 66 // This is the largest web font size which we'll try to transcode. |
65 static const size_t maxWebFontSize = 30 * 1024 * 1024; // 30 MB | 67 static const size_t maxWebFontSize = 30 * 1024 * 1024; // 30 MB |
66 if (m_buffer->size() > maxWebFontSize) | 68 if (m_buffer->size() > maxWebFontSize) |
67 return nullptr; | 69 return nullptr; |
jungshik at Google
2015/06/01 23:22:19
IMHO, you'd better set a custom error string here,
h.joshi
2015/06/04 15:19:16
Done.
| |
68 | 70 |
69 // A transcoded font is usually smaller than an original font. | 71 // A transcoded font is usually smaller than an original font. |
70 // However, it can be slightly bigger than the original one due to | 72 // However, it can be slightly bigger than the original one due to |
71 // name table replacement and/or padding for glyf table. | 73 // name table replacement and/or padding for glyf table. |
72 // | 74 // |
73 // With WOFF fonts, however, we'll be decompressing, so the result can be | 75 // With WOFF fonts, however, we'll be decompressing, so the result can be |
74 // much larger than the original. | 76 // much larger than the original. |
75 | 77 |
76 ots::ExpandingMemoryStream output(m_buffer->size(), maxWebFontSize); | 78 ots::ExpandingMemoryStream output(m_buffer->size(), maxWebFontSize); |
77 double start = currentTime(); | 79 double start = currentTime(); |
78 BlinkOTSContext otsContext; | 80 BlinkOTSContext otsContext; |
79 | 81 |
80 if (!otsContext.Process(&output, reinterpret_cast<const uint8_t*>(m_buffer-> data()), m_buffer->size())) | 82 if (!otsContext.Process(&output, reinterpret_cast<const uint8_t*>(m_buffer-> data()), m_buffer->size())) { |
83 setParsingError(true); | |
84 setErrorString(otsContext.getErrorString()); | |
jungshik at Google
2015/06/01 23:22:19
again, you don't need accessors to set member vari
h.joshi
2015/06/04 15:19:16
Done.
| |
81 return nullptr; | 85 return nullptr; |
86 } | |
82 | 87 |
83 const size_t transcodeLen = output.Tell(); | 88 const size_t transcodeLen = output.Tell(); |
84 recordDecodeSpeedHistogram(m_buffer, currentTime() - start, transcodeLen); | 89 recordDecodeSpeedHistogram(m_buffer, currentTime() - start, transcodeLen); |
85 return SharedBuffer::create(static_cast<unsigned char*>(output.get()), trans codeLen); | 90 return SharedBuffer::create(static_cast<unsigned char*>(output.get()), trans codeLen); |
86 } | 91 } |
87 | 92 |
88 bool OpenTypeSanitizer::supportsFormat(const String& format) | 93 bool OpenTypeSanitizer::supportsFormat(const String& format) |
89 { | 94 { |
90 return equalIgnoringCase(format, "woff") || equalIgnoringCase(format, "woff2 "); | 95 return equalIgnoringCase(format, "woff") || equalIgnoringCase(format, "woff2 "); |
91 } | 96 } |
92 | 97 |
98 void BlinkOTSContext::Message(int level, const char *format, ...) | |
99 { | |
100 va_list args; | |
101 va_start(args, format); | |
102 | |
103 #if COMPILER(MSVC) | |
104 int result = _vscprintf(format, args); | |
105 #else | |
106 char ch; | |
107 int result = vsnprintf(&ch, 1, format, args); | |
108 #endif | |
109 va_end(args); | |
110 | |
111 if (result <= 0) { | |
112 m_errorString = String("OTS Error"); | |
113 } else { | |
114 Vector<char, 256> buffer; | |
115 unsigned len = result; | |
116 buffer.grow(len + 1); | |
117 | |
118 va_start(args, format); | |
119 vsnprintf(buffer.data(), buffer.size(), format, args); | |
120 va_end(args); | |
121 m_errorString = StringImpl::create(reinterpret_cast<const LChar*>(buffer .data()), len); | |
122 } | |
123 } | |
124 | |
125 ots::TableAction BlinkOTSContext::GetTableAction(uint32_t tag) | |
126 { | |
127 #define TABLE_TAG(c1, c2, c3, c4) ((uint32_t)((((uint8_t)(c1)) << 24) | (((uint8 _t)(c2)) << 16) | (((uint8_t)(c3)) << 8) | ((uint8_t)(c4)))) | |
128 | |
129 const uint32_t cbdtTag = TABLE_TAG('C', 'B', 'D', 'T'); | |
130 const uint32_t cblcTag = TABLE_TAG('C', 'B', 'L', 'C'); | |
131 const uint32_t colrTag = TABLE_TAG('C', 'O', 'L', 'R'); | |
132 const uint32_t cpalTag = TABLE_TAG('C', 'P', 'A', 'L'); | |
133 | |
134 switch (tag) { | |
135 // Google Color Emoji Tables | |
136 case cbdtTag: | |
137 case cblcTag: | |
138 // Windows Color Emoji Tables | |
139 case colrTag: | |
140 case cpalTag: | |
141 return ots::TABLE_ACTION_PASSTHRU; | |
142 default: | |
143 return ots::TABLE_ACTION_DEFAULT; | |
144 } | |
145 #undef TABLE_TAG | |
146 } | |
147 | |
93 } // namespace blink | 148 } // namespace blink |
OLD | NEW |