electron_api_service_impl.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright (c) 2019 Slack Technologies, 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_RENDERER_ELECTRON_API_SERVICE_IMPL_H_
  5. #define ELECTRON_SHELL_RENDERER_ELECTRON_API_SERVICE_IMPL_H_
  6. #include <string>
  7. #include "base/memory/weak_ptr.h"
  8. #include "content/public/renderer/render_frame.h"
  9. #include "content/public/renderer/render_frame_observer.h"
  10. #include "mojo/public/cpp/bindings/pending_receiver.h"
  11. #include "mojo/public/cpp/bindings/receiver.h"
  12. #include "shell/common/api/api.mojom.h"
  13. namespace electron {
  14. class RendererClientBase;
  15. class ElectronApiServiceImpl : public mojom::ElectronRenderer,
  16. public content::RenderFrameObserver {
  17. public:
  18. ElectronApiServiceImpl(content::RenderFrame* render_frame,
  19. RendererClientBase* renderer_client);
  20. ~ElectronApiServiceImpl() override;
  21. // disable copy
  22. ElectronApiServiceImpl(const ElectronApiServiceImpl&) = delete;
  23. ElectronApiServiceImpl& operator=(const ElectronApiServiceImpl&) = delete;
  24. void BindTo(mojo::PendingReceiver<mojom::ElectronRenderer> receiver);
  25. // mojom::ElectronRenderer
  26. void Message(bool internal,
  27. const std::string& channel,
  28. blink::CloneableMessage arguments) override;
  29. void ReceivePostMessage(const std::string& channel,
  30. blink::TransferableMessage message) override;
  31. void TakeHeapSnapshot(mojo::ScopedHandle file,
  32. TakeHeapSnapshotCallback callback) override;
  33. void ProcessPendingMessages();
  34. base::WeakPtr<ElectronApiServiceImpl> GetWeakPtr() {
  35. return weak_factory_.GetWeakPtr();
  36. }
  37. void OnInterfaceRequestForFrame(
  38. const std::string& interface_name,
  39. mojo::ScopedMessagePipeHandle* interface_pipe) override;
  40. private:
  41. // content::RenderFrameObserver
  42. void DidCreateDocumentElement() override;
  43. void OnDestruct() override;
  44. void OnConnectionError();
  45. // Whether the DOM document element has been created.
  46. bool document_created_ = false;
  47. service_manager::BinderRegistry registry_;
  48. mojo::PendingReceiver<mojom::ElectronRenderer> pending_receiver_;
  49. mojo::Receiver<mojom::ElectronRenderer> receiver_{this};
  50. raw_ptr<RendererClientBase> renderer_client_;
  51. base::WeakPtrFactory<ElectronApiServiceImpl> weak_factory_{this};
  52. };
  53. } // namespace electron
  54. #endif // ELECTRON_SHELL_RENDERER_ELECTRON_API_SERVICE_IMPL_H_