Stocks.apk should have icons when run offline

This CL adds the concept of a root asset bundle to Sky. If the Sky app was
launched from a bundle, the root bundle is that bundle.

This CL teaches icon.dart to default to loading icons out of the root bundle,
if a root bundle exists. The next result is that Stocks has icons when run
offline because the icons are present in stock's skyx bundle.

TBR=eseidel@google.com

Review URL: https://codereview.chromium.org/1208273003.
This commit is contained in:
Adam Barth 2015-07-02 13:47:13 -07:00
parent 35dbae5e3c
commit 12171c63ef
3 changed files with 28 additions and 9 deletions

View File

@ -200,7 +200,8 @@ void Engine::RunFromBundle(const mojo::String& path) {
void Engine::DidCreateIsolate(Dart_Isolate isolate) { void Engine::DidCreateIsolate(Dart_Isolate isolate) {
Internals::Create(isolate, Internals::Create(isolate,
CreateServiceProvider(config_.service_provider_context)); CreateServiceProvider(config_.service_provider_context),
root_bundle_.Pass());
} }
void Engine::ScheduleFrame() { void Engine::ScheduleFrame() {

View File

@ -29,6 +29,11 @@ Internals* GetInternals() {
void NotifyTestComplete(Dart_NativeArguments args) { void NotifyTestComplete(Dart_NativeArguments args) {
} }
void TakeRootBundleHandle(Dart_NativeArguments args) {
Dart_SetIntegerReturnValue(
args, GetInternals()->TakeRootBundleHandle().value());
}
void TakeShellProxyHandle(Dart_NativeArguments args) { void TakeShellProxyHandle(Dart_NativeArguments args) {
Dart_SetIntegerReturnValue(args, 0); Dart_SetIntegerReturnValue(args, 0);
} }
@ -48,10 +53,11 @@ void TakeServiceRegistry(Dart_NativeArguments args) {
const DartBuiltin::Natives kNativeFunctions[] = { const DartBuiltin::Natives kNativeFunctions[] = {
{"notifyTestComplete", NotifyTestComplete, 1}, {"notifyTestComplete", NotifyTestComplete, 1},
{"takeShellProxyHandle", TakeShellProxyHandle, 0}, {"takeRootBundleHandle", TakeRootBundleHandle, 0},
{"takeServiceRegistry", TakeServiceRegistry, 0},
{"takeServicesProvidedByEmbedder", TakeServicesProvidedByEmbedder, 0}, {"takeServicesProvidedByEmbedder", TakeServicesProvidedByEmbedder, 0},
{"takeServicesProvidedToEmbedder", TakeServicesProvidedToEmbedder, 0}, {"takeServicesProvidedToEmbedder", TakeServicesProvidedToEmbedder, 0},
{"takeServiceRegistry", TakeServiceRegistry, 0}, {"takeShellProxyHandle", TakeShellProxyHandle, 0},
}; };
const DartBuiltin& GetBuiltin() { const DartBuiltin& GetBuiltin() {
@ -75,17 +81,21 @@ const char kLibraryName[] = "dart:sky.internals";
} // namespace } // namespace
void Internals::Create(Dart_Isolate isolate, 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); 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_Handle library =
Dart_LookupLibrary(Dart_NewStringFromCString(kLibraryName)); Dart_LookupLibrary(Dart_NewStringFromCString(kLibraryName));
CHECK(!LogIfError(library)); CHECK(!LogIfError(library));
CHECK(!LogIfError(Dart_SetNativeResolver(library, Resolver, Symbolizer))); CHECK(!LogIfError(Dart_SetNativeResolver(library, Resolver, Symbolizer)));
} }
Internals::Internals(mojo::ServiceProviderPtr platform_service_provider) Internals::Internals(mojo::ServiceProviderPtr platform_service_provider,
: service_provider_impl_(GetProxy(&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()) { platform_service_provider_(platform_service_provider.Pass()) {
service_provider_impl_.set_fallback_service_provider( service_provider_impl_.set_fallback_service_provider(
platform_service_provider_.get()); platform_service_provider_.get());
@ -106,5 +116,9 @@ mojo::Handle Internals::TakeServicesProvidedByEmbedder() {
return service_provider_.PassInterface().PassHandle().release(); return service_provider_.PassInterface().PassHandle().release();
} }
mojo::Handle Internals::TakeRootBundleHandle() {
return root_bundle_.PassInterface().PassHandle().release();
}
} // namespace shell } // namespace shell
} // namespace sky } // namespace sky

View File

@ -26,18 +26,22 @@ class Internals
~Internals() override; ~Internals() override;
static void Create(Dart_Isolate isolate, 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 TakeServicesProvidedByEmbedder();
mojo::Handle TakeRootBundleHandle();
private: private:
explicit Internals(mojo::ServiceProviderPtr platform_service_provider); explicit Internals(mojo::ServiceProviderPtr platform_service_provider,
mojo::asset_bundle::AssetBundlePtr root_bundle);
// |mojo::InterfaceFactory<mojo::asset_bundle::AssetUnpacker>| implementation: // |mojo::InterfaceFactory<mojo::asset_bundle::AssetUnpacker>| implementation:
void Create( void Create(
mojo::ApplicationConnection* connection, mojo::ApplicationConnection* connection,
mojo::InterfaceRequest<mojo::asset_bundle::AssetUnpacker>) override; mojo::InterfaceRequest<mojo::asset_bundle::AssetUnpacker>) override;
mojo::asset_bundle::AssetBundlePtr root_bundle_;
mojo::ServiceProviderPtr service_provider_; mojo::ServiceProviderPtr service_provider_;
mojo::ServiceProviderImpl service_provider_impl_; mojo::ServiceProviderImpl service_provider_impl_;
mojo::ServiceProviderPtr platform_service_provider_; mojo::ServiceProviderPtr platform_service_provider_;