| 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 | 
|---|