Diff
Modified: trunk/Source/WebCore/ChangeLog (87228 => 87229)
--- trunk/Source/WebCore/ChangeLog 2011-05-24 23:43:15 UTC (rev 87228)
+++ trunk/Source/WebCore/ChangeLog 2011-05-24 23:46:14 UTC (rev 87229)
@@ -1,3 +1,45 @@
+2011-05-24 Stephanie Lewis <[email protected]>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=61345
+ part of <rdar://problem/8675177>
+ Don't initialize ResourceResponse.m_suggestedFilename until we want to use it. Initializing it requires reading in and parsing a plist.
+ Add new initialization state CommonAndUncommonFields to ResourceResponse. This will be for all the header fields.
+ Move suggestedFilename initialization to AllFields so it is never initialized unless we ask for it.
+ Add "Content-Type" to common headers since it is looked for by every CSS sheet load.
+
+ No new tests because functionality has not changed.
+
+ * platform/network/ResourceResponseBase.cpp:
+ (WebCore::ResourceResponseBase::adopt):
+ (WebCore::ResourceResponseBase::suggestedFilename):
+ (WebCore::ResourceResponseBase::setSuggestedFilename):
+ (WebCore::ResourceResponseBase::httpStatusText):
+ (WebCore::ResourceResponseBase::setHTTPStatusText):
+ (WebCore::ResourceResponseBase::httpHeaderField):
+ (WebCore::ResourceResponseBase::setHTTPHeaderField):
+ (WebCore::ResourceResponseBase::httpHeaderFields):
+ (WebCore::ResourceResponseBase::isAttachment):
+ (WebCore::ResourceResponseBase::setLastModifiedDate):
+ (WebCore::ResourceResponseBase::lastModifiedDate):
+ (WebCore::ResourceResponseBase::wasCached):
+ (WebCore::ResourceResponseBase::connectionReused):
+ (WebCore::ResourceResponseBase::setConnectionReused):
+ (WebCore::ResourceResponseBase::connectionID):
+ (WebCore::ResourceResponseBase::setConnectionID):
+ (WebCore::ResourceResponseBase::resourceLoadTiming):
+ (WebCore::ResourceResponseBase::setResourceLoadTiming):
+ (WebCore::ResourceResponseBase::resourceLoadInfo):
+ (WebCore::ResourceResponseBase::setResourceLoadInfo):
+ * platform/network/ResourceResponseBase.h:
+ * platform/network/cf/ResourceResponse.h:
+ (WebCore::ResourceResponse::ResourceResponse):
+ * platform/network/cf/ResourceResponseCFNet.cpp:
+ (WebCore::ResourceResponse::platformLazyInit):
+ * platform/network/mac/ResourceResponseMac.mm:
+ (WebCore::ResourceResponse::platformLazyInit):
+
2011-05-24 Michael Saboff <[email protected]>
Reviewed by Geoffrey Garen.
Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp (87228 => 87229)
--- trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp 2011-05-24 23:43:15 UTC (rev 87228)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp 2011-05-24 23:46:14 UTC (rev 87229)
@@ -108,7 +108,7 @@
response->setHTTPStatusCode(data->m_httpStatusCode);
response->setHTTPStatusText(data->m_httpStatusText);
- response->lazyInit(AllFields);
+ response->lazyInit(CommonAndUncommonFields);
response->m_httpHeaderFields.adopt(data->m_httpHeaders.release());
response->setLastModifiedDate(data->m_lastModifiedDate);
response->setResourceLoadTiming(data->m_resourceLoadTiming.release());
@@ -205,14 +205,14 @@
// FIXME should compute this on the fly
const String& ResourceResponseBase::suggestedFilename() const
{
- lazyInit(CommonFieldsOnly);
+ lazyInit(AllFields);
return m_suggestedFilename;
}
void ResourceResponseBase::setSuggestedFilename(const String& suggestedName)
{
- lazyInit(CommonFieldsOnly);
+ lazyInit(AllFields);
m_isNull = false;
m_suggestedFilename = suggestedName;
@@ -234,14 +234,14 @@
const String& ResourceResponseBase::httpStatusText() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_httpStatusText;
}
void ResourceResponseBase::setHTTPStatusText(const String& statusText)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
m_httpStatusText = statusText;
}
@@ -255,7 +255,7 @@
if (!value.isEmpty())
return value;
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_httpHeaderFields.get(name);
}
@@ -269,14 +269,14 @@
if (!value.isEmpty())
return value;
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_httpHeaderFields.get(name);
}
void ResourceResponseBase::setHTTPHeaderField(const AtomicString& name, const String& value)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
DEFINE_STATIC_LOCAL(const AtomicString, ageHeader, ("age"));
DEFINE_STATIC_LOCAL(const AtomicString, cacheControlHeader, ("cache-control"));
@@ -300,7 +300,7 @@
const HTTPHeaderMap& ResourceResponseBase::httpHeaderFields() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_httpHeaderFields;
}
@@ -464,7 +464,7 @@
bool ResourceResponseBase::isAttachment() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("content-disposition"));
String value = m_httpHeaderFields.get(headerName);
@@ -478,21 +478,21 @@
void ResourceResponseBase::setLastModifiedDate(time_t lastModifiedDate)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
m_lastModifiedDate = lastModifiedDate;
}
time_t ResourceResponseBase::lastModifiedDate() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_lastModifiedDate;
}
bool ResourceResponseBase::wasCached() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_wasCached;
}
@@ -504,56 +504,56 @@
bool ResourceResponseBase::connectionReused() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_connectionReused;
}
void ResourceResponseBase::setConnectionReused(bool connectionReused)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
m_connectionReused = connectionReused;
}
unsigned ResourceResponseBase::connectionID() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_connectionID;
}
void ResourceResponseBase::setConnectionID(unsigned connectionID)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
m_connectionID = connectionID;
}
ResourceLoadTiming* ResourceResponseBase::resourceLoadTiming() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_resourceLoadTiming.get();
}
void ResourceResponseBase::setResourceLoadTiming(PassRefPtr<ResourceLoadTiming> resourceLoadTiming)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
m_resourceLoadTiming = resourceLoadTiming;
}
PassRefPtr<ResourceLoadInfo> ResourceResponseBase::resourceLoadInfo() const
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
return m_resourceLoadInfo.get();
}
void ResourceResponseBase::setResourceLoadInfo(PassRefPtr<ResourceLoadInfo> loadInfo)
{
- lazyInit(AllFields);
+ lazyInit(CommonAndUncommonFields);
m_resourceLoadInfo = loadInfo;
}
Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.h (87228 => 87229)
--- trunk/Source/WebCore/platform/network/ResourceResponseBase.h 2011-05-24 23:43:15 UTC (rev 87228)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.h 2011-05-24 23:46:14 UTC (rev 87229)
@@ -132,6 +132,7 @@
enum InitLevel {
Uninitialized,
CommonFieldsOnly,
+ CommonAndUncommonFields,
AllFields
};
Modified: trunk/Source/WebCore/platform/network/cf/ResourceResponse.h (87228 => 87229)
--- trunk/Source/WebCore/platform/network/cf/ResourceResponse.h 2011-05-24 23:43:15 UTC (rev 87228)
+++ trunk/Source/WebCore/platform/network/cf/ResourceResponse.h 2011-05-24 23:46:14 UTC (rev 87229)
@@ -44,7 +44,7 @@
class ResourceResponse : public ResourceResponseBase {
public:
ResourceResponse()
- : m_initLevel(AllFields)
+ : m_initLevel(CommonAndUncommonFields)
{
}
@@ -66,7 +66,7 @@
ResourceResponse(const KURL& url, const String& mimeType, long long expectedLength, const String& textEncodingName, const String& filename)
: ResourceResponseBase(url, mimeType, expectedLength, textEncodingName, filename)
- , m_initLevel(AllFields)
+ , m_initLevel(CommonAndUncommonFields)
{
}
Modified: trunk/Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp (87228 => 87229)
--- trunk/Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp 2011-05-24 23:43:15 UTC (rev 87228)
+++ trunk/Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp 2011-05-24 23:46:14 UTC (rev 87229)
@@ -43,7 +43,7 @@
namespace WebCore {
static CFStringRef const commonHeaderFields[] = {
- CFSTR("Age"), CFSTR("Cache-Control"), CFSTR("Date"), CFSTR("Etag"), CFSTR("Expires"), CFSTR("Last-Modified"), CFSTR("Pragma")
+ CFSTR("Age"), CFSTR("Cache-Control"), CFSTR("Content-Type"), CFSTR("Date"), CFSTR("Etag"), CFSTR("Expires"), CFSTR("Last-Modified"), CFSTR("Pragma")
};
static const int numCommonHeaderFields = sizeof(commonHeaderFields) / sizeof(CFStringRef);
@@ -98,9 +98,6 @@
m_lastModifiedDate = toTimeT(CFURLResponseGetLastModifiedDate(m_cfResponse.get()));
- RetainPtr<CFStringRef> suggestedFilename(AdoptCF, CFURLResponseCopySuggestedFilename(m_cfResponse.get()));
- m_suggestedFilename = suggestedFilename.get();
-
CFHTTPMessageRef httpResponse = CFURLResponseGetHTTPResponse(m_cfResponse.get());
if (httpResponse) {
m_httpStatusCode = CFHTTPMessageGetResponseStatusCode(httpResponse);
@@ -116,7 +113,7 @@
m_httpStatusCode = 0;
}
- if (m_initLevel < AllFields && initLevel >= AllFields) {
+ if (m_initLevel < CommonAndUncommonFields && initLevel >= CommonAndUncommonFields) {
CFHTTPMessageRef httpResponse = CFURLResponseGetHTTPResponse(m_cfResponse.get());
if (httpResponse) {
RetainPtr<CFStringRef> statusLine(AdoptCF, CFHTTPMessageCopyResponseStatusLine(httpResponse));
@@ -131,6 +128,11 @@
m_httpHeaderFields.set((CFStringRef)keys[i], (CFStringRef)values[i]);
}
}
+
+ if (m_initLevel < AllFields && initLevel >= AllFields) {
+ RetainPtr<CFStringRef> suggestedFilename(AdoptCF, CFURLResponseCopySuggestedFilename(m_cfResponse.get()));
+ m_suggestedFilename = suggestedFilename.get();
+ }
m_initLevel = initLevel;
}
Modified: trunk/Source/WebCore/platform/network/mac/ResourceResponseMac.mm (87228 => 87229)
--- trunk/Source/WebCore/platform/network/mac/ResourceResponseMac.mm 2011-05-24 23:43:15 UTC (rev 87228)
+++ trunk/Source/WebCore/platform/network/mac/ResourceResponseMac.mm 2011-05-24 23:46:14 UTC (rev 87229)
@@ -44,7 +44,7 @@
namespace WebCore {
static NSString* const commonHeaderFields[] = {
- @"Age", @"Cache-Control", @"Date", @"Etag", @"Expires", @"Last-Modified", @"Pragma"
+ @"Age", @"Cache-Control", @"Content-Type", @"Date", @"Etag", @"Expires", @"Last-Modified", @"Pragma"
};
static const int numCommonHeaderFields = sizeof(commonHeaderFields) / sizeof(AtomicString*);
@@ -88,8 +88,6 @@
if (textEncodingNameLength >= 2 && m_textEncodingName[0U] == '"' && m_textEncodingName[textEncodingNameLength - 1] == '"')
m_textEncodingName = m_textEncodingName.substring(1, textEncodingNameLength - 2);
- m_suggestedFilename = [m_nsResponse.get() suggestedFilename];
-
if ([m_nsResponse.get() isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)m_nsResponse.get();
@@ -107,24 +105,29 @@
[pool drain];
}
- if (m_initLevel < AllFields && initLevel >= AllFields && [m_nsResponse.get() isKindOfClass:[NSHTTPURLResponse class]]) {
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+ if (m_initLevel < CommonAndUncommonFields && initLevel >= CommonAndUncommonFields) {
+ if ([m_nsResponse.get() isKindOfClass:[NSHTTPURLResponse class]]) {
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)m_nsResponse.get();
+ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)m_nsResponse.get();
- RetainPtr<NSString> httpStatusLine(AdoptNS, wkCopyNSURLResponseStatusLine(m_nsResponse.get()));
- if (httpStatusLine)
- m_httpStatusText = extractReasonPhraseFromHTTPStatusLine(httpStatusLine.get());
- else
- m_httpStatusText = "OK";
+ RetainPtr<NSString> httpStatusLine(AdoptNS, wkCopyNSURLResponseStatusLine(m_nsResponse.get()));
+ if (httpStatusLine)
+ m_httpStatusText = extractReasonPhraseFromHTTPStatusLine(httpStatusLine.get());
+ else
+ m_httpStatusText = "OK";
- NSDictionary *headers = [httpResponse allHeaderFields];
- NSEnumerator *e = [headers keyEnumerator];
- while (NSString *name = [e nextObject])
- m_httpHeaderFields.set(name, [headers objectForKey:name]);
-
- [pool drain];
+ NSDictionary *headers = [httpResponse allHeaderFields];
+ NSEnumerator *e = [headers keyEnumerator];
+ while (NSString *name = [e nextObject])
+ m_httpHeaderFields.set(name, [headers objectForKey:name]);
+
+ [pool drain];
+ }
}
+
+ if (m_initLevel < AllFields && initLevel >= AllFields)
+ m_suggestedFilename = [m_nsResponse.get() suggestedFilename];
m_initLevel = initLevel;
}