[WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
[WebKit-https.git] / Source / WebCore / platform / graphics / TrackPrivateBase.h
1 /*
2  * Copyright (C) 2012-2017 Apple Inc. All rights reserved.
3  * Copyright (C) 2013 Cable Television Labs, Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #pragma once
29
30 #if ENABLE(VIDEO_TRACK)
31
32 #include <wtf/MediaTime.h>
33 #include <wtf/ThreadSafeRefCounted.h>
34 #include <wtf/text/AtomicString.h>
35
36 namespace WebCore {
37
38 class TrackPrivateBaseClient {
39 public:
40     virtual ~TrackPrivateBaseClient() { }
41     virtual void idChanged(const AtomicString&) = 0;
42     virtual void labelChanged(const AtomicString&) = 0;
43     virtual void languageChanged(const AtomicString&) = 0;
44     virtual void willRemove() = 0;
45 };
46
47 class TrackPrivateBase : public ThreadSafeRefCounted<TrackPrivateBase> {
48     WTF_MAKE_NONCOPYABLE(TrackPrivateBase);
49     WTF_MAKE_FAST_ALLOCATED;
50 public:
51     virtual ~TrackPrivateBase() = default;
52
53     virtual TrackPrivateBaseClient* client() const = 0;
54
55     virtual AtomicString id() const { return emptyAtom(); }
56     virtual AtomicString label() const { return emptyAtom(); }
57     virtual AtomicString language() const { return emptyAtom(); }
58
59     virtual int trackIndex() const { return 0; }
60
61     virtual MediaTime startTimeVariance() const { return MediaTime::zeroTime(); }
62
63     void willBeRemoved()
64     {
65         if (auto* client = this->client())
66             client->willRemove();
67     }
68
69 protected:
70     TrackPrivateBase() = default;
71 };
72
73 } // namespace WebCore
74
75 #endif