Diff
Modified: branches/safari-534-branch/Source/WebCore/ChangeLog (87573 => 87574)
--- branches/safari-534-branch/Source/WebCore/ChangeLog 2011-05-27 21:37:09 UTC (rev 87573)
+++ branches/safari-534-branch/Source/WebCore/ChangeLog 2011-05-27 21:43:04 UTC (rev 87574)
@@ -1,5 +1,54 @@
2011-05-27 Mark Rowe <mr...@apple.com>
+ Merge r87460.
+
+ 2011-05-26 Stephanie Lewis <sle...@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=61345
+ part of <rdar://problem/8675177>
+ Roll back in now that the Crashes are fixed. ResourceResponseBase and ResourceResponse had two different definitions
+ for m_isNull. ResourceResponse treats m_isNull as meaning there isn't any platform ResourceResponse.
+ ResourceResponseBase treats m_isNull as meaning no fields have been initialized. Consolidate calls into ResourceResponseBase meaning.
+
+ 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 functionality so no new tests.
+
+ * 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:
+
+2011-05-27 Mark Rowe <mr...@apple.com>
+
Merge r87329.
2011-05-25 Stephanie Lewis <sle...@apple.com>
Modified: branches/safari-534-branch/Source/WebCore/platform/network/ResourceResponseBase.cpp (87573 => 87574)
--- branches/safari-534-branch/Source/WebCore/platform/network/ResourceResponseBase.cpp 2011-05-27 21:37:09 UTC (rev 87573)
+++ branches/safari-534-branch/Source/WebCore/platform/network/ResourceResponseBase.cpp 2011-05-27 21:43:04 UTC (rev 87574)
@@ -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: branches/safari-534-branch/Source/WebCore/platform/network/ResourceResponseBase.h (87573 => 87574)
--- branches/safari-534-branch/Source/WebCore/platform/network/ResourceResponseBase.h 2011-05-27 21:37:09 UTC (rev 87573)
+++ branches/safari-534-branch/Source/WebCore/platform/network/ResourceResponseBase.h 2011-05-27 21:43:04 UTC (rev 87574)
@@ -132,6 +132,7 @@
enum InitLevel {
Uninitialized,
CommonFieldsOnly,
+ CommonAndUncommonFields,
AllFields
};
Modified: branches/safari-534-branch/Source/WebCore/platform/network/cf/ResourceResponse.h (87573 => 87574)
--- branches/safari-534-branch/Source/WebCore/platform/network/cf/ResourceResponse.h 2011-05-27 21:37:09 UTC (rev 87573)
+++ branches/safari-534-branch/Source/WebCore/platform/network/cf/ResourceResponse.h 2011-05-27 21:43:04 UTC (rev 87574)
@@ -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: branches/safari-534-branch/Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp (87573 => 87574)
--- branches/safari-534-branch/Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp 2011-05-27 21:37:09 UTC (rev 87573)
+++ branches/safari-534-branch/Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp 2011-05-27 21:43:04 UTC (rev 87574)
@@ -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);
@@ -80,10 +80,8 @@
if (m_initLevel > initLevel)
return;
- if (m_isNull) {
- ASSERT(!m_cfResponse.get());
+ if (m_isNull || !m_cfResponse.get())
return;
- }
if (m_initLevel < CommonFieldsOnly && initLevel >= CommonFieldsOnly) {
m_url = CFURLResponseGetURL(m_cfResponse.get());
@@ -98,9 +96,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 +111,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 +126,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: branches/safari-534-branch/Source/WebCore/platform/network/mac/ResourceResponseMac.mm (87573 => 87574)
--- branches/safari-534-branch/Source/WebCore/platform/network/mac/ResourceResponseMac.mm 2011-05-27 21:37:09 UTC (rev 87573)
+++ branches/safari-534-branch/Source/WebCore/platform/network/mac/ResourceResponseMac.mm 2011-05-27 21:43:04 UTC (rev 87574)
@@ -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*);
@@ -69,11 +69,9 @@
if (m_initLevel >= initLevel)
return;
- if (m_isNull) {
- ASSERT(!m_nsResponse);
+ if (m_isNull || !m_nsResponse)
return;
- }
-
+
if (m_initLevel < CommonFieldsOnly && initLevel >= CommonFieldsOnly) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
@@ -88,8 +86,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 +103,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;
}