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

Unified Diff: sky/engine/core/script/dart_controller.cc

Issue 1197133004: Add support for snapshot loading to Sky (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: 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
Index: sky/engine/core/script/dart_controller.cc
diff --git a/sky/engine/core/script/dart_controller.cc b/sky/engine/core/script/dart_controller.cc
index 80338ba8a09fae1cd1814509ad918776c44510c9..ea06ed2836b661fabccdd38d791b60e22e5ae575 100644
--- a/sky/engine/core/script/dart_controller.cc
+++ b/sky/engine/core/script/dart_controller.cc
@@ -27,6 +27,7 @@
#include "sky/engine/core/script/dart_dependency_catcher.h"
#include "sky/engine/core/script/dart_loader.h"
#include "sky/engine/core/script/dart_service_isolate.h"
+#include "sky/engine/core/script/dart_snapshot_loader.h"
#include "sky/engine/core/script/dom_dart_state.h"
#include "sky/engine/public/platform/Platform.h"
#include "sky/engine/tonic/dart_api_scope.h"
@@ -133,6 +134,26 @@ void DartController::LoadMainLibrary(const KURL& url, mojo::URLResponsePtr respo
base::Bind(&DartController::DidLoadMainLibrary, weak_factory_.GetWeakPtr(), url));
}
+void DartController::DidLoadSnapshot() {
+ DCHECK(Dart_CurrentIsolate() == nullptr);
+ snapshot_loader_ = nullptr;
+
+ Dart_Isolate isolate = dart_state()->isolate();
+ DartIsolateScope isolate_scope(isolate);
+ DartApiScope dart_api_scope;
+
+ Dart_Handle library = Dart_RootLibrary();
+ if (LogIfError(library))
+ return;
+ DartInvokeAppField(library, ToDart("main"), 0, nullptr);
+}
+
+void DartController::LoadSnapshot(const KURL& url, mojo::URLResponsePtr response) {
+ snapshot_loader_ = adoptPtr(new DartSnapshotLoader(dart_state()));
+ snapshot_loader_->LoadSnapshot(url, response.Pass(),
+ base::Bind(&DartController::DidLoadSnapshot, weak_factory_.GetWeakPtr()));
+}
+
void DartController::LoadScriptInModule(
AbstractModule* module,
const String& source,
@@ -289,9 +310,11 @@ static Dart_Isolate IsolateCreateCallback(const char* script_uri,
Builtin::SetNativeResolver(Builtin::kMojoInternalLibrary);
Builtin::SetNativeResolver(Builtin::kIOLibrary);
- // Ensure the isolate has a root library.
- Dart_LoadScript(Dart_NewStringFromCString("dart:empty"),
- Dart_NewStringFromCString(""), 0, 0);
+ if (!script_uri) {
+ // Ensure the isolate has a root library.
eseidel 2015/06/23 06:21:39 I don't think this is necessary anymore This was
abarth-chromium 2015/06/23 14:50:42 Yeah, I was close to removing it entirely. I thin
eseidel 2015/06/23 16:02:03 My recollection was it was needed because of the w
+ Dart_LoadScript(Dart_NewStringFromCString("dart:empty"),
+ Dart_EmptyString(), 0, 0);
+ }
}
Dart_ExitIsolate();
@@ -334,10 +357,6 @@ void DartController::CreateIsolateFor(PassOwnPtr<DOMDartState> state) {
{
DartApiScope apiScope;
- // Ensure the isolate has a root library.
- Dart_LoadScript(Dart_NewStringFromCString("dart:empty"),
- Dart_NewStringFromCString(""), 0, 0);
-
Builtin::SetNativeResolver(Builtin::kBuiltinLibrary);
Builtin::SetNativeResolver(Builtin::kMojoInternalLibrary);
Builtin::SetNativeResolver(Builtin::kIOLibrary);

Powered by Google App Engine
This is Rietveld 408576698