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/windows/itemSelector/selItem.js

    r15068 r15089  
    208208        fController : {}, 
    209209         
    210         /** @Api Desk avec contenus. Enregistre tout ce qui est dirty concernant le wsp pCdWsp ou 
     210        /** @Api Desks avec ContentViewController. Enregistre tout ce qui est dirty concernant le wsp pCdWsp ou 
    211211         * tout wsp confondu si pCdWsp n'est pas renseigné. 
    212212         */ 
     
    216216         
    217217        /** 
    218          * @Api Desks avec contenus. Permet d'accéder à une uri quelconque. 
     218         * @Api Desks avec ContentViewController. Permet d'accéder à une uri quelconque. 
    219219         */ 
    220220        openRefUri : function(pRefUri, pOptions) { 
    221                 try { 
    222                         if(!pRefUri) return; 
    223                         if(! src.isSrcId(pRefUri)) desk.getController("ContentViewController").openSrcUri(pRefUri, pOptions); 
    224                         else { 
    225                                 function cbGetSrcUri(pShortDesc, pCdError) { 
    226                                         if(pShortDesc) desk.getController("ContentViewController").openSrcUri(pShortDesc.srcUri, pOptions); 
     221                if(!pRefUri) return; 
     222                //Si l'appel vient d'une autre frame (mainview), les appels asynchrones qui seront effectués pour  
     223                //effectuer cet openRefUri peuvent échouer alléatoirement dû à des GC effectués dans l'autre frame. 
     224                //Le passage par un timer permet de réassocier les objets qui seront créés à cette frame. 
     225                //Bug peut-etre lié à notre utilisation de l'ancien mode de sécurité (xpcnativewrappers=no dans 
     226                //les manifests chrome). A réévaluer quand on aurra purgé xpcnativewrappers=no. 
     227                system.setTimer({notify:function(pTimer){ 
     228                        try { 
     229                                if(! src.isSrcId(pRefUri)) desk.getController("ContentViewController").openSrcUri(pRefUri, pOptions); 
     230                                else { 
     231                                        function cbGetSrcUri(pShortDesc, pCdError) { 
     232                                                if(pShortDesc) desk.getController("ContentViewController").openSrcUri(pShortDesc.srcUri, pOptions); 
     233                                        } 
     234                                        var vUriObjectWsp = new UriObjectWsp(this.getWsp().getCode(), this.getWsp().getDataProvider()); 
     235                                        vUriObjectWsp.loadShortDesc(pRefUri, cbGetSrcUri); 
    227236                                } 
    228                                 var vUriObjectWsp = new UriObjectWsp(this.getWsp().getCode(), this.getWsp().getDataProvider()); 
    229                                 vUriObjectWsp.loadShortDesc(pRefUri, cbGetSrcUri); 
    230                         } 
    231                 }catch(e){log.debug("desk.openRefUri failed for '"+pRefUri+"': "+e);} 
     237                        }catch(e){log.debug("desk.openRefUri failed for '"+pRefUri+"': "+e);} 
     238                }}, 0); 
    232239        }, 
    233240 
     
    286293         
    287294        /**  
    288          * Transfert une requete vers la ContentView courante. 
     295         * @Api Desks avec ContentViewController. Transfert une requete vers la ContentView courante. 
    289296         *  
    290297         * @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.