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

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: Fix known issues 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());
Nate Chapin 2016/02/04 23:24:38 This fixes https://code.google.com/p/chromium/issu
97 if (resource)
98 m_fetched = FontResourceHelper::create(resource.release());
97 } else { 99 } else {
98 // FIXME: CSSFontFaceSrcValue::fetch is invoked when @font-face rule 100 // FIXME: CSSFontFaceSrcValue::fetch is invoked when @font-face rule
99 // is processed by StyleResolver / StyleEngine. 101 // is processed by StyleResolver / StyleEngine.
100 restoreCachedResourceIfNeeded(document); 102 restoreCachedResourceIfNeeded(document);
101 } 103 }
102 return m_fetched.get(); 104 return m_fetched->resource();
haraken 2016/02/04 23:56:30 With the above fix, m_fetched can be null here. Is
Nate Chapin 2016/02/06 00:34:06 Yep. Fixed.
103 } 105 }
104 106
105 void CSSFontFaceSrcValue::restoreCachedResourceIfNeeded(Document* document) 107 void CSSFontFaceSrcValue::restoreCachedResourceIfNeeded(Document* document)
106 { 108 {
107 ASSERT(m_fetched); 109 ASSERT(m_fetched);
108 ASSERT(document && document->fetcher()); 110 ASSERT(document && document->fetcher());
109 111
110 const String resourceURL = document->completeURL(m_resource); 112 const String resourceURL = document->completeURL(m_resource);
111 if (document->fetcher()->cachedResource(KURL(ParsedURLString, resourceURL))) 113 if (document->fetcher()->cachedResource(KURL(ParsedURLString, resourceURL)))
112 return; 114 return;
113 115
114 FetchRequest request(ResourceRequest(resourceURL), FetchInitiatorTypeNames:: css); 116 FetchRequest request(ResourceRequest(resourceURL), FetchInitiatorTypeNames:: css);
115 request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy); 117 request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy);
116 MixedContentChecker::shouldBlockFetch(document->frame(), m_fetched->lastReso urceRequest(), 118 MixedContentChecker::shouldBlockFetch(document->frame(), m_fetched->resource ()->lastResourceRequest(),
117 m_fetched->lastResourceRequest().url(), MixedContentChecker::SendReport) ; 119 m_fetched->resource()->lastResourceRequest().url(), MixedContentChecker: :SendReport);
118 document->fetcher()->requestLoadStarted(m_fetched.get(), request, ResourceFe tcher::ResourceLoadingFromCache); 120 document->fetcher()->requestLoadStarted(m_fetched->resource(), request, Reso urceFetcher::ResourceLoadingFromCache);
119 } 121 }
120 122
121 bool CSSFontFaceSrcValue::equals(const CSSFontFaceSrcValue& other) const 123 bool CSSFontFaceSrcValue::equals(const CSSFontFaceSrcValue& other) const
122 { 124 {
123 return m_isLocal == other.m_isLocal && m_format == other.m_format && m_resou rce == other.m_resource; 125 return m_isLocal == other.m_isLocal && m_format == other.m_format && m_resou rce == other.m_resource;
124 } 126 }
125 127
126 } // namespace blink 128 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698