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