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

Side by Side Diff: third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.cpp

Issue 1667843003: Make Resource RefCountedWillBeGarbageCollectedFinalized, attempt #2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + address review comments Created 4 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2010 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 if (!m_format.isEmpty()) { 65 if (!m_format.isEmpty()) {
66 result.appendLiteral(" format("); 66 result.appendLiteral(" format(");
67 result.append(serializeString(m_format)); 67 result.append(serializeString(m_format));
68 result.appendLiteral(")"); 68 result.appendLiteral(")");
69 } 69 }
70 return result.toString(); 70 return result.toString();
71 } 71 }
72 72
73 bool CSSFontFaceSrcValue::hasFailedOrCanceledSubresources() const 73 bool CSSFontFaceSrcValue::hasFailedOrCanceledSubresources() const
74 { 74 {
75 return m_fetched && m_fetched->loadFailedOrCanceled(); 75 return m_fetched && m_fetched->resource()->loadFailedOrCanceled();
76 } 76 }
77 77
78 static void setCrossOriginAccessControl(FetchRequest& request, SecurityOrigin* s ecurityOrigin) 78 static void setCrossOriginAccessControl(FetchRequest& request, SecurityOrigin* s ecurityOrigin)
79 { 79 {
80 // Local fonts are accessible from file: URLs even when 80 // Local fonts are accessible from file: URLs even when
81 // allowFileAccessFromFileURLs is false. 81 // allowFileAccessFromFileURLs is false.
82 if (request.url().isLocalFile()) 82 if (request.url().isLocalFile())
83 return; 83 return;
84 84
85 request.setCrossOriginAccessControl(securityOrigin, CrossOriginAttributeAnon ymous); 85 request.setCrossOriginAccessControl(securityOrigin, CrossOriginAttributeAnon ymous);
86 } 86 }
87 87
88 FontResource* CSSFontFaceSrcValue::fetch(Document* document) 88 FontResource* CSSFontFaceSrcValue::fetch(Document* document)
89 { 89 {
90 if (!m_fetched) { 90 if (!m_fetched) {
91 FetchRequest request(ResourceRequest(document->completeURL(m_resource)), FetchInitiatorTypeNames::css); 91 FetchRequest request(ResourceRequest(document->completeURL(m_resource)), FetchInitiatorTypeNames::css);
92 request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy); 92 request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy);
93 SecurityOrigin* securityOrigin = document->securityOrigin(); 93 SecurityOrigin* securityOrigin = document->securityOrigin();
94 setCrossOriginAccessControl(request, securityOrigin); 94 setCrossOriginAccessControl(request, securityOrigin);
95 request.mutableResourceRequest().setHTTPReferrer(SecurityPolicy::generat eReferrer(m_referrer.referrerPolicy, request.url(), m_referrer.referrer)); 95 request.mutableResourceRequest().setHTTPReferrer(SecurityPolicy::generat eReferrer(m_referrer.referrerPolicy, request.url(), m_referrer.referrer));
96 m_fetched = FontResource::fetch(request, document->fetcher()); 96 RefPtrWillBeRawPtr<FontResource> resource = FontResource::fetch(request, document->fetcher());
97 if (!resource)
98 return nullptr;
99 m_fetched = FontResourceHelper::create(resource.release());
97 } else { 100 } else {
98 // FIXME: CSSFontFaceSrcValue::fetch is invoked when @font-face rule 101 // FIXME: CSSFontFaceSrcValue::fetch is invoked when @font-face rule
99 // is processed by StyleResolver / StyleEngine. 102 // is processed by StyleResolver / StyleEngine.
100 restoreCachedResourceIfNeeded(document); 103 restoreCachedResourceIfNeeded(document);
101 } 104 }
102 return m_fetched.get(); 105 return m_fetched->resource();
103 } 106 }
104 107
105 void CSSFontFaceSrcValue::restoreCachedResourceIfNeeded(Document* document) 108 void CSSFontFaceSrcValue::restoreCachedResourceIfNeeded(Document* document)
106 { 109 {
107 ASSERT(m_fetched); 110 ASSERT(m_fetched);
108 ASSERT(document && document->fetcher()); 111 ASSERT(document && document->fetcher());
109 112
110 const String resourceURL = document->completeURL(m_resource); 113 const String resourceURL = document->completeURL(m_resource);
111 if (document->fetcher()->cachedResource(KURL(ParsedURLString, resourceURL))) 114 if (document->fetcher()->cachedResource(KURL(ParsedURLString, resourceURL)))
112 return; 115 return;
113 116
114 FetchRequest request(ResourceRequest(resourceURL), FetchInitiatorTypeNames:: css); 117 FetchRequest request(ResourceRequest(resourceURL), FetchInitiatorTypeNames:: css);
115 request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy); 118 request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy);
116 MixedContentChecker::shouldBlockFetch(document->frame(), m_fetched->lastReso urceRequest(), 119 MixedContentChecker::shouldBlockFetch(document->frame(), m_fetched->resource ()->lastResourceRequest(),
117 m_fetched->lastResourceRequest().url(), MixedContentChecker::SendReport) ; 120 m_fetched->resource()->lastResourceRequest().url(), MixedContentChecker: :SendReport);
118 document->fetcher()->requestLoadStarted(m_fetched.get(), request, ResourceFe tcher::ResourceLoadingFromCache); 121 document->fetcher()->requestLoadStarted(m_fetched->resource(), request, Reso urceFetcher::ResourceLoadingFromCache);
119 } 122 }
120 123
121 bool CSSFontFaceSrcValue::equals(const CSSFontFaceSrcValue& other) const 124 bool CSSFontFaceSrcValue::equals(const CSSFontFaceSrcValue& other) const
122 { 125 {
123 return m_isLocal == other.m_isLocal && m_format == other.m_format && m_resou rce == other.m_resource; 126 return m_isLocal == other.m_isLocal && m_format == other.m_format && m_resou rce == other.m_resource;
124 } 127 }
125 128
126 } // namespace blink 129 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.h ('k') | third_party/WebKit/Source/core/css/CSSImageSetValue.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698