Hi,
I am trying to determine from within a Javascript XPComponent the size
of a set
of images. I have just started to learn about the internals of
Mozilla/
Firefox and based on the information collected on the web, here is
what my code looks like[ 1 ].
My problem is that this does not work consistently: I sometimes works
for some images. It
sometimes crashes the browser (I think when the number of concurrent
requests is too high??).

I was wondering if someone has done this before or is familiar enough
with the internals of firefox to point me where my mistake is.

Thank you!!!!
-Edwn



////////////////////////////////////////////
// Image Utils                            //
////////////////////////////////////////////
var ImageUtils = function()
{
        function newURI( url )
        {
                var ioService = 
Components.classes["@mozilla.org/network/io-service;
1"]
                                                                  .getService()
                                                                  
.QueryInterface( Components.interfaces.nsIIOService );
                return ioService.newURI(url, null, null);
        }

        var imgLoader = Components.classes["@mozilla.org/image/loader;1"]
                                                          .getService()
                                                          .QueryInterface( 
Components.interfaces.imgILoader );

        var workingSet = {};

        var that = {};

        that.askImageSize = function( url, callbackFunc )
        {
                // somebody has already requested this image
                if( workingSet[ url ] != null )
                {
                        workingSet[ url ].push( callbackFunc );
                        return;
                }

                var uri = newURI( url );
                $debug( "Asked size information for: " + uri.spec );

                workingSet[ uri.spec ] = [ callbackFunc ];

                imgLoader.loadImage( uri, uri, uri, null, that, null, null, 
null,
null );
        }

        // imgIDecoderObserver
        that.onDataAvailable = function(){ $debug( "onDataAvailable" ) };
        that.onStartDecode   = function(){ $debug( "onStartDecode" ) };
        that.onStartFrame    = function(){ $debug( "onStartFrame" ) };
        that.onStopContainer = function(){ $debug( "onStopContainer" ) };
        that.onStopFrame     = function(){ $debug( "onStopFrame" ) };

        that.onStopDecode     = function ( request, status, statusArg )
        {
                $debug( "onStopDecode:" + status + ".." + statusArg );
        };

        that.onStartContainer = function (request, container )
        {
                $debug( "onStartContainer" );

                // extract size information
                var url    = request.URI.spec;          // we encoded the image 
url in the
title
                var width  = container.width;
                var height = container.height;

                $debug( "Ruler: " + url + " = " + width + " x " + height );

                var requestors = workingSet[ url ];

                if( requestors == null )
                        $debug( "BUG: There is now requestors for: " + url );
                else
                        for( var i = 0; i < requestors.length; i++ )
                                requestors[ i ].call( this, url, width, height 
);
        }

        that.runUnitTests = function()
        {
                function getImageSize( aURL )
                {
                        that.askImageSize(      aURL,
                                                                function( url, 
width, height )
                                                                {
                                                                        $debug( 
"The result is:" + url + " -- w:"+ width + " -- h: "
+ height );
                                                                }
                                                                );
                }

                getImageSize( "http://flickr.com/photo_zoom.gne?
id=384986014&size=o" );
                // getImageSize( "http://flickr.com/photo_zoom.gne?
id=344620838&size=o" );
                // getImageSize( "http://flickr.com/photo_zoom.gne?
id=344620839&size=o" );
                // getImageSize( "http://flickr.com/photo_zoom.gne?
id=344620840&size=o" );
                // getImageSize( "http://www.techcrunch.com/wp-content/
photobucketlogo210.gif" );
        }

        return that;
}();

_______________________________________________
dev-tech-layout mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-layout

Reply via email to