diff --git a/engine/src/flutter/shell/ui/engine.cc b/engine/src/flutter/shell/ui/engine.cc index 2520b7f61d..8ff836d449 100644 --- a/engine/src/flutter/shell/ui/engine.cc +++ b/engine/src/flutter/shell/ui/engine.cc @@ -200,7 +200,8 @@ void Engine::RunFromBundle(const mojo::String& path) { void Engine::DidCreateIsolate(Dart_Isolate isolate) { Internals::Create(isolate, - CreateServiceProvider(config_.service_provider_context)); + CreateServiceProvider(config_.service_provider_context), + root_bundle_.Pass()); } void Engine::ScheduleFrame() { diff --git a/engine/src/flutter/shell/ui/internals.cc b/engine/src/flutter/shell/ui/internals.cc index 039c323a90..e87b7520a0 100644 --- a/engine/src/flutter/shell/ui/internals.cc +++ b/engine/src/flutter/shell/ui/internals.cc @@ -29,6 +29,11 @@ Internals* GetInternals() { void NotifyTestComplete(Dart_NativeArguments args) { } +void TakeRootBundleHandle(Dart_NativeArguments args) { + Dart_SetIntegerReturnValue( + args, GetInternals()->TakeRootBundleHandle().value()); +} + void TakeShellProxyHandle(Dart_NativeArguments args) { Dart_SetIntegerReturnValue(args, 0); } @@ -48,10 +53,11 @@ void TakeServiceRegistry(Dart_NativeArguments args) { const DartBuiltin::Natives kNativeFunctions[] = { {"notifyTestComplete", NotifyTestComplete, 1}, - {"takeShellProxyHandle", TakeShellProxyHandle, 0}, + {"takeRootBundleHandle", TakeRootBundleHandle, 0}, + {"takeServiceRegistry", TakeServiceRegistry, 0}, {"takeServicesProvidedByEmbedder", TakeServicesProvidedByEmbedder, 0}, {"takeServicesProvidedToEmbedder", TakeServicesProvidedToEmbedder, 0}, - {"takeServiceRegistry", TakeServiceRegistry, 0}, + {"takeShellProxyHandle", TakeShellProxyHandle, 0}, }; const DartBuiltin& GetBuiltin() { @@ -75,17 +81,21 @@ const char kLibraryName[] = "dart:sky.internals"; } // namespace void Internals::Create(Dart_Isolate isolate, - mojo::ServiceProviderPtr service_provider) { + mojo::ServiceProviderPtr service_provider, + mojo::asset_bundle::AssetBundlePtr root_bundle) { DartState* state = DartState::From(isolate); - state->SetUserData(&kInternalsKey, new Internals(service_provider.Pass())); + state->SetUserData(&kInternalsKey, new Internals(service_provider.Pass(), + root_bundle.Pass())); Dart_Handle library = Dart_LookupLibrary(Dart_NewStringFromCString(kLibraryName)); CHECK(!LogIfError(library)); CHECK(!LogIfError(Dart_SetNativeResolver(library, Resolver, Symbolizer))); } -Internals::Internals(mojo::ServiceProviderPtr platform_service_provider) - : service_provider_impl_(GetProxy(&service_provider_)), +Internals::Internals(mojo::ServiceProviderPtr platform_service_provider, + mojo::asset_bundle::AssetBundlePtr root_bundle) + : root_bundle_(root_bundle.Pass()), + service_provider_impl_(GetProxy(&service_provider_)), platform_service_provider_(platform_service_provider.Pass()) { service_provider_impl_.set_fallback_service_provider( platform_service_provider_.get()); @@ -106,5 +116,9 @@ mojo::Handle Internals::TakeServicesProvidedByEmbedder() { return service_provider_.PassInterface().PassHandle().release(); } +mojo::Handle Internals::TakeRootBundleHandle() { + return root_bundle_.PassInterface().PassHandle().release(); +} + } // namespace shell } // namespace sky diff --git a/engine/src/flutter/shell/ui/internals.h b/engine/src/flutter/shell/ui/internals.h index 0244f62353..e2eb38cabb 100644 --- a/engine/src/flutter/shell/ui/internals.h +++ b/engine/src/flutter/shell/ui/internals.h @@ -26,18 +26,22 @@ class Internals ~Internals() override; static void Create(Dart_Isolate isolate, - mojo::ServiceProviderPtr platform_service_provider); + mojo::ServiceProviderPtr platform_service_provider, + mojo::asset_bundle::AssetBundlePtr root_bundle); mojo::Handle TakeServicesProvidedByEmbedder(); + mojo::Handle TakeRootBundleHandle(); private: - explicit Internals(mojo::ServiceProviderPtr platform_service_provider); + explicit Internals(mojo::ServiceProviderPtr platform_service_provider, + mojo::asset_bundle::AssetBundlePtr root_bundle); // |mojo::InterfaceFactory| implementation: void Create( mojo::ApplicationConnection* connection, mojo::InterfaceRequest) override; + mojo::asset_bundle::AssetBundlePtr root_bundle_; mojo::ServiceProviderPtr service_provider_; mojo::ServiceProviderImpl service_provider_impl_; mojo::ServiceProviderPtr platform_service_provider_;