Title: [171809] branches/safari-600.1-branch/Source/WebCore
Revision
171809
Author
[email protected]
Date
2014-07-30 13:31:05 -0700 (Wed, 30 Jul 2014)

Log Message

Merged r171766.  <rdar://problem/17824645>

Modified Paths

Diff

Modified: branches/safari-600.1-branch/Source/WebCore/ChangeLog (171808 => 171809)


--- branches/safari-600.1-branch/Source/WebCore/ChangeLog	2014-07-30 20:29:08 UTC (rev 171808)
+++ branches/safari-600.1-branch/Source/WebCore/ChangeLog	2014-07-30 20:31:05 UTC (rev 171809)
@@ -1,5 +1,37 @@
 2014-07-30  Lucas Forschler  <[email protected]>
 
+        Merge r171766
+
+    2014-07-29  Pratik Solanki  <[email protected]>
+
+            [iOS] REGRESSION(r171526): PDF documents fail to load in WebKit1 with disk image caching enabled
+            https://bugs.webkit.org/show_bug.cgi?id=135359
+            <rdar://problem/17824645>
+
+            Reviewed by Darin Adler.
+
+            r171526 broke the case where we have a memory mapped file from the DiskImageCache in the
+            SharedBuffer. In such a case, m_buffer is empty and createCFData() returned an
+            WebCoreSharedBufferData with an empty buffer.
+
+            Fix this by taking the easy route of bringing back the old code for the disk image cache
+            file backed case. In the long run we probably want to remove the iOS specific disk image
+            cache anyway.
+
+            Review also uncovered another bug in r171526 where we were balancing an Objective-C alloc
+            with a CFRelease which is incorrect when running under GC. Fix that by using adoptNS along
+            with adoptCF which is what the code did before.
+
+            No new tests because the bug only occurs on device and we can't run tests on device yet.
+
+            * platform/mac/SharedBufferMac.mm:
+            (-[WebCoreSharedBufferData initWithDiskImageSharedBuffer:]):
+            (-[WebCoreSharedBufferData length]):
+            (-[WebCoreSharedBufferData bytes]):
+            (WebCore::SharedBuffer::createCFData):
+
+2014-07-30  Lucas Forschler  <[email protected]>
+
         Merge r171749
 
     2014-07-29  Brady Eidson  <[email protected]>

Modified: branches/safari-600.1-branch/Source/WebCore/platform/mac/SharedBufferMac.mm (171808 => 171809)


--- branches/safari-600.1-branch/Source/WebCore/platform/mac/SharedBufferMac.mm	2014-07-30 20:29:08 UTC (rev 171808)
+++ branches/safari-600.1-branch/Source/WebCore/platform/mac/SharedBufferMac.mm	2014-07-30 20:31:05 UTC (rev 171809)
@@ -36,10 +36,16 @@
 
 @interface WebCoreSharedBufferData : NSData
 {
-    RefPtr<SharedBuffer::DataBuffer> buffer;
+    RefPtr<SharedBuffer::DataBuffer> sharedBufferDataBuffer;
+#if ENABLE(DISK_IMAGE_CACHE)
+    RefPtr<SharedBuffer> sharedBuffer;
+#endif
 }
 
 - (id)initWithSharedBufferDataBuffer:(SharedBuffer::DataBuffer*)dataBuffer;
+#if ENABLE(DISK_IMAGE_CACHE)
+- (id)initWithMemoryMappedSharedBuffer:(SharedBuffer&)memoryMappedSharedBuffer;
+#endif
 @end
 
 @implementation WebCoreSharedBufferData
@@ -71,19 +77,41 @@
     self = [super init];
     
     if (self)
-        buffer = dataBuffer;
+        sharedBufferDataBuffer = dataBuffer;
 
     return self;
 }
 
+#if ENABLE(DISK_IMAGE_CACHE)
+- (id)initWithMemoryMappedSharedBuffer:(SharedBuffer&)memoryMappedSharedBuffer
+{
+    ASSERT(memoryMappedSharedBuffer.isMemoryMapped());
+    self = [super init];
+
+    if (!self)
+        return nil;
+
+    sharedBuffer = &memoryMappedSharedBuffer;
+    return self;
+}
+#endif
+
 - (NSUInteger)length
 {
-    return buffer->data.size();
+#if ENABLE(DISK_IMAGE_CACHE)
+    if (sharedBuffer)
+        return sharedBuffer->size();
+#endif
+    return sharedBufferDataBuffer->data.size();
 }
 
 - (const void *)bytes
 {
-    return reinterpret_cast<const void*>(buffer->data.data());
+#if ENABLE(DISK_IMAGE_CACHE)
+    if (sharedBuffer)
+        return sharedBuffer->data();
+#endif
+    return sharedBufferDataBuffer->data.data();
 }
 
 @end
@@ -110,14 +138,19 @@
         return m_dataArray.at(0);
 #endif
 
+#if ENABLE(DISK_IMAGE_CACHE)
+    if (isMemoryMapped())
+        return adoptCF((CFDataRef)adoptNS([[WebCoreSharedBufferData alloc] initWithMemoryMappedSharedBuffer:*this]).leakRef());
+#endif
+
     data(); // Force data into m_buffer from segments or data array.
     if (hasPurgeableBuffer()) {
         RefPtr<SharedBuffer::DataBuffer> copiedBuffer = adoptRef(new DataBuffer);
         copiedBuffer->data.append(data(), size());
-        return adoptCF(reinterpret_cast<CFDataRef>([[WebCoreSharedBufferData alloc] initWithSharedBufferDataBuffer:copiedBuffer.get()]));
+        return adoptCF((CFDataRef)adoptNS([[WebCoreSharedBufferData alloc] initWithSharedBufferDataBuffer:copiedBuffer.get()]).leakRef());
     }
 
-    return adoptCF(reinterpret_cast<CFDataRef>([[WebCoreSharedBufferData alloc] initWithSharedBufferDataBuffer:m_buffer.get()]));
+    return adoptCF((CFDataRef)adoptNS([[WebCoreSharedBufferData alloc] initWithSharedBufferDataBuffer:m_buffer.get()]).leakRef());
 }
 
 PassRefPtr<SharedBuffer> SharedBuffer::createWithContentsOfFile(const String& filePath)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to