| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/viewer/internals.h" | 6 #include "sky/viewer/internals.h" |
| 7 | 7 |
| 8 #include "mojo/public/cpp/application/connect.h" | 8 #include "mojo/public/cpp/application/connect.h" |
| 9 #include "mojo/public/cpp/bindings/array.h" | 9 #include "mojo/public/cpp/bindings/array.h" |
| 10 #include "sky/engine/public/web/WebDocument.h" | 10 #include "sky/engine/public/web/WebDocument.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 void ContentAsText(Dart_NativeArguments args) { | 37 void ContentAsText(Dart_NativeArguments args) { |
| 38 Dart_Handle result = StdStringToDart(GetInternals()->ContentAsText()); | 38 Dart_Handle result = StdStringToDart(GetInternals()->ContentAsText()); |
| 39 Dart_SetReturnValue(args, result); | 39 Dart_SetReturnValue(args, result); |
| 40 } | 40 } |
| 41 | 41 |
| 42 void NotifyTestComplete(Dart_NativeArguments args) { | 42 void NotifyTestComplete(Dart_NativeArguments args) { |
| 43 Dart_Handle test_result = Dart_GetNativeArgument(args, 0); | 43 Dart_Handle test_result = Dart_GetNativeArgument(args, 0); |
| 44 GetInternals()->NotifyTestComplete(StdStringFromDart(test_result)); | 44 GetInternals()->NotifyTestComplete(StdStringFromDart(test_result)); |
| 45 } | 45 } |
| 46 | 46 |
| 47 void PassShellProxyHandle(Dart_NativeArguments args) { | 47 void TakeShellProxyHandle(Dart_NativeArguments args) { |
| 48 Dart_SetIntegerReturnValue(args, GetInternals()->PassShellProxyHandle().value(
)); | 48 Dart_SetIntegerReturnValue(args, |
| 49 GetInternals()->TakeShellProxyHandle().value()); |
| 50 } |
| 51 |
| 52 void TakeServicesProvidedToEmbedder(Dart_NativeArguments args) { |
| 53 Dart_SetIntegerReturnValue(args, |
| 54 GetInternals()->TakeServicesProvidedToEmbedder().value()); |
| 55 } |
| 56 |
| 57 void TakeServicesProvidedByEmbedder(Dart_NativeArguments args) { |
| 58 Dart_SetIntegerReturnValue(args, |
| 59 GetInternals()->TakeServicesProvidedByEmbedder().value()); |
| 49 } | 60 } |
| 50 | 61 |
| 51 const DartBuiltin::Natives kNativeFunctions[] = { | 62 const DartBuiltin::Natives kNativeFunctions[] = { |
| 52 {"renderTreeAsText", RenderTreeAsText, 0}, | 63 {"renderTreeAsText", RenderTreeAsText, 0}, |
| 53 {"contentAsText", ContentAsText, 0}, | 64 {"contentAsText", ContentAsText, 0}, |
| 54 {"notifyTestComplete", NotifyTestComplete, 1}, | 65 {"notifyTestComplete", NotifyTestComplete, 1}, |
| 55 {"passShellProxyHandle", PassShellProxyHandle, 0}, | 66 {"takeShellProxyHandle", TakeShellProxyHandle, 0}, |
| 67 {"takeServicesProvidedToEmbedder", TakeServicesProvidedToEmbedder, 0}, |
| 68 {"takeServicesProvidedByEmbedder", TakeServicesProvidedByEmbedder, 0}, |
| 56 }; | 69 }; |
| 57 | 70 |
| 58 const DartBuiltin& GetBuiltin() { | 71 const DartBuiltin& GetBuiltin() { |
| 59 static DartBuiltin& builtin = *new DartBuiltin(kNativeFunctions, | 72 static DartBuiltin& builtin = *new DartBuiltin(kNativeFunctions, |
| 60 arraysize(kNativeFunctions)); | 73 arraysize(kNativeFunctions)); |
| 61 return builtin; | 74 return builtin; |
| 62 } | 75 } |
| 63 | 76 |
| 64 Dart_NativeFunction Resolver(Dart_Handle name, | 77 Dart_NativeFunction Resolver(Dart_Handle name, |
| 65 int argument_count, | 78 int argument_count, |
| 66 bool* auto_setup_scope) { | 79 bool* auto_setup_scope) { |
| 67 return GetBuiltin().Resolver(name, argument_count, auto_setup_scope); | 80 return GetBuiltin().Resolver(name, argument_count, auto_setup_scope); |
| 68 } | 81 } |
| 69 | 82 |
| 70 const uint8_t* Symbolizer(Dart_NativeFunction native_function) { | 83 const uint8_t* Symbolizer(Dart_NativeFunction native_function) { |
| 71 return GetBuiltin().Symbolizer(native_function); | 84 return GetBuiltin().Symbolizer(native_function); |
| 72 } | 85 } |
| 73 | 86 |
| 74 const char kLibraryName[] = "dart:sky.internals"; | 87 const char kLibraryName[] = "dart:sky.internals"; |
| 75 const char kLibrarySource[] = R"DART( | 88 const char kLibrarySource[] = R"DART( |
| 76 String renderTreeAsText() native "renderTreeAsText"; | 89 String renderTreeAsText() native "renderTreeAsText"; |
| 77 String contentAsText() native "contentAsText"; | 90 String contentAsText() native "contentAsText"; |
| 78 void notifyTestComplete(String test_result) native "notifyTestComplete"; | 91 void notifyTestComplete(String test_result) native "notifyTestComplete"; |
| 79 int passShellProxyHandle() native "passShellProxyHandle"; | 92 int takeShellProxyHandle() native "takeShellProxyHandle"; |
| 93 int takeServicesProvidedToEmbedder() native "takeServicesProvidedToEmbedder"; |
| 94 int takeServicesProvidedByEmbedder() native "takeServicesProvidedByEmbedder"; |
| 80 )DART"; | 95 )DART"; |
| 81 | 96 |
| 82 } // namespace | 97 } // namespace |
| 83 | 98 |
| 84 void Internals::Create(Dart_Isolate isolate, DocumentView* document_view) { | 99 void Internals::Create(Dart_Isolate isolate, DocumentView* document_view) { |
| 85 DartState* state = DartState::From(isolate); | 100 DartState* state = DartState::From(isolate); |
| 86 state->SetUserData(&kInternalsKey, new Internals(document_view)); | 101 state->SetUserData(&kInternalsKey, new Internals(document_view)); |
| 87 Dart_Handle library = | 102 Dart_Handle library = |
| 88 Dart_LoadLibrary(Dart_NewStringFromCString(kLibraryName), | 103 Dart_LoadLibrary(Dart_NewStringFromCString(kLibraryName), |
| 89 Dart_NewStringFromCString(kLibrarySource), 0, 0); | 104 Dart_NewStringFromCString(kLibrarySource), 0, 0); |
| 90 CHECK(!LogIfError(library)); | 105 CHECK(!LogIfError(library)); |
| 91 CHECK(!LogIfError(Dart_FinalizeLoading(true))); | 106 CHECK(!LogIfError(Dart_FinalizeLoading(true))); |
| 92 CHECK(!LogIfError(Dart_SetNativeResolver(library, Resolver, Symbolizer))); | 107 CHECK(!LogIfError(Dart_SetNativeResolver(library, Resolver, Symbolizer))); |
| 93 } | 108 } |
| 94 | 109 |
| 95 Internals::Internals(DocumentView* document_view) | 110 Internals::Internals(DocumentView* document_view) |
| 96 : document_view_(document_view->GetWeakPtr()), | 111 : document_view_(document_view->GetWeakPtr()), |
| 97 shell_binding_(this) { | 112 shell_binding_(this) { |
| 98 if (document_view_->imported_services()) | 113 test_harness_ = document_view_->TakeTestHarness(); |
| 99 mojo::ConnectToService(document_view_->imported_services(), &test_harness_); | |
| 100 } | 114 } |
| 101 | 115 |
| 102 Internals::~Internals() { | 116 Internals::~Internals() { |
| 103 } | 117 } |
| 104 | 118 |
| 105 std::string Internals::RenderTreeAsText() { | 119 std::string Internals::RenderTreeAsText() { |
| 106 if (!document_view_) | 120 if (!document_view_) |
| 107 return std::string(); | 121 return std::string(); |
| 108 return document_view_->web_view()->mainFrame()->renderTreeAsText().utf8(); | 122 return document_view_->web_view()->mainFrame()->renderTreeAsText().utf8(); |
| 109 } | 123 } |
| 110 | 124 |
| 111 std::string Internals::ContentAsText() { | 125 std::string Internals::ContentAsText() { |
| 112 if (!document_view_) | 126 if (!document_view_) |
| 113 return std::string(); | 127 return std::string(); |
| 114 return document_view_->web_view()->mainFrame()->contentAsText( | 128 return document_view_->web_view()->mainFrame()->contentAsText( |
| 115 1024*1024).utf8(); | 129 1024*1024).utf8(); |
| 116 } | 130 } |
| 117 | 131 |
| 118 void Internals::NotifyTestComplete(const std::string& test_result) { | 132 void Internals::NotifyTestComplete(const std::string& test_result) { |
| 119 if (!RuntimeFlags::Get().testing()) | 133 if (!RuntimeFlags::Get().testing()) |
| 120 return; | 134 return; |
| 121 std::vector<unsigned char> pixels; | 135 std::vector<unsigned char> pixels; |
| 122 document_view_->GetPixelsForTesting(&pixels); | 136 document_view_->GetPixelsForTesting(&pixels); |
| 123 if (test_harness_) { | 137 if (test_harness_) { |
| 124 test_harness_->OnTestComplete(test_result, | 138 test_harness_->OnTestComplete(test_result, |
| 125 mojo::Array<uint8_t>::From(pixels)); | 139 mojo::Array<uint8_t>::From(pixels)); |
| 126 } | 140 } |
| 127 } | 141 } |
| 128 | 142 |
| 129 mojo::Handle Internals::ConnectToEmbedderService( | 143 mojo::Handle Internals::TakeServicesProvidedToEmbedder() { |
| 130 const std::string& interface_name) { | 144 if (!document_view_) |
| 131 if (!document_view_ || !document_view_->imported_services()) | |
| 132 return mojo::Handle(); | 145 return mojo::Handle(); |
| 146 return document_view_->TakeServicesProvidedToEmbedder().release(); |
| 147 } |
| 133 | 148 |
| 134 mojo::MessagePipe pipe; | 149 mojo::Handle Internals::TakeServicesProvidedByEmbedder() { |
| 135 document_view_->imported_services()->ConnectToService(interface_name, | 150 if (!document_view_) |
| 136 pipe.handle1.Pass()); | 151 return mojo::Handle(); |
| 137 return pipe.handle0.release(); | 152 return document_view_->TakeServicesProvidedByEmbedder().release(); |
| 138 } | 153 } |
| 139 | 154 |
| 140 // Returns a MessagePipe handle that's connected to this Shell. The caller | 155 // Returns a MessagePipe handle that's connected to this Shell. The caller |
| 141 // owns the handle and is expected to use it to create the JS Application for | 156 // owns the handle and is expected to use it to create the JS Application for |
| 142 // the DocumentView. | 157 // the DocumentView. |
| 143 mojo::Handle Internals::PassShellProxyHandle() { | 158 mojo::Handle Internals::TakeShellProxyHandle() { |
| 144 mojo::ShellPtr shell; | 159 mojo::ShellPtr shell; |
| 145 if (!shell_binding_.is_bound()) | 160 if (!shell_binding_.is_bound()) |
| 146 shell_binding_.Bind(GetProxy(&shell)); | 161 shell_binding_.Bind(GetProxy(&shell)); |
| 147 return shell.PassMessagePipe().release(); | 162 return shell.PassMessagePipe().release(); |
| 148 } | 163 } |
| 149 | 164 |
| 150 void Internals::ConnectToApplication( | 165 void Internals::ConnectToApplication( |
| 151 const mojo::String& application_url, | 166 const mojo::String& application_url, |
| 152 mojo::InterfaceRequest<mojo::ServiceProvider> services, | 167 mojo::InterfaceRequest<mojo::ServiceProvider> services, |
| 153 mojo::ServiceProviderPtr exposed_services) { | 168 mojo::ServiceProviderPtr exposed_services) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 172 } | 187 } |
| 173 | 188 |
| 174 void Internals::pauseAnimations(double pauseTime) { | 189 void Internals::pauseAnimations(double pauseTime) { |
| 175 if (pauseTime < 0) | 190 if (pauseTime < 0) |
| 176 return; | 191 return; |
| 177 | 192 |
| 178 document_view_->web_view()->mainFrame()->document().pauseAnimationsForTestin
g(pauseTime); | 193 document_view_->web_view()->mainFrame()->document().pauseAnimationsForTestin
g(pauseTime); |
| 179 } | 194 } |
| 180 | 195 |
| 181 } // namespace sky | 196 } // namespace sky |
| OLD | NEW |