Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Side by Side Diff: Source/core/css/FontFace.cpp

Issue 656913006: Remove SVG fonts (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Update tests for landing Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #include "core/css/parser/CSSParser.h" 49 #include "core/css/parser/CSSParser.h"
50 #include "core/dom/DOMArrayBuffer.h" 50 #include "core/dom/DOMArrayBuffer.h"
51 #include "core/dom/DOMArrayBufferView.h" 51 #include "core/dom/DOMArrayBufferView.h"
52 #include "core/dom/DOMException.h" 52 #include "core/dom/DOMException.h"
53 #include "core/dom/Document.h" 53 #include "core/dom/Document.h"
54 #include "core/dom/ExceptionCode.h" 54 #include "core/dom/ExceptionCode.h"
55 #include "core/dom/StyleEngine.h" 55 #include "core/dom/StyleEngine.h"
56 #include "core/frame/LocalFrame.h" 56 #include "core/frame/LocalFrame.h"
57 #include "core/frame/Settings.h" 57 #include "core/frame/Settings.h"
58 #include "core/frame/UseCounter.h" 58 #include "core/frame/UseCounter.h"
59 #include "core/svg/SVGFontFaceElement.h"
60 #include "core/svg/SVGFontFaceSource.h"
61 #include "core/svg/SVGRemoteFontFaceSource.h"
62 #include "platform/FontFamilyNames.h" 59 #include "platform/FontFamilyNames.h"
63 #include "platform/SharedBuffer.h" 60 #include "platform/SharedBuffer.h"
64 #include "wtf/ArrayBufferView.h" 61 #include "wtf/ArrayBufferView.h"
65 62
66 namespace blink { 63 namespace blink {
67 64
68 static PassRefPtrWillBeRawPtr<CSSValue> parseCSSValue(const Document* document, const String& s, CSSPropertyID propertyID) 65 static PassRefPtrWillBeRawPtr<CSSValue> parseCSSValue(const Document* document, const String& s, CSSPropertyID propertyID)
69 { 66 {
70 CSSParserContext context(*document, UseCounter::getFrom(document)); 67 CSSParserContext context(*document, UseCounter::getFrom(document));
71 return CSSParser::parseSingleValue(propertyID, s, context); 68 return CSSParser::parseSingleValue(propertyID, s, context);
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get()); 502 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get());
506 if (m_error) 503 if (m_error)
507 return; 504 return;
508 505
509 // Each item in the src property's list is a single CSSFontFaceSource. Put t hem all into a CSSFontFace. 506 // Each item in the src property's list is a single CSSFontFaceSource. Put t hem all into a CSSFontFace.
510 ASSERT(src); 507 ASSERT(src);
511 ASSERT(src->isValueList()); 508 ASSERT(src->isValueList());
512 CSSValueList* srcList = toCSSValueList(src.get()); 509 CSSValueList* srcList = toCSSValueList(src.get());
513 int srcLength = srcList->length(); 510 int srcLength = srcList->length();
514 511
515 bool foundSVGFont = false;
516
517 for (int i = 0; i < srcLength; i++) { 512 for (int i = 0; i < srcLength; i++) {
518 // An item in the list either specifies a string (local font name) or a URL (remote font to download). 513 // An item in the list either specifies a string (local font name) or a URL (remote font to download).
519 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i)); 514 CSSFontFaceSrcValue* item = toCSSFontFaceSrcValue(srcList->item(i));
520 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr; 515 OwnPtrWillBeRawPtr<CSSFontFaceSource> source = nullptr;
521 516
522 #if ENABLE(SVG_FONTS)
523 foundSVGFont = item->isSVGFontFaceSrc() || item->svgFontFaceElement();
524 #endif
525 if (!item->isLocal()) { 517 if (!item->isLocal()) {
526 Settings* settings = document ? document->frame() ? document->frame( )->settings() : 0 : 0; 518 Settings* settings = document ? document->frame() ? document->frame( )->settings() : 0 : 0;
527 bool allowDownloading = foundSVGFont || (settings && settings->downl oadableBinaryFontsEnabled()); 519 bool allowDownloading = settings && settings->downloadableBinaryFont sEnabled();
528 if (allowDownloading && item->isSupportedFormat() && document) { 520 if (allowDownloading && item->isSupportedFormat() && document) {
529 FontResource* fetched = item->fetch(document); 521 FontResource* fetched = item->fetch(document);
530 if (fetched) { 522 if (fetched) {
531 FontLoader* fontLoader = document->styleEngine()->fontSelect or()->fontLoader(); 523 FontLoader* fontLoader = document->styleEngine()->fontSelect or()->fontLoader();
532 524 source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched , fontLoader));
533 #if ENABLE(SVG_FONTS)
534 if (foundSVGFont) {
535 source = adoptPtrWillBeNoop(new SVGRemoteFontFaceSource( item->resource(), fetched, fontLoader));
536 } else
537 #endif
538 {
539 source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fet ched, fontLoader));
540 }
541 } 525 }
542 } 526 }
543 } else { 527 } else {
544 #if ENABLE(SVG_FONTS) 528 source = adoptPtrWillBeNoop(new LocalFontFaceSource(item->resource() ));
545 if (item->svgFontFaceElement()) {
546 RefPtrWillBeRawPtr<SVGFontFaceElement> fontfaceElement = item->s vgFontFaceElement();
547 // SVGFontFaceSource assumes that it is the case where <font-fac e> element resides in the same document.
548 // We put a RELEASE_ASSERT here as it will cause UAF if the assu mption is false.
549 RELEASE_ASSERT(fontfaceElement->inDocument());
550 RELEASE_ASSERT(fontfaceElement->document() == document);
551 source = adoptPtrWillBeNoop(new SVGFontFaceSource(fontfaceElemen t.get()));
552 } else
553 #endif
554 {
555 source = adoptPtrWillBeNoop(new LocalFontFaceSource(item->resour ce()));
556 }
557 } 529 }
558 530
559 if (source) 531 if (source)
560 m_cssFontFace->addSource(source.release()); 532 m_cssFontFace->addSource(source.release());
561 } 533 }
562 } 534 }
563 535
564 void FontFace::initCSSFontFace(const unsigned char* data, unsigned size) 536 void FontFace::initCSSFontFace(const unsigned char* data, unsigned size)
565 { 537 {
566 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get()); 538 m_cssFontFace = createCSSFontFace(this, m_unicodeRange.get());
(...skipping 28 matching lines...) Expand all
595 { 567 {
596 return m_cssFontFace->hadBlankText(); 568 return m_cssFontFace->hadBlankText();
597 } 569 }
598 570
599 bool FontFace::hasPendingActivity() const 571 bool FontFace::hasPendingActivity() const
600 { 572 {
601 return m_status == Loading && executionContext() && !executionContext()->act iveDOMObjectsAreStopped(); 573 return m_status == Loading && executionContext() && !executionContext()->act iveDOMObjectsAreStopped();
602 } 574 }
603 575
604 } // namespace blink 576 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698