diff --git a/shell/common/platform_view.cc b/shell/common/platform_view.cc index a933bd3b3c6bf..3e2b1daa476a6 100644 --- a/shell/common/platform_view.cc +++ b/shell/common/platform_view.cc @@ -136,6 +136,13 @@ std::unique_ptr PlatformView::CreateRenderingSurface() { return nullptr; } +std::shared_ptr +PlatformView::CreateExternalViewEmbedder() { + FML_DLOG(WARNING) + << "This platform doesn't support embedding external views."; + return nullptr; +} + void PlatformView::SetNextFrameCallback(const fml::closure& closure) { if (!closure) { return; diff --git a/shell/common/platform_view.h b/shell/common/platform_view.h index 5b376878ee208..a67b4b793cce1 100644 --- a/shell/common/platform_view.h +++ b/shell/common/platform_view.h @@ -7,6 +7,7 @@ #include +#include "flow/embedded_views.h" #include "flutter/common/task_runners.h" #include "flutter/flow/surface.h" #include "flutter/flow/texture.h" @@ -593,6 +594,8 @@ class PlatformView { // GPU task runner. virtual std::unique_ptr CreateRenderingSurface(); + virtual std::shared_ptr CreateExternalViewEmbedder(); + private: FML_DISALLOW_COPY_AND_ASSIGN(PlatformView); }; diff --git a/shell/common/shell_test_platform_view_gl.cc b/shell/common/shell_test_platform_view_gl.cc index 2175464f83fa0..287686b08c805 100644 --- a/shell/common/shell_test_platform_view_gl.cc +++ b/shell/common/shell_test_platform_view_gl.cc @@ -37,6 +37,12 @@ std::unique_ptr ShellTestPlatformViewGL::CreateRenderingSurface() { return std::make_unique(this, true); } +// |PlatformView| +std::shared_ptr +ShellTestPlatformViewGL::CreateExternalViewEmbedder() { + return shell_test_external_view_embedder_; +} + // |PlatformView| PointerDataDispatcherMaker ShellTestPlatformViewGL::GetDispatcherMaker() { return [](DefaultPointerDataDispatcher::Delegate& delegate) { diff --git a/shell/common/shell_test_platform_view_gl.h b/shell/common/shell_test_platform_view_gl.h index a4e020915f315..5779147e289af 100644 --- a/shell/common/shell_test_platform_view_gl.h +++ b/shell/common/shell_test_platform_view_gl.h @@ -40,6 +40,9 @@ class ShellTestPlatformViewGL : public ShellTestPlatformView, // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| std::unique_ptr CreateVSyncWaiter() override; diff --git a/shell/common/shell_test_platform_view_vulkan.cc b/shell/common/shell_test_platform_view_vulkan.cc index 3c43095af39f6..b34c1a70b8017 100644 --- a/shell/common/shell_test_platform_view_vulkan.cc +++ b/shell/common/shell_test_platform_view_vulkan.cc @@ -39,6 +39,12 @@ std::unique_ptr ShellTestPlatformViewVulkan::CreateRenderingSurface() { shell_test_external_view_embedder_); } +// |PlatformView| +std::shared_ptr +ShellTestPlatformViewVulkan::CreateExternalViewEmbedder() { + return shell_test_external_view_embedder_; +} + // |PlatformView| PointerDataDispatcherMaker ShellTestPlatformViewVulkan::GetDispatcherMaker() { return [](DefaultPointerDataDispatcher::Delegate& delegate) { diff --git a/shell/common/shell_test_platform_view_vulkan.h b/shell/common/shell_test_platform_view_vulkan.h index c2a13e70f6830..745647e77ca38 100644 --- a/shell/common/shell_test_platform_view_vulkan.h +++ b/shell/common/shell_test_platform_view_vulkan.h @@ -76,6 +76,9 @@ class ShellTestPlatformViewVulkan : public ShellTestPlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| std::unique_ptr CreateVSyncWaiter() override; diff --git a/shell/platform/android/platform_view_android.cc b/shell/platform/android/platform_view_android.cc index 8ebac2aa929b9..8612d646519fe 100644 --- a/shell/platform/android/platform_view_android.cc +++ b/shell/platform/android/platform_view_android.cc @@ -307,6 +307,12 @@ std::unique_ptr PlatformViewAndroid::CreateRenderingSurface() { return android_surface_->CreateGPUSurface(); } +// |PlatformView| +std::shared_ptr +PlatformViewAndroid::CreateExternalViewEmbedder() { + return external_view_embedder_; +} + // |PlatformView| sk_sp PlatformViewAndroid::CreateResourceContext() const { if (!android_surface_) { diff --git a/shell/platform/android/platform_view_android.h b/shell/platform/android/platform_view_android.h index b1bf8194976f5..b2500c979b98c 100644 --- a/shell/platform/android/platform_view_android.h +++ b/shell/platform/android/platform_view_android.h @@ -127,6 +127,9 @@ class PlatformViewAndroid final : public PlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/shell/platform/darwin/ios/platform_view_ios.h b/shell/platform/darwin/ios/platform_view_ios.h index 661d5e57f5b85..0681cfb956617 100644 --- a/shell/platform/darwin/ios/platform_view_ios.h +++ b/shell/platform/darwin/ios/platform_view_ios.h @@ -140,6 +140,9 @@ class PlatformViewIOS final : public PlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/shell/platform/darwin/ios/platform_view_ios.mm b/shell/platform/darwin/ios/platform_view_ios.mm index 43543c1e2fcde..fb151d6d515e2 100644 --- a/shell/platform/darwin/ios/platform_view_ios.mm +++ b/shell/platform/darwin/ios/platform_view_ios.mm @@ -140,6 +140,11 @@ return ios_surface_->CreateGPUSurface(); } +// |PlatformView| +std::shared_ptr PlatformViewIOS::CreateExternalViewEmbedder() { + return ios_surface_factory_->GetExternalViewEmbedder(); +} + // |PlatformView| sk_sp PlatformViewIOS::CreateResourceContext() const { return ios_context_->CreateResourceContext(); diff --git a/shell/platform/embedder/platform_view_embedder.cc b/shell/platform/embedder/platform_view_embedder.cc index de51eb31afcc4..d5cbb54d67822 100644 --- a/shell/platform/embedder/platform_view_embedder.cc +++ b/shell/platform/embedder/platform_view_embedder.cc @@ -77,6 +77,12 @@ std::unique_ptr PlatformViewEmbedder::CreateRenderingSurface() { return embedder_surface_->CreateGPUSurface(); } +// |PlatformView| +std::shared_ptr +PlatformViewEmbedder::CreateExternalViewEmbedder() { + return external_view_embedder_; +} + // |PlatformView| sk_sp PlatformViewEmbedder::CreateResourceContext() const { if (embedder_surface_ == nullptr) { diff --git a/shell/platform/embedder/platform_view_embedder.h b/shell/platform/embedder/platform_view_embedder.h index 6fefcf8b20a9d..76fc26a99b3b4 100644 --- a/shell/platform/embedder/platform_view_embedder.h +++ b/shell/platform/embedder/platform_view_embedder.h @@ -82,6 +82,9 @@ class PlatformViewEmbedder final : public PlatformView { // |PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |PlatformView| + std::shared_ptr CreateExternalViewEmbedder() override; + // |PlatformView| sk_sp CreateResourceContext() const override; diff --git a/shell/platform/fuchsia/flutter/platform_view.cc b/shell/platform/fuchsia/flutter/platform_view.cc index fa7e9a77c9357..0d379b395752b 100644 --- a/shell/platform/fuchsia/flutter/platform_view.cc +++ b/shell/platform/fuchsia/flutter/platform_view.cc @@ -586,6 +586,12 @@ std::unique_ptr PlatformView::CreateRenderingSurface() { return on_create_surface_callback_ ? on_create_surface_callback_() : nullptr; } +// |flutter::PlatformView| +std::shared_ptr +PlatformView::CreateExternalViewEmbedder() { + return external_view_embedder_; +} + // |flutter::PlatformView| void PlatformView::HandlePlatformMessage( fml::RefPtr message) { diff --git a/shell/platform/fuchsia/flutter/platform_view.h b/shell/platform/fuchsia/flutter/platform_view.h index 092633f1dde0a..28765d2fd146a 100644 --- a/shell/platform/fuchsia/flutter/platform_view.h +++ b/shell/platform/fuchsia/flutter/platform_view.h @@ -121,6 +121,10 @@ class PlatformView final : public flutter::PlatformView, // |flutter::PlatformView| std::unique_ptr CreateRenderingSurface() override; + // |flutter::PlatformView| + std::shared_ptr CreateExternalViewEmbedder() + override; + // |flutter::PlatformView| void HandlePlatformMessage( fml::RefPtr message) override;