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

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

Issue 975933002: Return reference from styleEngine() accessor. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « Source/core/css/FontFace.cpp ('k') | Source/core/css/SelectorChecker.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 met: 5 * modification, are permitted provided that the following conditions are met:
6 * 6 *
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 if (!fontFace) { 286 if (!fontFace) {
287 exceptionState.throwTypeError("The argument is not a FontFace."); 287 exceptionState.throwTypeError("The argument is not a FontFace.");
288 return; 288 return;
289 } 289 }
290 if (m_nonCSSConnectedFaces.contains(fontFace)) 290 if (m_nonCSSConnectedFaces.contains(fontFace))
291 return; 291 return;
292 if (isCSSConnectedFontFace(fontFace)) { 292 if (isCSSConnectedFontFace(fontFace)) {
293 exceptionState.throwDOMException(InvalidModificationError, "Cannot add a CSS-connected FontFace."); 293 exceptionState.throwDOMException(InvalidModificationError, "Cannot add a CSS-connected FontFace.");
294 return; 294 return;
295 } 295 }
296 CSSFontSelector* fontSelector = document()->styleEngine()->fontSelector(); 296 CSSFontSelector* fontSelector = document()->styleEngine().fontSelector();
297 m_nonCSSConnectedFaces.add(fontFace); 297 m_nonCSSConnectedFaces.add(fontFace);
298 fontSelector->fontFaceCache()->addFontFace(fontSelector, fontFace, false); 298 fontSelector->fontFaceCache()->addFontFace(fontSelector, fontFace, false);
299 if (fontFace->loadStatus() == FontFace::Loading) 299 if (fontFace->loadStatus() == FontFace::Loading)
300 addToLoadingFonts(fontFace); 300 addToLoadingFonts(fontFace);
301 fontSelector->fontFaceInvalidated(); 301 fontSelector->fontFaceInvalidated();
302 } 302 }
303 303
304 void FontFaceSet::clear() 304 void FontFaceSet::clear()
305 { 305 {
306 if (!inActiveDocumentContext() || m_nonCSSConnectedFaces.isEmpty()) 306 if (!inActiveDocumentContext() || m_nonCSSConnectedFaces.isEmpty())
307 return; 307 return;
308 CSSFontSelector* fontSelector = document()->styleEngine()->fontSelector(); 308 CSSFontSelector* fontSelector = document()->styleEngine().fontSelector();
309 FontFaceCache* fontFaceCache = fontSelector->fontFaceCache(); 309 FontFaceCache* fontFaceCache = fontSelector->fontFaceCache();
310 for (const auto& fontFace : m_nonCSSConnectedFaces) { 310 for (const auto& fontFace : m_nonCSSConnectedFaces) {
311 fontFaceCache->removeFontFace(fontFace.get(), false); 311 fontFaceCache->removeFontFace(fontFace.get(), false);
312 if (fontFace->loadStatus() == FontFace::Loading) 312 if (fontFace->loadStatus() == FontFace::Loading)
313 removeFromLoadingFonts(fontFace); 313 removeFromLoadingFonts(fontFace);
314 } 314 }
315 m_nonCSSConnectedFaces.clear(); 315 m_nonCSSConnectedFaces.clear();
316 fontSelector->fontFaceInvalidated(); 316 fontSelector->fontFaceInvalidated();
317 } 317 }
318 318
319 bool FontFaceSet::remove(FontFace* fontFace, ExceptionState& exceptionState) 319 bool FontFaceSet::remove(FontFace* fontFace, ExceptionState& exceptionState)
320 { 320 {
321 if (!inActiveDocumentContext()) 321 if (!inActiveDocumentContext())
322 return false; 322 return false;
323 if (!fontFace) { 323 if (!fontFace) {
324 exceptionState.throwTypeError("The argument is not a FontFace."); 324 exceptionState.throwTypeError("The argument is not a FontFace.");
325 return false; 325 return false;
326 } 326 }
327 WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >::iterator it = m_nonCSS ConnectedFaces.find(fontFace); 327 WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >::iterator it = m_nonCSS ConnectedFaces.find(fontFace);
328 if (it != m_nonCSSConnectedFaces.end()) { 328 if (it != m_nonCSSConnectedFaces.end()) {
329 m_nonCSSConnectedFaces.remove(it); 329 m_nonCSSConnectedFaces.remove(it);
330 CSSFontSelector* fontSelector = document()->styleEngine()->fontSelector( ); 330 CSSFontSelector* fontSelector = document()->styleEngine().fontSelector() ;
331 fontSelector->fontFaceCache()->removeFontFace(fontFace, false); 331 fontSelector->fontFaceCache()->removeFontFace(fontFace, false);
332 if (fontFace->loadStatus() == FontFace::Loading) 332 if (fontFace->loadStatus() == FontFace::Loading)
333 removeFromLoadingFonts(fontFace); 333 removeFromLoadingFonts(fontFace);
334 fontSelector->fontFaceInvalidated(); 334 fontSelector->fontFaceInvalidated();
335 return true; 335 return true;
336 } 336 }
337 if (isCSSConnectedFontFace(fontFace)) 337 if (isCSSConnectedFontFace(fontFace))
338 exceptionState.throwDOMException(InvalidModificationError, "Cannot delet e a CSS-connected FontFace."); 338 exceptionState.throwDOMException(InvalidModificationError, "Cannot delet e a CSS-connected FontFace.");
339 return false; 339 return false;
340 } 340 }
341 341
342 bool FontFaceSet::has(FontFace* fontFace, ExceptionState& exceptionState) const 342 bool FontFaceSet::has(FontFace* fontFace, ExceptionState& exceptionState) const
343 { 343 {
344 if (!inActiveDocumentContext()) 344 if (!inActiveDocumentContext())
345 return false; 345 return false;
346 if (!fontFace) { 346 if (!fontFace) {
347 exceptionState.throwTypeError("The argument is not a FontFace."); 347 exceptionState.throwTypeError("The argument is not a FontFace.");
348 return false; 348 return false;
349 } 349 }
350 return m_nonCSSConnectedFaces.contains(fontFace) || isCSSConnectedFontFace(f ontFace); 350 return m_nonCSSConnectedFaces.contains(fontFace) || isCSSConnectedFontFace(f ontFace);
351 } 351 }
352 352
353 const WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >& FontFaceSet::cssConn ectedFontFaceList() const 353 const WillBeHeapListHashSet<RefPtrWillBeMember<FontFace> >& FontFaceSet::cssConn ectedFontFaceList() const
354 { 354 {
355 Document* d = document(); 355 Document* d = document();
356 d->ensureStyleResolver(); // Flush pending style changes. 356 d->ensureStyleResolver(); // Flush pending style changes.
357 return d->styleEngine()->fontSelector()->fontFaceCache()->cssConnectedFontFa ces(); 357 return d->styleEngine().fontSelector()->fontFaceCache()->cssConnectedFontFac es();
358 } 358 }
359 359
360 bool FontFaceSet::isCSSConnectedFontFace(FontFace* fontFace) const 360 bool FontFaceSet::isCSSConnectedFontFace(FontFace* fontFace) const
361 { 361 {
362 return cssConnectedFontFaceList().contains(fontFace); 362 return cssConnectedFontFaceList().contains(fontFace);
363 } 363 }
364 364
365 void FontFaceSet::forEach(FontFaceSetForEachCallback* callback, const ScriptValu e& thisArg) const 365 void FontFaceSet::forEach(FontFaceSetForEachCallback* callback, const ScriptValu e& thisArg) const
366 { 366 {
367 forEachInternal(callback, &thisArg); 367 forEachInternal(callback, &thisArg);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 return ScriptPromise(); 442 return ScriptPromise();
443 443
444 Font font; 444 Font font;
445 if (!resolveFontStyle(fontString, font)) { 445 if (!resolveFontStyle(fontString, font)) {
446 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolv er::create(scriptState); 446 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolv er::create(scriptState);
447 ScriptPromise promise = resolver->promise(); 447 ScriptPromise promise = resolver->promise();
448 resolver->reject(DOMException::create(SyntaxError, "Could not resolve '" + fontString + "' as a font.")); 448 resolver->reject(DOMException::create(SyntaxError, "Could not resolve '" + fontString + "' as a font."));
449 return promise; 449 return promise;
450 } 450 }
451 451
452 FontFaceCache* fontFaceCache = document()->styleEngine()->fontSelector()->fo ntFaceCache(); 452 FontFaceCache* fontFaceCache = document()->styleEngine().fontSelector()->fon tFaceCache();
453 FontFaceArray faces; 453 FontFaceArray faces;
454 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next( )) { 454 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next( )) {
455 CSSSegmentedFontFace* segmentedFontFace = fontFaceCache->get(font.fontDe scription(), f->family()); 455 CSSSegmentedFontFace* segmentedFontFace = fontFaceCache->get(font.fontDe scription(), f->family());
456 if (segmentedFontFace) 456 if (segmentedFontFace)
457 segmentedFontFace->match(text, faces); 457 segmentedFontFace->match(text, faces);
458 } 458 }
459 459
460 RefPtrWillBeRawPtr<LoadFontPromiseResolver> resolver = LoadFontPromiseResolv er::create(faces, scriptState); 460 RefPtrWillBeRawPtr<LoadFontPromiseResolver> resolver = LoadFontPromiseResolv er::create(faces, scriptState);
461 ScriptPromise promise = resolver->promise(); 461 ScriptPromise promise = resolver->promise();
462 resolver->loadFonts(executionContext()); // After this, resolver->promise() may return null. 462 resolver->loadFonts(executionContext()); // After this, resolver->promise() may return null.
463 return promise; 463 return promise;
464 } 464 }
465 465
466 bool FontFaceSet::check(const String& fontString, const String& text, ExceptionS tate& exceptionState) 466 bool FontFaceSet::check(const String& fontString, const String& text, ExceptionS tate& exceptionState)
467 { 467 {
468 if (!inActiveDocumentContext()) 468 if (!inActiveDocumentContext())
469 return false; 469 return false;
470 470
471 Font font; 471 Font font;
472 if (!resolveFontStyle(fontString, font)) { 472 if (!resolveFontStyle(fontString, font)) {
473 exceptionState.throwDOMException(SyntaxError, "Could not resolve '" + fo ntString + "' as a font."); 473 exceptionState.throwDOMException(SyntaxError, "Could not resolve '" + fo ntString + "' as a font.");
474 return false; 474 return false;
475 } 475 }
476 476
477 CSSFontSelector* fontSelector = document()->styleEngine()->fontSelector(); 477 CSSFontSelector* fontSelector = document()->styleEngine().fontSelector();
478 FontFaceCache* fontFaceCache = fontSelector->fontFaceCache(); 478 FontFaceCache* fontFaceCache = fontSelector->fontFaceCache();
479 479
480 bool hasLoadedFaces = false; 480 bool hasLoadedFaces = false;
481 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next( )) { 481 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next( )) {
482 CSSSegmentedFontFace* face = fontFaceCache->get(font.fontDescription(), f->family()); 482 CSSSegmentedFontFace* face = fontFaceCache->get(font.fontDescription(), f->family());
483 if (face) { 483 if (face) {
484 if (!face->checkFont(text)) 484 if (!face->checkFont(text))
485 return false; 485 return false;
486 hasLoadedFaces = true; 486 hasLoadedFaces = true;
487 } 487 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 CSSPropertyValue(CSSPropertyFontStyle, *parsedStyle), 531 CSSPropertyValue(CSSPropertyFontStyle, *parsedStyle),
532 CSSPropertyValue(CSSPropertyFontVariant, *parsedStyle), 532 CSSPropertyValue(CSSPropertyFontVariant, *parsedStyle),
533 CSSPropertyValue(CSSPropertyFontWeight, *parsedStyle), 533 CSSPropertyValue(CSSPropertyFontWeight, *parsedStyle),
534 CSSPropertyValue(CSSPropertyFontSize, *parsedStyle), 534 CSSPropertyValue(CSSPropertyFontSize, *parsedStyle),
535 CSSPropertyValue(CSSPropertyLineHeight, *parsedStyle), 535 CSSPropertyValue(CSSPropertyLineHeight, *parsedStyle),
536 }; 536 };
537 StyleResolver& styleResolver = document()->ensureStyleResolver(); 537 StyleResolver& styleResolver = document()->ensureStyleResolver();
538 styleResolver.applyPropertiesToStyle(properties, WTF_ARRAY_LENGTH(properties ), style.get()); 538 styleResolver.applyPropertiesToStyle(properties, WTF_ARRAY_LENGTH(properties ), style.get());
539 539
540 font = style->font(); 540 font = style->font();
541 font.update(document()->styleEngine()->fontSelector()); 541 font.update(document()->styleEngine().fontSelector());
542 return true; 542 return true;
543 } 543 }
544 544
545 void FontFaceSet::FontLoadHistogram::updateStatus(FontFace* fontFace) 545 void FontFaceSet::FontLoadHistogram::updateStatus(FontFace* fontFace)
546 { 546 {
547 if (m_status == Reported) 547 if (m_status == Reported)
548 return; 548 return;
549 if (fontFace->hadBlankText()) 549 if (fontFace->hadBlankText())
550 m_status = HadBlankText; 550 m_status = HadBlankText;
551 else if (m_status == NoWebFonts) 551 else if (m_status == NoWebFonts)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 visitor->trace(m_loadedFonts); 594 visitor->trace(m_loadedFonts);
595 visitor->trace(m_failedFonts); 595 visitor->trace(m_failedFonts);
596 visitor->trace(m_nonCSSConnectedFaces); 596 visitor->trace(m_nonCSSConnectedFaces);
597 DocumentSupplement::trace(visitor); 597 DocumentSupplement::trace(visitor);
598 #endif 598 #endif
599 EventTargetWithInlineData::trace(visitor); 599 EventTargetWithInlineData::trace(visitor);
600 ActiveDOMObject::trace(visitor); 600 ActiveDOMObject::trace(visitor);
601 } 601 }
602 602
603 } // namespace blink 603 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/FontFace.cpp ('k') | Source/core/css/SelectorChecker.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698