/work/obj-fuzz/dist/include/mozilla/dom/EventSource.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | | |
7 | | /* |
8 | | * This implementation has support only for http requests. It is because the |
9 | | * spec has defined event streams only for http. HTTP is required because |
10 | | * this implementation uses some http headers: "Last-Event-ID", "Cache-Control" |
11 | | * and "Accept". |
12 | | */ |
13 | | |
14 | | #ifndef mozilla_dom_EventSource_h |
15 | | #define mozilla_dom_EventSource_h |
16 | | |
17 | | #include "mozilla/Attributes.h" |
18 | | #include "mozilla/DOMEventTargetHelper.h" |
19 | | #include "nsIObserver.h" |
20 | | #include "nsIStreamListener.h" |
21 | | #include "nsIChannelEventSink.h" |
22 | | #include "nsIInterfaceRequestor.h" |
23 | | #include "nsITimer.h" |
24 | | #include "nsIHttpChannel.h" |
25 | | #include "nsWeakReference.h" |
26 | | #include "nsDeque.h" |
27 | | |
28 | | class nsPIDOMWindowInner; |
29 | | |
30 | | namespace mozilla { |
31 | | |
32 | | class ErrorResult; |
33 | | |
34 | | namespace dom { |
35 | | |
36 | | struct EventSourceInit; |
37 | | |
38 | | class EventSourceImpl; |
39 | | |
40 | | class EventSource final : public DOMEventTargetHelper |
41 | | { |
42 | | friend class EventSourceImpl; |
43 | | public: |
44 | | NS_DECL_ISUPPORTS_INHERITED |
45 | | NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(EventSource, DOMEventTargetHelper) |
46 | | virtual bool IsCertainlyAliveForCC() const override; |
47 | | |
48 | | // EventTarget |
49 | | void DisconnectFromOwner() override |
50 | 0 | { |
51 | 0 | DOMEventTargetHelper::DisconnectFromOwner(); |
52 | 0 | Close(); |
53 | 0 | } |
54 | | |
55 | | JSObject* WrapObject(JSContext* aCx, |
56 | | JS::Handle<JSObject*> aGivenProto) override; |
57 | | |
58 | | // WebIDL |
59 | | static already_AddRefed<EventSource> |
60 | | Constructor(const GlobalObject& aGlobal, const nsAString& aURL, |
61 | | const EventSourceInit& aEventSourceInitDict, ErrorResult& aRv); |
62 | | |
63 | | void GetUrl(nsAString& aURL) const |
64 | 0 | { |
65 | 0 | AssertIsOnTargetThread(); |
66 | 0 | aURL = mOriginalURL; |
67 | 0 | } |
68 | | |
69 | | bool WithCredentials() const |
70 | 0 | { |
71 | 0 | AssertIsOnTargetThread(); |
72 | 0 | return mWithCredentials; |
73 | 0 | } |
74 | | |
75 | | uint16_t ReadyState() const |
76 | 0 | { |
77 | 0 | AssertIsOnTargetThread(); |
78 | 0 | return mReadyState; |
79 | 0 | } |
80 | | |
81 | | IMPL_EVENT_HANDLER(open) |
82 | | IMPL_EVENT_HANDLER(message) |
83 | | IMPL_EVENT_HANDLER(error) |
84 | | |
85 | | void Close(); |
86 | | |
87 | | private: |
88 | | EventSource(nsPIDOMWindowInner* aOwnerWindow, bool aWithCredentials); |
89 | | virtual ~EventSource(); |
90 | | // prevent bad usage |
91 | | EventSource(const EventSource& x) = delete; |
92 | | EventSource& operator=(const EventSource& x) = delete; |
93 | | |
94 | | void AssertIsOnTargetThread() const |
95 | 0 | { |
96 | 0 | MOZ_ASSERT(NS_IsMainThread() == mIsMainThread); |
97 | 0 | } |
98 | | |
99 | | nsresult CreateAndDispatchSimpleEvent(const nsAString& aName); |
100 | | |
101 | | // Raw pointer because this EventSourceImpl is created, managed and destroyed |
102 | | // by EventSource. |
103 | | EventSourceImpl* mImpl; |
104 | | nsString mOriginalURL; |
105 | | uint16_t mReadyState; |
106 | | bool mWithCredentials; |
107 | | bool mIsMainThread; |
108 | | // This is used to keep EventSourceImpl instance when there is a connection. |
109 | | bool mKeepingAlive; |
110 | | |
111 | | void UpdateMustKeepAlive(); |
112 | | void UpdateDontKeepAlive(); |
113 | | }; |
114 | | |
115 | | } // namespace dom |
116 | | } // namespace mozilla |
117 | | |
118 | | #endif // mozilla_dom_EventSource_h |