<?xml version="1.0"?>

<!-- This Source Code Form is subject to the terms of the Mozilla Public
   - License, v. 2.0. If a copy of the MPL was not distributed with this
   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->

<bindings id="firefoxBrowserBindings"
          xmlns="http://www.mozilla.org/xbl"
          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <binding id="remote-browser" extends="chrome://global/content/bindings/browser.xml#browser">

    <implementation type="application/javascript" implements="nsIAccessibleProvider, nsIObserver, nsIDOMEventListener, nsIMessageListener, nsIMessageListener">

      <property name="securityUI"
                onget="return null;"/>

      <property name="webNavigation"
                onget="return this._remoteWebNavigation;"
                readonly="true"/>

      <field name="_remoteWebProgress">null</field>

      <property name="webProgress" readonly="true">
	<getter>
	  <![CDATA[
            if (!this._remoteWebProgress) {
              let RemoteWebProgress = Components.utils.import("resource://gre/modules/RemoteWebProgress.jsm",
 {}).RemoteWebProgress;
              this._remoteWebProgress = new RemoteWebProgress(this);
            }
            return this._remoteWebProgress;
	  ]]>
	</getter>
      </property>

      <field name="_contentTitle">null</field>

      <property name="contentTitle"
                onget="return this._contentTitle"
                readonly="true"/>

      <field name="_characterSet">null</field>

      <property name="characterSet"
                onget="return this._characterSet"
                readonly="true"/>

      <constructor>
        <![CDATA[
          this.messageManager.addMessageListener("DOMTitleChanged", this);
          this.messageManager.loadFrameScript("chrome://global/content/browser-child.js", true);
          this.webProgress._init();
        ]]>
      </constructor>

      <destructor>
        <![CDATA[
          this.messageManager.removeMessageListener("DOMTitleChanged", this);
          this.webProgress._destroy();
        ]]>
      </destructor>

      <method name="receiveMessage">
        <parameter name="aMessage"/>
        <body><![CDATA[
          let json = aMessage.json;
          switch (aMessage.name) {
            case "DOMTitleChanged":
              this._contentTitle = json.title;
              break;
          }
        ]]></body>
      </method>

    </implementation>

  </binding>

</bindings>
