text: /*
  Copyright 2007-2009 WebDriver committers
  Copyright 2007-2009 Google Inc.
  Portions copyright 2011 Software Freedom Conservancy
  
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  */
  
  var driver = false;
  var domMessenger = null;
  
  // If we're offline, attempt to force online mode, otherwise the server won't
  // start. If we can't do it, it's not the end of the world, but it's Not Good.
  // It became necessary to do this at some time after Firefox 4.
  try {
    var ios = Components.classes['@mozilla.org/network/io-service;1']
        .getService(Components.interfaces.nsIIOService);
    if (ios && ios.offline) {
        ios.offline = false;
    }
  } catch (ignoredButItsNotGood) {}
  
  
  // This will configure a FirefoxDriver and DomMessenger for each
  // _browser window_ (not chrome window). Multiple tabs in the same window will
  // share a FirefoxDriver and DomMessenger instance.
  window.addEventListener('load', function(e) {
    handle = Components.classes['@googlecode.com/webdriver/fxdriver;1'].createInstance();
    var server = handle.wrappedJSObject;
  
    if (!domMessenger) {
      var appcontent = document.getElementById('appcontent');
      if (appcontent) {
        try {
          var commandProcessor = Components.
              classes['@googlecode.com/webdriver/command-processor;1'].
              getService(Components.interfaces.nsICommandProcessor);
          domMessenger = new DomMessenger(commandProcessor);
          appcontent.addEventListener('DOMContentLoaded',
              function(e) {
                domMessenger.onPageLoad(e);
              }, true);
          appcontent.addEventListener('pagehide',
              function(e) {
                domMessenger.onPageUnload(e);
              }, true);
        } catch (ex) {
          // Not catching this can really mess things up and lead to inexplicable
          // and hard to debug behavior.
          Components.utils.reportError(ex);
        }
      }
    }
  
    if (!driver) {
      driver = server.newDriver(window);
    }
  
    server.startListening();
  }, true);
  