12bde8e466a4451c7319e3a072d118917957d6554Steve Block/* 22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved. 32bde8e466a4451c7319e3a072d118917957d6554Steve Block * 42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without 52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions 62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met: 72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright 82bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer. 92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright 102bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer in the 112bde8e466a4451c7319e3a072d118917957d6554Steve Block * documentation and/or other materials provided with the distribution. 122bde8e466a4451c7319e3a072d118917957d6554Steve Block * 132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 142bde8e466a4451c7319e3a072d118917957d6554Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 152bde8e466a4451c7319e3a072d118917957d6554Steve Block * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 162bde8e466a4451c7319e3a072d118917957d6554Steve Block * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 172bde8e466a4451c7319e3a072d118917957d6554Steve Block * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 182bde8e466a4451c7319e3a072d118917957d6554Steve Block * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 192bde8e466a4451c7319e3a072d118917957d6554Steve Block * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 202bde8e466a4451c7319e3a072d118917957d6554Steve Block * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 212bde8e466a4451c7319e3a072d118917957d6554Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 222bde8e466a4451c7319e3a072d118917957d6554Steve Block * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 232bde8e466a4451c7319e3a072d118917957d6554Steve Block */ 242bde8e466a4451c7319e3a072d118917957d6554Steve Block 252bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "config.h" 262bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "SubresourceLoader.h" 272bde8e466a4451c7319e3a072d118917957d6554Steve Block 282bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "SubresourceLoaderClient.h" 292bde8e466a4451c7319e3a072d118917957d6554Steve Block 302bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebCore { 312bde8e466a4451c7319e3a072d118917957d6554Steve Block 322bde8e466a4451c7319e3a072d118917957d6554Steve Block#if HAVE(CFNETWORK_DATA_ARRAY_CALLBACK) 332bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid SubresourceLoader::didReceiveDataArray(CFArrayRef dataArray) 342bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 352bde8e466a4451c7319e3a072d118917957d6554Steve Block // Reference the object in this method since the additional processing can do 362bde8e466a4451c7319e3a072d118917957d6554Steve Block // anything including removing the last reference to this object; one example of this is 3266216. 372bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<SubresourceLoader> protect(this); 382bde8e466a4451c7319e3a072d118917957d6554Steve Block 392bde8e466a4451c7319e3a072d118917957d6554Steve Block ResourceLoader::didReceiveDataArray(dataArray); 402bde8e466a4451c7319e3a072d118917957d6554Steve Block 412bde8e466a4451c7319e3a072d118917957d6554Steve Block // A subresource loader does not load multipart sections progressively. 422bde8e466a4451c7319e3a072d118917957d6554Steve Block // So don't deliver any data to the loader yet. 432bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_loadingMultipartContent && m_client) { 442bde8e466a4451c7319e3a072d118917957d6554Steve Block CFIndex arrayCount = CFArrayGetCount(dataArray); 452bde8e466a4451c7319e3a072d118917957d6554Steve Block for (CFIndex i = 0; i < arrayCount; ++i) { 462bde8e466a4451c7319e3a072d118917957d6554Steve Block CFDataRef data = reinterpret_cast<CFDataRef>(CFArrayGetValueAtIndex(dataArray, i)); 472bde8e466a4451c7319e3a072d118917957d6554Steve Block m_client->didReceiveData(this, reinterpret_cast<const char *>(CFDataGetBytePtr(data)), static_cast<int>(CFDataGetLength(data))); 482bde8e466a4451c7319e3a072d118917957d6554Steve Block } 492bde8e466a4451c7319e3a072d118917957d6554Steve Block } 502bde8e466a4451c7319e3a072d118917957d6554Steve Block} 512bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 522bde8e466a4451c7319e3a072d118917957d6554Steve Block 532bde8e466a4451c7319e3a072d118917957d6554Steve Block} 54