1 /* See license.txt for terms of usage */ 2 3 // ********************************************************************************************* // 4 5 /** 6 * This file should be loaded by script tags ahead of bindings.xml and module loading. 7 * It synchronizes the panelBar initialization with the module loading. 8 */ 9 window.panelBarWaiter = function() 10 { 11 var panelBarWaiter = {}; 12 var waitingPanelBarCount = 2; 13 var waitLimit = 200; 14 var chromeFactory = false; // set when the module loader is ready 15 var preInitializeCallback = null; 16 var postInitializeCallback = null; 17 18 /** 19 * Called by module loader to signal modules loaded 20 */ 21 panelBarWaiter.waitForPanelBar = function(chromeFactoryIn, preInitializeCallbackIn, 22 postInitializeCallbackIn) 23 { 24 // set these via closure scope, we don't know which call will be fire 25 if (chromeFactoryIn) 26 chromeFactory = chromeFactoryIn; 27 28 if (preInitializeCallbackIn) 29 preInitializeCallback = preInitializeCallbackIn; 30 31 if (postInitializeCallbackIn) 32 postInitializeCallback = postInitializeCallbackIn; 33 34 waitLimit -= 1; 35 36 if (!panelBarWaiter.initializeWhenReady() && waitLimit > 0) 37 { 38 if (FBTrace.DBG_INITIALIZE) 39 { 40 var msg = "panelBarWaiter; waitForPanelBar "+waitLimit; 41 msg += " waitingPanelBarCount: "+waitingPanelBarCount; 42 msg += " chromeFactory: "+ chromeFactory; 43 FBTrace.sysout(msg); 44 } 45 46 if (!chromeFactory) 47 setTimeout(panelBarWaiter.waitForPanelBar, 10); 48 } 49 }; 50 51 panelBarWaiter.initializeWhenReady = function() 52 { 53 try 54 { 55 // Wait until all panelBar bindings and modules are ready before initializing 56 if (waitingPanelBarCount == 0 && chromeFactory) 57 { 58 if (FBTrace.DBG_INITIALIZE) 59 FBTrace.sysout("panelBarWaiter; initializing now"); 60 61 var chrome = chromeFactory.createFirebugChrome(window); 62 63 if (FBTrace.DBG_INITIALIZE) 64 { 65 FBTrace.sysout("panelBarWaiter; callbacks ", 66 { 67 preInitializeCallback: preInitializeCallback, 68 postInitializeCallback: postInitializeCallback 69 }); 70 } 71 72 if (preInitializeCallback) 73 preInitializeCallback(chrome); 74 75 chrome.initialize(); // This needs to be the window-specific chrome 76 77 if (postInitializeCallback) 78 postInitializeCallback(chrome); 79 80 delete window.panelBarWaiter; 81 return true; // the panel bar is ready 82 } 83 } 84 catch (exc) 85 { 86 // Disaster! 87 var msg = exc.toString() +" "+(exc.fileName || exc.sourceName) + "@" + exc.lineNumber; 88 Components.utils.reportError(msg); 89 if (FBTrace.sysout) 90 FBTrace.sysout("chrome.panelBarReady FAILS: "+msg, exc); 91 window.dump("getStackDump:"+FBL.getStackDump()+"\n"); 92 } 93 return false; 94 }; 95 96 /** 97 * Called by binding.xml to signal ctor for a panel. 98 */ 99 panelBarWaiter.panelBarReady = function() 100 { 101 // We initialize Firebug from here instead of from the onload event because 102 // we need to make sure it is initialized before the browser starts loading 103 // the home page 104 try 105 { 106 waitingPanelBarCount -= 1; 107 108 if (FBTrace.DBG_INITIALIZE) 109 { 110 FBTrace.sysout("chrome; panelBarReady (" + waitingPanelBarCount + ") " + 111 (chromeFactory ? "Modules loaded" : "Modules not yet loaded") + 112 " in " + window.location); 113 } 114 115 panelBarWaiter.initializeWhenReady(); 116 } 117 catch (e) 118 { 119 dump("bindings panelBar ctor FAILs: " + e + "\n"); 120 dump("window.top " + window.top.location + " window.opener: " + window.opener + "\n"); 121 } 122 } 123 124 return panelBarWaiter; 125 }(); 126 127 // ********************************************************************************************* // 128