Gaia/System/NewModule

From MozillaWiki
< Gaia‎ | System
Revision as of 06:25, 13 May 2015 by Alive (talk | contribs) (Created page with "If you want to add a new functionality, a.k.a., a new script or a new module into system app after bug 1094759, please read this. == If you want to use BaseModule == Great! I...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

If you want to add a new functionality, a.k.a., a new script or a new module into system app after bug 1094759, please read this.

If you want to use BaseModule

Great! It's providing a promise based start procedure and what you need to do. ```js var NewModule = function() {}; BaseModule.create(NewModule, {

 name: 'NewModule',
 _start: function() {
   // return a promise if your start progress involves some asynchronous operation
   // return null or do not return, then we will unblock your module from the starting process right away once
   // yourModule.start() is called
   // BaseModule has a native start() function to process not only your own starting (this._start()) but also the child
   // module's start() function. The whole starting process will be resolved only when all the children's start process
   // is resolved.
 }

}); ```

If you don't want to use BaseModule

It's okay. But you have to provide this interface for us:

```js var NewModule = {

 start: function() {
   // return a promise if your start progress involves some asynchronous operation
   // return null or do not return, then we will unblock your module from the starting process right away once
   // yourModule.start() is called
 }

}; ```

No matter what you choose to go

Don't put your new script in the header of system app. If it's necessary to go alive when booting, please find a proper parent module and lazy load it. If you are using BaseModule, 1. Put the module in the parent module's SUB_MODULES if you think it's blocking the starting progress of the parent module. 2. If the new module is not as important to block the parent, use this.loadWhenIdle([NEW_MODULE]) in parent's start function 3. If the new module is only serving some on demand request, consider to lazy load the new module in the parent module's event handler and start it.