Index: sky/viewer/internals.cc |
diff --git a/sky/viewer/internals.cc b/sky/viewer/internals.cc |
index aca762a867a820e2aa4c07fd06de3aa8a4fc8010..3070f98273ffb79953d5c52b4981e6b345ffee8f 100644 |
--- a/sky/viewer/internals.cc |
+++ b/sky/viewer/internals.cc |
@@ -2,39 +2,94 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "sky/engine/config.h" |
#include "sky/viewer/internals.h" |
-#include "mojo/edk/js/core.h" |
-#include "mojo/edk/js/handle.h" |
-#include "mojo/edk/js/support.h" |
-#include "mojo/edk/js/threading.h" |
#include "mojo/public/cpp/application/connect.h" |
#include "mojo/public/cpp/bindings/array.h" |
#include "sky/engine/public/web/WebDocument.h" |
#include "sky/engine/public/web/WebFrame.h" |
#include "sky/engine/public/web/WebView.h" |
+#include "sky/engine/tonic/dart_builtin.h" |
+#include "sky/engine/tonic/dart_converter.h" |
+#include "sky/engine/tonic/dart_error.h" |
#include "sky/viewer/document_view.h" |
#include "sky/viewer/runtime_flags.h" |
-#include "v8/include/v8.h" |
#include <limits> |
+using namespace blink; |
+ |
namespace sky { |
+namespace { |
+ |
+int kInternalsKey = 0; |
+ |
+Internals* GetInternals() { |
+ DartState* state = DartState::Current(); |
+ return static_cast<Internals*>(state->GetUserData(&kInternalsKey)); |
+} |
+ |
+void RenderTreeAsText(Dart_NativeArguments args) { |
+ Dart_Handle result = StdStringToDart(GetInternals()->RenderTreeAsText()); |
+ Dart_SetReturnValue(args, result); |
+} |
-gin::WrapperInfo Internals::kWrapperInfo = {gin::kEmbedderNativeGin}; |
+void ContentAsText(Dart_NativeArguments args) { |
+ Dart_Handle result = StdStringToDart(GetInternals()->ContentAsText()); |
+ Dart_SetReturnValue(args, result); |
+} |
-// static |
-gin::Handle<Internals> Internals::Create( |
- v8::Isolate* isolate, DocumentView* document_view) { |
- gin::Handle<Internals> internals = |
- gin::CreateHandle(isolate, new Internals(document_view)); |
- v8::Handle<v8::Object> object = internals.ToV8().As<v8::Object>(); |
- object->Set(gin::StringToV8(isolate, "core"), |
- mojo::js::Core::GetModule(isolate)); |
- object->Set(gin::StringToV8(isolate, "support"), |
- mojo::js::Support::GetModule(isolate)); |
- object->Set(gin::StringToV8(isolate, "threading"), |
- mojo::js::Threading::GetModule(isolate)); |
- return internals; |
+void NotifyTestComplete(Dart_NativeArguments args) { |
+ Dart_Handle test_result = Dart_GetNativeArgument(args, 0); |
+ GetInternals()->NotifyTestComplete(StdStringFromDart(test_result)); |
+} |
+ |
+void PassShellProxyHandle(Dart_NativeArguments args) { |
+ Dart_SetIntegerReturnValue(args, GetInternals()->PassShellProxyHandle().value()); |
+} |
+ |
+const DartBuiltin::Natives kNativeFunctions[] = { |
+ {"renderTreeAsText", RenderTreeAsText, 0}, |
+ {"contentAsText", ContentAsText, 0}, |
+ {"notifyTestComplete", NotifyTestComplete, 1}, |
+ {"passShellProxyHandle", PassShellProxyHandle, 0}, |
+}; |
+ |
+const DartBuiltin& GetBuiltin() { |
+ static DartBuiltin& builtin = *new DartBuiltin(kNativeFunctions, |
+ arraysize(kNativeFunctions)); |
+ return builtin; |
+} |
+ |
+Dart_NativeFunction Resolver(Dart_Handle name, |
+ int argument_count, |
+ bool* auto_setup_scope) { |
+ return GetBuiltin().Resolver(name, argument_count, auto_setup_scope); |
+} |
+ |
+const uint8_t* Symbolizer(Dart_NativeFunction native_function) { |
+ return GetBuiltin().Symbolizer(native_function); |
+} |
+ |
+const char kLibraryName[] = "dart:sky.internals"; |
+const char kLibrarySource[] = R"DART( |
+String renderTreeAsText() native "renderTreeAsText"; |
+String contentAsText() native "contentAsText"; |
+void notifyTestComplete(String test_result) native "notifyTestComplete"; |
+int passShellProxyHandle() native "passShellProxyHandle"; |
+)DART"; |
+ |
+} // namespace |
+ |
+void Internals::Create(Dart_Isolate isolate, DocumentView* document_view) { |
+ DartState* state = DartState::From(isolate); |
+ state->SetUserData(&kInternalsKey, new Internals(document_view)); |
+ Dart_Handle library = |
+ Dart_LoadLibrary(Dart_NewStringFromCString(kLibraryName), |
+ Dart_NewStringFromCString(kLibrarySource), 0, 0); |
+ CHECK(!LogIfError(library)); |
+ CHECK(!LogIfError(Dart_FinalizeLoading(true))); |
+ CHECK(!LogIfError(Dart_SetNativeResolver(library, Resolver, Symbolizer))); |
} |
Internals::Internals(DocumentView* document_view) |
@@ -47,19 +102,6 @@ Internals::Internals(DocumentView* document_view) |
Internals::~Internals() { |
} |
-gin::ObjectTemplateBuilder Internals::GetObjectTemplateBuilder( |
- v8::Isolate* isolate) { |
- return Wrappable<Internals>::GetObjectTemplateBuilder(isolate) |
- .SetMethod("renderTreeAsText", &Internals::RenderTreeAsText) |
- .SetMethod("contentAsText", &Internals::ContentAsText) |
- .SetMethod("notifyTestComplete", &Internals::NotifyTestComplete) |
- .SetMethod("connectToService", &Internals::ConnectToService) |
- .SetMethod("connectToEmbedderService", |
- &Internals::ConnectToEmbedderService) |
- .SetMethod("pauseAnimations", &Internals::pauseAnimations) |
- .SetMethod("passShellProxyHandle", &Internals::PassShellProxyHandle); |
-} |
- |
std::string Internals::RenderTreeAsText() { |
if (!document_view_) |
return std::string(); |