stream_subscriber.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright (c) 2017 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_BROWSER_API_STREAM_SUBSCRIBER_H_
  5. #define ATOM_BROWSER_API_STREAM_SUBSCRIBER_H_
  6. #include <map>
  7. #include <memory>
  8. #include <string>
  9. #include <vector>
  10. #include "base/callback.h"
  11. #include "base/memory/ref_counted.h"
  12. #include "base/memory/ref_counted_delete_on_sequence.h"
  13. #include "base/memory/weak_ptr.h"
  14. #include "content/public/browser/browser_thread.h"
  15. #include "v8/include/v8.h"
  16. namespace atom {
  17. class URLRequestStreamJob;
  18. }
  19. namespace mate {
  20. class Arguments;
  21. class StreamSubscriber
  22. : public base::RefCountedDeleteOnSequence<StreamSubscriber> {
  23. public:
  24. REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE();
  25. StreamSubscriber(v8::Isolate* isolate,
  26. v8::Local<v8::Object> emitter,
  27. base::WeakPtr<atom::URLRequestStreamJob> url_job,
  28. scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
  29. private:
  30. friend class base::DeleteHelper<StreamSubscriber>;
  31. friend class base::RefCountedDeleteOnSequence<StreamSubscriber>;
  32. using JSHandlersMap = std::map<std::string, v8::Global<v8::Value>>;
  33. using EventCallback = base::Callback<void(mate::Arguments* args)>;
  34. ~StreamSubscriber();
  35. void On(const std::string& event, EventCallback&& callback); // NOLINT
  36. void Off(const std::string& event);
  37. void OnData(mate::Arguments* args);
  38. void OnEnd(mate::Arguments* args);
  39. void OnError(mate::Arguments* args);
  40. void RemoveAllListeners();
  41. void RemoveListener(JSHandlersMap::iterator it);
  42. v8::Isolate* isolate_;
  43. v8::Global<v8::Object> emitter_;
  44. base::WeakPtr<atom::URLRequestStreamJob> url_job_;
  45. JSHandlersMap js_handlers_;
  46. base::WeakPtrFactory<StreamSubscriber> weak_factory_;
  47. };
  48. } // namespace mate
  49. #endif // ATOM_BROWSER_API_STREAM_SUBSCRIBER_H_