Changes

Jump to: navigation, search

Localized Search in Firefox Search Box

7,514 bytes removed, 10:52, 19 March 2008
m
no edit summary
= '''Project Name''' =
'''Localized Search in Firefox Search Box'''
= '''Project Leader''' =
==== [[http://zenit.senecac.on.ca/wiki/index.php/User:Sinker | Kerry M. Singh]] ====
= '''Project DetailsContributions''' =
== '''Release v.01Web Site List''' ==
This release demonstrates my understanding of how some searchbar features currently work in the Firefox browser. I've uploaded a * Please list web sites that have [http://zenit.senecacdeveloper.onmozilla.caorg/wikien/index.phpdocs/Image:Localsearchpatch_v01.txt.zip patch fileCreating_OpenSearch_plugins_for_Firefox OpenSearch] search plugins that outputs a series of dump(can be "DIAGNOSTIC MESSAGE: function name - what the source code is doingAdded") statements to the terminal window while running a debug build searchbar's list of Firefox (i.e. Minefield)search engines. SpecificallyFor example, what functions/methods are called and what is happening in the source code with respect to the searchbar menu 's drop-down list's button changes blue in color when the following events occur:Firefox detects a web site with an OpenSearch plugin.
* The browser auto-detects a site that has a search plugin available[https://bugzilla.* The user selects the button to display the search engine list when a search plugin is available.* The user selects the option to "Add this search engine".* The user changes the current search engine by selecting it from the search bar drop-down list (menu).* The user moves the position of a search engine using the Search Engine Manager.* The user removes an auto-detected search engine from the list of "installed" search enginesmozilla.org/ Bugzilla@Mozilla]
* [http://www.facebook.com/ Facebook]
=== '''Downloading and applying the patch''' === 1. Download the * [http://zenitwww.senecactheglobeandmail.on.cacom/wiki/index.php/Image:Localsearchpatch_v01.txt.zip patch file] to the root mozilla directory of your source tree The Globe and unzip the file there. I suggest renaming the file localsearchpatch_v01.txt. * '''NOTE:''' This patch requires that you use a DEBUG build of firefox. To see the output messages from the dump() statements in the patch, you have to enable it by setting the preference '''browser.dom.window.dump.enabled''' to '''true'''. You can set this preference in [http://kb.mozillazine.org/About:config about:config] or in a [http://kb.mozillazine.org/User.js_file user.js file]. This preference is not listed in about:config by default, so you may need to create it. Enter <code>about:config</code> in the browser's address bar -> right-click the empty content area -> New -> Boolean. * You can preview the patch here: [[Localized Search in Firefox Search Box: Release v.01Mail]] 2. Apply the patch.<pre> $ cd mozilla $ patch -p0 < localsearchpatch_v01.txt</pre>* '''NOTE:''' Use the -p0 option to strip 0 leading directories from each filename in the patch because it is being applied in the same directory where the patch was created.  3. Build your source tree.<pre> $ cd mozilla $ make -f client.mk build</pre>
* [http://www.ibm.com/ca/en/ IBM Search]
4* [http://www. Run the browser to test the patchmicrosoft.<pre> $ cd objdircom/disten/bin $ us/default./firefox --ProfileManager --no-remote</pre>aspx Microsoft's Live Search]
 
=== '''How to use the patch''' ===
 
1. Navigate to a web site that offers a search engine plugin:
* [https://bugzilla.mozilla.org/ Bugzilla@Mozilla]
* [http://developer.mozilla.org/en/docs/Main_Page Mozilla Developer Center]
* [http://www.theglobeandmail.com/ The Globe and Mail]
'''Note''' the DIAGNOSTIC MESSAGE in the terminal window* [http://www.yellowpages.ca/ Yellow Pages]
* [http://www.youtube.com/ YouTube]
2* [http://en. Click the searchbar's dropdown menu buttonwikipedia.org/wiki/Main_Page Wikipedia]
* '''Note''' the DIAGNOSTIC MESSAGE in the terminal window and the "Add this engine" option on the searchbar menu.
= '''Project Details''' =
3. Click the "Add this engine" option on the searchbar menu.
* == '''NoteRelease v.01''' the DIAGNOSTIC MESSAGE in the terminal window and the position of the newly added search engine on the searchbar menu.==
This release demonstrates my understanding of how some searchbar features currently work in the Firefox browser. I've created a [http://zenit.senecac.on.ca/wiki/index.php/Image:Localsearchpatch_v01.txt.zip patch file] that outputs a series of dump("DIAGNOSTIC MESSAGE: function name - what the source code is doing") statements to the terminal window while running a debug build of Firefox (i.e. Minefield). Specifically, what functions/methods are called and what is happening in the source code with respect to the searchbar menu when the following events occur:
4* The browser auto-detects a site that has a search plugin available. Select * The user selects the button to display the search engine list when a search plugin is available.* The user selects the option to "Add this search engine"Manage Search Engines..." * The user changes the current search engine by selecting it from the searchbar search bar drop-down list (menu and select ).* The user moves the newly installed position of a search engine using the Search Engine Manager.* The user removes an auto-detected search engine from the list. Click the of "Remove" button and then click "OKinstalled"search engines.
* === '''NoteRelease Details''' the DIAGNOSTIC MESSAGES in the terminal window.===
 5. Select "Manage ==== [[Localized Search Engines..." from the searchbar menu and select one of the installed engines on the list. Next, click the "Move Up" and "Move Down" buttons and then click "OK". * '''Note''' the DIAGNOSTIC MESSAGES in the terminal window.  6. Click the searchbar's dropdown menu button and select a different search engine as the current engine. * '''Note''' the DIAGNOSTIC MESSAGES in the terminal windowFirefox Search Box: Release v.  =01]] == '''How to remove the patch''' === * You can back-out a patch by using the patch command with the -R or --reverse option. This swaps the new file with the old one to reverse the patch. <pre> $ cd mozilla $ patch -R -p0 < localsearchpatch_v01.txt</pre>
The target for this release was to dynamically "Add" a search engine plugin when Firefox loads a web page with an available search plugin, and then propagate the search engine to the top of the searchbar's menu as the current engine. The propagation of a newly added search engine as the current engine in the searchbar's menu was already a behavioral feature of Firefox 3 so there were no changes required for this part of my release target. Determining how to dynamically "Add" an available search engine plugin was challenging to achieve, but in the end, it only required a few modifications to the code in the [http://lxr.mozilla.org/seamonkey/source/browser/base/content/browser.js browser.js file].
=== '''Release Details''' ===
=== '''Patch File''' === * The modifications to the code in browser.js are shown below [[Localized Search in a copy of the patch file for this release: <pre>? localsearchpatch_v02.txt? nohup.out? objdir-ff-debug? patch.txtIndex: browser/base/content/browser.js===================================================================RCS fileFirefox Search Box: /cvsroot/mozilla/browser/base/content/browser.js,Release vretrieving revision 1.961diff -u -8 -p -r1.961 browser.js--- browser/base/content/browser.js 10 Feb 2008 06:57:05 -0000 1.961+++ browser/base/content/browser.js 10 Feb 2008 20:07:04 -0000@@ -2771,38 +2771,30 @@ const BrowserSearch = { if (!this.searchBar) return; var browser = gBrowser.getBrowserForDocument(targetDoc); // Append the URI and an appropriate title to the browser data. var iconURL = null; if (gBrowser.shouldLoadFavIcon(browser.currentURI)) iconURL = browser.currentURI.prePath + "/favicon.ico"; - var hidden = false; // If this engine (identified by title) is already in the list, add it // to the list of hidden engines rather than to the main list. // XXX This will need to be changed when engines are identified by URL; // see bug 335102. var searchService = Cc["@mozilla.org/browser/search-service;1"]. getService(Ci.nsIBrowserSearchService);- if (searchService.getEngineByName(engine.title))- hidden = true; - var engines = (hidden ? browser.hiddenEngines : browser.engines) || [02];-- engines.push({ uri: engine.href,- title: engine.title,- icon: iconURL });-- if (hidden)+ if (!searchService.getEngineByName(engine.title)) {+ searchService.addEngine(engine.href, Components.interfaces.nsISearchEngine.DATA_XML, iconURL, false);+ var engines = browser.hiddenEngines || [];+ engines.push({ uri: engine.href,+ title: engine.title,+ icon: iconURL }); browser.hiddenEngines = engines;- else {- browser.engines = engines;- if (browser == gBrowser || browser == gBrowser.mCurrentBrowser)- this.updateSearchButton(); } }, /** * Update the browser UI to show whether or not additional engines are * available when a page is loaded or the user switches tabs to a page that * has search engines. */</pre> 
=== '''Code Modifications''' ===
Prior to my code modifications, the [http://lxr.mozilla.org/seamonkey/source/browser/base/content/browser.js#2770 addEngine() function] received a reference to an anonymous JavaScript [http://lxr.mozilla.org/seamonkey/source/browser/base/content/browser.js#2758 engine object] which was passed as a parameter to the function by the [http://lxr.mozilla.org/seamonkey/source/browser/base/content/browser.js#2669 onLinkAdded() function] that created it. Then, addEngine() used an nsIBrowserSearchService object to determine if the search engine was already on the list of engines. The addEngine() function used the ''title'' property of the ''engine'' object to "get" an nsISearchEngine object with a corresponding == ''name'' propertyRelease v. If the search engine was on the list, then it was considered to be a "hidden" engine and it was ''pushed03'' onto the ''browser.hiddenEngines'' array. This array is used by the [http://lxr.mozilla.org/seamonkey/source/browser/components/search/content/search.xml search.xml] file to determine how to populate and display the search engines on the searchbar menu. If the search engine was not on the list, it was ''pushed'' onto the "non-hidden", ''browser.engines'' array. The search engine would then be displayed as an "Add <Search Engine>" item on the searchbar menu and the searchbar button's background color would be changed to blue after a call to the [http://lxr.mozilla.org/seamonkey/source/browser/base/content/browser.js#2809 updateSearchButton() function].==
My code modifications alter the original addEngine() function by using the nsIBrowserSearchService object The target for this release was to check if the new search plugin is NOT on the listbuild upon Release v. If it is not on 02 by dynamically "Removing" the list, I dynamically "AddAdded" the search plugin by calling engine when the [http://lxr.mozilla.org/seamonkey/source/browser/components/search/nsSearchService.js#2726 addEngine() function] in user navigates away from the [http://lxr.mozilla.org/seamonkey/source/browser/components/search/nsSearchService.js nsSearchService.js] file. This function completes web site offering the important step of creating a '''new''' nsISearchEngine object. It is this type of object that is required by important methods in search.xml, such as [http://lxr.mozilla.org/seamonkey/source/browser/components/search/content/search.xml#208 observe()],[http://lxr.mozilla.org/seamonkey/source/browser/components/search/content/search.xml#262 offerNewEngine()] and [http://lxr.mozilla.org/seamonkey/source/browser/components/search/content/search.xml#290 hideNewEngine()]. I then push the anonymous JavaScript ''engine'' object onto the the list of "hidden" search engines, the ''browser.hiddenEngines'' array. It is plugin if they do not necessary for me choose to add any of the auto-detected search plugins plugin to the ''browser.installed engines'' array at this point. My objective is to dynamically "Add" the auto-detected search engines, therefore they are all considered to be "hidden" engines for now and they are not displayed on the searchbar as "Add <Search Engine>" menu itemslist.
=== '''Release Target for v.03Details''' ===
* When the user navigates away from the web page with the search engine plugin, dynamically remove the search plugin.  == '''Release Target for v.04''' == * TBA  == '''Release Target for v.05''' == * TBA  == '''Release Target for v.06''' == * TBA  == '''Release Target for v.07''' == * TBA  == '''[[Localized Search in Firefox Search Box: Release Target for v.08''' 03]] == * TBA  == '''Release Target for v.09''' == * TBA  == '''Release Target for v1.0''' == * TBA
[https://addons.mozilla.org/nl/firefox/addon/3544 SearchLoad Options :: Firefox Add-ons]
== '''FilesProject-Related Bugs''' ==
[httphttps://mxrbugzilla.mozilla.org/firefox/source/browser/base/content/browser.js browsershow_bug.jscgi?id=236587 Bug 236587 - Allow bookmark keyword searches from the search bar]
[httphttps://mxrbugzilla.mozilla.org/firefox/source/browser/components/search/content/engineManager.js engineManagershow_bug.jscgi?id=249481 Bug 249481 – User-defined searches available not only as bookmark keywords, but also from the Search box]
[httphttps://mxrbugzilla.mozilla.org/firefox/source/browser/components/search/nsIBrowserSearchServiceshow_bug.cgi?id=261124 Bug 261124 – Textbox context menu should have "Add to Search Bar..idl nsIBrowserSearchService.idl"]
[httphttps://mxrbugzilla.mozilla.org/firefox/source/browser/components/show_bug.cgi?id=335102 Bug 335102 – support search/nsSearchService.js nsSearchService.jsengine renaming]
[httphttps://mxrbugzilla.mozilla.org/firefox/source/show_bug.cgi?id=335448 Bug 335448 – Autodetect repeated use of a search field, and ask the user if they want that engine added to the browser/components/search/content/search.xml search.xmlbox]
[https://bugzilla.mozilla.org/show_bug.cgi?id=356332 Bug 356332 – Select default search engine again after searching with another]
 = '''Project-Related Bugs''' = [https://bugzilla.mozilla.org/show_bug.cgi?id=236587 Bug 236587 - Allow bookmark keyword searches from the search bar] [https://bugzilla.mozilla.org/show_bug.cgi?id=249481 360907 Bug 249481 360907 User-defined searches available not only as bookmark keywords, but also from the Search boxcurrent site with OpenSearch]
[https://bugzilla.mozilla.org/show_bug.cgi?id=374268 Bug 374268 – Quicksearch/keyword should be integrated into search engine manager]
[https://bugzilla.mozilla.org/show_bug.cgi?id=261124 384124 Bug 261124 384124 Textbox context menu should have "Add Option to Search Bar..."reset search bar engine to default when starting Firefox]
[https://bugzilla.mozilla.org/show_bug.cgi?id=335448 394979 Bug 335448 – Autodetect repeated use of a search field, and ask the user if they want that engine added to the browser search box] [https://bugzilla.mozilla.org/show_bug.cgi?id=360907 Bug 360907 394979 – Search current site with OpenSearchService is slow on startup (Ts hit)]
[https://bugzilla.mozilla.org/show_bug.cgi?id=408244 Bug 408244 – show opensearch plugin availability same as feed availability]
[https://bugzilla.mozilla.org/show_bug.cgi?id=405443 Bug 405443 – Making search engine discovery more discoverable]
[https://bugzilla.mozilla.org/show_bug.cgi?id=356332 407922 Bug 356332 407922 Select default search engine again after searching with another] [https://bugzilla.mozilla.org/show_bug.cgi?id=384124 Bug 384124 – Option to reset search bar engine Changing the Search plug in order for en-US from alpha to default when starting Firefoxcategory based]
For up-to-date information about my project, visit my blog: [http://kmsingh.blogspot.com/ Kerry's Open Source Blog]
 
 
'''[[#Project Name | Return to top]]'''
 
 
[[Category : Localized Search in Firefox Search Box]]
1
edit

Navigation menu