summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.xul
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.xul')
-rwxr-xr-xmDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.xul222
1 files changed, 222 insertions, 0 deletions
diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.xul b/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.xul
new file mode 100755
index 00000000..2be0c691
--- /dev/null
+++ b/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.xul
@@ -0,0 +1,222 @@
+<?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>