2012-01-24 10 views
5

Estoy frente a un problema con CSP en mi extensión ...tema CSP con createObjectURL en WebkitBlobBuilder

utilizo un script de contenido con el fin de cambiar las imágenes en las páginas web. Mi script contenido fue añadiendo sus propias imágenes a sitios web así que tenía la siguiente advertencia:

[Report Only] Refused to load image from 'chrome://extension/xxx/...' 
because of Content-Security-Policy. 
The page at https://plus.google.com/u/0/hot displayed insecure content 
from chrome://extension/xxx/.... 

por lo que añade la siguiente línea al manifiesta:

"content_security_policy": "default-src *" 

y la advertencia desapareció ...

Ahora, tengo que modificar las imágenes, para hacer eso, las escribo en un lienzo, obtengo el dataURL y lo convierto en un WebkitBlobBuilder para evitar la pérdida de memoria debido al cambio de src en la etiqueta img (con un blob, puedo revocar una vez que se ha usado y se liberó la memoria ...)

parte del código:

//Code to create a blob from dataURI 
    base.dataURItoBlob = function(dataURI, callback) { 
     var byteString; 
     if (dataURI.split(',')[0].indexOf('base64') >= 0) 
      byteString = atob(dataURI.split(',')[1]); 
     else 
      byteString = unescape(dataURI.split(',')[1]); 
     var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; 
     var ab = new ArrayBuffer(byteString.length); 
     var ia = new Uint8Array(ab); 
     for (var i = 0; i < byteString.length; i++) { 
      ia[i] = byteString.charCodeAt(i); 
     } 
     var bb = new WebKitBlobBuilder(); 
     bb.append(ab); 
     return bb.getBlob(mimeString); 
    }; 

    //Code to display the blob on an image : 
    //Write image on a canvas : 
    base.ctx.putImageData(cData, img.leftPos, img.topPos); 
    //Get a blob 
    var blobData = base.dataURItoBlob(base.canvas.toDataURL("image/png")); 
    //Create an URL from the blob 
    var urlfile = window.webkitURL.createObjectURL(dataBlob); 
    //set it on the img tag 
    img.attr("src", urlfile); 
    //Revoke the blob once loaded 
    img.load(function() { 
    window.webkitURL.revokeObjectURL(urlfile); 
    }); 

Este código funciona muy bien .... No hay más pérdida de memoria debido a un cambio en mi src etiqueta img.

pero tengo esta advertencia:

[Report Only] Refused to load image from 'blob:https%3A%2F 
%2Fplus.google.com/52ac1648-64d6-4fce-bb35-537d939d5007' because of 
Content-Security-Policy. 
The page at https://plus.google.com/u/0/hot displayed insecure content 
from blob:https%3A%2F%2Fplus.google.com/52ac1648-64d6-4fce- 
bb35-537d939d5007. 

¿Por qué SRC-defecto, el contenido de la política no se aplica a manchas ??

Gracias!

+2

Parece que esto podría ser un error en la implementación de CSP, por lo que puedo decir, blobs deben ser reconocidos como un esquema válido: ¿puedes archivar un error en http://new.crbug.com/? –

Respuesta