Title: [87229] trunk/Source/WebCore
Revision
87229
Author
[email protected]
Date
2011-05-24 16:46:14 -0700 (Tue, 24 May 2011)

Log Message

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.

Reviewed by Geoff Garen.

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):

Modified Paths

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;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to