Ignore:
Timestamp:
03/10/10 17:32:28 (2 years ago)
Author:
sys
Message:

desk.openRefUri : sécurisation en cas d'appel par d'autres frames et GC intempestifs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Xul_Wsp/content/scenariWsp/desks/wspDesk/wspDesk.js

    r15076 r15089  
    118118                                        Components.classes["@scenari.com/sharedres;1"].getService(Components.interfaces.scISharedRes).reset(); 
    119119                                        if(system.isMac){ 
    120                                                 /* Horrid hack to work around xulrunner bug under MacOSX: The menubar will crash xulrunner after a window.location.reload() */ 
     120                                                // Horrid hack to work around xulrunner bug under MacOSX: The menubar will crash xulrunner after a window.location.reload() 
    121121                                                system.appRestart(true); 
    122122                                        } else { 
     
    325325         
    326326        /**  
    327          * @Api Desks avec contenus. Enregistre tout ce qui est dirty concernant le wsp pCdWsp ou 
     327         * @Api Desks avec ContentViewController. Enregistre tout ce qui est dirty concernant le wsp pCdWsp ou 
    328328         * tout wsp confondu si pCdWsp n'est pas renseigné. 
    329329         */ 
     
    333333         
    334334        /** 
    335          * @Api Desks avec contenus. Permet d'accéder à une uri quelconque. 
     335         * @Api Desks avec ContentViewController. Permet d'accéder à une uri quelconque. 
    336336         */ 
    337337        openRefUri : function(pRefUri, pOptions) { 
    338                 try { 
    339                         if(!pRefUri) return; 
    340                         if(! src.isSrcId(pRefUri)) desk.getController("ContentViewController").openSrcUri(pRefUri, pOptions); 
    341                         else { 
    342                                 function cbGetSrcUri(pShortDesc, pCdError) { 
    343                                         if(pShortDesc) desk.getController("ContentViewController").openSrcUri(pShortDesc.srcUri, pOptions); 
     338                if(!pRefUri) return; 
     339                //Si l'appel vient d'une autre frame (mainview), les appels asynchrones qui seront effectués pour  
     340                //effectuer cet openRefUri peuvent échouer alléatoirement dû à des GC effectués dans l'autre frame. 
     341                //Le passage par un timer permet de réassocier les objets qui seront créés à cette frame. 
     342                //Bug peut-etre lié à notre utilisation de l'ancien mode de sécurité (xpcnativewrappers=no dans 
     343                //les manifests chrome). A réévaluer quand on aurra purgé xpcnativewrappers=no. 
     344                system.setTimer({notify:function(pTimer){ 
     345                        try { 
     346                                if(! src.isSrcId(pRefUri)) desk.getController("ContentViewController").openSrcUri(pRefUri, pOptions); 
     347                                else { 
     348                                        function cbGetSrcUri(pShortDesc, pCdError) { 
     349                                                if(pShortDesc) desk.getController("ContentViewController").openSrcUri(pShortDesc.srcUri, pOptions); 
     350                                        } 
     351                                        var vUriObjectWsp = new UriObjectWsp(this.getWsp().getCode(), this.getWsp().getDataProvider()); 
     352                                        vUriObjectWsp.loadShortDesc(pRefUri, cbGetSrcUri); 
    344353                                } 
    345                                 var vUriObjectWsp = new UriObjectWsp(this.getWsp().getCode(), this.getWsp().getDataProvider()); 
    346                                 vUriObjectWsp.loadShortDesc(pRefUri, cbGetSrcUri); 
    347                         } 
    348                 }catch(e){log.debug("desk.openRefUri failed for '"+pRefUri+"': "+e);} 
     354                        }catch(e){log.debug("desk.openRefUri failed for '"+pRefUri+"': "+e);} 
     355                }}, 0); 
    349356        }, 
    350357         
     
    403410         
    404411        /**  
    405          * Transfert une requete vers la ContentView courante. 
     412         * @Api Desks avec ContentViewController. Transfert une requete vers la ContentView courante. 
    406413         *  
    407414         * @param pKeepIfViewUnvailable Si true et si la view n'est pas encore chargée, la requête sera placée en attente. 
Note: See TracChangeset for help on using the changeset viewer.