15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef TextTrackLoader_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define TextTrackLoader_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/fetch/RawResource.h"
3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/fetch/ResourceOwner.h"
3151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/html/track/vtt/VTTParser.h"
321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Timer.h"
33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h"
34e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/OwnPtr.h"
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TextTrackLoader;
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class TextTrackLoaderClient : public ResourceOwner<RawResource> {
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~TextTrackLoaderClient() { }
4402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void newCuesAvailable(TextTrackLoader*) = 0;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void cueLoadingCompleted(TextTrackLoader*, bool loadingFailed) = 0;
4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    virtual void newRegionsAvailable(TextTrackLoader*) = 0;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass TextTrackLoader FINAL : public NoBaseWillBeGarbageCollectedFinalized<TextTrackLoader>, public ResourceOwner<RawResource>, private VTTParserClient {
5102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch    WTF_MAKE_NONCOPYABLE(TextTrackLoader);
52f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
54f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    static PassOwnPtrWillBeRawPtr<TextTrackLoader> create(TextTrackLoaderClient& client, Document& document)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        return adoptPtrWillBeNoop(new TextTrackLoader(client, document));
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~TextTrackLoader();
5902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool load(const KURL&, const AtomicString& crossOriginMode);
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cancelLoad();
6293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
6393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    enum State { Idle, Loading, Finished, Failed };
6493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    State loadState() { return m_state; }
6593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
66f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void getNewCues(WillBeHeapVector<RefPtrWillBeMember<VTTCue> >& outputCues);
67f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void getNewRegions(WillBeHeapVector<RefPtrWillBeMember<VTTRegion> >& outputRegions);
68f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
69f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void trace(Visitor*);
70f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
72f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    // RawResourceClient
73f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    virtual void dataReceived(Resource*, const char* data, int length) OVERRIDE;
74f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    virtual void notifyFinished(Resource*) OVERRIDE;
7502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
7651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    // VTTParserClient
77f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    virtual void newCuesParsed() OVERRIDE;
78f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    virtual void newRegionsParsed() OVERRIDE;
79f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    virtual void fileFailedToParse() OVERRIDE;
8002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
8119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    TextTrackLoader(TextTrackLoaderClient&, Document&);
8202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cueLoadTimerFired(Timer<TextTrackLoader>*);
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void corsPolicyPreventedLoad(SecurityOrigin*, const KURL&);
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
86c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    Document& document() const { return *m_document; }
87c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
8819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    TextTrackLoaderClient& m_client;
89f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    OwnPtrWillBeMember<VTTParser> m_cueParser;
90bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    // FIXME: Remove this pointer and get the Document from m_client.
91c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RawPtrWillBeMember<Document> m_document;
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Timer<TextTrackLoader> m_cueLoadTimer;
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    State m_state;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_newCuesAvailable;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
97c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
100