aw_render_frame_ext.h 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ANDROID_WEBVIEW_RENDERER_AW_RENDER_FRAME_EXT_H_
  5. #define ANDROID_WEBVIEW_RENDERER_AW_RENDER_FRAME_EXT_H_
  6. #include "android_webview/common/mojom/frame.mojom.h"
  7. #include "content/public/renderer/render_frame_observer.h"
  8. #include "mojo/public/cpp/bindings/associated_receiver.h"
  9. #include "mojo/public/cpp/bindings/associated_remote.h"
  10. #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
  11. #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
  12. #include "third_party/skia/include/core/SkColor.h"
  13. #include "ui/gfx/geometry/point_f.h"
  14. #include "ui/gfx/geometry/size.h"
  15. #include "ui/gfx/geometry/size_f.h"
  16. #include "url/origin.h"
  17. namespace blink {
  18. class WebFrameWidget;
  19. class WebHitTestResult;
  20. class WebView;
  21. }
  22. namespace android_webview {
  23. // Render process side of AwRenderViewHostExt, this provides cross-process
  24. // implementation of miscellaneous WebView functions that we need to poke
  25. // WebKit directly to implement (and that aren't needed in the chrome app).
  26. class AwRenderFrameExt : public content::RenderFrameObserver,
  27. mojom::LocalMainFrame {
  28. public:
  29. explicit AwRenderFrameExt(content::RenderFrame* render_frame);
  30. AwRenderFrameExt(const AwRenderFrameExt&) = delete;
  31. AwRenderFrameExt& operator=(const AwRenderFrameExt&) = delete;
  32. static AwRenderFrameExt* FromRenderFrame(content::RenderFrame* render_frame);
  33. private:
  34. ~AwRenderFrameExt() override;
  35. // RenderFrameObserver:
  36. bool OnAssociatedInterfaceRequestForFrame(
  37. const std::string& interface_name,
  38. mojo::ScopedInterfaceEndpointHandle* handle) override;
  39. void DidCommitProvisionalLoad(ui::PageTransition transition) override;
  40. void FocusedElementChanged(const blink::WebElement& element) override;
  41. void DidCreateDocumentElement() override;
  42. void OnDestruct() override;
  43. // mojom::LocalMainFrame overrides:
  44. void SetInitialPageScale(double page_scale_factor) override;
  45. void SetTextZoomFactor(float zoom_factor) override;
  46. void HitTest(const gfx::PointF& touch_center,
  47. const gfx::SizeF& touch_area) override;
  48. void DocumentHasImage(DocumentHasImageCallback callback) override;
  49. void ResetScrollAndScaleState() override;
  50. void SmoothScroll(int32_t target_x,
  51. int32_t target_y,
  52. base::TimeDelta duration) override;
  53. void BindLocalMainFrame(
  54. mojo::PendingAssociatedReceiver<mojom::LocalMainFrame> pending_receiver);
  55. void HandleHitTestResult(const blink::WebHitTestResult& result);
  56. const mojo::AssociatedRemote<mojom::FrameHost>& GetFrameHost();
  57. blink::WebView* GetWebView();
  58. blink::WebFrameWidget* GetWebFrameWidget();
  59. url::Origin last_origin_;
  60. blink::AssociatedInterfaceRegistry registry_;
  61. mojo::AssociatedReceiver<mojom::LocalMainFrame> local_main_frame_receiver_{
  62. this};
  63. mojo::AssociatedRemote<mojom::FrameHost> frame_host_remote_;
  64. };
  65. } // namespace android_webview
  66. #endif // ANDROID_WEBVIEW_RENDERER_AW_RENDER_FRAME_EXT_H_