diff options
Diffstat (limited to 'mDNSResponder/Clients/FirefoxExtension/extension')
17 files changed, 387 insertions, 0 deletions
diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/chrome.manifest b/mDNSResponder/Clients/FirefoxExtension/extension/chrome.manifest new file mode 100755 index 00000000..f1daf86c --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/chrome.manifest @@ -0,0 +1,6 @@ +content bonjour4firefox content/ +locale bonjour4firefox en-US locale/en-US/ +skin bonjour4firefox classic/1.0 skin/ +skin bonjour4firefox classic/1.0 skin-darwin/ os=darwin +overlay chrome://browser/content/browser.xul chrome://bonjour4firefox/content/browserOverlay.xul +style chrome://global/content/customizeToolbar.xul chrome://bonjour4firefox/skin/overlay.css diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/components/IDNSSDService.xpt b/mDNSResponder/Clients/FirefoxExtension/extension/components/IDNSSDService.xpt Binary files differnew file mode 100755 index 00000000..bfda3e58 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/components/IDNSSDService.xpt diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/content/_internal_bonjour4firefox.png b/mDNSResponder/Clients/FirefoxExtension/extension/content/_internal_bonjour4firefox.png Binary files differnew file mode 100755 index 00000000..baf8b215 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/content/_internal_bonjour4firefox.png diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/content/_internal_listImage.png b/mDNSResponder/Clients/FirefoxExtension/extension/content/_internal_listImage.png Binary files differnew file mode 100755 index 00000000..278efe37 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/content/_internal_listImage.png diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.css b/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.css new file mode 100755 index 00000000..2e7eb2c4 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/content/bonjour4firefox.css @@ -0,0 +1,16 @@ +tree.sidebar-placesTree treechildren::-moz-tree-row(selected) +{ + background-color: #6f81a9; + background-image: url("chrome://browser/skin/places/selected-gradient.png"); + background-repeat: repeat-x; + background-position: bottom left; + border-top: 1px solid #979797; +} + + +tree.sidebar-placesTree treechildren::-moz-tree-separator +{ + border-top: 1px solid #505d6d; + margin: 0 10px; +} + 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> diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/content/browserOverlay.xul b/mDNSResponder/Clients/FirefoxExtension/extension/content/browserOverlay.xul new file mode 100755 index 00000000..3b4d6683 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/content/browserOverlay.xul @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet href="chrome://bonjour4firefox/skin/overlay.css" type="text/css"?> +<!DOCTYPE overlay SYSTEM "chrome://bonjour4firefox/locale/bonjour4firefox.dtd"> +<overlay id="bonjour4firefox-overlay" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script src="overlay.js"/> + <stringbundleset id="stringbundleset"> + <stringbundle id="bonjour4firefox-strings" src="chrome://bonjour4firefox/locale/bonjour4firefox.properties"/> + </stringbundleset> + + <menupopup id="viewSidebarMenu"> + <menuitem observes="viewBonjour4FirefoxSidebar"/> + </menupopup> + + <toolbarpalette id="BrowserToolbarPalette"> + <toolbarbutton id="bonjour4firefox-toolbar-button" + label="&bonjour4firefoxToolbar.label;" + tooltiptext="&bonjour4firefoxToolbar.tooltip;" + oncommand="toggleSidebar('viewBonjour4FirefoxSidebar');" + class="toolbarbutton-1 chromeclass-toolbar-additional"/> + </toolbarpalette> + + <broadcasterset id="mainBroadcasterSet"> + <broadcaster id="viewBonjour4FirefoxSidebar" + autoCheck="false" + label="Bonjour" + type="checkbox" group="sidebar" + sidebarurl="chrome://bonjour4firefox/content/bonjour4firefox.xul" + sidebartitle="&bonjour4firefox.label;" + oncommand="toggleSidebar('viewBonjour4FirefoxSidebar');"/> + </broadcasterset> +</overlay> diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/content/overlay.js b/mDNSResponder/Clients/FirefoxExtension/extension/content/overlay.js new file mode 100755 index 00000000..f989caaf --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/content/overlay.js @@ -0,0 +1,21 @@ +var bonjour4firefox = +{ + onLoad: function() + { + // initialization code + this.initialized = true; + this.strings = document.getElementById("bonjour4firefox-strings"); + }, + onMenuItemCommand: function(e) + { + var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); + promptService.alert(window, this.strings.getString("helloMessageTitle"), this.strings.getString("helloMessage")); + }, + onToolbarButtonCommand: function(e) + { + // just reuse the function above. you can change this, obviously! + bonjour4firefox.onMenuItemCommand(e); + } +}; + +window.addEventListener("load", function(e) { bonjour4firefox.onLoad(e); }, false); diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/defaults/preferences/bonjour4firefox.js b/mDNSResponder/Clients/FirefoxExtension/extension/defaults/preferences/bonjour4firefox.js new file mode 100755 index 00000000..2965608a --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/defaults/preferences/bonjour4firefox.js @@ -0,0 +1,2 @@ +// See http://kb.mozillazine.org/Localize_extension_descriptions +pref("extensions.bonjour4firefox@apple.com.description", "chrome://bonjour4firefox/locale/bonjour4firefox.properties"); diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/install.rdf b/mDNSResponder/Clients/FirefoxExtension/extension/install.rdf new file mode 100755 index 00000000..37c0955e --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/install.rdf @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:em="http://www.mozilla.org/2004/em-rdf#"> + <Description about="urn:mozilla:install-manifest"> + <em:id>bonjour4firefox@apple.com</em:id> + <em:name>Bonjour Extension for Firefox</em:name> + <em:version>1.0</em:version> + <em:creator>Apple Inc.</em:creator> + <em:description>Bonjour Browsing Extension for Firefox</em:description> + <em:iconURL>chrome://bonjour4firefox/content/_internal_bonjour4firefox.png</em:iconURL> + <em:targetApplication> + <Description> + <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!-- firefox --> + <em:minVersion>3.5</em:minVersion> + <em:maxVersion>3.6.*</em:maxVersion> + </Description> + </em:targetApplication> + </Description> +</RDF> diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/locale/en-US/bonjour4firefox.dtd b/mDNSResponder/Clients/FirefoxExtension/extension/locale/en-US/bonjour4firefox.dtd new file mode 100755 index 00000000..2e133f99 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/locale/en-US/bonjour4firefox.dtd @@ -0,0 +1,6 @@ +<!ENTITY bonjour4firefox.label "Bonjour"> +<!ENTITY bonjour4firefoxToolbar.label "Bonjour"> +<!ENTITY bonjour4firefoxToolbar.tooltip "Display Bonjour enabled websites"> +<!ENTITY bonjour4firefoxSidebarOpenDefault.label "Open in current window"> +<!ENTITY bonjour4firefoxSidebarOpenTab.label "Open in new tab"> +<!ENTITY bonjour4firefoxSidebarOpenWindow.label "Open in new window"> diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/locale/en-US/bonjour4firefox.properties b/mDNSResponder/Clients/FirefoxExtension/extension/locale/en-US/bonjour4firefox.properties new file mode 100755 index 00000000..afed1abd --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/locale/en-US/bonjour4firefox.properties @@ -0,0 +1,4 @@ +helloMessage=Hello World! +helloMessageTitle=Hello +prefMessage=Int Pref Value: %d +extensions.bonjour4firefox.description=Bonjour Browsing Extension for Firefox diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/readme.txt b/mDNSResponder/Clients/FirefoxExtension/extension/readme.txt new file mode 100755 index 00000000..71f1edc7 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/readme.txt @@ -0,0 +1,21 @@ +This extension was generated by the Extension Wizard at +http://ted.mielczarek.org/code/mozilla/extensionwiz/ . +This extension is compatible only with Firefox 1.5 and +above. Most of the files in this package are based on +the 'helloworld' extension from the Mozillazine Knowledge Base. + +You can build an XPI for installation by running the +build.sh script located in this folder. For development +you should do the following: + 1. Unzip the entire contents of this package to somewhere, + e.g, c:\dev or /home/user/dev + 2. Put the full path to the folder (e.g. c:\dev\bonjour4firefox on + Windows, /home/user/dev/bonjour4firefox on Linux) in a file named + bonjour4firefox@apple.com and copy that file to + [your profile folder]\extensions\ + 3. Restart Firefox. + +For more information, see the Mozillazine Knowledge Base: +http://kb.mozillazine.org/Getting_started_with_extension_development + +-Ted Mielczarek <ted.mielczarek@gmail.com> diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/skin-darwin/_internal_toobar-button.png b/mDNSResponder/Clients/FirefoxExtension/extension/skin-darwin/_internal_toobar-button.png Binary files differnew file mode 100644 index 00000000..2bd6c9dc --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/skin-darwin/_internal_toobar-button.png diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/skin-darwin/overlay.css b/mDNSResponder/Clients/FirefoxExtension/extension/skin-darwin/overlay.css new file mode 100644 index 00000000..f5f4a281 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/skin-darwin/overlay.css @@ -0,0 +1,17 @@ +#bonjour4firefox-hello +{ + color: red ! important; +} +#bonjour4firefox-toolbar-button +{ + list-style-image: url("chrome://bonjour4firefox/skin/_internal_toolbar-button.png"); + -moz-image-region: rect(0px 36px 23px 0px); +} +#bonjour4firefox-toolbar-button[disabled="true"] +{ + -moz-image-region: rect(23px 36px 46px 0px); +} +#bonjour4firefox-toolbar-button:hover:active +{ + -moz-image-region: rect(46px 36px 69px 0px); +} diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/skin/_internal_toobar-button.png b/mDNSResponder/Clients/FirefoxExtension/extension/skin/_internal_toobar-button.png Binary files differnew file mode 100755 index 00000000..d99a0c98 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/skin/_internal_toobar-button.png diff --git a/mDNSResponder/Clients/FirefoxExtension/extension/skin/overlay.css b/mDNSResponder/Clients/FirefoxExtension/extension/skin/overlay.css new file mode 100755 index 00000000..b2865603 --- /dev/null +++ b/mDNSResponder/Clients/FirefoxExtension/extension/skin/overlay.css @@ -0,0 +1,21 @@ +#bonjour4firefox-hello +{ + color: black ! important; +} +#bonjour4firefox-toolbar-button +{ + list-style-image: url("chrome://bonjour4firefox/skin/_internal_toolbar-button.png"); + -moz-image-region: rect(0px 24px 24px 0px); +} +#bonjour4firefox-toolbar-button:hover +{ + -moz-image-region: rect(24px 24px 48px 0px); +} +[iconsize="small"] #bonjour4firefox-toolbar-button +{ + -moz-image-region: rect( 0px 40px 16px 24px); +} +[iconsize="small"] #bonjour4firefox-toolbar-button:hover +{ + -moz-image-region: rect(24px 40px 40px 24px); +} |