web_view_guest_delegate.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright (c) 2015 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 ELECTRON_SHELL_BROWSER_WEB_VIEW_GUEST_DELEGATE_H_
  5. #define ELECTRON_SHELL_BROWSER_WEB_VIEW_GUEST_DELEGATE_H_
  6. #include <memory>
  7. #include "base/memory/raw_ptr.h"
  8. #include "content/public/browser/browser_plugin_guest_delegate.h"
  9. #include "shell/browser/web_contents_zoom_controller.h"
  10. #include "shell/browser/web_contents_zoom_observer.h"
  11. namespace electron {
  12. namespace api {
  13. class WebContents;
  14. }
  15. class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
  16. private WebContentsZoomObserver {
  17. public:
  18. WebViewGuestDelegate(content::WebContents* embedder,
  19. api::WebContents* api_web_contents);
  20. ~WebViewGuestDelegate() override;
  21. // disable copy
  22. WebViewGuestDelegate(const WebViewGuestDelegate&) = delete;
  23. WebViewGuestDelegate& operator=(const WebViewGuestDelegate&) = delete;
  24. // Attach to the iframe.
  25. void AttachToIframe(content::WebContents* embedder_web_contents,
  26. int embedder_frame_id);
  27. void WillDestroy();
  28. protected:
  29. // content::BrowserPluginGuestDelegate:
  30. content::WebContents* GetOwnerWebContents() final;
  31. std::unique_ptr<content::WebContents> CreateNewGuestWindow(
  32. const content::WebContents::CreateParams& create_params) final;
  33. base::WeakPtr<content::BrowserPluginGuestDelegate> GetGuestDelegateWeakPtr()
  34. final;
  35. // WebContentsZoomObserver:
  36. void OnZoomControllerDestroyed(
  37. WebContentsZoomController* zoom_controller) override;
  38. void OnZoomChanged(
  39. const WebContentsZoomController::ZoomChangedEventData& data) override;
  40. private:
  41. void ResetZoomController();
  42. // The WebContents that attaches this guest view.
  43. raw_ptr<content::WebContents> embedder_web_contents_ = nullptr;
  44. // The zoom controller of the embedder that is used
  45. // to subscribe for zoom changes.
  46. raw_ptr<WebContentsZoomController> embedder_zoom_controller_ = nullptr;
  47. raw_ptr<api::WebContents> api_web_contents_ = nullptr;
  48. base::WeakPtrFactory<WebViewGuestDelegate> weak_ptr_factory_{this};
  49. };
  50. } // namespace electron
  51. #endif // ELECTRON_SHELL_BROWSER_WEB_VIEW_GUEST_DELEGATE_H_