diff --git a/lib/mojo/BUILD.gn b/lib/mojo/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..bfe16bfbde00295d03ac2726b397d8f799c3153d --- /dev/null +++ b/lib/mojo/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("mojo") { + sources = [ + "dart_mojo_internal.cc", + "dart_mojo_internal.h", + ] + + deps = [ + "//dart/runtime:libdart", + "//lib/ftl", + "//lib/tonic", + "//mojo/public/cpp/system", + "//mojo/public/platform/dart:mojo_internal_impl", + ] +} diff --git a/sky/engine/bindings/dart_mojo_internal.cc b/lib/mojo/dart_mojo_internal.cc similarity index 96% rename from sky/engine/bindings/dart_mojo_internal.cc rename to lib/mojo/dart_mojo_internal.cc index bd06d5d733f0a5db541e97dbf3ff76c8ca516ed7..1206a586cafe249e0fad68828d1342c334addacb 100644 --- a/sky/engine/bindings/dart_mojo_internal.cc +++ b/lib/mojo/dart_mojo_internal.cc @@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "flutter/sky/engine/bindings/dart_mojo_internal.h" +#include "flutter/lib/mojo/dart_mojo_internal.h" #include "dart/runtime/include/dart_api.h" -#include "lib/tonic/logging/dart_error.h" #include "lib/ftl/logging.h" #include "lib/tonic/converter/dart_converter.h" +#include "lib/tonic/logging/dart_error.h" #include "mojo/public/platform/dart/mojo_natives.h" using tonic::LogIfError; diff --git a/sky/engine/bindings/dart_mojo_internal.h b/lib/mojo/dart_mojo_internal.h similarity index 75% rename from sky/engine/bindings/dart_mojo_internal.h rename to lib/mojo/dart_mojo_internal.h index 32fe9567edb484b3e35d7830c7641a3bd55e2a24..8cc2e82b635527bc5144365f7d7a50a16fad1863 100644 --- a/sky/engine/bindings/dart_mojo_internal.h +++ b/lib/mojo/dart_mojo_internal.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SKY_ENGINE_BINDINGS_DART_MOJO_INTERNAL_H_ -#define SKY_ENGINE_BINDINGS_DART_MOJO_INTERNAL_H_ +#ifndef FLUTTER_LIB_MOJO_DART_MOJO_INTERNAL_H_ +#define FLUTTER_LIB_MOJO_DART_MOJO_INTERNAL_H_ #include "lib/ftl/macros.h" #include "mojo/public/cpp/system/handle.h" @@ -22,4 +22,4 @@ class DartMojoInternal { } // namespace blink -#endif // SKY_ENGINE_BINDINGS_DART_MOJO_INTERNAL_H_ +#endif // FLUTTER_LIB_MOJO_DART_MOJO_INTERNAL_H_ diff --git a/lib/ui/BUILD.gn b/lib/ui/BUILD.gn index fe7e7e88e808ec86b01ea48f482ca0008cd680de..b6806dd6b11eda575d9b0b41b70e6eb43e8b7951 100644 --- a/lib/ui/BUILD.gn +++ b/lib/ui/BUILD.gn @@ -8,18 +8,20 @@ source_set("ui") { "compositing/scene_builder.h", "compositing/scene.cc", "compositing/scene.h", + "dart_runtime_hooks.cc", + "dart_runtime_hooks.h", "painting/canvas.cc", "painting/canvas.h", "painting/gradient.cc", "painting/gradient.h", - "painting/image.cc", "painting/image_decoding.cc", "painting/image_decoding.h", "painting/image_filter.cc", "painting/image_filter.h", - "painting/image.h", "painting/image_shader.cc", "painting/image_shader.h", + "painting/image.cc", + "painting/image.h", "painting/mask_filter.cc", "painting/mask_filter.h", "painting/matrix.cc", @@ -41,6 +43,7 @@ source_set("ui") { ] deps = [ + "//dart/runtime/bin:embedded_dart_io", "//flutter/common", "//flutter/flow", "//flutter/glue", diff --git a/sky/engine/bindings/dart_runtime_hooks.cc b/lib/ui/dart_runtime_hooks.cc similarity index 93% rename from sky/engine/bindings/dart_runtime_hooks.cc rename to lib/ui/dart_runtime_hooks.cc index 60d2bf404c052fbbe263e8ce84a496b5ef8c9933..0b0c822c9564296c01cf6e1d5ad22b773b1e803d 100644 --- a/sky/engine/bindings/dart_runtime_hooks.cc +++ b/lib/ui/dart_runtime_hooks.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "flutter/sky/engine/bindings/dart_runtime_hooks.h" +#include "flutter/lib/ui/dart_runtime_hooks.h" #include #include @@ -11,8 +11,6 @@ #include "dart/runtime/bin/embedded_dart_io.h" #include "dart/runtime/include/dart_api.h" #include "dart/runtime/include/dart_tools_api.h" -#include "flutter/sky/engine/core/script/ui_dart_state.h" -#include "flutter/sky/engine/wtf/text/WTFString.h" #include "lib/ftl/logging.h" #include "lib/tonic/converter/dart_converter.h" #include "lib/tonic/dart_library_natives.h" @@ -47,8 +45,7 @@ namespace blink { // the Mojo embedder dart, such as printing, and file I/O. #define BUILTIN_NATIVE_LIST(V) \ V(Logger_PrintString, 1) \ - V(ScheduleMicrotask, 1) \ - V(GetBaseURLString, 0) + V(ScheduleMicrotask, 1) BUILTIN_NATIVE_LIST(DECLARE_FUNCTION); @@ -93,7 +90,9 @@ static void InitDartInternal(Dart_Handle builtin_library, } } -static void InitDartCore(Dart_Handle builtin) { +static void InitDartCore(Dart_Handle builtin, const std::string& script_uri) { + DART_CHECK_VALID( + Dart_SetField(builtin, ToDart("_baseURL"), ToDart(script_uri))); Dart_Handle get_base_url = GetClosure(builtin, "_getGetBaseURLClosure"); Dart_Handle core_library = Dart_LookupLibrary(ToDart("dart:core")); DART_CHECK_VALID( @@ -136,7 +135,7 @@ void DartRuntimeHooks::Install(IsolateType isolate_type, Dart_Handle builtin = Dart_LookupLibrary(ToDart("dart:ui")); DART_CHECK_VALID(builtin); InitDartInternal(builtin, isolate_type); - InitDartCore(builtin); + InitDartCore(builtin, script_uri); InitDartAsync(builtin, isolate_type); InitDartIo(script_uri); } @@ -179,8 +178,4 @@ void ScheduleMicrotask(Dart_NativeArguments args) { tonic::DartMicrotaskQueue::ScheduleMicrotask(closure); } -void GetBaseURLString(Dart_NativeArguments args) { - Dart_SetReturnValue(args, ToDart(UIDartState::Current()->url())); -} - } // namespace blink diff --git a/sky/engine/bindings/dart_runtime_hooks.h b/lib/ui/dart_runtime_hooks.h similarity index 80% rename from sky/engine/bindings/dart_runtime_hooks.h rename to lib/ui/dart_runtime_hooks.h index 787fe9233e573bc54cef033f5b4573726da701a6..e9522a8bdf338ad8eab4bffd0f4fe58864d3f2e1 100644 --- a/sky/engine/bindings/dart_runtime_hooks.h +++ b/lib/ui/dart_runtime_hooks.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SKY_ENGINE_BINDINGS_DART_RUNTIME_HOOKS_H_ -#define SKY_ENGINE_BINDINGS_DART_RUNTIME_HOOKS_H_ +#ifndef FLUTTER_LIB_UI_DART_RUNTIME_HOOKS_H_ +#define FLUTTER_LIB_UI_DART_RUNTIME_HOOKS_H_ #include "dart/runtime/include/dart_api.h" #include "lib/tonic/dart_library_natives.h" @@ -27,4 +27,4 @@ class DartRuntimeHooks { } // namespace blink -#endif // SKY_ENGINE_BINDINGS_DART_RUNTIME_HOOKS_H_ +#endif // FLUTTER_LIB_UI_DART_RUNTIME_HOOKS_H_ diff --git a/lib/ui/natives.dart b/lib/ui/natives.dart index 528dcd6892dd6a94c89c314763fed89ca7589c5e..7b9b19dc1607b3420f4a39c28aa96c41ca7883cc 100644 --- a/lib/ui/natives.dart +++ b/lib/ui/natives.dart @@ -20,8 +20,9 @@ void _setupHooks() { } void _scheduleMicrotask(void callback()) native "ScheduleMicrotask"; -String _getBaseURLString() native "GetBaseURLString"; -Uri _getBaseURL() => Uri.parse(_getBaseURLString()); + +String _baseURL; +Uri _getBaseURL() => Uri.parse(_baseURL); // Required for gen_snapshot to work correctly. int _isolateId; diff --git a/sky/engine/bindings/BUILD.gn b/sky/engine/bindings/BUILD.gn index a6b5709e1b7f0877c4a00fa37193a60747d795f2..a54d55ad886545aed42dc1b7575392955aad2990 100644 --- a/sky/engine/bindings/BUILD.gn +++ b/sky/engine/bindings/BUILD.gn @@ -4,10 +4,6 @@ source_set("bindings") { sources = [ - "dart_mojo_internal.cc", - "dart_mojo_internal.h", - "dart_runtime_hooks.cc", - "dart_runtime_hooks.h", "dart_ui.cc", "dart_ui.h", "flutter_dart_state.cc", @@ -16,14 +12,14 @@ source_set("bindings") { "mojo_services.h", ] - defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ] - deps = [ - "//base", "//dart/runtime:libdart", - "//dart/runtime/bin:embedded_dart_io", "//flutter/assets", "//flutter/lib/ui", + "//flutter/services/engine:interfaces", + "//flutter/sky/engine/core:prerequisites", + "//flutter/sky/engine/platform:platform", + "//flutter/sky/engine/wtf", "//lib/tonic", "//mojo/public/c/system", "//mojo/public/cpp/application", @@ -31,10 +27,6 @@ source_set("bindings") { "//mojo/public/cpp/system", "//mojo/public/interfaces/application", "//mojo/public/platform/dart:mojo_internal_impl", - "//flutter/sky/engine/core:prerequisites", - "//flutter/sky/engine/platform:platform", - "//flutter/sky/engine/wtf", - "//flutter/services/engine:interfaces", ] if (is_android) { diff --git a/sky/engine/bindings/dart_ui.cc b/sky/engine/bindings/dart_ui.cc index 516e88f45ad5b7d3eb294d750c32f801381879b2..13f050ed5e8aaf4dc0a472d1192308d2f56d955e 100644 --- a/sky/engine/bindings/dart_ui.cc +++ b/sky/engine/bindings/dart_ui.cc @@ -4,25 +4,25 @@ #include "flutter/sky/engine/bindings/dart_ui.h" -#include "flutter/lib/ui/compositing/scene.h" #include "flutter/lib/ui/compositing/scene_builder.h" +#include "flutter/lib/ui/compositing/scene.h" +#include "flutter/lib/ui/dart_runtime_hooks.h" #include "flutter/lib/ui/painting/canvas.h" #include "flutter/lib/ui/painting/gradient.h" -#include "flutter/lib/ui/painting/image.h" #include "flutter/lib/ui/painting/image_decoding.h" #include "flutter/lib/ui/painting/image_filter.h" #include "flutter/lib/ui/painting/image_shader.h" +#include "flutter/lib/ui/painting/image.h" #include "flutter/lib/ui/painting/mask_filter.h" #include "flutter/lib/ui/painting/path.h" -#include "flutter/lib/ui/painting/picture.h" #include "flutter/lib/ui/painting/picture_recorder.h" -#include "lib/tonic/converter/dart_converter.h" -#include "lib/tonic/logging/dart_error.h" -#include "flutter/sky/engine/bindings/dart_runtime_hooks.h" +#include "flutter/lib/ui/painting/picture.h" #include "flutter/sky/engine/bindings/mojo_services.h" #include "flutter/sky/engine/core/text/Paragraph.h" #include "flutter/sky/engine/core/text/ParagraphBuilder.h" #include "flutter/sky/engine/core/window/window.h" +#include "lib/tonic/converter/dart_converter.h" +#include "lib/tonic/logging/dart_error.h" using tonic::ToDart; diff --git a/sky/engine/bindings/flutter_dart_state.cc b/sky/engine/bindings/flutter_dart_state.cc index 6eaba331c681e1b956bdc7fdeb72852446e1bb2d..6865c8d2a93b8dea66cc4719766ba94a9166f9c8 100644 --- a/sky/engine/bindings/flutter_dart_state.cc +++ b/sky/engine/bindings/flutter_dart_state.cc @@ -17,9 +17,8 @@ namespace blink { IsolateClient::~IsolateClient() {} -FlutterDartState::FlutterDartState(IsolateClient* isolate_client, - const std::string& url) - : isolate_client_(isolate_client), url_(url), main_port_(ILLEGAL_PORT) { +FlutterDartState::FlutterDartState(IsolateClient* isolate_client) + : isolate_client_(isolate_client), main_port_(ILLEGAL_PORT) { #ifdef OS_ANDROID jni_data_.reset(new DartJniIsolateData()); #endif @@ -34,7 +33,7 @@ FlutterDartState::~FlutterDartState() { } FlutterDartState* FlutterDartState::CreateForChildIsolate() { - return new FlutterDartState(isolate_client_, url_); + return new FlutterDartState(isolate_client_); } FlutterDartState* FlutterDartState::Current() { diff --git a/sky/engine/bindings/flutter_dart_state.h b/sky/engine/bindings/flutter_dart_state.h index 6f4d5e49f6c535c0fd30b8cd810f37e7435c4aed..541e7cb6db8c12a0d7165620aa9f394ba6e5b5ab 100644 --- a/sky/engine/bindings/flutter_dart_state.h +++ b/sky/engine/bindings/flutter_dart_state.h @@ -33,7 +33,6 @@ class FlutterDartState : public tonic::DartState { void DidSetIsolate() override; IsolateClient* isolate_client() { return isolate_client_; } - const std::string& url() const { return url_; } static FlutterDartState* Current(); @@ -47,11 +46,10 @@ class FlutterDartState : public tonic::DartState { #endif protected: - FlutterDartState(IsolateClient* isolate_client, const std::string& url); + FlutterDartState(IsolateClient* isolate_client); private: IsolateClient* isolate_client_; - std::string url_; Dart_Port main_port_; diff --git a/sky/engine/core/BUILD.gn b/sky/engine/core/BUILD.gn index c065915559c36bef2f693aabcfe5548e4de1185d..df5dc6cde470b6eceba46499530e5fb15a117e8f 100644 --- a/sky/engine/core/BUILD.gn +++ b/sky/engine/core/BUILD.gn @@ -14,7 +14,10 @@ source_set("libraries") { "//flutter/flow", "//flutter/glue", "//flutter/lib/io", + "//flutter/lib/mojo", "//flutter/lib/ui", + "//flutter/skia", + "//flutter/sky/engine/wtf", "//lib/ftl", "//lib/tonic", "//lib/tonic/debugger", @@ -26,8 +29,6 @@ source_set("libraries") { "//mojo/public/cpp/utility", "//mojo/public/interfaces/application", "//mojo/public/platform/dart:mojo_internal_impl", - "//flutter/skia", - "//flutter/sky/engine/wtf", "//third_party/iccjpeg", "//third_party/libpng", "//third_party/qcms", diff --git a/sky/engine/core/script/dart_controller.cc b/sky/engine/core/script/dart_controller.cc index 01460a771350a6dbe889b0ef9a927a1aa9c392e6..4929bf69831a7d1ee17a02a3af4b8e4dd3b85c0b 100644 --- a/sky/engine/core/script/dart_controller.cc +++ b/sky/engine/core/script/dart_controller.cc @@ -11,8 +11,8 @@ #include "flutter/common/threads.h" #include "flutter/glue/trace_event.h" #include "flutter/lib/io/dart_io.h" -#include "flutter/sky/engine/bindings/dart_mojo_internal.h" -#include "flutter/sky/engine/bindings/dart_runtime_hooks.h" +#include "flutter/lib/mojo/dart_mojo_internal.h" +#include "flutter/lib/ui/dart_runtime_hooks.h" #include "flutter/sky/engine/bindings/dart_ui.h" #include "flutter/sky/engine/core/script/dart_init.h" #include "flutter/sky/engine/core/script/dart_service_isolate.h" @@ -135,10 +135,11 @@ void DartController::RunFromSource(const std::string& main, exit(1); } -void DartController::CreateIsolateFor(std::unique_ptr state) { +void DartController::CreateIsolateFor(const std::string& script_uri, + std::unique_ptr state) { char* error = nullptr; Dart_Isolate isolate = Dart_CreateIsolate( - state->url().c_str(), "main", + script_uri.c_str(), "main", reinterpret_cast(DART_SYMBOL(kDartIsolateSnapshotBuffer)), nullptr, static_cast(state.get()), &error); FTL_CHECK(isolate) << error; @@ -157,8 +158,7 @@ void DartController::CreateIsolateFor(std::unique_ptr state) { DartIO::InitForIsolate(); DartUI::InitForIsolate(); DartMojoInternal::InitForIsolate(); - DartRuntimeHooks::Install(DartRuntimeHooks::MainIsolate, - ui_dart_state_->url().c_str()); + DartRuntimeHooks::Install(DartRuntimeHooks::MainIsolate, script_uri); dart_state()->class_library().add_provider( "ui", diff --git a/sky/engine/core/script/dart_controller.h b/sky/engine/core/script/dart_controller.h index a7b60bd7f9d286b751e68ec3f0b42d05f38e9122..b6231d62f982fab5c3ce74fc94041be77962244e 100644 --- a/sky/engine/core/script/dart_controller.h +++ b/sky/engine/core/script/dart_controller.h @@ -25,7 +25,8 @@ class DartController { void RunFromSnapshot(const uint8_t* buffer, size_t size); void RunFromSource(const std::string& main, const std::string& packages); - void CreateIsolateFor(std::unique_ptr ui_dart_state); + void CreateIsolateFor(const std::string& script_uri, + std::unique_ptr ui_dart_state); UIDartState* dart_state() const { return ui_dart_state_; } diff --git a/sky/engine/core/script/dart_init.cc b/sky/engine/core/script/dart_init.cc index 11ab6c765b6658f92d6526955430a46ffb5e5ba3..bca87463330784936c280a65fe3209884bd81aad 100644 --- a/sky/engine/core/script/dart_init.cc +++ b/sky/engine/core/script/dart_init.cc @@ -18,8 +18,8 @@ #include "flutter/common/settings.h" #include "flutter/glue/trace_event.h" #include "flutter/lib/io/dart_io.h" -#include "flutter/sky/engine/bindings/dart_mojo_internal.h" -#include "flutter/sky/engine/bindings/dart_runtime_hooks.h" +#include "flutter/lib/mojo/dart_mojo_internal.h" +#include "flutter/lib/ui/dart_runtime_hooks.h" #include "flutter/sky/engine/bindings/dart_ui.h" #include "flutter/sky/engine/core/script/dart_service_isolate.h" #include "flutter/sky/engine/core/script/ui_dart_state.h" @@ -190,7 +190,7 @@ Dart_Isolate ServiceIsolateCreateCallback(const char* script_uri, DartIO::InitForIsolate(); DartUI::InitForIsolate(); DartMojoInternal::InitForIsolate(); - DartRuntimeHooks::Install(DartRuntimeHooks::SecondaryIsolate, ""); + DartRuntimeHooks::Install(DartRuntimeHooks::SecondaryIsolate, script_uri); const Settings& settings = Settings::Get(); if (settings.enable_observatory) { std::string ip = "127.0.0.1"; diff --git a/sky/engine/core/script/ui_dart_state.cc b/sky/engine/core/script/ui_dart_state.cc index a002fdc52b75b229f82052c752e59e4edacebdb0..305b7b308ad82779147f44a391163eba8362430b 100644 --- a/sky/engine/core/script/ui_dart_state.cc +++ b/sky/engine/core/script/ui_dart_state.cc @@ -10,9 +10,8 @@ namespace blink { UIDartState::UIDartState(IsolateClient* isolate_client, - const std::string& url, std::unique_ptr window) - : FlutterDartState(isolate_client, url), window_(std::move(window)) {} + : FlutterDartState(isolate_client), window_(std::move(window)) {} UIDartState::~UIDartState() {} diff --git a/sky/engine/core/script/ui_dart_state.h b/sky/engine/core/script/ui_dart_state.h index 1c5b546d9eaa3e29392482c44b924199737ce6ab..36f8f7038cddf35e96cf8ebd00bac772c882959a 100644 --- a/sky/engine/core/script/ui_dart_state.h +++ b/sky/engine/core/script/ui_dart_state.h @@ -14,8 +14,7 @@ class Window; class UIDartState : public FlutterDartState { public: - UIDartState(IsolateClient* isolate_client, const std::string& url, - std::unique_ptr window); + UIDartState(IsolateClient* isolate_client, std::unique_ptr window); ~UIDartState() override; Window* window() const { return window_.get(); } @@ -32,4 +31,4 @@ class UIDartState : public FlutterDartState { } // namespace blink -#endif // SKY_ENGINE_CORE_SCRIPT_UI_DART_STATE_H_ +#endif // SKY_ENGINE_CORE_SCRIPT_UI_DART_STATE_H_ diff --git a/sky/engine/public/sky/sky_view.cc b/sky/engine/public/sky/sky_view.cc index c8e8fbcd612bbadbbd0800aba591515e729a2b7a..144400f831c22b1b0a26ee3f8a4cdbfcf46429dc 100644 --- a/sky/engine/public/sky/sky_view.cc +++ b/sky/engine/public/sky/sky_view.cc @@ -55,8 +55,9 @@ void SkyView::CreateView(const std::string& script_uri) { DCHECK(!dart_controller_); dart_controller_ = WTF::MakeUnique(); - dart_controller_->CreateIsolateFor(WTF::MakeUnique( - this, script_uri, WTF::MakeUnique(this))); + dart_controller_->CreateIsolateFor( + script_uri, + WTF::MakeUnique(this, WTF::MakeUnique(this))); UIDartState* dart_state = dart_controller_->dart_state(); DartState::Scope scope(dart_state);