Title: [172502] trunk/Source
Revision
172502
Author
[email protected]
Date
2014-08-12 15:50:40 -0700 (Tue, 12 Aug 2014)

Log Message

Cached file backed resources don't make it to the Web Process when NETWORK_CFDATA_ARRAY_CALLBACK is enabled
https://bugs.webkit.org/show_bug.cgi?id=135727
<rdar://problem/17947880>

Reviewed by Darin Adler.

Source/WebCore:

Add SharedBuffer::existingCFData() which returns CFDataRef if it has one. Refactor
this code out of createCFData().

* WebCore.exp.in:
* platform/SharedBuffer.h:
* platform/mac/SharedBufferMac.mm:
(WebCore::SharedBuffer::existingCFData): Added.
(WebCore::SharedBuffer::createCFData):

Source/WebKit2:

tryGetShareableHandleFromSharedBuffer() assumed that we have a file backed resource only if
we had a CFDataRef (platformData()) in SharedBuffer. This is wrong when we use the data
array callbacks since the file backed buffer could be in the data array. Instead of relying
on hasPlatformData(), explicitly ask the SharedBuffer to give us a CFDataRef if it has one
so that SharedBuffer can take care of the data array case.

* NetworkProcess/mac/NetworkResourceLoaderMac.mm:
(WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (172501 => 172502)


--- trunk/Source/WebCore/ChangeLog	2014-08-12 22:48:36 UTC (rev 172501)
+++ trunk/Source/WebCore/ChangeLog	2014-08-12 22:50:40 UTC (rev 172502)
@@ -1,3 +1,20 @@
+2014-08-12  Pratik Solanki  <[email protected]>
+
+        Cached file backed resources don't make it to the Web Process when NETWORK_CFDATA_ARRAY_CALLBACK is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=135727
+        <rdar://problem/17947880>
+
+        Reviewed by Darin Adler.
+
+        Add SharedBuffer::existingCFData() which returns CFDataRef if it has one. Refactor
+        this code out of createCFData().
+
+        * WebCore.exp.in:
+        * platform/SharedBuffer.h:
+        * platform/mac/SharedBufferMac.mm:
+        (WebCore::SharedBuffer::existingCFData): Added.
+        (WebCore::SharedBuffer::createCFData):
+
 2014-08-12  Tim Horton  <[email protected]>
 
         Small region (~1px tall) where you get the selection button instead of the phone number overlay

Modified: trunk/Source/WebCore/WebCore.exp.in (172501 => 172502)


--- trunk/Source/WebCore/WebCore.exp.in	2014-08-12 22:48:36 UTC (rev 172501)
+++ trunk/Source/WebCore/WebCore.exp.in	2014-08-12 22:50:40 UTC (rev 172502)
@@ -242,6 +242,7 @@
 __ZN7WebCore12SharedBuffer11adoptVectorERN3WTF6VectorIcLm0ENS1_15CrashOnOverflowEEE
 __ZN7WebCore12SharedBuffer12createCFDataEv
 __ZN7WebCore12SharedBuffer12createNSDataEv
+__ZN7WebCore12SharedBuffer14existingCFDataEv
 __ZN7WebCore12SharedBuffer24createWithContentsOfFileERKN3WTF6StringE
 __ZN7WebCore12SharedBuffer6appendEPKcj
 __ZN7WebCore12SharedBuffer6appendEPS0_

Modified: trunk/Source/WebCore/platform/SharedBuffer.h (172501 => 172502)


--- trunk/Source/WebCore/platform/SharedBuffer.h	2014-08-12 22:48:36 UTC (rev 172501)
+++ trunk/Source/WebCore/platform/SharedBuffer.h	2014-08-12 22:50:40 UTC (rev 172502)
@@ -74,6 +74,7 @@
 #endif
 #if USE(CF)
     RetainPtr<CFDataRef> createCFData();
+    CFDataRef existingCFData();
     static PassRefPtr<SharedBuffer> wrapCFData(CFDataRef);
 #endif
 

Modified: trunk/Source/WebCore/platform/mac/SharedBufferMac.mm (172501 => 172502)


--- trunk/Source/WebCore/platform/mac/SharedBufferMac.mm	2014-08-12 22:48:36 UTC (rev 172501)
+++ trunk/Source/WebCore/platform/mac/SharedBufferMac.mm	2014-08-12 22:50:40 UTC (rev 172502)
@@ -128,16 +128,24 @@
     return adoptNS((NSData *)createCFData().leakRef());
 }
 
-RetainPtr<CFDataRef> SharedBuffer::createCFData()
+CFDataRef SharedBuffer::existingCFData()
 {
     if (m_cfData)
-        return m_cfData;
+        return m_cfData.get();
 
 #if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
     if (m_dataArray.size() == 1)
-        return m_dataArray.at(0);
+        return m_dataArray.at(0).get();
 #endif
 
+    return nullptr;
+}
+
+RetainPtr<CFDataRef> SharedBuffer::createCFData()
+{
+    if (CFDataRef cfData = existingCFData())
+        return cfData;
+
 #if ENABLE(DISK_IMAGE_CACHE)
     if (isMemoryMapped())
         return adoptCF((CFDataRef)adoptNS([[WebCoreSharedBufferData alloc] initWithMemoryMappedSharedBuffer:*this]).leakRef());

Modified: trunk/Source/WebKit2/ChangeLog (172501 => 172502)


--- trunk/Source/WebKit2/ChangeLog	2014-08-12 22:48:36 UTC (rev 172501)
+++ trunk/Source/WebKit2/ChangeLog	2014-08-12 22:50:40 UTC (rev 172502)
@@ -1,3 +1,20 @@
+2014-08-12  Pratik Solanki  <[email protected]>
+
+        Cached file backed resources don't make it to the Web Process when NETWORK_CFDATA_ARRAY_CALLBACK is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=135727
+        <rdar://problem/17947880>
+
+        Reviewed by Darin Adler.
+
+        tryGetShareableHandleFromSharedBuffer() assumed that we have a file backed resource only if
+        we had a CFDataRef (platformData()) in SharedBuffer. This is wrong when we use the data
+        array callbacks since the file backed buffer could be in the data array. Instead of relying
+        on hasPlatformData(), explicitly ask the SharedBuffer to give us a CFDataRef if it has one
+        so that SharedBuffer can take care of the data array case.
+
+        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
+        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):
+
 2014-08-12  Alexey Proskuryakov  <[email protected]>
 
         REGRESSION: WebContent process has a sandbox extension for the entirety of user's temp directory

Modified: trunk/Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm (172501 => 172502)


--- trunk/Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm	2014-08-12 22:48:36 UTC (rev 172501)
+++ trunk/Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm	2014-08-12 22:50:40 UTC (rev 172502)
@@ -93,14 +93,14 @@
     if (!cache)
         return;
 
-    if (!buffer->hasPlatformData())
+    CFDataRef data = ""
+    if (!data)
         return;
 
-    RetainPtr<CFDataRef> data = ""
-    if (_CFURLCacheIsResponseDataMemMapped(cache, data.get()) == kCFBooleanFalse)
+    if (_CFURLCacheIsResponseDataMemMapped(cache, data) == kCFBooleanFalse)
         return;
 
-    tryGetShareableHandleFromCFData(handle, data.get());
+    tryGetShareableHandleFromCFData(handle, data);
 }
 #endif // __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to