node_service.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright (c) 2022 Microsoft, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_SERVICES_NODE_NODE_SERVICE_H_
  5. #define ELECTRON_SHELL_SERVICES_NODE_NODE_SERVICE_H_
  6. #include <memory>
  7. #include "mojo/public/cpp/bindings/pending_receiver.h"
  8. #include "mojo/public/cpp/bindings/pending_remote.h"
  9. #include "mojo/public/cpp/bindings/receiver.h"
  10. #include "mojo/public/cpp/bindings/remote.h"
  11. #include "services/network/public/cpp/shared_url_loader_factory.h"
  12. #include "services/network/public/mojom/host_resolver.mojom.h"
  13. #include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
  14. #include "shell/services/node/public/mojom/node_service.mojom.h"
  15. namespace node {
  16. class Environment;
  17. } // namespace node
  18. namespace electron {
  19. class ElectronBindings;
  20. class JavascriptEnvironment;
  21. class NodeBindings;
  22. class URLLoaderBundle {
  23. public:
  24. URLLoaderBundle();
  25. ~URLLoaderBundle();
  26. URLLoaderBundle(const URLLoaderBundle&) = delete;
  27. URLLoaderBundle& operator=(const URLLoaderBundle&) = delete;
  28. static URLLoaderBundle* GetInstance();
  29. void SetURLLoaderFactory(
  30. mojo::PendingRemote<network::mojom::URLLoaderFactory> factory,
  31. mojo::Remote<network::mojom::HostResolver> host_resolver);
  32. scoped_refptr<network::SharedURLLoaderFactory> GetSharedURLLoaderFactory();
  33. network::mojom::HostResolver* GetHostResolver();
  34. private:
  35. scoped_refptr<network::SharedURLLoaderFactory> factory_;
  36. mojo::Remote<network::mojom::HostResolver> host_resolver_;
  37. };
  38. class NodeService : public node::mojom::NodeService {
  39. public:
  40. explicit NodeService(
  41. mojo::PendingReceiver<node::mojom::NodeService> receiver);
  42. ~NodeService() override;
  43. NodeService(const NodeService&) = delete;
  44. NodeService& operator=(const NodeService&) = delete;
  45. // mojom::NodeService implementation:
  46. void Initialize(node::mojom::NodeServiceParamsPtr params) override;
  47. private:
  48. // This needs to be initialized first so that it can be destroyed last
  49. // after the node::Environment is destroyed. This ensures that if
  50. // there are crashes in the node::Environment destructor, they
  51. // will be propagated to the exit handler.
  52. mojo::Receiver<node::mojom::NodeService> receiver_{this};
  53. bool node_env_stopped_ = false;
  54. const std::unique_ptr<NodeBindings> node_bindings_;
  55. // depends-on: node_bindings_'s uv_loop
  56. const std::unique_ptr<ElectronBindings> electron_bindings_;
  57. // depends-on: node_bindings_'s uv_loop
  58. std::unique_ptr<JavascriptEnvironment> js_env_;
  59. // depends-on: js_env_'s isolate
  60. std::shared_ptr<node::Environment> node_env_;
  61. };
  62. } // namespace electron
  63. #endif // ELECTRON_SHELL_SERVICES_NODE_NODE_SERVICE_H_