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

Side by Side Diff: Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h

Issue 7189061: Merge 89236 - 2011-06-19 Mads Ager <ager@chromium.org> (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/782/
Patch Set: Created 9 years, 6 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
« no previous file with comments | « Source/WebCore/bindings/v8/V8Proxy.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 RefPtr<ArrayClass> array = ArrayClass::create(buf, offset, length); 66 RefPtr<ArrayClass> array = ArrayClass::create(buf, offset, length);
67 if (!array) { 67 if (!array) {
68 V8Proxy::setDOMException(INDEX_SIZE_ERR); 68 V8Proxy::setDOMException(INDEX_SIZE_ERR);
69 return notHandledByInterceptor(); 69 return notHandledByInterceptor();
70 } 70 }
71 // Transform the holder into a wrapper object for the array. 71 // Transform the holder into a wrapper object for the array.
72 V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get()); 72 V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get());
73 if (hasIndexer) 73 if (hasIndexer)
74 args.Holder()->SetIndexedPropertiesToExternalArrayData(array.get()->base Address(), arrayType, array.get()->length()); 74 args.Holder()->SetIndexedPropertiesToExternalArrayData(array.get()->base Address(), arrayType, array.get()->length());
75 return toV8(array.release(), args.Holder()); 75 return toV8(array.release(), args.Holder(), MarkIndependent);
76 } 76 }
77 77
78 // Template function used by the ArrayBufferView*Constructor callbacks. 78 // Template function used by the ArrayBufferView*Constructor callbacks.
79 template<class ArrayClass, class ElementType> 79 template<class ArrayClass, class ElementType>
80 v8::Handle<v8::Value> constructWebGLArray(const v8::Arguments& args, WrapperType Info* type, v8::ExternalArrayType arrayType) 80 v8::Handle<v8::Value> constructWebGLArray(const v8::Arguments& args, WrapperType Info* type, v8::ExternalArrayType arrayType)
81 { 81 {
82 if (!args.IsConstructCall()) 82 if (!args.IsConstructCall())
83 return throwError("DOM object constructor cannot be called as a function ."); 83 return throwError("DOM object constructor cannot be called as a function .");
84 84
85 int argLen = args.Length(); 85 int argLen = args.Length();
86 if (!argLen) { 86 if (!argLen) {
87 // This happens when we return a previously constructed 87 // This happens when we return a previously constructed
88 // ArrayBufferView, e.g. from the call to <Type>Array.subset(). 88 // ArrayBufferView, e.g. from the call to <Type>Array.subset().
89 // The V8DOMWrapper will set the internal pointer in the 89 // The V8DOMWrapper will set the internal pointer in the
90 // created object. Unfortunately it doesn't look like it's 90 // created object. Unfortunately it doesn't look like it's
91 // possible to distinguish between this case and that where 91 // possible to distinguish between this case and that where
92 // the user calls "new <Type>Array()" from JavaScript. We must 92 // the user calls "new <Type>Array()" from JavaScript. We must
93 // construct an empty view to avoid crashes when fetching the 93 // construct an empty view to avoid crashes when fetching the
94 // length. 94 // length.
95 RefPtr<ArrayClass> array = ArrayClass::create(0); 95 RefPtr<ArrayClass> array = ArrayClass::create(0);
96 // Transform the holder into a wrapper object for the array. 96 // Transform the holder into a wrapper object for the array.
97 V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get()); 97 V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get());
98 // Do not call SetIndexedPropertiesToExternalArrayData on this 98 // Do not call SetIndexedPropertiesToExternalArrayData on this
99 // object. Not only is there no point from a performance 99 // object. Not only is there no point from a performance
100 // perspective, but doing so causes errors in the subset() case. 100 // perspective, but doing so causes errors in the subset() case.
101 return toV8(array.release(), args.Holder()); 101 return toV8(array.release(), args.Holder(), MarkIndependent);
102 } 102 }
103 103
104 // Supported constructors: 104 // Supported constructors:
105 // WebGL<T>Array(n) where n is an integer: 105 // WebGL<T>Array(n) where n is an integer:
106 // -- create an empty array of n elements 106 // -- create an empty array of n elements
107 // WebGL<T>Array(arr) where arr is an array: 107 // WebGL<T>Array(arr) where arr is an array:
108 // -- create a WebGL<T>Array containing the contents of "arr" 108 // -- create a WebGL<T>Array containing the contents of "arr"
109 // WebGL<T>Array(buf, offset, length) 109 // WebGL<T>Array(buf, offset, length)
110 // -- create a WebGL<T>Array pointing to the ArrayBuffer 110 // -- create a WebGL<T>Array pointing to the ArrayBuffer
111 // "buf", starting at the specified offset, for the given 111 // "buf", starting at the specified offset, for the given
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 // Need to copy the incoming array into the newly created ArrayBufferVie w. 150 // Need to copy the incoming array into the newly created ArrayBufferVie w.
151 for (unsigned i = 0; i < len; i++) { 151 for (unsigned i = 0; i < len; i++) {
152 v8::Local<v8::Value> val = srcArray->Get(v8::Integer::NewFromUnsigne d(i)); 152 v8::Local<v8::Value> val = srcArray->Get(v8::Integer::NewFromUnsigne d(i));
153 array->set(i, val->NumberValue()); 153 array->set(i, val->NumberValue());
154 } 154 }
155 } 155 }
156 156
157 // Transform the holder into a wrapper object for the array. 157 // Transform the holder into a wrapper object for the array.
158 V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get()); 158 V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get());
159 args.Holder()->SetIndexedPropertiesToExternalArrayData(array.get()->baseAddr ess(), arrayType, array.get()->length()); 159 args.Holder()->SetIndexedPropertiesToExternalArrayData(array.get()->baseAddr ess(), arrayType, array.get()->length());
160 return toV8(array.release(), args.Holder()); 160 return toV8(array.release(), args.Holder(), MarkIndependent);
161 } 161 }
162 162
163 template <class CPlusPlusArrayType, class JavaScriptWrapperArrayType> 163 template <class CPlusPlusArrayType, class JavaScriptWrapperArrayType>
164 v8::Handle<v8::Value> setWebGLArrayHelper(const v8::Arguments& args) 164 v8::Handle<v8::Value> setWebGLArrayHelper(const v8::Arguments& args)
165 { 165 {
166 if (args.Length() < 1) { 166 if (args.Length() < 1) {
167 V8Proxy::setDOMException(SYNTAX_ERR); 167 V8Proxy::setDOMException(SYNTAX_ERR);
168 return notHandledByInterceptor(); 168 return notHandledByInterceptor();
169 } 169 }
170 170
(...skipping 30 matching lines...) Expand all
201 return v8::Undefined(); 201 return v8::Undefined();
202 } 202 }
203 203
204 V8Proxy::setDOMException(SYNTAX_ERR); 204 V8Proxy::setDOMException(SYNTAX_ERR);
205 return notHandledByInterceptor(); 205 return notHandledByInterceptor();
206 } 206 }
207 207
208 } 208 }
209 209
210 #endif // V8ArrayBufferViewCustom_h 210 #endif // V8ArrayBufferViewCustom_h
OLDNEW
« no previous file with comments | « Source/WebCore/bindings/v8/V8Proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698