Changes

Jump to: navigation, search

Localized Search in Firefox Search Box

5,865 bytes added, 21:33, 10 February 2008
'''Release Target for v.02'''
== '''Release Target for v.02''' ==
* When The target for this release was to dynamically "Add" a search engine plugin when Firefox loads a web page with an available search engine plugin, dynamically load and then propagate the search engine and propagate it 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].
 
=== '''Patch File''' ===
 
* The modifications to the code in browser.js are shown below in a copy of the patch file for this release:
 
<pre>
? localsearchpatch_v02.txt
? nohup.out
? objdir-ff-debug
? patch.txt
Index: browser/base/content/browser.js
===================================================================
RCS file: /cvsroot/mozilla/browser/base/content/browser.js,v
retrieving revision 1.961
diff -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) || [];
-
- 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'' property. If the search engine was on the list, then it was considered to be a "hidden" engine and it was ''pushed'' 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 to check if the new search plugin is NOT on the list. If it is not on the list, I "Add" the search plugin by calling the [http://lxr.mozilla.org/seamonkey/source/browser/components/search/nsSearchService.js#2726 addEngine() function] in the [http://lxr.mozilla.org/seamonkey/source/browser/components/search/nsSearchService.js nsSearchService.js] file. This function completes 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 not necessary for me to add any of the auto-detected search plugins to the ''browser.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 items.
== '''Release Target for v.03''' ==
1
edit

Navigation menu