OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/service.h" | 5 #include "vm/service.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
9 #include "platform/globals.h" | 9 #include "platform/globals.h" |
10 | 10 |
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 if (handler == NULL) { | 578 if (handler == NULL) { |
579 handler = FindRootEmbedderHandler(c_method_name); | 579 handler = FindRootEmbedderHandler(c_method_name); |
580 } | 580 } |
581 | 581 |
582 if (handler != NULL) { | 582 if (handler != NULL) { |
583 EmbedderHandleMessage(handler, &js); | 583 EmbedderHandleMessage(handler, &js); |
584 js.PostReply(); | 584 js.PostReply(); |
585 return; | 585 return; |
586 } | 586 } |
587 | 587 |
588 if (ExtensionHandlerExists(method_name)) { | 588 if (ScheduleExtensionHandler(method_name, |
589 InvokeExtensionHandler(method_name, | 589 param_keys, |
590 param_keys, | 590 param_values, |
591 param_values, | 591 reply_port, |
592 reply_port, | 592 seq)) { |
593 seq); | 593 // Schedule was successful. Extension code will post a reply |
594 // The reply is posted asynchronously. | 594 // asynchronously. |
595 return; | 595 return; |
596 } | 596 } |
597 | 597 |
598 PrintUnrecognizedMethodError(&js); | 598 PrintUnrecognizedMethodError(&js); |
599 js.PostReply(); | 599 js.PostReply(); |
600 return; | 600 return; |
601 } | 601 } |
602 } | 602 } |
603 | 603 |
604 | 604 |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 while (current != NULL) { | 872 while (current != NULL) { |
873 if (strcmp(name, current->name()) == 0) { | 873 if (strcmp(name, current->name()) == 0) { |
874 return current; | 874 return current; |
875 } | 875 } |
876 current = current->next(); | 876 current = current->next(); |
877 } | 877 } |
878 return NULL; | 878 return NULL; |
879 } | 879 } |
880 | 880 |
881 | 881 |
882 bool Service::ExtensionHandlerExists(const String& method) { | 882 bool Service::ScheduleExtensionHandler(const String& method_name, |
883 ASSERT(!method.IsNull()); | 883 const Array& parameter_keys, |
884 const Library& developer_lib = Library::Handle(Library::DeveloperLibrary()); | 884 const Array& parameter_values, |
885 ASSERT(!developer_lib.IsNull()); | 885 const Instance& reply_port, |
886 const Function& extension_exists = Function::Handle( | 886 const Instance& id) { |
887 developer_lib.LookupLocalFunction(Symbols::_extensionExists())); | |
888 ASSERT(!extension_exists.IsNull()); | |
889 const Array& arguments = Array::Handle(Array::New(1)); | |
890 ASSERT(!arguments.IsNull()); | |
891 arguments.SetAt(0, method); | |
892 return (DartEntry::InvokeFunction(extension_exists, arguments) == | |
893 Object::bool_true().raw()); | |
894 } | |
895 | |
896 | |
897 bool Service::InvokeExtensionHandler(const String& method_name, | |
898 const Array& parameter_keys, | |
899 const Array& parameter_values, | |
900 const Instance& reply_port, | |
901 const Instance& id) { | |
902 ASSERT(!method_name.IsNull()); | 887 ASSERT(!method_name.IsNull()); |
903 ASSERT(!parameter_keys.IsNull()); | 888 ASSERT(!parameter_keys.IsNull()); |
904 ASSERT(!parameter_values.IsNull()); | 889 ASSERT(!parameter_values.IsNull()); |
905 ASSERT(!reply_port.IsNull()); | 890 ASSERT(!reply_port.IsNull()); |
906 const Library& developer_lib = Library::Handle(Library::DeveloperLibrary()); | 891 const Library& developer_lib = Library::Handle(Library::DeveloperLibrary()); |
907 ASSERT(!developer_lib.IsNull()); | 892 ASSERT(!developer_lib.IsNull()); |
908 const Function& invoke_extension = Function::Handle( | 893 const Function& schedule_extension = Function::Handle( |
909 developer_lib.LookupLocalFunction(Symbols::_invokeExtension())); | 894 developer_lib.LookupLocalFunction(Symbols::_scheduleExtension())); |
910 ASSERT(!invoke_extension.IsNull()); | 895 ASSERT(!schedule_extension.IsNull()); |
911 const Array& arguments = Array::Handle(Array::New(5)); | 896 const Array& arguments = Array::Handle(Array::New(5)); |
912 arguments.SetAt(0, method_name); | 897 arguments.SetAt(0, method_name); |
913 arguments.SetAt(1, parameter_keys); | 898 arguments.SetAt(1, parameter_keys); |
914 arguments.SetAt(2, parameter_values); | 899 arguments.SetAt(2, parameter_values); |
915 arguments.SetAt(3, reply_port); | 900 arguments.SetAt(3, reply_port); |
916 arguments.SetAt(4, id); | 901 arguments.SetAt(4, id); |
917 return (DartEntry::InvokeFunction(invoke_extension, arguments) == | 902 return (DartEntry::InvokeFunction(schedule_extension, arguments) == |
918 Object::bool_true().raw()); | 903 Object::bool_true().raw()); |
919 } | 904 } |
920 | 905 |
921 | 906 |
922 static const MethodParameter* get_isolate_params[] = { | 907 static const MethodParameter* get_isolate_params[] = { |
923 ISOLATE_PARAMETER, | 908 ISOLATE_PARAMETER, |
924 NULL, | 909 NULL, |
925 }; | 910 }; |
926 | 911 |
927 | 912 |
(...skipping 2206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3134 ServiceMethodDescriptor& method = service_methods_[i]; | 3119 ServiceMethodDescriptor& method = service_methods_[i]; |
3135 if (strcmp(method_name, method.name) == 0) { | 3120 if (strcmp(method_name, method.name) == 0) { |
3136 return &method; | 3121 return &method; |
3137 } | 3122 } |
3138 } | 3123 } |
3139 return NULL; | 3124 return NULL; |
3140 } | 3125 } |
3141 | 3126 |
3142 | 3127 |
3143 } // namespace dart | 3128 } // namespace dart |
OLD | NEW |