Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: Source/bindings/dart/custom/DartNodeCustom.cpp

Issue 450053002: Throw exception on null pointers in raw toNative (Closed) Base URL: svn://svn.chromium.org/blink/branches/dart/dartium
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011, Google Inc. 1 // Copyright 2011, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 47
48 namespace DartNodeInternal { 48 namespace DartNodeInternal {
49 49
50 // This function is customized to take advantage of the optional 4th argument: s houldLazyAttach. 50 // This function is customized to take advantage of the optional 4th argument: s houldLazyAttach.
51 void insertBeforeCallback(Dart_NativeArguments args) 51 void insertBeforeCallback(Dart_NativeArguments args)
52 { 52 {
53 Dart_Handle exception = 0; 53 Dart_Handle exception = 0;
54 { 54 {
55 Node* receiver = DartDOMWrapper::receiver<Node>(args); 55 Node* receiver = DartDOMWrapper::receiver<Node>(args);
56 56
57 Node* newChild = DartNode::toNative(args, 1, exception); 57 Node* newChild = DartNode::toNativeWithNullCheck(args, 1, exception);
58 if (exception) 58 if (exception)
59 goto fail; 59 goto fail;
60 60
61 Node* refChild = DartNode::toNative(args, 2, exception); 61 Node* refChild = DartNode::toNativeWithNullCheck(args, 2, exception);
62 if (exception) 62 if (exception)
63 goto fail; 63 goto fail;
64 64
65 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope; 65 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope;
66 66
67 DartExceptionState es; 67 DartExceptionState es;
68 receiver->insertBefore(newChild, refChild, es); 68 receiver->insertBefore(newChild, refChild, es);
69 if (es.hadException()) { 69 if (es.hadException()) {
70 exception = DartDOMWrapper::exceptionCodeToDartException(es); 70 exception = DartDOMWrapper::exceptionCodeToDartException(es);
71 goto fail; 71 goto fail;
72 } 72 }
73 73
74 DartDOMWrapper::returnToDart<DartNode>(args, newChild); 74 DartDOMWrapper::returnToDart<DartNode>(args, newChild);
75 return; 75 return;
76 } 76 }
77 77
78 fail: 78 fail:
79 Dart_ThrowException(exception); 79 Dart_ThrowException(exception);
80 ASSERT_NOT_REACHED(); 80 ASSERT_NOT_REACHED();
81 } 81 }
82 82
83 // This function is customized to take advantage of the optional 4th argument: s houldLazyAttach. 83 // This function is customized to take advantage of the optional 4th argument: s houldLazyAttach.
84 void replaceChildCallback(Dart_NativeArguments args) 84 void replaceChildCallback(Dart_NativeArguments args)
85 { 85 {
86 Dart_Handle exception = 0; 86 Dart_Handle exception = 0;
87 { 87 {
88 Node* receiver = DartDOMWrapper::receiver<Node>(args); 88 Node* receiver = DartDOMWrapper::receiver<Node>(args);
89 89
90 Node* newChild = DartNode::toNative(args, 1, exception); 90 Node* newChild = DartNode::toNativeWithNullCheck(args, 1, exception);
91 if (exception) 91 if (exception)
92 goto fail; 92 goto fail;
93 93
94 Node* oldChild = DartNode::toNative(args, 2, exception); 94 Node* oldChild = DartNode::toNativeWithNullCheck(args, 2, exception);
95 if (exception) 95 if (exception)
96 goto fail; 96 goto fail;
97 97
98 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope; 98 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope;
99 99
100 DartExceptionState es; 100 DartExceptionState es;
101 receiver->replaceChild(newChild, oldChild, es); 101 receiver->replaceChild(newChild, oldChild, es);
102 if (es.hadException()) { 102 if (es.hadException()) {
103 exception = DartDOMWrapper::exceptionCodeToDartException(es); 103 exception = DartDOMWrapper::exceptionCodeToDartException(es);
104 goto fail; 104 goto fail;
105 } 105 }
106 106
107 DartDOMWrapper::returnToDart<DartNode>(args, newChild); 107 DartDOMWrapper::returnToDart<DartNode>(args, newChild);
108 return; 108 return;
109 } 109 }
110 110
111 fail: 111 fail:
112 Dart_ThrowException(exception); 112 Dart_ThrowException(exception);
113 ASSERT_NOT_REACHED(); 113 ASSERT_NOT_REACHED();
114 } 114 }
115 115
116 // Custom handling of the return value. 116 // Custom handling of the return value.
117 void removeChildCallback(Dart_NativeArguments args) 117 void removeChildCallback(Dart_NativeArguments args)
118 { 118 {
119 Dart_Handle exception = 0; 119 Dart_Handle exception = 0;
120 { 120 {
121 Node* receiver = DartDOMWrapper::receiver<Node>(args); 121 Node* receiver = DartDOMWrapper::receiver<Node>(args);
122 122
123 Node* child = DartNode::toNative(args, 1, exception); 123 Node* child = DartNode::toNativeWithNullCheck(args, 1, exception);
124 if (exception) 124 if (exception)
125 goto fail; 125 goto fail;
126 126
127 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope; 127 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope;
128 128
129 DartExceptionState es; 129 DartExceptionState es;
130 receiver->removeChild(child, es); 130 receiver->removeChild(child, es);
131 if (es.hadException()) { 131 if (es.hadException()) {
132 exception = DartDOMWrapper::exceptionCodeToDartException(es); 132 exception = DartDOMWrapper::exceptionCodeToDartException(es);
133 goto fail; 133 goto fail;
134 } 134 }
135 135
136 DartDOMWrapper::returnToDart<DartNode>(args, child); 136 DartDOMWrapper::returnToDart<DartNode>(args, child);
137 return; 137 return;
138 } 138 }
139 139
140 fail: 140 fail:
141 Dart_ThrowException(exception); 141 Dart_ThrowException(exception);
142 ASSERT_NOT_REACHED(); 142 ASSERT_NOT_REACHED();
143 } 143 }
144 144
145 // This function is customized to enable lazy attaching - see the last argument to appendChild. 145 // This function is customized to enable lazy attaching - see the last argument to appendChild.
146 void appendChildCallback(Dart_NativeArguments args) 146 void appendChildCallback(Dart_NativeArguments args)
147 { 147 {
148 Dart_Handle exception = 0; 148 Dart_Handle exception = 0;
149 { 149 {
150 Node* receiver = DartDOMWrapper::receiver<Node>(args); 150 Node* receiver = DartDOMWrapper::receiver<Node>(args);
151 151
152 Node* child = DartNode::toNative(args, 1, exception); 152 Node* child = DartNode::toNativeWithNullCheck(args, 1, exception);
153 if (exception) 153 if (exception)
154 goto fail; 154 goto fail;
155 155
156 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope; 156 CustomElementCallbackDispatcher::CallbackDeliveryScope deliveryScope;
157 157
158 DartExceptionState es; 158 DartExceptionState es;
159 receiver->appendChild(child, es); 159 receiver->appendChild(child, es);
160 if (es.hadException()) { 160 if (es.hadException()) {
161 exception = DartDOMWrapper::exceptionCodeToDartException(es); 161 exception = DartDOMWrapper::exceptionCodeToDartException(es);
162 goto fail; 162 goto fail;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 case Node::DOCUMENT_TYPE_NODE: 222 case Node::DOCUMENT_TYPE_NODE:
223 return DartDocumentType::createWrapper(domData, static_cast<DocumentType *>(node)); 223 return DartDocumentType::createWrapper(domData, static_cast<DocumentType *>(node));
224 case Node::DOCUMENT_FRAGMENT_NODE: 224 case Node::DOCUMENT_FRAGMENT_NODE:
225 return DartDocumentFragment::createWrapper(domData, static_cast<Document Fragment*>(node)); 225 return DartDocumentFragment::createWrapper(domData, static_cast<Document Fragment*>(node));
226 default: break; // XPATH_NAMESPACE_NODE 226 default: break; // XPATH_NAMESPACE_NODE
227 } 227 }
228 return DartDOMWrapper::createWrapper<DartNode>(domData, node); 228 return DartDOMWrapper::createWrapper<DartNode>(domData, node);
229 } 229 }
230 230
231 } 231 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698