18f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2009 Apple Inc. All Rights Reserved. 32fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2009, 2011 Google Inc. All Rights Reserved. 48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 58f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Redistribution and use in source and binary forms, with or without 68f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * modification, are permitted provided that the following conditions 78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * are met: 88f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 1. Redistributions of source code must retain the above copyright 98f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * notice, this list of conditions and the following disclaimer. 108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 2. Redistributions in binary form must reproduce the above copyright 118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * notice, this list of conditions and the following disclaimer in the 128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * documentation and/or other materials provided with the distribution. 138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian */ 278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef WorkerScriptLoader_h 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define WorkerScriptLoader_h 308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(WORKERS) 328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "KURL.h" 3421939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "ResourceRequest.h" 358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ResourceResponse.h" 368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "TextResourceDecoder.h" 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ThreadableLoader.h" 388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ThreadableLoaderClient.h" 398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore { 418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian class ScriptExecutionContext; 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class WorkerScriptLoaderClient; 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class WorkerScriptLoader : public ThreadableLoaderClient { 468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian public: 4721939df44de1705786c545cd1bf519d47250322dBen Murdoch explicit WorkerScriptLoader(ResourceRequestBase::TargetType); 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void loadSynchronously(ScriptExecutionContext*, const KURL&, CrossOriginRequestPolicy); 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void loadAsynchronously(ScriptExecutionContext*, const KURL&, CrossOriginRequestPolicy, WorkerScriptLoaderClient*); 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void notifyError(); 538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian const String& script() const { return m_script; } 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const KURL& url() const { return m_url; } 562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block const KURL& responseURL() const; 578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool failed() const { return m_failed; } 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned long identifier() const { return m_identifier; } 598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void didReceiveResponse(const ResourceResponse&); 612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void didReceiveData(const char* data, int dataLength); 6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void didFinishLoading(unsigned long identifier, double); 638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void didFail(const ResourceError&); 648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void didFailRedirectCheck(); 658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void didReceiveAuthenticationCancellation(const ResourceResponse&); 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian private: 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PassOwnPtr<ResourceRequest> createResourceRequest(); 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void notifyFinished(); 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WorkerScriptLoaderClient* m_client; 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<ThreadableLoader> m_threadableLoader; 738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian String m_responseEncoding; 748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RefPtr<TextResourceDecoder> m_decoder; 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian String m_script; 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch KURL m_url; 772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block KURL m_responseURL; 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_failed; 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch unsigned long m_identifier; 8021939df44de1705786c545cd1bf519d47250322dBen Murdoch ResourceRequestBase::TargetType m_targetType; 818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian }; 828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // ENABLE(WORKERS) 868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // WorkerScriptLoader_h 88