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