blob: 2be0c691c8fb4b73df62963abfc4386a3f0560af [file] [log] [blame]
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://browser/content/places/places.css"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://browser/skin/places/places.css"?>
<?xml-stylesheet href="browseList.css"?>
<!DOCTYPE page SYSTEM "chrome://bonjour4firefox/locale/bonjour4firefox.dtd">
<page
orient="vertical"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
style="background-color: transparent !important; -moz-appearance: none !important;"
onload="BonjourBrowser.init()"
onunload="BonjourBrowser.cleanup()">
<menupopup id="targetmenu">
<menuitem label="&bonjour4firefoxSidebarOpenDefault.label;" value="current"/>
<menuitem label="&bonjour4firefoxSidebarOpenTab.label;" value="tab"/>
<menuitem label="&bonjour4firefoxSidebarOpenWindow.label;" value="window"/>
</menupopup>
<tree id="treeBrowseList" flex="1" class="sidebar-placesTree" hidecolumnpicker="true">
<treecols hide="true">
<treecol id="title" flex="1" primary="true" hideheader="true"/>
</treecols>
<treechildren class="sidebar-placesTreechildren" context="targetmenu" flex="1" id="treeChildrenBrowseList">
<treeitem>
<treerow>
<treecell src="chrome://bonjour4firefox/content/_internal_bonjour4firefox.png" label="About Bonjour"/>
</treerow>
</treeitem>
</treechildren>
</tree>
<script><![CDATA[
var BonjourBrowser =
{
Service: null,
Browse: null,
BrowseListener: null,
Resolve: null,
ResolveListener: null,
init: function()
{
document.getElementById("treeChildrenBrowseList").addEventListener( "click", this.listListener, false );
try
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const cid = "@apple.com/DNSSDService;1";
Service = Components.classes[cid].createInstance();
Service = Service.QueryInterface(Components.interfaces.IDNSSDService);
}
catch (err)
{
alert(err);
return;
}
BrowseListener = this.browseListener;
ResolveListener = this.resolveListener;
try
{
Browse = Service.browse(0, "_http._tcp", "", BrowseListener );
}
catch ( err )
{
alert( err );
return;
}
},
cleanup: function()
{
if ( Browse != null )
{
Browse.stop();
Browse = null;
}
},
browseListener: function( service, add, interfaceIndex, error, serviceName, regtype, domain )
{
if ( error == 0 )
{
// First see if we can look this guy up
var treeView = document.getElementById( 'treeChildrenBrowseList' );
var treeItem = null;
for ( i = 1; i < treeView.childNodes.length; i++ )
{
var ti = treeView.childNodes[ i ];
var tr = ti.childNodes[ 0 ];
var tc = tr.childNodes[ 0 ];
if ( tc.getAttribute( 'label' ) == serviceName )
{
treeItem = ti;
break;
}
}
if ( add )
{
// If we've already seen this guy, then bump up his reference count
if ( treeItem )
{
var refcnt = treeItem.getUserData( 'refcnt' );
refcnt++;
}
else
{
var newTreeItem = document.createElement('treeitem');
var newTreeRow = document.createElement('treerow');
newTreeRow.setAttribute( 'properties', 'bonjourRow' );
var newTreeCell = document.createElement('treecell');
newTreeCell.setAttribute( 'label', serviceName );
newTreeCell.setAttribute( 'src', 'chrome://bonjour4firefox/content/_internal_bonjour4firefox.png' );
newTreeItem.appendChild( newTreeRow );
newTreeRow.appendChild( newTreeCell );
newTreeItem.setUserData( 'interfaceIndex', interfaceIndex, null );
newTreeItem.setUserData( 'serviceName', serviceName, null );
newTreeItem.setUserData( 'regtype', regtype, null );
newTreeItem.setUserData( 'domain', domain, null );
newTreeItem.setUserData( 'refcnt', 1, null );
// Insert in alphabetical order
var insertBefore = null;
for ( i = 1; i < treeView.childNodes.length; i++ )
{
var ti = treeView.childNodes[ i ];
var tr = ti.childNodes[ 0 ];
var tc = tr.childNodes[ 0 ];
if ( serviceName.toLowerCase() < tc.getAttribute( 'label' ).toLowerCase() )
{
insertBefore = ti;
break;
}
}
if ( insertBefore != null )
{
treeView.insertBefore( newTreeItem, insertBefore );
}
else
{
treeView.appendChild( newTreeItem );
}
}
}
else if ( treeItem )
{
var refcnt = treeItem.getUserData( 'refcnt' );
if ( --refcnt == 0 )
{
treeView.removeChild( treeItem );
}
}
}
else
{
alert( 'There was an error browsing for websites: ' + error );
}
},
listListener: function( event )
{
var treeBrowseList = document.getElementById( 'treeBrowseList' );
if ( treeBrowseList.currentIndex == 0 )
{
window._content.location="http://www.apple.com/macosx/features/bonjour";
}
else
{
var item = treeBrowseList.view.getItemAtIndex(treeBrowseList.currentIndex);
var interfaceIndex = item.getUserData("interfaceIndex");
var serviceName = item.getUserData("serviceName");
var regtype = item.getUserData("regtype");
var domain = item.getUserData("domain");
try
{
Resolve = Service.resolve( interfaceIndex, serviceName, regtype, domain, ResolveListener );
}
catch ( err )
{
alert( err );
return;
}
}
},
resolveListener: function( service, interfaceIndex, error, fullname, host, port, path )
{
if ( error == 0 )
{
window._content.location='http://' + host + ':' + port + path;
}
else
{
alert( 'There was an error resolving ' + fullname );
}
Resolve.stop();
},
};
]]></script>
</page>