OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sky/engine/config.h" | 5 #include "sky/engine/config.h" |
6 #include "sky/engine/core/script/dart_controller.h" | 6 #include "sky/engine/core/script/dart_controller.h" |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 if (!ImportChildLibraries(module, library)) | 104 if (!ImportChildLibraries(module, library)) |
105 return nullptr; | 105 return nullptr; |
106 | 106 |
107 return library; | 107 return library; |
108 } | 108 } |
109 | 109 |
110 void DartController::DidLoadMainLibrary(KURL url) { | 110 void DartController::DidLoadMainLibrary(KURL url) { |
111 DCHECK(Dart_CurrentIsolate() == dart_state()->isolate()); | 111 DCHECK(Dart_CurrentIsolate() == dart_state()->isolate()); |
112 DartApiScope dart_api_scope; | 112 DartApiScope dart_api_scope; |
113 | 113 |
| 114 if (LogIfError(Dart_FinalizeLoading(true))) |
| 115 return; |
| 116 |
114 Dart_Handle library = Dart_LookupLibrary( | 117 Dart_Handle library = Dart_LookupLibrary( |
115 StringToDart(dart_state(), url.string())); | 118 StringToDart(dart_state(), url.string())); |
116 CHECK(!LogIfError(library)); | 119 CHECK(!LogIfError(library)); |
117 DartInvokeAppField(library, ToDart("main"), 0, nullptr); | 120 DartInvokeAppField(library, ToDart("main"), 0, nullptr); |
118 } | 121 } |
119 | 122 |
120 void DartController::LoadMainLibrary(const KURL& url) { | 123 void DartController::LoadMainLibrary(const KURL& url) { |
121 DartLoader& loader = dart_state()->loader(); | 124 DartLoader& loader = dart_state()->loader(); |
122 DartDependencyCatcher dependency_catcher(loader); | 125 DartDependencyCatcher dependency_catcher(loader); |
123 loader.LoadLibrary(url); | 126 loader.LoadLibrary(url); |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 DartApiScope api_scope; | 304 DartApiScope api_scope; |
302 LogIfError(Dart_HandleMessage()); | 305 LogIfError(Dart_HandleMessage()); |
303 } | 306 } |
304 | 307 |
305 static void MessageNotifyCallback(Dart_Isolate dest_isolate) { | 308 static void MessageNotifyCallback(Dart_Isolate dest_isolate) { |
306 DCHECK(Platform::current()); | 309 DCHECK(Platform::current()); |
307 Platform::current()->mainThreadTaskRunner()->PostTask(FROM_HERE, | 310 Platform::current()->mainThreadTaskRunner()->PostTask(FROM_HERE, |
308 base::Bind(&CallHandleMessage, DartState::From(dest_isolate)->GetWeakPtr()
)); | 311 base::Bind(&CallHandleMessage, DartState::From(dest_isolate)->GetWeakPtr()
)); |
309 } | 312 } |
310 | 313 |
311 void DartController::CreateIsolateFor(Document* document) { | 314 void DartController::CreateIsolateFor(PassOwnPtr<DOMDartState> state, |
312 DCHECK(document); | 315 const KURL& url) { |
313 CHECK(kDartIsolateSnapshotBuffer); | 316 CHECK(kDartIsolateSnapshotBuffer); |
314 char* error = nullptr; | 317 char* error = nullptr; |
315 dom_dart_state_ = adoptPtr(new DOMDartState(document)); | 318 dom_dart_state_ = state; |
316 Dart_Isolate isolate = Dart_CreateIsolate( | 319 Dart_Isolate isolate = Dart_CreateIsolate( |
317 document->url().string().utf8().data(), "main", kDartIsolateSnapshotBuffer
, | 320 url.string().utf8().data(), "main", kDartIsolateSnapshotBuffer, |
318 static_cast<DartState*>(dom_dart_state_.get()), &error); | 321 static_cast<DartState*>(dom_dart_state_.get()), &error); |
319 Dart_SetMessageNotifyCallback(MessageNotifyCallback); | 322 Dart_SetMessageNotifyCallback(MessageNotifyCallback); |
320 CHECK(isolate) << error; | 323 CHECK(isolate) << error; |
321 dom_dart_state_->set_isolate(isolate); | 324 dom_dart_state_->set_isolate(isolate); |
322 Dart_SetGcCallbacks(DartGCPrologue, DartGCEpilogue); | 325 Dart_SetGcCallbacks(DartGCPrologue, DartGCEpilogue); |
323 CHECK(!LogIfError(Dart_SetLibraryTagHandler(LibraryTagHandler))); | 326 CHECK(!LogIfError(Dart_SetLibraryTagHandler(LibraryTagHandler))); |
324 | 327 |
325 { | 328 { |
326 DartApiScope apiScope; | 329 DartApiScope apiScope; |
327 | 330 |
328 // Ensure the isolate has a root library. | 331 // Ensure the isolate has a root library. |
329 Dart_LoadScript(Dart_NewStringFromCString("dart:empty"), | 332 Dart_LoadScript(Dart_NewStringFromCString("dart:empty"), |
330 Dart_NewStringFromCString(""), 0, 0); | 333 Dart_NewStringFromCString(""), 0, 0); |
331 | 334 |
332 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); | 335 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); |
333 Builtin::SetNativeResolver(Builtin::kMojoInternalLibrary); | 336 Builtin::SetNativeResolver(Builtin::kMojoInternalLibrary); |
334 Builtin::SetNativeResolver(Builtin::kIOLibrary); | 337 Builtin::SetNativeResolver(Builtin::kIOLibrary); |
335 BuiltinNatives::Init(BuiltinNatives::MainIsolate); | 338 BuiltinNatives::Init(BuiltinNatives::MainIsolate); |
336 | 339 |
337 builtin_sky_ = adoptPtr(new BuiltinSky(dart_state())); | 340 builtin_sky_ = adoptPtr(new BuiltinSky(dart_state())); |
338 dart_state()->class_library().set_provider(builtin_sky_.get()); | 341 dart_state()->class_library().set_provider(builtin_sky_.get()); |
339 builtin_sky_->InstallWindow(dart_state()); | |
340 | 342 |
341 document->frame()->loaderClient()->didCreateIsolate(isolate); | 343 if (dart_state()->document()) |
| 344 builtin_sky_->InstallWindow(dart_state()); |
342 | 345 |
343 EnsureHandleWatcherStarted(); | 346 EnsureHandleWatcherStarted(); |
344 } | 347 } |
345 Dart_ExitIsolate(); | 348 Dart_ExitIsolate(); |
346 } | 349 } |
347 | 350 |
348 void DartController::ClearForClose() { | 351 void DartController::ClearForClose() { |
349 // Don't use a DartIsolateScope here since we never exit the isolate. | 352 // Don't use a DartIsolateScope here since we never exit the isolate. |
350 Dart_EnterIsolate(dom_dart_state_->isolate()); | 353 Dart_EnterIsolate(dom_dart_state_->isolate()); |
351 Dart_ShutdownIsolate(); | 354 Dart_ShutdownIsolate(); |
(...skipping 19 matching lines...) Expand all Loading... |
371 nullptr, // Isolate interrupt callback. | 374 nullptr, // Isolate interrupt callback. |
372 UnhandledExceptionCallback, IsolateShutdownCallback, | 375 UnhandledExceptionCallback, IsolateShutdownCallback, |
373 // File IO callbacks. | 376 // File IO callbacks. |
374 nullptr, nullptr, nullptr, nullptr, nullptr)); | 377 nullptr, nullptr, nullptr, nullptr, nullptr)); |
375 // Wait for load port- ensures handle watcher and service isolates are | 378 // Wait for load port- ensures handle watcher and service isolates are |
376 // running. | 379 // running. |
377 Dart_ServiceWaitForLoadPort(); | 380 Dart_ServiceWaitForLoadPort(); |
378 } | 381 } |
379 | 382 |
380 } // namespace blink | 383 } // namespace blink |
OLD | NEW |