Bonjour,

J'ai une extension pour Firefox qui utilise un XPCOM. L'extension marche bien avec Firefox 3.6. Je travaille maintenant pour la rendre compatible avec Firefox 4, en suivant les articles:
Making your add on compatible with firefox 4
XPCOM changes in Gecko 2.0


Après avoir recompiler le composant XPCOM avec Gecko 2.0 et adapté mon fichier chrome.manifest pour enregistrer mon composant, l'extension se lance maintenant correctement.

Cependant j'ai encore un problème. Mon composant exécute une fonction qui met quelques secondes à s'exécuter. Afin de ne pas freezer l'interface, j'exécutais, dans Firefox 3.6 cette fonction dans un thread séparer de la manière suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    var MyComponent = Components.classes["@foo/example_cpp;1"]
                         .getService(Components.interfaces.nsIMyComponent);
 
    var backgroundTask = {
          callback: {
                result: 0,
                run: function() {
                      processResult(this.result);
                }
          },
          run: function() {
                this.callback.result = MyComponent.myFunction();
                //dispatch event back to the main thread
                threadMngr.mainThread.dispatch(this.callback, thread.DISPATCH_NORMAL);
          }
    }
 
    var thread = threadMngr.newThread(0);
    thread.dispatch(backgroundTask, thread.DISPATCH_NORMAL);
Cela marchait bien. Cepandant, avec Gecko 2, des choses ont changé en ce qui concerne the Thread Manager et il n'est plus possible de faire cela.

While these interfaces still exist in Firefox 4, it is no longer possible to transfer JavaScript objects or functions from one thread to another in Gecko 2.0, making event dispatch to any thread but the current impossible from JavaScript. Consider using a ChromeWorker instead; it's not a perfect replacement but may work for you. (here)
J'ai donc regarder du côté de ChromeWorker mais je ne suis pas parvenu a passé mon composant au "worker". Est-ce possible de le faire?

Ou peut-être existe-t-il une autre solution afin de ne pas freezer l'interface?

Merci d'avance pour toute idée