18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ResourceLoader_h 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ResourceLoader_h 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceHandleClient.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceRequest.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceResponse.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AuthenticationChallenge.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "KURL.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Forward.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class ApplicationCacheHost; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class DocumentLoader; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Frame; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class FrameLoader; 4721939df44de1705786c545cd1bf519d47250322dBen Murdoch class ProtectionSpace; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class ResourceHandle; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class SharedBuffer; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class ResourceLoader : public RefCounted<ResourceLoader>, protected ResourceHandleClient { 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~ResourceLoader(); 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void cancel(); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool init(const ResourceRequest&); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FrameLoader* frameLoader() const; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DocumentLoader* documentLoader() const { return m_documentLoader.get(); } 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void cancel(const ResourceError&); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceError cancelledError(); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceError blockedError(); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceError cannotShowURLError(); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void setDefersLoading(bool); 68a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch#if PLATFORM(ANDROID) 69a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch// TODO: This needs upstreaming to WebKit. 70a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch virtual void pauseLoad(bool); 71a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch#endif 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setIdentifier(unsigned long identifier) { m_identifier = identifier; } 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned long identifier() const { return m_identifier; } 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void releaseResources(); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ResourceResponse& response() const; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void addData(const char*, int, bool allAtOnce); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual PassRefPtr<SharedBuffer> resourceData(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void clearResourceData(); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didReceiveResponse(const ResourceResponse&); 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void didReceiveData(const char*, int, long long encodedDataLength, bool allAtOnce); 876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void didReceiveCachedMetadata(const char*, int) { } 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void willStopBufferingData(const char*, int); 8968513a70bcd92384395513322f1b801e7bf9c729Steve Block virtual void didFinishLoading(double finishTime); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didFail(const ResourceError&); 912bde8e466a4451c7319e3a072d118917957d6554Steve Block#if HAVE(CFNETWORK_DATA_ARRAY_CALLBACK) 922bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didReceiveDataArray(CFArrayRef dataArray); 932bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool shouldUseCredentialStorage(); 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didReceiveAuthenticationChallenge(const AuthenticationChallenge&); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void didCancelAuthenticationChallenge(const AuthenticationChallenge&); 9821939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(PROTECTION_SPACE_AUTH_CALLBACK) 9921939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool canAuthenticateAgainstProtectionSpace(const ProtectionSpace&); 10021939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void receivedCancellation(const AuthenticationChallenge&); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // ResourceHandleClient 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse& redirectResponse); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&); 1072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void didReceiveData(ResourceHandle*, const char*, int, int encodedDataLength); 1086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void didReceiveCachedMetadata(ResourceHandle*, const char* data, int length) { didReceiveCachedMetadata(data, length); } 10968513a70bcd92384395513322f1b801e7bf9c729Steve Block virtual void didFinishLoading(ResourceHandle*, double finishTime); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didFail(ResourceHandle*, const ResourceError&); 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void wasBlocked(ResourceHandle*); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void cannotShowURL(ResourceHandle*); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void willStopBufferingData(ResourceHandle*, const char* data, int length) { willStopBufferingData(data, length); } 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool shouldUseCredentialStorage(ResourceHandle*) { return shouldUseCredentialStorage(); } 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didReceiveAuthenticationChallenge(challenge); } 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) { didCancelAuthenticationChallenge(challenge); } 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block#if HAVE(CFNETWORK_DATA_ARRAY_CALLBACK) 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didReceiveDataArray(ResourceHandle*, CFArrayRef dataArray); 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 12021939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(PROTECTION_SPACE_AUTH_CALLBACK) 12121939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace& protectionSpace) { return canAuthenticateAgainstProtectionSpace(protectionSpace); } 12221939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void receivedCancellation(ResourceHandle*, const AuthenticationChallenge& challenge) { receivedCancellation(challenge); } 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void willCacheResponse(ResourceHandle*, CacheStoragePolicy&); 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC) 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual NSCachedURLResponse* willCacheResponse(ResourceHandle*, NSCachedURLResponse*); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(CFNETWORK) 1298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool shouldCacheResponse(ResourceHandle*, CFCachedURLResponseRef); 1308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 131e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(BLOB) 132e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual AsyncFileStream* createAsyncFileStream(FileStreamClient*); 133e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner const KURL& url() const { return m_request.url(); } 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceHandle* handle() const { return m_handle.get(); } 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; } 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool reachedTerminalState() const { return m_reachedTerminalState; } 1406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setShouldBufferData(bool shouldBufferData); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project protected: 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceLoader(Frame*, bool sendResourceLoadCallbacks, bool shouldContentSniff); 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(OFFLINE_WEB_APPLICATIONS) 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch friend class ApplicationCacheHost; // for access to request() 148635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 1496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner friend class ResourceLoadScheduler; // for access to start() 1506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // start() actually sends the load to the network (unless the load is being 1516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // deferred) and should only be called by ResourceLoadScheduler or setDefersLoading(). 1526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void start(); 1536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didCancel(const ResourceError&); 15568513a70bcd92384395513322f1b801e7bf9c729Steve Block void didFinishLoadingOnePart(double finishTime); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const ResourceRequest& request() const { return m_request; } 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool cancelled() const { return m_cancelled; } 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool defersLoading() const { return m_defersLoading; } 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<ResourceHandle> m_handle; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<Frame> m_frame; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<DocumentLoader> m_documentLoader; 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ResourceResponse m_response; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceRequest m_request; 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<SharedBuffer> m_resourceData; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned long m_identifier; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_reachedTerminalState; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_cancelled; 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_calledDidFinishLoad; 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_sendResourceLoadCallbacks; 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_shouldContentSniff; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_shouldBufferData; 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_defersLoading; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceRequest m_deferredRequest; 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 186