Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: sky/shell/ui/engine.cc

Issue 1221033006: Teach Stocks.apk how to load a skyx bundle (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: again Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/shell/ui/engine.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/shell/ui/engine.cc
diff --git a/sky/shell/ui/engine.cc b/sky/shell/ui/engine.cc
index fd991d5294cadb52a47c7360cfce63420050c5a9..2520b7f61d9a8f91558323e58ebefe35e21728ce 100644
--- a/sky/shell/ui/engine.cc
+++ b/sky/shell/ui/engine.cc
@@ -10,6 +10,7 @@
#include "base/trace_event/trace_event.h"
#include "mojo/common/data_pipe_utils.h"
#include "mojo/public/cpp/application/connect.h"
+#include "services/asset_bundle/asset_unpacker_job.h"
#include "sky/engine/public/platform/WebInputEvent.h"
#include "sky/engine/public/platform/sky_display_metrics.h"
#include "sky/engine/public/platform/sky_display_metrics.h"
@@ -27,6 +28,8 @@
namespace sky {
namespace shell {
+const char kSnapshotKey[] = "snapshot_blob.bin";
+
namespace {
void Ignored(bool) {
@@ -42,7 +45,9 @@ mojo::ScopedDataPipeConsumerHandle Fetch(const base::FilePath& path) {
PlatformImpl* g_platform_impl = nullptr;
-}
+} // namespace
+
+using mojo::asset_bundle::AssetUnpackerJob;
Engine::Config::Config() {
}
@@ -150,13 +155,21 @@ void Engine::OnInputEvent(InputEventPtr event) {
sky_view_->HandleInputEvent(*web_event);
}
-void Engine::RunFromLibrary(const mojo::String& name) {
+void Engine::RunFromLibrary(const std::string& name) {
sky_view_ = blink::SkyView::Create(this);
sky_view_->RunFromLibrary(blink::WebString::fromUTF8(name),
dart_library_provider_.get());
UpdateSkyViewSize();
}
+void Engine::RunFromSnapshotStream(
+ const std::string& name,
+ mojo::ScopedDataPipeConsumerHandle snapshot) {
+ sky_view_ = blink::SkyView::Create(this);
+ sky_view_->RunFromSnapshot(blink::WebString::fromUTF8(name), snapshot.Pass());
+ UpdateSkyViewSize();
+}
+
void Engine::RunFromNetwork(const mojo::String& url) {
dart_library_provider_.reset(
new DartLibraryProviderNetwork(g_platform_impl->networkService()));
@@ -171,10 +184,18 @@ void Engine::RunFromFile(const mojo::String& main,
}
void Engine::RunFromSnapshot(const mojo::String& path) {
- sky_view_ = blink::SkyView::Create(this);
- sky_view_->RunFromSnapshot(blink::WebString::fromUTF8(path),
- Fetch(base::FilePath(path)));
- UpdateSkyViewSize();
+ std::string path_str = path;
+ RunFromSnapshotStream(path_str, Fetch(base::FilePath(path_str)));
+}
+
+void Engine::RunFromBundle(const mojo::String& path) {
+ AssetUnpackerJob* unpacker = new AssetUnpackerJob(
+ mojo::GetProxy(&root_bundle_), base::WorkerPool::GetTaskRunner(true));
+ std::string path_str = path;
+ unpacker->Unpack(Fetch(base::FilePath(path_str)));
+ root_bundle_->GetAsStream(kSnapshotKey,
+ base::Bind(&Engine::RunFromSnapshotStream,
+ weak_factory_.GetWeakPtr(), path_str));
}
void Engine::DidCreateIsolate(Dart_Isolate isolate) {
« no previous file with comments | « sky/shell/ui/engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698