Title: [95808] branches/chromium/874

Diff

Copied: branches/chromium/874/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor-expected.txt (from rev 95728, trunk/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor-expected.txt) (0 => 95808)


--- branches/chromium/874/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor-expected.txt	                        (rev 0)
+++ branches/chromium/874/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor-expected.txt	2011-09-23 16:09:36 UTC (rev 95808)
@@ -0,0 +1,8 @@
+Verifies that WebGLRenderingContext::getAttachedShaders doesn't crash when an accessor property is defined on Array.prototype.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Copied: branches/chromium/874/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor.html (from rev 95728, trunk/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor.html) (0 => 95808)


--- branches/chromium/874/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor.html	                        (rev 0)
+++ branches/chromium/874/LayoutTests/fast/canvas/webgl/shader-deleted-by-accessor.html	2011-09-23 16:09:36 UTC (rev 95808)
@@ -0,0 +1,51 @@
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+function gc()
+{
+    if (window.GCController)
+        return GCController.collect();
+
+    for (var i = 0; i < 10000; ++i)
+        var s = new String("AAAA");
+}
+
+description("Verifies that WebGLRenderingContext::getAttachedShaders doesn't crash when an accessor property is defined on Array.prototype.");
+
+context = create3DContext();
+program = context.createProgram();
+
+shader1 = context.createShader(context.VERTEX_SHADER);
+context.attachShader(program, shader1);
+
+for (var i = 0; i < 10; ++i) {
+    shader2 = context.createShader(context.FRAGMENT_SHADER);
+    context.attachShader(program, shader2);
+
+    Array.prototype.__defineSetter__(0, function() {
+        context.detachShader(program, shader2);
+        context.deleteShader(shader2);
+        shader2 = null;
+        gc();
+    });
+
+    shaders = context.getAttachedShaders(program);
+    context.getShaderParameter(shaders[1], 0);
+}
+
+successfullyParsed = true;
+</script>
+
+<script src=""
+</body>
+</html>
+

Modified: branches/chromium/874/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp (95807 => 95808)


--- branches/chromium/874/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp	2011-09-23 15:57:13 UTC (rev 95807)
+++ branches/chromium/874/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp	2011-09-23 16:09:36 UTC (rev 95808)
@@ -212,7 +212,7 @@
     WebGLProgram* program = toWebGLProgram(exec->argument(0));
     if (exec->hadException())
         return jsNull();
-    Vector<WebGLShader*> shaders;
+    Vector<RefPtr<WebGLShader> > shaders;
     bool succeed = context->getAttachedShaders(program, shaders, ec);
     if (ec) {
         setDOMException(exec, ec);
@@ -222,7 +222,7 @@
         return jsNull();
     MarkedArgumentBuffer list;
     for (size_t ii = 0; ii < shaders.size(); ++ii)
-        list.append(toJS(exec, globalObject(), shaders[ii]));
+        list.append(toJS(exec, globalObject(), shaders[ii].get()));
     return constructArray(exec, globalObject(), list);
 }
 

Modified: branches/chromium/874/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp (95807 => 95808)


--- branches/chromium/874/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp	2011-09-23 15:57:13 UTC (rev 95807)
+++ branches/chromium/874/Source/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp	2011-09-23 16:09:36 UTC (rev 95808)
@@ -260,7 +260,7 @@
         return notHandledByInterceptor();
     }
     WebGLProgram* program = V8WebGLProgram::HasInstance(args[0]) ? V8WebGLProgram::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0;
-    Vector<WebGLShader*> shaders;
+    Vector<RefPtr<WebGLShader> > shaders;
     bool succeed = context->getAttachedShaders(program, shaders, ec);
     if (ec) {
         V8Proxy::setDOMException(ec);
@@ -270,7 +270,7 @@
         return v8::Null();
     v8::Local<v8::Array> array = v8::Array::New(shaders.size());
     for (size_t ii = 0; ii < shaders.size(); ++ii)
-        array->Set(v8::Integer::New(ii), toV8(shaders[ii]));
+        array->Set(v8::Integer::New(ii), toV8(shaders[ii].get()));
     return array;
 }
 

Modified: branches/chromium/874/Source/WebCore/html/canvas/WebGLRenderingContext.cpp (95807 => 95808)


--- branches/chromium/874/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2011-09-23 15:57:13 UTC (rev 95807)
+++ branches/chromium/874/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2011-09-23 16:09:36 UTC (rev 95808)
@@ -1900,7 +1900,7 @@
     return WebGLActiveInfo::create(info.name, info.type, info.size);
 }
 
-bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<WebGLShader*>& shaderObjects, ExceptionCode& ec)
+bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<RefPtr<WebGLShader> >& shaderObjects, ExceptionCode& ec)
 {
     UNUSED_PARAM(ec);
     shaderObjects.clear();

Modified: branches/chromium/874/Source/WebCore/html/canvas/WebGLRenderingContext.h (95807 => 95808)


--- branches/chromium/874/Source/WebCore/html/canvas/WebGLRenderingContext.h	2011-09-23 15:57:13 UTC (rev 95807)
+++ branches/chromium/874/Source/WebCore/html/canvas/WebGLRenderingContext.h	2011-09-23 16:09:36 UTC (rev 95808)
@@ -143,7 +143,7 @@
 
     PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GC3Duint index, ExceptionCode&);
     PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GC3Duint index, ExceptionCode&);
-    bool getAttachedShaders(WebGLProgram*, Vector<WebGLShader*>&, ExceptionCode&);
+    bool getAttachedShaders(WebGLProgram*, Vector<RefPtr<WebGLShader> >&, ExceptionCode&);
     GC3Dint getAttribLocation(WebGLProgram*, const String& name);
     WebGLGetInfo getBufferParameter(GC3Denum target, GC3Denum pname, ExceptionCode&);
     PassRefPtr<WebGLContextAttributes> getContextAttributes();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to