Bug 1245649: Turn on no-trailing-spaces. r=Gijs
authorDave Townsend <dtownsend@oxymoronical.com>
Wed, 03 Feb 2016 14:22:33 -0800
changeset 306138 6c56f5dad3b24506c41d5a38115d19456fe2a802
parent 306137 345ff6c8b0a24a357c9f0b4d8d4f9c6e5c71eb16
child 306139 06982056b5a5cb566eb836d53283b545a927de29
push id9214
push userraliiev@mozilla.com
push dateMon, 07 Mar 2016 14:25:21 +0000
treeherdermozilla-aurora@8849dd1a4a79 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersGijs
bugs1245649
milestone47.0a1
Bug 1245649: Turn on no-trailing-spaces. r=Gijs
browser/base/content/browser-places.js
browser/base/content/content.js
browser/base/content/pageinfo/security.js
browser/base/content/sync/genericChange.js
browser/base/content/urlbarBindings.xml
browser/base/content/utilityOverlay.js
browser/base/content/web-panels.js
browser/branding/aurora/pref/firefox-branding.js
browser/branding/nightly/pref/firefox-branding.js
browser/branding/official/pref/firefox-branding.js
browser/branding/unofficial/pref/firefox-branding.js
browser/components/customizableui/test/browser_945739_showInPrivateBrowsing_customize_mode.js
browser/components/customizableui/test/head.js
browser/components/nsBrowserContentHandler.js
browser/components/places/content/browserPlacesViews.js
browser/components/places/content/controller.js
browser/components/places/content/history-panel.js
browser/components/places/content/places.js
browser/components/places/content/treeView.js
browser/components/places/tests/browser/browser_475045.js
browser/components/places/tests/browser/browser_views_liveupdate.js
browser/components/places/tests/unit/test_PUIU_makeTransaction.js
browser/components/safebrowsing/content/test/browser_bug400731.js
browser/components/safebrowsing/content/test/browser_bug415846.js
browser/components/search/test/browser_bing_behavior.js
browser/extensions/pocket/content/panels/js/saved.js
browser/extensions/pocket/content/panels/js/signup.js
browser/extensions/pocket/content/pktApi.jsm
browser/modules/FormSubmitObserver.jsm
browser/modules/WindowsJumpLists.jsm
browser/modules/WindowsPreviewPerTab.jsm
browser/modules/offlineAppCache.jsm
storage/test/unit/test_storage_statement.js
toolkit/.eslintrc
toolkit/components/alerts/test/test_alerts.html
toolkit/components/apppicker/content/appPicker.js
toolkit/components/autocomplete/tests/unit/head_autocomplete.js
toolkit/components/autocomplete/tests/unit/test_378079.js
toolkit/components/autocomplete/tests/unit/test_393191.js
toolkit/components/autocomplete/tests/unit/test_autocomplete_multiple.js
toolkit/components/autocomplete/tests/unit/test_badDefaultIndex.js
toolkit/components/autocomplete/tests/unit/test_completeDefaultIndex_casing.js
toolkit/components/autocomplete/tests/unit/test_finalCompleteValue.js
toolkit/components/autocomplete/tests/unit/test_finalCompleteValue_forceComplete.js
toolkit/components/autocomplete/tests/unit/test_finalDefaultCompleteValue.js
toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
toolkit/components/autocomplete/tests/unit/test_immediate_search.js
toolkit/components/autocomplete/tests/unit/test_previousResult.js
toolkit/components/autocomplete/tests/unit/test_stopSearch.js
toolkit/components/commandlines/test/unit/test_bug666224.js
toolkit/components/console/content/console.js
toolkit/components/console/content/consoleBindings.xml
toolkit/components/contentprefs/tests/unit/head_contentPrefs.js
toolkit/components/contentprefs/tests/unit/test_bug503971.js
toolkit/components/contentprefs/tests/unit/test_bug679784.js
toolkit/components/contentprefs/tests/unit/test_unusedGroupsAndSettings.js
toolkit/components/cookie/content/cookieAcceptDialog.js
toolkit/components/crashes/CrashManager.jsm
toolkit/components/downloads/nsDownloadManagerUI.js
toolkit/components/downloads/test/browser/browser_bug414214.js
toolkit/components/downloads/test/browser/browser_nsIDownloadManagerUI.js
toolkit/components/downloads/test/unit/test_download_samename.js
toolkit/components/downloads/test/unit/test_history_expiration.js
toolkit/components/feeds/FeedProcessor.js
toolkit/components/feeds/test/test_xml.js
toolkit/components/filepicker/content/filepicker.js
toolkit/components/gfx/SanityTest.js
toolkit/components/microformats/Microformats.js
toolkit/components/microformats/microformat-shiv.js
toolkit/components/microformats/test/interface-tests/count-test.js
toolkit/components/microformats/test/interface-tests/experimental-test.js
toolkit/components/microformats/test/interface-tests/getParent-test.js
toolkit/components/microformats/test/interface-tests/hasMicroformats-test.js
toolkit/components/microformats/test/interface-tests/isMicroformat-test.js
toolkit/components/microformats/test/lib/dates.js
toolkit/components/microformats/test/lib/html.js
toolkit/components/microformats/test/lib/isodate.js
toolkit/components/microformats/test/lib/maps/h-adr.js
toolkit/components/microformats/test/lib/maps/h-card.js
toolkit/components/microformats/test/lib/maps/h-entry.js
toolkit/components/microformats/test/lib/maps/h-event.js
toolkit/components/microformats/test/lib/maps/h-feed.js
toolkit/components/microformats/test/lib/maps/h-geo.js
toolkit/components/microformats/test/lib/maps/h-item.js
toolkit/components/microformats/test/lib/maps/h-listing.js
toolkit/components/microformats/test/lib/maps/h-news.js
toolkit/components/microformats/test/lib/maps/h-org.js
toolkit/components/microformats/test/lib/maps/h-product.js
toolkit/components/microformats/test/lib/maps/h-recipe.js
toolkit/components/microformats/test/lib/maps/h-resume.js
toolkit/components/microformats/test/lib/maps/h-review-aggregate.js
toolkit/components/microformats/test/lib/maps/h-review.js
toolkit/components/microformats/test/lib/maps/rel.js
toolkit/components/microformats/test/lib/parser-implied.js
toolkit/components/microformats/test/lib/parser-includes.js
toolkit/components/microformats/test/lib/parser-rels.js
toolkit/components/microformats/test/lib/text.js
toolkit/components/microformats/test/lib/utilities.js
toolkit/components/microformats/test/module-tests/dates-test.js
toolkit/components/microformats/test/module-tests/domutils-test.js
toolkit/components/microformats/test/module-tests/html-test.js
toolkit/components/microformats/test/module-tests/isodate-test.js
toolkit/components/microformats/test/module-tests/text-test.js
toolkit/components/microformats/test/module-tests/url-test.js
toolkit/components/microformats/test/module-tests/utilities-test.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-mixedpropertries.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-card-tworoots.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-entry-mixedroots.js
toolkit/components/microformats/test/standards-tests/mf-mixed-h-resume-mixedroots.js
toolkit/components/microformats/test/standards-tests/mf-v1-adr-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-abbrpattern.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-hidden.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v1-geo-valuetitleclass.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-ampm.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-attendees.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-combining.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-concatenate.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcalendar-time.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-email.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-format.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-hyperlinkedphoto.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-multiple.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-name.js
toolkit/components/microformats/test/standards-tests/mf-v1-hcard-single.js
toolkit/components/microformats/test/standards-tests/mf-v1-hentry-summarycontent.js
toolkit/components/microformats/test/standards-tests/mf-v1-hfeed-simple.js
toolkit/components/microformats/test/standards-tests/mf-v1-hnews-all.js
toolkit/components/microformats/test/standards-tests/mf-v1-hnews-minimum.js
toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-aggregate.js
toolkit/components/microformats/test/standards-tests/mf-v1-hproduct-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-affiliation.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-contact.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-education.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-skill.js
toolkit/components/microformats/test/standards-tests/mf-v1-hresume-work.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-hcard.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-aggregate-vevent.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-item.js
toolkit/components/microformats/test/standards-tests/mf-v1-hreview-vcard.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-hcarditemref.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-heventitemref.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-hyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-object.js
toolkit/components/microformats/test/standards-tests/mf-v1-includes-table.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geo.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-geourl.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-adr-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-as-note-note.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-baseurl.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-childimplied.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-extendeddescription.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hcard.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-horghcard.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-hyperlinkedphoto.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedphoto.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-impliedurl.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-nested.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-p-property.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-card-relativeurls.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-impliedvalue-nested.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-summarycontent.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-u-property.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-entry-urlincontent.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-ampm.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-attendees.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-combining.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-concatenate.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dates.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-dt-property.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-event-time.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-implied-title.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-feed-simple.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-abbrpattern.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-altitude.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-hidden.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-geo-valuetitleclass.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-news-all.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-news-minimum.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-org-hyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simple.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-org-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-aggregate.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-product-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-all.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-recipe-minimum.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-affiliation.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-contact.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-education.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-skill.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-resume-work.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-hevent.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-justahyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-aggregate-simpleproperties.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-hyperlink.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-implieditem.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-item.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-justaname.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-photo.js
toolkit/components/microformats/test/standards-tests/mf-v2-h-review-vcard.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-duplicate-rels.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-license.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-nofollow.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-rel-urls.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-varying-text-duplicate-rels.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-all.js
toolkit/components/microformats/test/standards-tests/mf-v2-rel-xfn-elsewhere.js
toolkit/components/microformats/test/static/javascript/DOMParser.js
toolkit/components/microformats/test/static/javascript/beautify.js
toolkit/components/microformats/test/static/javascript/chai.js
toolkit/components/microformats/test/static/javascript/count.js
toolkit/components/microformats/test/static/javascript/parse.js
toolkit/components/microformats/test/static/javascript/prettify.js
toolkit/components/microformats/test/static/javascript/testrunner.js
toolkit/components/microformats/tests/test_Microformats_geo.html
toolkit/components/microformats/tests/test_Microformats_getters.html
toolkit/components/microformats/tests/test_Microformats_hCard.html
toolkit/components/nsDefaultCLH.js
toolkit/components/perfmonitoring/PerformanceStats.jsm
toolkit/components/perfmonitoring/tests/browser/browser_compartments.js
toolkit/components/perfmonitoring/tests/browser/browser_webpagePerformanceAlerts.js
toolkit/components/places/BookmarkHTMLUtils.jsm
toolkit/components/places/Bookmarks.jsm
toolkit/components/places/PlacesBackups.jsm
toolkit/components/places/PlacesUtils.jsm
toolkit/components/places/nsTaggingService.js
toolkit/components/places/tests/autocomplete/test_match_beginning.js
toolkit/components/places/tests/bookmarks/test_384228.js
toolkit/components/places/tests/bookmarks/test_385829.js
toolkit/components/places/tests/bookmarks/test_388695.js
toolkit/components/places/tests/bookmarks/test_395101.js
toolkit/components/places/tests/bookmarks/test_405938_restore_queries.js
toolkit/components/places/tests/bookmarks/test_417228-exclude-from-backup.js
toolkit/components/places/tests/bookmarks/test_424958-json-quoted-folders.js
toolkit/components/places/tests/bookmarks/test_448584.js
toolkit/components/places/tests/bookmarks/test_818584-discard-duplicate-backups.js
toolkit/components/places/tests/bookmarks/test_997030-bookmarks-html-encode.js
toolkit/components/places/tests/bookmarks/test_bmindex.js
toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js
toolkit/components/places/tests/browser/browser_bug680727.js
toolkit/components/places/tests/history/test_remove.js
toolkit/components/places/tests/queries/test_415716.js
toolkit/components/places/tests/queries/test_onlyBookmarked.js
toolkit/components/places/tests/queries/test_transitions.js
toolkit/components/places/tests/unit/test_331487.js
toolkit/components/places/tests/unit/test_384370.js
toolkit/components/places/tests/unit/test_385397.js
toolkit/components/places/tests/unit/test_408221.js
toolkit/components/places/tests/unit/test_413784.js
toolkit/components/places/tests/unit/test_419792_node_tags_property.js
toolkit/components/places/tests/unit/test_429505_remove_shortcuts.js
toolkit/components/places/tests/unit/test_PlacesUtils_lazyobservers.js
toolkit/components/places/tests/unit/test_adaptive_bug527311.js
toolkit/components/places/tests/unit/test_async_history_api.js
toolkit/components/places/tests/unit/test_bookmark_catobs.js
toolkit/components/places/tests/unit/test_bookmarks_html_import_tags.js
toolkit/components/places/tests/unit/test_frecency.js
toolkit/components/places/tests/unit/test_history.js
toolkit/components/places/tests/unit/test_history_autocomplete_tags.js
toolkit/components/places/tests/unit/test_history_sidebar.js
toolkit/components/places/tests/unit/test_isvisited.js
toolkit/components/places/tests/unit/test_keywords.js
toolkit/components/places/tests/unit/test_placeURIs.js
toolkit/components/places/tests/unit/test_removeVisitsByTimeframe.js
toolkit/components/places/tests/unit/test_tag_autocomplete_search.js
toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
toolkit/components/printing/content/printPageSetup.js
toolkit/components/printing/content/printPreviewProgress.js
toolkit/components/printing/content/printProgress.js
toolkit/components/printing/content/printUtils.js
toolkit/components/printing/content/printdialog.js
toolkit/components/printing/content/printjoboptions.js
toolkit/components/prompts/test/test_bug619644.html
toolkit/components/satchel/test/test_form_autocomplete.html
toolkit/components/satchel/test/test_form_autocomplete_with_list.html
toolkit/components/social/WorkerAPI.jsm
toolkit/components/telemetry/tests/unit/test_TelemetryController.js
toolkit/components/telemetry/tests/unit/test_TelemetryLateWrites.js
toolkit/components/telemetry/tests/unit/test_TelemetryLockCount.js
toolkit/components/telemetry/tests/unit/test_nsITelemetry.js
toolkit/components/thumbnails/test/browser_thumbnails_storage.js
toolkit/components/timermanager/nsUpdateTimerManager.js
toolkit/components/viewconfig/content/config.js
toolkit/content/findUtils.js
toolkit/content/finddialog.js
toolkit/content/globalOverlay.js
toolkit/content/nsDragAndDrop.js
toolkit/content/tests/browser/browser_bug295977_autoscroll_overflow.js
toolkit/content/tests/browser/browser_bug982298.js
toolkit/content/tests/browser/browser_f7_caret_browsing.js
toolkit/content/tests/chrome/RegisterUnregisterChrome.js
toolkit/content/tests/chrome/popup_trigger.js
toolkit/content/tests/chrome/xul_selectcontrol.js
toolkit/content/tests/unit/test_contentAreaUtils.js
toolkit/content/tests/widgets/popup_shared.js
toolkit/content/tests/widgets/tree_shared.js
toolkit/content/widgets/button.xml
toolkit/content/widgets/colorpicker.xml
toolkit/content/widgets/datetimepicker.xml
toolkit/content/widgets/dialog.xml
toolkit/content/widgets/filefield.xml
toolkit/content/widgets/listbox.xml
toolkit/content/widgets/popup.xml
toolkit/content/widgets/preferences.xml
toolkit/content/widgets/progressmeter.xml
toolkit/content/widgets/radio.xml
toolkit/content/widgets/scrollbox.xml
toolkit/content/widgets/spinbuttons.xml
toolkit/content/widgets/textbox.xml
toolkit/content/widgets/toolbar.xml
toolkit/content/widgets/tree.xml
toolkit/content/widgets/wizard.xml
toolkit/identity/tests/unit/test_log_utils.js
toolkit/modules/CertUtils.jsm
toolkit/modules/debug.js
toolkit/modules/tests/xpcshell/test_Promise.js
toolkit/mozapps/downloads/content/download.xml
toolkit/mozapps/downloads/content/downloads.js
toolkit/mozapps/downloads/content/helperApps.js
toolkit/mozapps/downloads/tests/chrome/utils.js
toolkit/mozapps/extensions/ChromeManifestParser.jsm
toolkit/mozapps/extensions/content/list.js
toolkit/mozapps/extensions/content/selectAddons.xml
toolkit/mozapps/extensions/content/setting.xml
toolkit/mozapps/extensions/content/xpinstallConfirm.js
toolkit/mozapps/extensions/test/browser/browser_bug557956.js
toolkit/mozapps/extensions/test/browser/browser_bug562797.js
toolkit/mozapps/extensions/test/browser/browser_bug562890.js
toolkit/mozapps/extensions/test/browser/browser_bug567127.js
toolkit/mozapps/extensions/test/browser/browser_bug570760.js
toolkit/mozapps/extensions/test/browser/browser_bug573062.js
toolkit/mozapps/extensions/test/browser/browser_bug587970.js
toolkit/mozapps/extensions/test/browser/browser_bug593535.js
toolkit/mozapps/extensions/test/browser/browser_bug608316.js
toolkit/mozapps/extensions/test/browser/browser_bug618502.js
toolkit/mozapps/extensions/test/browser/browser_discovery.js
toolkit/mozapps/extensions/test/browser/browser_list.js
toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
toolkit/mozapps/extensions/test/browser/browser_recentupdates.js
toolkit/mozapps/extensions/test/browser/browser_searching.js
toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js
toolkit/mozapps/extensions/test/xpcshell/test_ChromeManifestParser.js
toolkit/mozapps/extensions/test/xpcshell/test_bug455906.js
toolkit/mozapps/extensions/test/xpcshell/test_bug468528.js
toolkit/mozapps/extensions/test/xpcshell/test_bug514327_3.js
toolkit/mozapps/extensions/test/xpcshell/test_bug563256.js
toolkit/mozapps/extensions/test/xpcshell/test_bug594058.js
toolkit/mozapps/extensions/test/xpcshell/test_bug619730.js
toolkit/mozapps/extensions/test/xpcshell/test_compatoverrides.js
toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
toolkit/mozapps/extensions/test/xpcshell/test_duplicateplugins.js
toolkit/mozapps/extensions/test/xpcshell/test_filepointer.js
toolkit/mozapps/extensions/test/xpcshell/test_hasbinarycomponents.js
toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
toolkit/mozapps/extensions/test/xpcshell/test_migrate4.js
toolkit/mozapps/extensions/test/xpcshell/test_migrate_max_version.js
toolkit/mozapps/extensions/test/xpcshell/test_plugins.js
toolkit/mozapps/extensions/test/xpcshell/test_strictcompatibility.js
toolkit/mozapps/extensions/test/xpinstall/browser_localfile2.js
toolkit/mozapps/extensions/test/xpinstall/browser_signed_multiple.js
toolkit/mozapps/handling/content/dialog.js
toolkit/mozapps/handling/nsContentDispatchChooser.js
toolkit/mozapps/preferences/changemp.js
toolkit/mozapps/preferences/fontbuilder.js
toolkit/mozapps/preferences/removemp.js
toolkit/mozapps/update/content/history.js
toolkit/mozapps/update/content/updates.xml
toolkit/mozapps/update/tests/unit_aus_update/downloadCompleteAfterPartialFailure.js
toolkit/mozapps/update/tests/unit_aus_update/updateManagerXML.js
toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js
toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js
toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js
toolkit/obsolete/content/dialogOverlay.js
toolkit/obsolete/content/nsClipboard.js
toolkit/obsolete/content/nsUserSettings.js
toolkit/obsolete/content/strres.js
toolkit/profile/content/createProfileWizard.js
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -347,17 +347,17 @@ var PlacesCommandHook = {
         // but open right into the "edit" state, start batching here, so
         // "Cancel" in that state removes the bookmark.
         StarUI.beginBatch();
       }
 
       var parent = aParent !== undefined ?
                    aParent : PlacesUtils.unfiledBookmarksFolderId;
       var descAnno = { name: PlacesUIUtils.DESCRIPTION_ANNO, value: description };
-      var txn = new PlacesCreateBookmarkTransaction(uri, parent, 
+      var txn = new PlacesCreateBookmarkTransaction(uri, parent,
                                                     PlacesUtils.bookmarks.DEFAULT_INDEX,
                                                     title, null, [descAnno]);
       PlacesUtils.transactionManager.doTransaction(txn);
       itemId = txn.item.id;
       // Set the character-set.
       if (charset && !PrivateBrowsingUtils.isBrowserPrivate(aBrowser))
         PlacesUtils.setCharsetForURI(uri, charset);
     }
@@ -473,17 +473,17 @@ var PlacesCommandHook = {
         resolve(msg.data);
       });
 
       mm.sendAsyncMessage("Bookmarks:GetPageDetails", { })
     });
   },
 
   /**
-   * Adds a bookmark to the page loaded in the current tab. 
+   * Adds a bookmark to the page loaded in the current tab.
    */
   bookmarkCurrentPage: function PCH_bookmarkCurrentPage(aShowEditUI, aParent) {
     this.bookmarkPage(gBrowser.selectedBrowser, aParent, aShowEditUI);
   },
 
   /**
    * Adds a bookmark to the page targeted by a link.
    * @param aParent
@@ -535,17 +535,17 @@ var PlacesCommandHook = {
         uniquePages[spec] = null;
         URIs.push(tab.linkedBrowser.currentURI);
       }
     });
     return URIs;
   },
 
   /**
-   * Adds a folder with bookmarks to all of the currently open tabs in this 
+   * Adds a folder with bookmarks to all of the currently open tabs in this
    * window.
    */
   bookmarkCurrentPages: function PCH_bookmarkCurrentPages() {
     let pages = this.uniqueCurrentPages;
     if (pages.length > 1) {
     PlacesUIUtils.showBookmarkDialog({ action: "add"
                                      , type: "folder"
                                      , URIList: pages
@@ -565,17 +565,17 @@ var PlacesCommandHook = {
 
     // Disable "Bookmark All Tabs" if there are less than two
     // "unique current pages".
     goSetCommandEnabled("Browser:BookmarkAllTabs",
                         this.uniqueCurrentPages.length >= 2);
   },
 
   /**
-   * Adds a Live Bookmark to a feed associated with the current page. 
+   * Adds a Live Bookmark to a feed associated with the current page.
    * @param     url
    *            The nsIURI of the page the feed was attached to
    * @title     title
    *            The title of the feed. Optional.
    * @subtitle  subtitle
    *            A short description of the feed. Optional.
    */
   addLiveBookmark: Task.async(function *(url, feedTitle, feedSubtitle) {
@@ -599,28 +599,28 @@ var PlacesCommandHook = {
                                      , defaultInsertionPoint: toolbarIP
                                      , hiddenRows: [ "feedLocation"
                                                    , "siteLocation"
                                                    , "description" ]
                                      }, window);
   }),
 
   /**
-   * Opens the Places Organizer. 
+   * Opens the Places Organizer.
    * @param   aLeftPaneRoot
    *          The query to select in the organizer window - options
    *          are: History, AllBookmarks, BookmarksMenu, BookmarksToolbar,
    *          UnfiledBookmarks, Tags and Downloads.
    */
   showPlacesOrganizer: function PCH_showPlacesOrganizer(aLeftPaneRoot) {
     var organizer = Services.wm.getMostRecentWindow("Places:Organizer");
     // Due to bug 528706, getMostRecentWindow can return closed windows.
     if (!organizer || organizer.closed) {
       // No currently open places window, so open one with the specified mode.
-      openDialog("chrome://browser/content/places/places.xul", 
+      openDialog("chrome://browser/content/places/places.xul",
                  "", "chrome,toolbar=yes,dialog=no,resizable", aLeftPaneRoot);
     }
     else {
       organizer.PlacesOrganizer.selectLeftPaneContainerByHierarchy(aLeftPaneRoot);
       organizer.focus();
     }
   }
 };
@@ -821,17 +821,17 @@ var BookmarksEventHandler = {
       this.onCommand(aEvent, aView);
     }
   },
 
   /**
    * Handler for command event for an item in the bookmarks toolbar.
    * Menus and submenus from the folder buttons bubble up to this handler.
    * Opens the item.
-   * @param aEvent 
+   * @param aEvent
    *        DOMEvent for the command
    * @param aView
    *        The places view which aEvent should be associated with.
    */
   onCommand: function BEH_onCommand(aEvent, aView) {
     var target = aEvent.originalTarget;
     if (target._placesNode)
       PlacesUIUtils.openNodeWithEvent(target._placesNode, aEvent, aView);
@@ -903,17 +903,17 @@ var PlacesMenuDNDHandler = {
   _closeDelayMs: 500,
   _loadTimer: null,
   _closeTimer: null,
   _closingTimerNode: null,
 
   /**
    * Called when the user enters the <menu> element during a drag.
    * @param   event
-   *          The DragEnter event that spawned the opening. 
+   *          The DragEnter event that spawned the opening.
    */
   onDragEnter: function PMDH_onDragEnter(event) {
     // Opening menus in a Places popup is handled by the view itself.
     if (!this._isStaticContainer(event.target))
       return;
 
     // If we re-enter the same menu or anchor before the close timer runs out,
     // we should ensure that we do not close:
@@ -974,49 +974,49 @@ var PlacesMenuDNDHandler = {
         popup.removeAttribute("autoopened");
         popup.hidePopup();
       }
     }, this._closeDelayMs, Ci.nsITimer.TYPE_ONE_SHOT);
   },
 
   /**
    * Determines if a XUL element represents a static container.
-   * @returns true if the element is a container element (menu or 
+   * @returns true if the element is a container element (menu or
    *`         menu-toolbarbutton), false otherwise.
    */
   _isStaticContainer: function PMDH__isContainer(node) {
     let isMenu = node.localName == "menu" ||
                  (node.localName == "toolbarbutton" &&
                   (node.getAttribute("type") == "menu" ||
                    node.getAttribute("type") == "menu-button"));
     let isStatic = !("_placesNode" in node) && node.lastChild &&
                    node.lastChild.hasAttribute("placespopup") &&
                    !node.parentNode.hasAttribute("placespopup");
     return isMenu && isStatic;
   },
 
   /**
    * Called when the user drags over the <menu> element.
    * @param   event
-   *          The DragOver event. 
+   *          The DragOver event.
    */
   onDragOver: function PMDH_onDragOver(event) {
     let ip = new InsertionPoint(PlacesUtils.bookmarksMenuFolderId,
                                 PlacesUtils.bookmarks.DEFAULT_INDEX,
                                 Components.interfaces.nsITreeView.DROP_ON);
     if (ip && PlacesControllerDragHelper.canDrop(ip, event.dataTransfer))
       event.preventDefault();
 
     event.stopPropagation();
   },
 
   /**
    * Called when the user drops on the <menu> element.
    * @param   event
-   *          The Drop event. 
+   *          The Drop event.
    */
   onDrop: function PMDH_onDrop(event) {
     // Put the item at the end of bookmark menu.
     let ip = new InsertionPoint(PlacesUtils.bookmarksMenuFolderId,
                                 PlacesUtils.bookmarks.DEFAULT_INDEX,
                                 Components.interfaces.nsITreeView.DROP_ON);
     PlacesControllerDragHelper.onDrop(ip, event.dataTransfer);
     PlacesControllerDragHelper.currentDropTarget = null;
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -125,17 +125,17 @@ var handleContentContextMenu = function 
   let contentType = null;
   let contentDisposition = null;
   if (event.target.nodeType == Ci.nsIDOMNode.ELEMENT_NODE &&
       event.target instanceof Ci.nsIImageLoadingContent &&
       event.target.currentURI) {
     disableSetDesktopBg = disableSetDesktopBackground(event.target);
 
     try {
-      let imageCache = 
+      let imageCache =
         Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
                                         .getImgCacheForDocument(doc);
       let props =
         imageCache.findEntryProperties(event.target.currentURI, doc);
       try {
         contentType = props.get("type", Ci.nsISupportsCString).data;
       } catch(e) {}
       try {
--- a/browser/base/content/pageinfo/security.js
+++ b/browser/base/content/pageinfo/security.js
@@ -122,17 +122,17 @@ var security = {
   mapIssuerOrganization: function(name) {
     if (!name) return null;
 
     if (name == "RSA Data Security, Inc.") return "Verisign, Inc.";
 
     // No mapping required
     return name;
   },
-  
+
   /**
    * Open the cookie manager window
    */
   viewCookies : function()
   {
     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                        .getService(Components.interfaces.nsIWindowMediator);
     var win = wm.getMostRecentWindow("Browser:Cookies");
@@ -178,17 +178,17 @@ function securityOnLoad(uri, windowInfo)
   else {
     document.getElementById("securityTab").hidden = false;
   }
 
   const pageInfoBundle = document.getElementById("pageinfobundle");
 
   /* Set Identity section text */
   setText("security-identity-domain-value", info.hostName);
-  
+
   var owner, verifier;
   if (info.cert && !info.isBroken) {
     // Try to pull out meaningful values.  Technically these fields are optional
     // so we'll employ fallbacks where appropriate.  The EV spec states that Org
     // fields must be specified for subject and issuer so that case is simpler.
     if (info.isEV) {
       owner = info.cert.organization;
       verifier = security.mapIssuerOrganization(info.cAName);
@@ -226,28 +226,28 @@ function securityOnLoad(uri, windowInfo)
   /* Set Privacy & History section text */
   var yesStr = pageInfoBundle.getString("yes");
   var noStr = pageInfoBundle.getString("no");
 
   setText("security-privacy-cookies-value",
           hostHasCookies(uri) ? yesStr : noStr);
   setText("security-privacy-passwords-value",
           realmHasPasswords(uri) ? yesStr : noStr);
-  
+
   var visitCount = previousVisitCount(info.hostName);
   if(visitCount > 1) {
     setText("security-privacy-history-value",
             pageInfoBundle.getFormattedString("securityNVisits", [visitCount.toLocaleString()]));
   }
   else if (visitCount == 1) {
     setText("security-privacy-history-value",
             pageInfoBundle.getString("securityOneVisit"));
   }
   else {
-    setText("security-privacy-history-value", noStr);        
+    setText("security-privacy-history-value", noStr);
   }
 
   /* Set the Technical Detail section messages */
   const pkiBundle = document.getElementById("pkiBundle");
   var hdr;
   var msg1;
   var msg2;
 
@@ -278,17 +278,17 @@ function securityOnLoad(uri, windowInfo)
     if (info.hostName != null)
       msg1 = pkiBundle.getFormattedString("pageInfo_Privacy_None1", [info.hostName]);
     else
       msg1 = pkiBundle.getString("pageInfo_Privacy_None3");
     msg2 = pkiBundle.getString("pageInfo_Privacy_None2");
   }
   setText("security-technical-shortform", hdr);
   setText("security-technical-longform1", msg1);
-  setText("security-technical-longform2", msg2); 
+  setText("security-technical-longform2", msg2);
 }
 
 function setText(id, value)
 {
   var element = document.getElementById(id);
   if (!element)
     return;
   if (element.localName == "textbox" || element.localName == "label")
@@ -333,23 +333,23 @@ function realmHasPasswords(uri) {
 /**
  * Return the number of previous visits recorded for host before today.
  *
  * @param host - the domain name to look for in history
  */
 function previousVisitCount(host, endTimeReference) {
   if (!host)
     return false;
-  
+
   var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
                                  .getService(Components.interfaces.nsINavHistoryService);
-    
+
   var options = historyService.getNewQueryOptions();
   options.resultType = options.RESULTS_AS_VISIT;
-  
+
   // Search for visits to this host before today
   var query = historyService.getNewQuery();
   query.endTimeReference = query.TIME_RELATIVE_TODAY;
   query.endTime = 0;
   query.domain = host;
 
   var result = historyService.executeQuery(query, options);
   result.root.containerOpen = true;
--- a/browser/base/content/sync/genericChange.js
+++ b/browser/base/content/sync/genericChange.js
@@ -116,17 +116,17 @@ var Change = {
   _clearStatus: function _clearStatus() {
     this._status.value = "";
     this._statusIcon.removeAttribute("status");
   },
 
   _updateStatus: function Change__updateStatus(str, state) {
      this._updateStatusWithString(this._str(str), state);
   },
-  
+
   _updateStatusWithString: function Change__updateStatusWithString(string, state) {
     this._statusRow.hidden = false;
     this._status.value = string;
     this._statusIcon.setAttribute("status", state);
 
     let error = state == "error";
     this._dialog.getButton("cancel").disabled = !error;
     this._dialog.getButton("finish").disabled = !error;
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -1586,17 +1586,17 @@ file, You can obtain one at http://mozil
         this._updateProgressTimeout = setTimeout(this.updateProgress.bind(this), 0);
       ]]></constructor>
 
       <destructor><![CDATA[
         this.destroy();
       ]]></destructor>
 
       <field name="progressmeter" readonly="true">
-        document.getElementById("addon-progress-notification-progressmeter"); 
+        document.getElementById("addon-progress-notification-progressmeter");
       </field>
       <field name="progresstext" readonly="true">
         document.getElementById("addon-progress-notification-progresstext");
       </field>
       <field name="DownloadUtils" readonly="true">
         {
           let utils = {};
           Components.utils.import("resource://gre/modules/DownloadUtils.jsm", utils);
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -109,18 +109,18 @@ function openUILink(url, event, aIgnoreB
  * On Windows, the modifiers are:
  * Ctrl        new tab, selected
  * Shift       new window
  * Ctrl+Shift  new tab, in background
  * Alt         save
  *
  * Middle-clicking is the same as Ctrl+clicking (it opens a new tab).
  *
- * Exceptions: 
- * - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff.  
+ * Exceptions:
+ * - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff.
  *    (Currently, the Alt isn't sent here at all for menu items, but that will change in bug 126189.)
  * - Alt is hard to use in context menus, because pressing Alt closes the menu.
  * - Alt can't be used on the bookmarks toolbar because Alt is used for "treat this as something draggable".
  * - The button is ignored for the middle-click-paste-URL feature, since it's always a middle-click.
  */
 function whereToOpenLink( e, ignoreButton, ignoreAlt )
 {
   // This method must treat a null event like a left click without modifier keys (i.e.
@@ -411,17 +411,17 @@ function closeMenus(node)
     && (node.tagName == "menupopup" || node.tagName == "popup"))
       node.hidePopup();
 
     closeMenus(node.parentNode);
   }
 }
 
 // Gather all descendent text under given document node.
-function gatherTextUnder ( root ) 
+function gatherTextUnder ( root )
 {
   var text = "";
   var node = root.firstChild;
   var depth = 1;
   while ( node && depth > 0 ) {
     // See if this node is text.
     if ( node.nodeType == Node.TEXT_NODE ) {
       // Add this text to our collection.
@@ -668,17 +668,17 @@ function makeURLAbsolute(aBase, aUrl)
  * @param aAllowThirdPartyFixup
  *        If true, then we allow the URL text to be sent to third party services
  *        (e.g., Google's I Feel Lucky) for interpretation. This parameter may
  *        be undefined in which case it is treated as false.
  * @param [optional] aReferrer
  *        This will be used as the referrer. There will be no security check.
  * @param [optional] aReferrerPolicy
  *        Referrer policy - Ci.nsIHttpChannel.REFERRER_POLICY_*.
- */ 
+ */
 function openNewTabWith(aURL, aDocument, aPostData, aEvent,
                         aAllowThirdPartyFixup, aReferrer, aReferrerPolicy) {
 
   // As in openNewWindowWith(), we want to pass the charset of the
   // current document over to a new tab.
   let originCharset = null;
   if (document.documentElement.getAttribute("windowtype") == "navigator:browser")
     originCharset = gBrowser.selectedBrowser.characterSet;
@@ -723,17 +723,17 @@ function openHelpLink(aHelpTopic, aCalle
   var where = aWhere;
   if (!aWhere)
     where = aCalledFromModal ? "window" : "tab";
 
   openUILinkIn(url, where);
 }
 
 function openPrefsHelp() {
-  // non-instant apply prefwindows are usually modal, so we can't open in the topmost window, 
+  // non-instant apply prefwindows are usually modal, so we can't open in the topmost window,
   // since its probably behind the window.
   var instantApply = getBoolPref("browser.preferences.instantApply");
 
   var helpTopic = document.getElementsByTagName("prefwindow")[0].currentPane.helpTopic;
   openHelpLink(helpTopic, !instantApply);
 }
 
 function trimURL(aURL) {
--- a/browser/base/content/web-panels.js
+++ b/browser/base/content/web-panels.js
@@ -12,27 +12,27 @@ function getPanelBrowser()
     return document.getElementById("web-panels-browser");
 }
 
 var panelProgressListener = {
     onProgressChange : function (aWebProgress, aRequest,
                                  aCurSelfProgress, aMaxSelfProgress,
                                  aCurTotalProgress, aMaxTotalProgress) {
     },
-    
+
     onStateChange : function(aWebProgress, aRequest, aStateFlags, aStatus)
     {
         if (!aRequest)
           return;
 
         //ignore local/resource:/chrome: files
         if (aStatus == NS_NET_STATUS_READ_FROM || aStatus == NS_NET_STATUS_WROTE_TO)
            return;
 
-        if (aStateFlags & Ci.nsIWebProgressListener.STATE_START && 
+        if (aStateFlags & Ci.nsIWebProgressListener.STATE_START &&
             aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
             window.parent.document.getElementById('sidebar-throbber').setAttribute("loading", "true");
         }
         else if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
                 aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
             window.parent.document.getElementById('sidebar-throbber').removeAttribute("loading");
         }
     }
@@ -40,17 +40,17 @@ var panelProgressListener = {
 
     onLocationChange : function(aWebProgress, aRequest, aLocation, aFlags) {
         UpdateBackForwardCommands(getPanelBrowser().webNavigation);
     },
 
     onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage) {
     },
 
-    onSecurityChange : function(aWebProgress, aRequest, aState) { 
+    onSecurityChange : function(aWebProgress, aRequest, aState) {
     },
 
     QueryInterface : function(aIID)
     {
         if (aIID.equals(Ci.nsIWebProgressListener) ||
             aIID.equals(Ci.nsISupportsWeakReference) ||
             aIID.equals(Ci.nsISupports))
             return this;
--- a/browser/branding/aurora/pref/firefox-branding.js
+++ b/browser/branding/aurora/pref/firefox-branding.js
@@ -14,17 +14,17 @@ pref("app.update.interval", 28800); // 8
 // 0 means "download everything at once"
 pref("app.update.download.backgroundInterval", 0);
 // Give the user x seconds to react before showing the big UI. default=168 hours
 pref("app.update.promptWaitTime", 604800);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://www.mozilla.org/firefox/aurora/");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://www.mozilla.org/firefox/aurora/");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 2);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/branding/nightly/pref/firefox-branding.js
+++ b/browser/branding/nightly/pref/firefox-branding.js
@@ -12,17 +12,17 @@ pref("app.update.interval", 7200); // 2 
 // 0 means "download everything at once"
 pref("app.update.download.backgroundInterval", 0);
 // Give the user x seconds to react before showing the big UI. default=12 hours
 pref("app.update.promptWaitTime", 43200);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://nightly.mozilla.org");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://nightly.mozilla.org");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 2);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/branding/official/pref/firefox-branding.js
+++ b/browser/branding/official/pref/firefox-branding.js
@@ -11,17 +11,17 @@ pref("app.update.interval", 43200); // 1
 // background (in seconds)
 pref("app.update.download.backgroundInterval", 60);
 // Give the user x seconds to react before showing the big UI. default=48 hours
 pref("app.update.promptWaitTime", 172800);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://www.mozilla.org/firefox/");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://www.mozilla.org/%LOCALE%/firefox/notes");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 63);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/branding/unofficial/pref/firefox-branding.js
+++ b/browser/branding/unofficial/pref/firefox-branding.js
@@ -11,17 +11,17 @@ pref("app.update.interval", 86400); // 2
 // background (in seconds)
 pref("app.update.download.backgroundInterval", 60);
 // Give the user x seconds to react before showing the big UI. default=24 hours
 pref("app.update.promptWaitTime", 86400);
 // URL user can browse to manually if for some reason all update installation
 // attempts fail.
 pref("app.update.url.manual", "https://nightly.mozilla.org");
 // A default value for the "More information about this update" link
-// supplied in the "An update is available" page of the update wizard. 
+// supplied in the "An update is available" page of the update wizard.
 pref("app.update.url.details", "https://nightly.mozilla.org");
 
 // The number of days a binary is permitted to be old
 // without checking for an update.  This assumes that
 // app.update.checkInstallTime is true.
 pref("app.update.checkInstallTime.days", 2);
 
 // Give the user x seconds to reboot before showing a badge on the hamburger
--- a/browser/components/customizableui/test/browser_945739_showInPrivateBrowsing_customize_mode.js
+++ b/browser/components/customizableui/test/browser_945739_showInPrivateBrowsing_customize_mode.js
@@ -22,14 +22,14 @@ add_task(function* testPrivateBrowsingCu
 
   let privateWindow = yield openAndLoadWindow({private: true});
   let privateWidgetArray = CustomizableUI.getUnusedWidgets(privateWindow.gNavToolbox.palette);
   privateWidgetArray = privateWidgetArray.map((w) => w.id);
   is(privateWidgetArray.indexOf(kWidgetId), -1,
      "Widget should not appear as unused in private window");
   yield promiseWindowClosed(privateWindow);
 
-  CustomizableUI.destroyWidget(kWidgetId); 
+  CustomizableUI.destroyWidget(kWidgetId);
 });
 
 add_task(function* asyncCleanup() {
   yield resetCustomization();
 });
--- a/browser/components/customizableui/test/head.js
+++ b/browser/components/customizableui/test/head.js
@@ -138,17 +138,17 @@ function placementArraysEqual(areaId, ac
   let minItems = Math.min(expectedPlacements.length, actualPlacements.length);
   for (let i = 0; i < minItems; i++) {
     if (typeof expectedPlacements[i] == "string") {
       is(actualPlacements[i], expectedPlacements[i],
          "Item " + i + " in " + areaId + " should match expectations.");
     } else if (expectedPlacements[i] instanceof RegExp) {
       ok(expectedPlacements[i].test(actualPlacements[i]),
          "Item " + i + " (" + actualPlacements[i] + ") in " +
-         areaId + " should match " + expectedPlacements[i]); 
+         areaId + " should match " + expectedPlacements[i]);
     } else {
       ok(false, "Unknown type of expected placement passed to " +
                 " assertAreaPlacements. Is your test broken?");
     }
   }
 }
 
 function todoAssertAreaPlacements(areaId, expectedPlacements) {
--- a/browser/components/nsBrowserContentHandler.js
+++ b/browser/components/nsBrowserContentHandler.js
@@ -72,17 +72,17 @@ function resolveURIInternal(aCmdLine, aA
       return uri;
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   // We have interpreted the argument as a relative file URI, but the file
   // doesn't exist. Try URI fixup heuristics: see bug 290782.
- 
+
   try {
     uri = urifixup.createFixupURI(aArgument, 0);
   }
   catch (e) {
     Components.utils.reportError(e);
   }
 
   return uri;
@@ -124,17 +124,17 @@ function needHomepageOverride(prefb) {
 
   if (mstone != savedmstone) {
     // Bug 462254. Previous releases had a default pref to suppress the EULA
     // agreement if the platform's installer had already shown one. Now with
     // about:rights we've removed the EULA stuff and default pref, but we need
     // a way to make existing profiles retain the default that we removed.
     if (savedmstone)
       prefb.setBoolPref("browser.rights.3.shown", true);
-    
+
     prefb.setCharPref("browser.startup.homepage_override.mstone", mstone);
     prefb.setCharPref("browser.startup.homepage_override.buildID", buildID);
     return (savedmstone ? OVERRIDE_NEW_MSTONE : OVERRIDE_NEW_PROFILE);
   }
 
   if (buildID != savedBuildID) {
     prefb.setCharPref("browser.startup.homepage_override.buildID", buildID);
     return OVERRIDE_NEW_BUILD_ID;
@@ -190,17 +190,17 @@ function openWindow(parent, url, target,
     if (args) {
       argstring = Components.classes["@mozilla.org/supports-string;1"]
                             .createInstance(nsISupportsString);
       argstring.data = args;
     }
 
     return wwatch.openWindow(parent, url, target, features, argstring);
   }
-  
+
   // Pass an array to avoid the browser "|"-splitting behavior.
   var argArray = Components.classes["@mozilla.org/supports-array;1"]
                     .createInstance(Components.interfaces.nsISupportsArray);
 
   // add args to the arguments array
   var stringArgs = null;
   if (args instanceof Array) // array
     stringArgs = args;
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -1227,17 +1227,17 @@ PlacesToolbar.prototype = {
     let childOverflowed = false;
     for (let i = 0; i < this._rootElt.childNodes.length; i++) {
       let child = this._rootElt.childNodes[i];
       // Once a child overflows, all the next ones will.
       if (!childOverflowed) {
         let childRect = child.getBoundingClientRect();
         childOverflowed = this.isRTL ? (childRect.left < scrollRect.left)
                                      : (childRect.right > scrollRect.right);
-                                      
+
       }
       child.style.visibility = childOverflowed ? "hidden" : "visible";
     }
 
     // We rebuild the chevron on popupShowing, so if it is open
     // we must update it.
     if (this._chevron.open)
       this._updateChevronPopupNodesVisibility();
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -965,17 +965,17 @@ PlacesController.prototype = {
       }
     }
 
     // Do removal in chunks to give some breath to main-thread.
     function* pagesChunkGenerator(aURIs) {
       while (aURIs.length) {
         let URIslice = aURIs.splice(0, REMOVE_PAGES_CHUNKLEN);
         PlacesUtils.bhistory.removePages(URIslice, URIslice.length);
-        Services.tm.mainThread.dispatch(() => gen.next(), 
+        Services.tm.mainThread.dispatch(() => gen.next(),
                                         Ci.nsIThread.DISPATCH_NORMAL);
         yield unefined;
       }
     }
     let gen = pagesChunkGenerator(URIs);
     gen.next();
   },
 
--- a/browser/components/places/content/history-panel.js
+++ b/browser/components/places/content/history-panel.js
@@ -15,25 +15,25 @@ function HistorySidebarInit()
   gHistoryTree = document.getElementById("historyTree");
   gSearchBox = document.getElementById("search-box");
 
   gHistoryGrouping = document.getElementById("viewButton").
                               getAttribute("selectedsort");
 
   if (gHistoryGrouping == "site")
     document.getElementById("bysite").setAttribute("checked", "true");
-  else if (gHistoryGrouping == "visited") 
+  else if (gHistoryGrouping == "visited")
     document.getElementById("byvisited").setAttribute("checked", "true");
   else if (gHistoryGrouping == "lastvisited")
     document.getElementById("bylastvisited").setAttribute("checked", "true");
   else if (gHistoryGrouping == "dayandsite")
     document.getElementById("bydayandsite").setAttribute("checked", "true");
   else
     document.getElementById("byday").setAttribute("checked", "true");
-  
+
   searchHistory("");
 }
 
 function GroupBy(groupingType)
 {
   gHistoryGrouping = groupingType;
   searchHistory(gSearchBox.value);
 }
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -769,17 +769,17 @@ var PlacesOrganizer = {
 var PlacesSearchBox = {
 
   /**
    * The Search text field
    */
   get searchFilter() {
     return document.getElementById("searchFilter");
   },
-   
+
   /**
    * Folders to include when searching.
    */
   _folders: [],
   get folders() {
     if (this._folders.length == 0) {
       this._folders.push(PlacesUtils.bookmarksMenuFolderId,
                          PlacesUtils.unfiledBookmarksFolderId,
@@ -889,17 +889,17 @@ var PlacesSearchBox = {
     switch (this.filterCollection) {
       case "history":
         title = PlacesUIUtils.getString("searchHistory");
         break;
       case "downloads":
         title = PlacesUIUtils.getString("searchDownloads");
         break;
       default:
-        title = PlacesUIUtils.getString("searchBookmarks");                                    
+        title = PlacesUIUtils.getString("searchBookmarks");
     }
     this.searchFilter.placeholder = title;
   },
 
   /**
    * Gets/sets the active collection from the dropdown menu.
    */
   get filterCollection() {
--- a/browser/components/places/content/treeView.js
+++ b/browser/components/places/content/treeView.js
@@ -225,17 +225,17 @@ PlacesTreeView.prototype = {
 
   /**
    * Gets the node at a given row.
    */
   _getNodeForRow: function PTV__getNodeForRow(aRow) {
     if (aRow < 0) {
       return null;
     }
-  
+
     let node = this._rows[aRow];
     if (node !== undefined)
       return node;
 
     // Find the nearest node.
     let rowNode, row;
     for (let i = aRow - 1; i >= 0 && rowNode === undefined; i--) {
       rowNode = this._rows[i];
@@ -880,17 +880,17 @@ PlacesTreeView.prototype = {
         (this._flatList && aNode == this._rootNode)) {
       let queryOptions = PlacesUtils.asQuery(this._rootNode).queryOptions;
       if (queryOptions.excludeItems) {
         return;
       }
 
       PlacesUtils.livemarks.getLivemark({ id: aNode.itemId })
         .then(aLivemark => {
-          let shouldInvalidate = 
+          let shouldInvalidate =
             !this._controller.hasCachedLivemarkInfo(aNode);
           this._controller.cacheLivemarkInfo(aNode, aLivemark);
           if (aNewState == Components.interfaces.nsINavHistoryContainerResultNode.STATE_OPENED) {
             aLivemark.registerForUpdates(aNode, this);
             // Prioritize the current livemark.
             aLivemark.reload();
             PlacesUtils.livemarks.reloadLivemarks();
             if (shouldInvalidate)
--- a/browser/components/places/tests/browser/browser_475045.js
+++ b/browser/components/places/tests/browser/browser_475045.js
@@ -21,44 +21,44 @@ add_task(function* test() {
 
   // Setup the node we will use to be dropped. The actual node used does not
   // matter because we will set its data, effect, and mimeType manually.
   let placesItems = document.getElementById("PlacesToolbarItems");
   ok(placesItems, "PlacesToolbarItems should not be null");
   ok(placesItems.localName == "scrollbox", "PlacesToolbarItems should not be null");
   ok(placesItems.childNodes[0], "PlacesToolbarItems must have at least one child");
 
-  /** 
+  /**
    * Simulates a drop of a URI onto the bookmarks bar.
-   * 
+   *
    * @param aEffect
    *        The effect to use for the drop operation: move, copy, or link.
    * @param aMimeType
    *        The mime type to use for the drop operation.
    */
   let simulateDragDrop = function(aEffect, aMimeType) {
     const uriSpec = "http://www.mozilla.org/D1995729-A152-4e30-8329-469B01F30AA7";
     let uri = makeURI(uriSpec);
     ChromeUtils.synthesizeDrop(placesItems.childNodes[0],
-                              placesItems, 
-                              [[{type: aMimeType, 
-                                data: uriSpec}]], 
+                              placesItems,
+                              [[{type: aMimeType,
+                                data: uriSpec}]],
                               aEffect, window);
 
     // Verify that the drop produces exactly one bookmark.
     let bookmarkIds = PlacesUtils.bookmarks
                       .getBookmarkIdsForURI(uri);
     ok(bookmarkIds.length == 1, "There should be exactly one bookmark");
-    
+
     PlacesUtils.bookmarks.removeItem(bookmarkIds[0]);
 
     // Verify that we removed the bookmark successfully.
     ok(!PlacesUtils.bookmarks.isBookmarked(uri), "URI should be removed");
-  } 
-  
+  }
+
   // Simulate a bookmark drop for all of the mime types and effects.
   let mimeTypes = ["text/plain", "text/unicode", "text/x-moz-url"];
   let effects = ["move", "copy", "link"];
   effects.forEach(function (effect) {
     mimeTypes.forEach(function (mimeType) {
       simulateDragDrop(effect, mimeType);
     });
   });
--- a/browser/components/places/tests/browser/browser_views_liveupdate.js
+++ b/browser/components/places/tests/browser/browser_views_liveupdate.js
@@ -44,17 +44,17 @@ function openBookmarksSidebar() {
  * Simulates popup opening causing it to populate.
  * We cannot just use menu.open, since it would not work on Mac due to native menubar.
  */
 function fakeOpenPopup(aPopup) {
   var popupEvent = document.createEvent("MouseEvent");
   popupEvent.initMouseEvent("popupshowing", true, true, window, 0,
                             0, 0, 0, 0, false, false, false, false,
                             0, null);
-  aPopup.dispatchEvent(popupEvent);  
+  aPopup.dispatchEvent(popupEvent);
 }
 
 /**
  * Adds bookmarks observer, and executes a bunch of bookmarks operations.
  */
 function startTest() {
   var bs = PlacesUtils.bookmarks;
   // Add observers.
@@ -469,12 +469,12 @@ function getViewsForFolder(aFolderId) {
     case PlacesUtils.toolbarFolderId:
       return ["toolbar", "sidebar"]
       break;
     case PlacesUtils.bookmarksMenuFolderId:
       return ["menu", "sidebar"]
       break;
     case PlacesUtils.unfiledBookmarksFolderId:
       return ["sidebar"]
-      break;    
+      break;
   }
   return new Array();
 }
--- a/browser/components/places/tests/unit/test_PUIU_makeTransaction.js
+++ b/browser/components/places/tests/unit/test_PUIU_makeTransaction.js
@@ -223,17 +223,17 @@ add_test(function test_separator()
     } catch(ex) {
       do_throw(ex);
     }
   }, "random-anno");
 
   let id = PlacesUtils.bookmarks.insertSeparator(PlacesUtils.unfiledBookmarksFolderId,
                                                  PlacesUtils.bookmarks.DEFAULT_INDEX);
   PlacesUtils.annotations.setItemAnnotation(id, "random-anno",
-                                            "random-value", 0, 
+                                            "random-value", 0,
                                             PlacesUtils.annotations.EXPIRE_NEVER);
 });
 
 add_test(function test_bookmark()
 {
   const TEST_URL = "http://places.moz.org/"
   const TEST_TITLE = "Places bookmark"
 
--- a/browser/components/safebrowsing/content/test/browser_bug400731.js
+++ b/browser/components/safebrowsing/content/test/browser_bug400731.js
@@ -1,15 +1,15 @@
 /* Check for the intended visibility of the "Ignore this warning" text*/
 
 function test() {
   waitForExplicitFinish();
-  
+
   gBrowser.selectedTab = gBrowser.addTab();
-  
+
   // Navigate to malware site.  Can't use an onload listener here since
   // error pages don't fire onload.  Also can't register the DOMContentLoaded
   // handler here because registering it too soon would mean that we might
   // get it for about:blank, and not about:blocked.
   gBrowser.addTabsProgressListener({
     onLocationChange: function(aTab, aWebProgress, aRequest, aLocation, aFlags) {
       if (aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE) {
         gBrowser.removeTabsProgressListener(this);
@@ -25,17 +25,17 @@ function testMalware(event) {
     return;
   }
 
   window.removeEventListener("DOMContentLoaded", testMalware, true);
 
   // Confirm that "Ignore this warning" is visible - bug 422410
   var el = content.document.getElementById("ignoreWarningButton");
   ok(el, "Ignore warning button should be present for malware");
-  
+
   var style = content.getComputedStyle(el, null);
   is(style.display, "inline-block", "Ignore Warning button should be display:inline-block for malware");
 
   Services.prefs.setBoolPref("browser.safebrowsing.allowOverride", false);
 
   // Now launch the unwanted software test
   window.addEventListener("DOMContentLoaded", testUnwanted, true);
   content.location = "http://www.itisatrap.org/firefox/unwanted.html";
@@ -60,18 +60,18 @@ function testUnwanted(event) {
 }
 
 function testPhishing(event) {
   if (event.target != gBrowser.selectedBrowser.contentDocument) {
     return;
   }
 
   window.removeEventListener("DOMContentLoaded", testPhishing, true);
-  
+
   var el = content.document.getElementById("ignoreWarningButton");
   ok(el, "Ignore warning button should be present for phishing");
-  
+
   var style = content.getComputedStyle(el, null);
   is(style.display, "inline-block", "Ignore Warning button should be display:inline-block for phishing");
-  
+
   gBrowser.removeCurrentTab();
   finish();
 }
--- a/browser/components/safebrowsing/content/test/browser_bug415846.js
+++ b/browser/components/safebrowsing/content/test/browser_bug415846.js
@@ -16,47 +16,47 @@ function test() {
 }
 
 function testNormal() {
   gBrowser.removeEventListener("DOMContentLoaded", testNormal, false);
 
   // open the menu, to force it to update
   menu = document.getElementById("menu_HelpPopup");
   ok(menu, "Help menu should exist!");
-  
+
   menu.addEventListener("popupshown", testNormal_PopupListener, false);
   menu.openPopup(null, "", 0, 0, false, null);
 }
 
 function testNormal_PopupListener() {
   menu.removeEventListener("popupshown", testNormal_PopupListener, false);
-  
+
   var reportMenu = document.getElementById("menu_HelpPopup_reportPhishingtoolmenu");
   var errorMenu = document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu");
   is(reportMenu.hidden, false, "Report phishing menu should be visible on normal sites");
   is(errorMenu.hidden, true, "Report error menu item should be hidden on normal sites");
   menu.hidePopup();
-  
+
   // Now launch the phishing test.  Can't use onload here because error pages don't
   // fire normal load events.
   window.addEventListener("DOMContentLoaded", testPhishing, true);
   content.location = "http://www.itisatrap.org/firefox/its-a-trap.html";
 }
 
 function testPhishing() {
   window.removeEventListener("DOMContentLoaded", testPhishing, true);
 
   menu.addEventListener("popupshown", testPhishing_PopupListener, false);
   menu.openPopup(null, "", 0, 0, false, null);
 }
 
 function testPhishing_PopupListener() {
   menu.removeEventListener("popupshown", testPhishing_PopupListener, false);
-  
+
   var reportMenu = document.getElementById("menu_HelpPopup_reportPhishingtoolmenu");
   var errorMenu = document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu");
   is(reportMenu.hidden, true, "Report phishing menu should be hidden on phishing sites");
   is(errorMenu.hidden, false, "Report error menu item should be visible on phishing sites");
   menu.hidePopup();
-  
+
   gBrowser.removeCurrentTab();
   finish();
 }
--- a/browser/components/search/test/browser_bing_behavior.js
+++ b/browser/components/search/test/browser_bing_behavior.js
@@ -12,17 +12,17 @@ const BROWSER_SEARCH_PREF = "browser.sea
 
 function test() {
   let engine = Services.search.getEngineByName("Bing");
   ok(engine, "Bing is installed");
 
   let previouslySelectedEngine = Services.search.currentEngine;
   Services.search.currentEngine = engine;
   engine.alias = "b";
-  
+
   let base = "https://www.bing.com/search?q=foo&pc=MOZI";
   let url;
 
   // Test search URLs (including purposes).
   url = engine.getSubmission("foo").uri.spec;
   is(url, base, "Check search URL for 'foo'");
 
   waitForExplicitFinish();
--- a/browser/extensions/pocket/content/panels/js/saved.js
+++ b/browser/extensions/pocket/content/panels/js/saved.js
@@ -1,13 +1,13 @@
 /*
 PKT_SAVED_OVERLAY is the view itself and contains all of the methods to manipute the overlay and messaging.
 It does not contain any logic for saving or communication with the extension or server.
 */
-var PKT_SAVED_OVERLAY = function (options) 
+var PKT_SAVED_OVERLAY = function (options)
 {
     var myself = this;
     this.inited = false;
     this.active = false;
     this.wrapper = null;
     this.pockethost = "getpocket.com";
     this.savedItemId = 0;
     this.savedUrl = '';
@@ -44,36 +44,36 @@ var PKT_SAVED_OVERLAY = function (option
             if (typeof resp == 'object' && typeof resp.tags == 'object')
             {
                 myself.userTags = resp.tags;
             }
         });
     };
     this.fillSuggestedTags = function()
     {
-        if (!$('.pkt_ext_suggestedtag_detail').length) 
+        if (!$('.pkt_ext_suggestedtag_detail').length)
         {
             myself.suggestedTagsLoaded = true;
             myself.startCloseTimer();
             return;
         }
 
         thePKT_SAVED.sendMessage("getSuggestedTags",
         {
             url: myself.savedUrl
-        }, function(resp) 
+        }, function(resp)
         {
             $('.pkt_ext_suggestedtag_detail').removeClass('pkt_ext_suggestedtag_detail_loading');
-            if (resp.status == 'success') 
+            if (resp.status == 'success')
             {
                 var newtags = [];
                 for (var i = 0; i < resp.value.suggestedTags.length; i++)
                 {
                     newtags.push(resp.value.suggestedTags[i].tag);
-                }                        
+                }
                 myself.suggestedTagsLoaded = true;
                 if (!myself.mouseInside) {
                     myself.startCloseTimer();
                 }
                 myself.fillTagContainer(newtags,$('.pkt_ext_suggestedtag_detail ul'),'token_suggestedtag');
             }
             else if (resp.status == 'error') {
                 var msg = $('<p class="suggestedtag_msg">');
@@ -94,35 +94,35 @@ var PKT_SAVED_OVERLAY = function (option
         this.wrapper.on('mouseleave',function() {
             myself.mouseInside = false;
             myself.startCloseTimer();
         });
         this.wrapper.on('click',function(e) {
             myself.closeValid = false;
         });
     };
-    this.startCloseTimer = function(manualtime) 
+    this.startCloseTimer = function(manualtime)
     {
         var settime = manualtime ? manualtime : myself.autocloseTiming;
-        if (typeof myself.autocloseTimer == 'number') 
+        if (typeof myself.autocloseTimer == 'number')
         {
             clearTimeout(myself.autocloseTimer);
         }
-        myself.autocloseTimer = setTimeout(function() 
+        myself.autocloseTimer = setTimeout(function()
         {
-            if (myself.closeValid || myself.preventCloseTimerCancel) 
+            if (myself.closeValid || myself.preventCloseTimerCancel)
             {
                 myself.preventCloseTimerCancel = false;
                 myself.closePopup();
             }
         }, settime);
     };
-    this.stopCloseTimer = function() 
+    this.stopCloseTimer = function()
     {
-        if (myself.preventCloseTimerCancel) 
+        if (myself.preventCloseTimerCancel)
         {
             return;
         }
         clearTimeout(myself.autocloseTimer);
     };
     this.closePopup = function() {
         myself.stopCloseTimer();
         thePKT_SAVED.sendMessage("close");
@@ -178,17 +178,17 @@ var PKT_SAVED_OVERLAY = function (option
                 var returnlist = [];
                 if (term.length) {
                     var limit = 15;
                     var r = new RegExp('^' + term);
                     for (var i = 0; i < myself.userTags.length; i++) {
                         if (r.test(myself.userTags[i]) && limit > 0) {
                             returnlist.push({name:myself.userTags[i]});
                             limit--;
-                        }   
+                        }
                     }
                 }
                 if (!$('.token-input-dropdown-tag').data('init')) {
                     $('.token-input-dropdown-tag').css('width',inputwrapper.outerWidth()).data('init');
                     inputwrapper.append($('.token-input-dropdown-tag'));
                 }
                 cb(returnlist);
             },
@@ -201,17 +201,17 @@ var PKT_SAVED_OVERLAY = function (option
                             $('.token-input-input-token input').val(text).focus();
                         },10);
                     }
                     return null;
                 }
                 else {
                     myself.hideTagsError();
                     return {name:myself.sanitizeText(text.toLowerCase())};
-                }                       
+                }
             },
             onReady: function() {
                 $('.token-input-dropdown').addClass('token-input-dropdown-tag');
                 inputwrapper.find('.token-input-input-token input').attr('placeholder',$('.tag-input').attr('placeholder')).css('width','200px');
                 if ($('.pkt_ext_suggestedtag_detail').length) {
                     myself.wrapper.find('.pkt_ext_suggestedtag_detail').on('click','.token_tag',function(e) {
                         e.preventDefault();
                         var tag = $(e.target);
@@ -312,21 +312,21 @@ var PKT_SAVED_OVERLAY = function (option
             });
 
             thePKT_SAVED.sendMessage("addTags",
             {
                 url: myself.savedUrl,
                 tags: originaltags
             }, function(resp)
             {
-                if (resp.status == 'success') 
+                if (resp.status == 'success')
                 {
                     myself.showStateFinalMsg(myself.dictJSON.tagssaved);
                 }
-                else if (resp.status == 'error') 
+                else if (resp.status == 'error')
                 {
                     $('.pkt_ext_edit_msg').addClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(resp.error.message);
                 }
             });
         });
     };
     this.initRemovePageInput = function() {
         $('.pkt_ext_removeitem').click(function(e) {
@@ -376,17 +376,17 @@ var PKT_SAVED_OVERLAY = function (option
     this.showActiveTags = function() {
         if (!$('.pkt_ext_suggestedtag_detail').length) {
             return;
         }
         var activetokenstext = '|';
         $('.token-input-token').each(function(index, element) {
             activetokenstext += $(element).find('p').text() + '|';
         });
-        
+
         var inactivetags = $('.pkt_ext_suggestedtag_detail').find('.token_tag_inactive');
         inactivetags.each(function(index,element) {
             if (activetokenstext.indexOf('|' + $(element).text() + '|') == -1) {
                 $(element).removeClass('token_tag_inactive');
             }
         });
     };
     this.hideInactiveTags = function() {
@@ -460,17 +460,17 @@ var PKT_SAVED_OVERLAY = function (option
     }
     this.getTranslations = function()
     {
         this.dictJSON = window.pocketStrings;
     };
 };
 
 PKT_SAVED_OVERLAY.prototype = {
-    create : function() 
+    create : function()
     {
         if (this.active)
         {
             return;
         }
         this.active = true;
 
         // set translations
@@ -575,21 +575,21 @@ PKT_SAVED.prototype = {
                     if (resp.error.localizedKey)
                     {
                         myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,myself.overlay.dictJSON[resp.error.localizedKey]);
                     }
                     else
                     {
                         myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,resp.error.message);
                     }
-                }       
+                }
                 else
                 {
                     myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved,myself.overlay.dictJSON.errorgeneric);
-                }         
+                }
                 return;
             }
 
             myself.overlay.showStateSaved(resp);
         });
 
     }
 }
--- a/browser/extensions/pocket/content/panels/js/signup.js
+++ b/browser/extensions/pocket/content/panels/js/signup.js
@@ -1,13 +1,13 @@
 /*
 PKT_SIGNUP_OVERLAY is the view itself and contains all of the methods to manipute the overlay and messaging.
 It does not contain any logic for saving or communication with the extension or server.
 */
-var PKT_SIGNUP_OVERLAY = function (options) 
+var PKT_SIGNUP_OVERLAY = function (options)
 {
     var myself = this;
     this.inited = false;
     this.active = false;
     this.delayedStateSaved = false;
     this.wrapper = null;
     this.variant = window.___PKT__SIGNUP_VARIANT;
     this.tagline = window.___PKT__SIGNUP_TAGLINE || '';
@@ -57,17 +57,17 @@ var PKT_SIGNUP_OVERLAY = function (optio
     };
     this.getTranslations = function()
     {
         this.dictJSON = window.pocketStrings;
     };
 };
 
 PKT_SIGNUP_OVERLAY.prototype = {
-    create : function() 
+    create : function()
     {
         var myself = this;
 
         var variant = window.location.href.match(/variant=([\w|\.]*)&?/);
         if (variant && variant.length > 1)
         {
             this.variant = variant[1];
         }
--- a/browser/extensions/pocket/content/pktApi.jsm
+++ b/browser/extensions/pocket/content/pktApi.jsm
@@ -10,20 +10,20 @@
  * SOFTWARE
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  * copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- * 
+ *
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
@@ -91,17 +91,17 @@ var pktApi = (function() {
     }
 
     var parseJSON = function(jsonString){
         try {
             var o = JSON.parse(jsonString);
 
             // Handle non-exception-throwing cases:
             // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
-            // but... JSON.parse(null) returns 'null', and typeof null === "object", 
+            // but... JSON.parse(null) returns 'null', and typeof null === "object",
             // so we must check for that, too.
             if (o && typeof o === "object" && o !== null) {
                 return o;
             }
         }
         catch (e) { }
 
         return undefined;
@@ -116,34 +116,34 @@ var pktApi = (function() {
      * @param  {string} key A string containing the name of the key you want to
      *                  retrieve the value of
      * @return {string} String containing the value of the key. If the key
      *                  does not exist, null is returned
      */
      function getSetting(key) {
      	// TODO : Move this to sqlite or a local file so it's not editable (and is safer)
      	// https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Local_Storage
-     	
+
 		if (!prefBranch.prefHasUserValue(key))
 			return undefined;
-		
+
 		return prefBranch.getComplexValue(key, Components.interfaces.nsISupportsString).data;
      }
 
      /**
       * Wrapper for different plattforms to set a value for a given key in settings
       * @param {string} key     A string containing the name of the key you want
       *                         to create/update.
       * @param {string} value   String containing the value you want to give
       *                         the key you are creating/updating.
       */
     function setSetting(key, value) {
      	// TODO : Move this to sqlite or a local file so it's not editable (and is safer)
      	// https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Local_Storage
-     	
+
      	if (!value)
      		prefBranch.clearUserPref(key);
      	else
      	{
      		// We use complexValue as tags can have utf-8 characters in them
      		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
 			str.data = value;
      		prefBranch.setComplexValue(key, Components.interfaces.nsISupportsString, str);
@@ -154,17 +154,17 @@ var pktApi = (function() {
      * Auth
      */
 
     /*
      *  All cookies from the Pocket domain
      *  The return format: { cookieName:cookieValue, cookieName:cookieValue, ... }
     */
     function getCookiesFromPocket() {
-    
+
         var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
         var pocketCookies = cookieManager.getCookiesFromHost(pocketSiteHost);
         var cookies = {};
         while (pocketCookies.hasMoreElements()) {
             var cookie = pocketCookies.getNext().QueryInterface(Ci.nsICookie2);
             cookies[cookie.name] = cookie.value;
         }
         return cookies;
--- a/browser/modules/FormSubmitObserver.jsm
+++ b/browser/modules/FormSubmitObserver.jsm
@@ -37,17 +37,17 @@ FormSubmitObserver.prototype =
   /*
    * Public apis
    */
 
   init: function(aWindow, aTabChildGlobal)
   {
     this._content = aWindow;
     this._tab = aTabChildGlobal;
-    this._mm = 
+    this._mm =
       this._content.QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIDocShell)
                    .sameTypeRootTreeItem
                    .QueryInterface(Ci.nsIDocShell)
                    .QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIContentFrameMessageManager);
 
     // nsIFormSubmitObserver callback about invalid forms. See HTMLFormElement
@@ -98,17 +98,17 @@ FormSubmitObserver.prototype =
   notifyInvalidSubmit : function (aFormElement, aInvalidElements)
   {
     // We are going to handle invalid form submission attempt by focusing the
     // first invalid element and show the corresponding validation message in a
     // panel attached to the element.
     if (!aInvalidElements.length) {
       return;
     }
-    
+
     // Insure that this is the FormSubmitObserver associated with the form
     // element / window this notification is about.
     if (this._content != aFormElement.ownerDocument.defaultView.top.document.defaultView) {
       return;
     }
 
     let element = aInvalidElements.queryElementAt(0, Ci.nsISupports);
     if (!(element instanceof HTMLInputElement ||
@@ -137,17 +137,17 @@ FormSubmitObserver.prototype =
     element.addEventListener("blur", this, false);
 
     this._showPopup(element);
   },
 
   /*
    * Internal
    */
-  
+
   /*
    * Handles input changes on the form element we've associated a popup
    * with. Updates the validation message or closes the popup if form data
    * becomes valid.
    */
   _onInput: function (aEvent) {
     let element = aEvent.originalTarget;
 
--- a/browser/modules/WindowsJumpLists.jsm
+++ b/browser/modules/WindowsJumpLists.jsm
@@ -141,26 +141,26 @@ var tasksCfg = [
 this.WinTaskbarJumpList =
 {
   _builder: null,
   _tasks: null,
   _shuttingDown: false,
 
   /**
    * Startup, shutdown, and update
-   */ 
+   */
 
   startup: function WTBJL_startup() {
     // exit if this isn't win7 or higher.
     if (!this._initTaskbar())
       return;
 
     // Win shell shortcut maintenance. If we've gone through an update,
     // this will update any pinned taskbar shortcuts. Not specific to
-    // jump lists, but this was a convienent place to call it. 
+    // jump lists, but this was a convienent place to call it.
     try {
       // dev builds may not have helper.exe, ignore failures.
       this._shortcutMaintenance();
     } catch (ex) {
     }
 
     // Store our task list config data
     this._tasks = tasksCfg;
@@ -248,23 +248,23 @@ this.WinTaskbarJumpList =
     if (this._showRecent)
       this._buildRecent();
 
     this._commitBuild();
   },
 
   /**
    * Taskbar api wrappers
-   */ 
+   */
 
   _startBuild: function WTBJL__startBuild() {
     var removedItems = Cc["@mozilla.org/array;1"].
                        createInstance(Ci.nsIMutableArray);
     this._builder.abortListBuild();
-    if (this._builder.initListBuild(removedItems)) { 
+    if (this._builder.initListBuild(removedItems)) {
       // Prior to building, delete removed items from history.
       this._clearHistory(removedItems);
       return true;
     }
     return false;
   },
 
   _commitBuild: function WTBJL__commitBuild() {
@@ -278,17 +278,17 @@ this.WinTaskbarJumpList =
                 createInstance(Ci.nsIMutableArray);
     this._tasks.forEach(function (task) {
       if ((this._shuttingDown && !task.close) || (!this._shuttingDown && !task.open))
         return;
       var item = this._getHandlerAppItem(task.title, task.description,
                                          task.args, task.iconIndex, null);
       items.appendElement(item, false);
     }, this);
-    
+
     if (items.length > 0)
       this._builder.addListToBuild(this._builder.JUMPLIST_CATEGORY_TASKS, items);
   },
 
   _buildCustom: function WTBJL__buildCustom(title, items) {
     if (items.length > 0)
       this._builder.addListToBuild(this._builder.JUMPLIST_CATEGORY_CUSTOMLIST, items, title);
   },
@@ -319,17 +319,17 @@ this.WinTaskbarJumpList =
           // The are no more results, build the list.
           this._buildCustom(_getString("taskbar.frequent.label"), items);
           this._commitBuild();
           return;
         }
 
         let title = aResult.title || aResult.uri;
         let faviconPageUri = Services.io.newURI(aResult.uri, null, null);
-        let shortcut = this._getHandlerAppItem(title, title, aResult.uri, 1, 
+        let shortcut = this._getHandlerAppItem(title, title, aResult.uri, 1,
                                                faviconPageUri);
         items.appendElement(shortcut, false);
         this._frequentHashList.push(aResult.uri);
       },
       this
     );
   },
 
@@ -381,18 +381,18 @@ this.WinTaskbarJumpList =
   _deleteActiveJumpList: function WTBJL__deleteAJL() {
     this._builder.deleteActiveList();
   },
 
   /**
    * Jump list item creation helpers
    */
 
-  _getHandlerAppItem: function WTBJL__getHandlerAppItem(name, description, 
-                                                        args, iconIndex, 
+  _getHandlerAppItem: function WTBJL__getHandlerAppItem(name, description,
+                                                        args, iconIndex,
                                                         faviconPageUri) {
     var file = Services.dirsvc.get("XREExeF", Ci.nsILocalFile);
 
     var handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
                      createInstance(Ci.nsILocalHandlerApp);
     handlerApp.executable = file;
     // handlers default to the leaf name if a name is not specified
     if (name && name.length != 0)
@@ -464,29 +464,29 @@ this.WinTaskbarJumpList =
     }
     if (URIsToRemove.length > 0) {
       PlacesUtils.bhistory.removePages(URIsToRemove, URIsToRemove.length, true);
     }
   },
 
   /**
    * Prefs utilities
-   */ 
+   */
 
   _refreshPrefs: function WTBJL__refreshPrefs() {
     this._enabled = _prefs.getBoolPref(PREF_TASKBAR_ENABLED);
     this._showFrequent = _prefs.getBoolPref(PREF_TASKBAR_FREQUENT);
     this._showRecent = _prefs.getBoolPref(PREF_TASKBAR_RECENT);
     this._showTasks = _prefs.getBoolPref(PREF_TASKBAR_TASKS);
     this._maxItemCount = _prefs.getIntPref(PREF_TASKBAR_ITEMCOUNT);
   },
 
   /**
    * Init and shutdown utilities
-   */ 
+   */
 
   _initTaskbar: function WTBJL__initTaskbar() {
     this._builder = _taskbarService.createJumpListBuilder();
     if (!this._builder || !this._builder.available)
       return false;
 
     return true;
   },
@@ -494,17 +494,17 @@ this.WinTaskbarJumpList =
   _initObs: function WTBJL__initObs() {
     // If the browser is closed while in private browsing mode, the "exit"
     // notification is fired on quit-application-granted.
     // History cleanup can happen at profile-change-teardown.
     Services.obs.addObserver(this, "profile-before-change", false);
     Services.obs.addObserver(this, "browser:purge-session-history", false);
     _prefs.addObserver("", this, false);
   },
- 
+
   _freeObs: function WTBJL__freeObs() {
     Services.obs.removeObserver(this, "profile-before-change");
     Services.obs.removeObserver(this, "browser:purge-session-history");
     _prefs.removeObserver("", this);
   },
 
   _updateTimer: function WTBJL__updateTimer() {
     if (this._enabled && !this._shuttingDown && !this._timer) {
--- a/browser/modules/WindowsPreviewPerTab.jsm
+++ b/browser/modules/WindowsPreviewPerTab.jsm
@@ -26,17 +26,17 @@
  * the taskbar. To reduce the overhead of drawing the tab area, the controller
  * implementation caches the tab's contents in a <canvas> element. If no
  * previews or thumbnails have been requested for some time, the controller will
  * discard its cached tab contents.
  *
  * Screen real estate is limited so when there are too many thumbnails to fit
  * on the screen, the taskbar stops displaying thumbnails and instead displays
  * just the title, icon and close button in a similar fashion to previous
- * versions of the taskbar. If there are still too many previews to fit on the 
+ * versions of the taskbar. If there are still too many previews to fit on the
  * screen, the taskbar resorts to a scroll up and scroll down button pair to let
  * the user scroll through the list of tabs. Since this is undoubtedly
  * inconvenient for users with many tabs, the AeroPeek objects turns off all of
  * the tab previews. This tells the taskbar to revert to one preview per window.
  * If the number of tabs falls below this magic threshold, the preview-per-tab
  * behavior returns. There is no reliable way to determine when the scroll
  * buttons appear on the taskbar, so a magic pref-controlled number determines
  * when this threshold has been crossed.
--- a/browser/modules/offlineAppCache.jsm
+++ b/browser/modules/offlineAppCache.jsm
@@ -1,12 +1,12 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
+
 this.EXPORTED_SYMBOLS = ["OfflineAppCacheHelper"];
 
 Components.utils.import('resource://gre/modules/LoadContextInfo.jsm');
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 this.OfflineAppCacheHelper = {
--- a/storage/test/unit/test_storage_statement.js
+++ b/storage/test/unit/test_storage_statement.js
@@ -163,17 +163,17 @@ function test_failed_execute()
   do_check_eq(Ci.mozIStorageStatement.MOZ_STORAGE_STATEMENT_READY, stmt.state);
   // Should succeed without needing to reset the statement manually
   stmt.finalize();
 }
 
 function test_bind_undefined()
 {
   var stmt = createStatement("INSERT INTO test (name) VALUES ('foo')");
-  
+
   expectError(Cr.NS_ERROR_ILLEGAL_VALUE,
               () => stmt.bindParameters(undefined));
 
   stmt.finalize();
 }
 
 var tests = [test_parameterCount_none, test_parameterCount_one,
              test_getParameterName, test_getParameterIndex_different,
--- a/toolkit/.eslintrc
+++ b/toolkit/.eslintrc
@@ -132,17 +132,17 @@
 
     // No declaring variables that hide things like arguments
     // "no-shadow-restricted-names": 2,
 
     // No spaces between function name and parentheses
     // "no-spaced-func": 2,
 
     // No trailing whitespace
-    // "no-trailing-spaces": 2,
+    "no-trailing-spaces": 2,
 
     // No using undeclared variables
     // "no-undef": 2,
 
     // Error on newline where a semicolon is needed
     // "no-unexpected-multiline": 2,
 
     // No unreachable statements
--- a/toolkit/components/alerts/test/test_alerts.html
+++ b/toolkit/components/alerts/test/test_alerts.html
@@ -47,17 +47,17 @@ function runTest() {
   ok(true, "Alerts service exists in this application");
 
   var notifier;
   try {
     notifier = Cc["@mozilla.org/alerts-service;1"].
                getService(Ci.nsIAlertsService);
     ok(true, "Alerts service is available");
   } catch (ex) {
-    todo(false, 
+    todo(false,
          "Alerts service is not available.", ex);
     return;
   }
 
   try {
     var alertName = "fiorello";
     SimpleTest.waitForExplicitFinish();
     notifier.showAlertNotification(null, "Notification test",
--- a/toolkit/components/apppicker/content/appPicker.js
+++ b/toolkit/components/apppicker/content/appPicker.js
@@ -1,35 +1,35 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 Components.utils.import("resource://gre/modules/AppConstants.jsm");
 
 function AppPicker() {};
 
-AppPicker.prototype = 
+AppPicker.prototype =
 {
     // Class members
     _incomingParams:null,
 
-    /** 
+    /**
     * Init the dialog and populate the application list
-    */ 
+    */
     appPickerLoad: function appPickerLoad() {
         const nsILocalHandlerApp = Components.interfaces.nsILocalHandlerApp;
 
         this._incomingParams = window.arguments[0];
         this._incomingParams.handlerApp = null;
 
         document.title = this._incomingParams.title;
 
-        // Header creation - at the very least, we must have 
+        // Header creation - at the very least, we must have
         // a mime type:
-        //        
+        //
         // (icon) Zip File
         // (icon) filename
         //
         // (icon) Web Feed
         // (icon) mime/type
         //
         // (icon) mime/type
         // (icon)
@@ -39,39 +39,39 @@ AppPicker.prototype =
         if (!filename) {
           filename = mimeInfo.MIMEType;
         }
         var description = this._incomingParams.description;
         if (!description) {
           description = filename;
           filename = "";
         }
-        
+
         // Setup the dialog header information
-        document.getElementById("content-description").setAttribute("value", 
+        document.getElementById("content-description").setAttribute("value",
           description);
         document.getElementById("suggested-filename").setAttribute("value",
           filename);
         document.getElementById("content-icon").setAttribute("src",
           "moz-icon://" + filename + "?size=32&contentType=" +
           mimeInfo.MIMEType);
 
         // Grab a list of nsILocalHandlerApp application helpers to list
         var fileList = mimeInfo.possibleLocalHandlers;
 
         var list = document.getElementById("app-picker-listbox");
 
         var primaryCount = 0;
-        
+
         if (!fileList || fileList.length == 0) {
           // display a message saying nothing is configured
           document.getElementById("app-picker-notfound").removeAttribute("hidden");
           return;
         }
-        
+
         for (var idx = 0; idx < fileList.length; idx++) {
           var file = fileList.queryElementAt(idx, nsILocalHandlerApp);
           try {
               if (!file.executable || !file.executable.isFile())
                 continue;
           } catch (err) {
             continue;
           }
@@ -87,38 +87,38 @@ AppPicker.prototype =
         }
 
         if ( primaryCount == 0 ) {
           // display a message saying nothing is configured
           document.getElementById("app-picker-notfound").removeAttribute("hidden");
         }
     },
 
-    /** 
+    /**
     * Retrieve the moz-icon for the app
-    */ 
+    */
     getFileIconURL: function getFileIconURL(file) {
       var ios = Components.classes["@mozilla.org/network/io-service;1"].
                 getService(Components.interfaces.nsIIOService);
 
       if (!ios) return "";
       const nsIFileProtocolHandler =
         Components.interfaces.nsIFileProtocolHandler;
 
       var fph = ios.getProtocolHandler("file")
                 .QueryInterface(nsIFileProtocolHandler);
       if (!fph) return "";
 
       var urlSpec = fph.getURLSpecFromFile(file);
       return "moz-icon://" + urlSpec + "?size=32";
     },
 
-    /** 
+    /**
     * Retrieve the pretty description from the file
-    */ 
+    */
     getFileDisplayName: function getFileDisplayName(file) {
       if (AppConstants.platform == "win") {
         if (file instanceof Components.interfaces.nsILocalFileWin) {
           try {
             return file.getVersionInfoField("FileDescription");
           } catch (e) {}
         }
       } else if (AppConstants.platform == "macosx") {
@@ -174,32 +174,32 @@ AppPicker.prototype =
     */
     appPickerBrowse: function appPickerBrowse() {
       var nsIFilePicker = Components.interfaces.nsIFilePicker;
       var fp = Components.classes["@mozilla.org/filepicker;1"].
                createInstance(nsIFilePicker);
 
       fp.init(window, this._incomingParams.title, nsIFilePicker.modeOpen);
       fp.appendFilters(nsIFilePicker.filterApps);
-      
+
       var fileLoc = Components.classes["@mozilla.org/file/directory_service;1"]
                             .getService(Components.interfaces.nsIProperties);
       var startLocation;
       if (AppConstants.platform == "win") {
         startLocation = "ProgF"; // Program Files
       } else if (AppConstants.platform == "macosx") {
         startLocation = "LocApp"; // Local Applications
       } else {
         startLocation = "Home";
       }
-      fp.displayDirectory = 
+      fp.displayDirectory =
         fileLoc.get(startLocation, Components.interfaces.nsILocalFile);
-      
+
       if (fp.show() == nsIFilePicker.returnOK && fp.file) {
-          var localHandlerApp = 
+          var localHandlerApp =
             Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
             createInstance(Components.interfaces.nsILocalHandlerApp);
           localHandlerApp.executable = fp.file;
 
           this._incomingParams.handlerApp = localHandlerApp;
           window.close();
       }
       return true;
--- a/toolkit/components/autocomplete/tests/unit/head_autocomplete.js
+++ b/toolkit/components/autocomplete/tests/unit/head_autocomplete.js
@@ -3,163 +3,163 @@
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInputBase(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInputBase.prototype = {
- 
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
 
   // Text selection range
   _selStart: 0,
   _selEnd: 0,
   get selectionStart() {
     return this._selStart;
   },
   get selectionEnd() {
     return this._selEnd;
   },
   selectTextRange: function(aStart, aEnd) {
     this._selStart = aStart;
     this._selEnd = aEnd;
   },
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
+
+  popupOpen: false,
+
   get popup() {
     if (!this._popup) {
       this._popup = new AutocompletePopupBase(this);
     }
     return this._popup;
   },
 
   // nsISupports implementation
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteInput])
 }
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResultBase(aValues) {
   this._values = aValues;
 }
 AutoCompleteResultBase.prototype = {
-  
+
   // Arrays
   _values: null,
   _comments: [],
   _styles: [],
   _finalCompleteValues: [],
 
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: -1,
-  
+
   _typeAheadResult: false,
   get typeAheadResult() {
     return this._typeAheadResult;
   },
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this._finalCompleteValues[aIndex] || this._values[aIndex];
   },
 
   removeValueAt: function (aRowIndex, aRemoveFromDb) {},
 
   // nsISupports implementation
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteResult])
 }
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearchBase(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearchBase.prototype = {
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
   _result: null,
 
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
                         aListener) {
     var result = this._result;
 
     result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
     aListener.onSearchResult(this, result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory,
                                          Ci.nsIAutoCompleteSearch]),
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 function AutocompletePopupBase(input) {
   this.input = input;
@@ -175,36 +175,36 @@ AutocompletePopupBase.prototype = {
       if (this.selectedIndex < 0) {
         this.selectedIndex = numRows - 1;
       }
     }
   },
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompletePopup]),
 };
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
   var cid = Cc["@mozilla.org/uuid-generator;1"].
             getService(Ci.nsIUUIDGenerator).
             generateUUID();
 
   var desc = "Test AutoCompleteSearch";
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_378079.js
+++ b/toolkit/components/autocomplete/tests/unit/test_378079.js
@@ -8,122 +8,122 @@
  * Unit test for Bug 378079 - AutoComplete returns invalid rows when
  * more than one AutoCompleteSearch is used.
  */
 
 
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
-  
+
   if (this._values.length > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
   } else {
     this.searchResult = Ci.nsIAutoCompleteResult.NOMATCH;
   }
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
- 
+
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -131,155 +131,155 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
-  _result:null,  
-  
-  
+  _result:null,
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     aListener.onSearchResult(this, this._result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 
-/** 
+/**
  * Test AutoComplete with multiple AutoCompleteSearch sources.
  */
 function run_test() {
-  
+
   // Make an AutoCompleteSearch that always returns nothing
-  var emptySearch = new AutoCompleteSearch("test-empty-search", 
+  var emptySearch = new AutoCompleteSearch("test-empty-search",
                              new AutoCompleteResult([], [], []));
-  
+
   // Make an AutoCompleteSearch that returns two values
   var expectedValues = ["test1", "test2"];
   var regularSearch = new AutoCompleteSearch("test-regular-search",
                              new AutoCompleteResult(expectedValues, [], []));
-  
+
   // Register searches so AutoCompleteController can find them
   registerAutoCompleteSearch(emptySearch);
   registerAutoCompleteSearch(regularSearch);
-    
+
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput([emptySearch.name, regularSearch.name]);
   var numSearchesStarted = 0;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
 
     do_check_eq(numSearchesStarted, 1);
 
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, 2);
 
     // Confirm expected result values
     for (var i = 0; i < expectedValues.length; i++) {
-      do_check_eq(expectedValues[i], controller.getValueAt(i)); 
+      do_check_eq(expectedValues[i], controller.getValueAt(i));
     }
 
     // Unregister searches
     unregisterAutoCompleteSearch(emptySearch);
     unregisterAutoCompleteSearch(regularSearch);
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_393191.js
+++ b/toolkit/components/autocomplete/tests/unit/test_393191.js
@@ -7,122 +7,122 @@
 /**
  * Unit test for Bug 393191 - AutoComplete crashes if result is null
  */
 
 
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
-  
+
   if (this._values.length > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
   } else {
     this.searchResult = Ci.nsIAutoCompleteResult.NOMATCH;
   }
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -130,143 +130,143 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
   _result: null,
-  
-  
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     aListener.onSearchResult(this, this._result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 
-/** 
+/**
  * Test AutoComplete with a search that returns a null result
  */
 function run_test() {
-  
+
   // Make an AutoCompleteSearch that always returns nothing
-  var emptySearch = new AutoCompleteSearch("test-empty-search", 
+  var emptySearch = new AutoCompleteSearch("test-empty-search",
                              new AutoCompleteResult([], [], []));
-  
+
   // Register search so AutoCompleteController can find them
   registerAutoCompleteSearch(emptySearch);
-    
+
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our search
   // and confirms results on search complete
   var input = new AutoCompleteInput([emptySearch.name]);
   var numSearchesStarted = 0;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
 
     do_check_eq(numSearchesStarted, 1);
 
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_NO_MATCH);
     do_check_eq(controller.matchCount, 0);
 
     // Unregister searches
     unregisterAutoCompleteSearch(emptySearch);
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_autocomplete_multiple.js
+++ b/toolkit/components/autocomplete/tests/unit/test_autocomplete_multiple.js
@@ -1,116 +1,116 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -118,159 +118,159 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
-  _result:null,  
-  
-  
+  _result:null,
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     var result = this._result;
     if (result._values.length > 0) {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS_ONGOING;
     } else {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH_ONGOING;
     }
     aListener.onSearchResult(this, result);
 
     if (result._values.length > 0) {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
     } else {
       result.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
     }
     aListener.onSearchResult(this, result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 
-/** 
+/**
  * Test AutoComplete with multiple AutoCompleteSearch sources.
  */
 function run_test() {
   var expected1 = ["1","2","3"];
   var expected2 = ["a","b","c"];
-  var search1 = new AutoCompleteSearch("search1", 
+  var search1 = new AutoCompleteSearch("search1",
                              new AutoCompleteResult(expected1, [], []));
   var search2 = new AutoCompleteSearch("search2",
                              new AutoCompleteResult(expected2, [], []));
-  
+
   // Register searches so AutoCompleteController can find them
   registerAutoCompleteSearch(search1);
   registerAutoCompleteSearch(search2);
-    
+
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
-                   getService(Components.interfaces.nsIAutoCompleteController);  
-  
+                   getService(Components.interfaces.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete
   var input = new AutoCompleteInput([search1.name, search2.name]);
   var numSearchesStarted = 0;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
     do_check_eq(numSearchesStarted, 1);
   };
 
   input.onSearchComplete = function() {
 
     do_check_eq(numSearchesStarted, 1);
 
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, expected1.length + expected2.length);
 
     // Unregister searches
     unregisterAutoCompleteSearch(search1);
     unregisterAutoCompleteSearch(search2);
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
--- a/toolkit/components/autocomplete/tests/unit/test_badDefaultIndex.js
+++ b/toolkit/components/autocomplete/tests/unit/test_badDefaultIndex.js
@@ -37,17 +37,17 @@ add_test(function autocomplete_noMatch_s
 
   // Caret must be at the end for autoFill to happen.
   let strLen = INPUT_STR.length;
   input.selectTextRange(strLen, strLen);
   do_check_eq(input.selectionStart, strLen);
   do_check_eq(input.selectionEnd, strLen);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
   controller.input = input;
   controller.startSearch(INPUT_STR);
 
   input.onSearchComplete = function () {
     // Should not try to autoFill to an empty value.
     do_check_eq(input.textValue, "moz");
 
     // Clean up.
@@ -72,17 +72,17 @@ add_test(function autocomplete_defaultIn
 
   // Caret must be at the end for autoFill to happen.
   let strLen = INPUT_STR.length;
   input.selectTextRange(strLen, strLen);
   do_check_eq(input.selectionStart, strLen);
   do_check_eq(input.selectionEnd, strLen);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
   controller.input = input;
   controller.startSearch(INPUT_STR);
 
   input.onSearchComplete = function () {
     // Should not try to autoFill to an empty value.
     do_check_eq(input.textValue, "moz");
 
     // Clean up.
--- a/toolkit/components/autocomplete/tests/unit/test_completeDefaultIndex_casing.js
+++ b/toolkit/components/autocomplete/tests/unit/test_completeDefaultIndex_casing.js
@@ -36,18 +36,18 @@ add_test(function test_handleEnter() {
 });
 
 function doSearch(aSearchString, aResultValue, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase("search",
                                           new AutoCompleteResult([ "mozilla", "toolkit" ], 0));
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   input.textValue = aSearchString;
 
   // Caret must be at the end for autofill to happen.
   let strLen = aSearchString.length;
   input.selectTextRange(strLen, strLen);
   controller.input = input;
--- a/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue.js
+++ b/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue.js
@@ -24,18 +24,18 @@ add_test(function test_handleEnter_mouse
 function doSearch(aSearchString, aResultValue, aFinalCompleteValue, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase(
     "search",
     new AutoCompleteResult([ aResultValue ], [ aFinalCompleteValue ])
   );
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   input.textValue = aSearchString;
 
   controller.input = input;
   controller.startSearch(aSearchString);
 
   input.onSearchComplete = function onSearchComplete() {
--- a/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue_forceComplete.js
+++ b/toolkit/components/autocomplete/tests/unit/test_finalCompleteValue_forceComplete.js
@@ -74,18 +74,18 @@ function doSearch(aSearchString, aResult
                   aInputProps, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase(
     "search",
     new AutoCompleteResult([ aResultValue ], [ aFinalCompleteValue ])
   );
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   for (var p in aInputProps) {
     input[p] = aInputProps[p];
   }
   input.textValue = aSearchString;
   // Place the cursor at the end of the input so that completion to
   // default index will kick in.
--- a/toolkit/components/autocomplete/tests/unit/test_finalDefaultCompleteValue.js
+++ b/toolkit/components/autocomplete/tests/unit/test_finalDefaultCompleteValue.js
@@ -39,18 +39,18 @@ add_test(function test_handleEnter() {
 function doSearch(aSearchString, aResultValue, aFinalCompleteValue, aOnCompleteCallback) {
   let search = new AutoCompleteSearchBase(
     "search",
     new AutoCompleteResult([ aResultValue ], [ aFinalCompleteValue ])
   );
   registerAutoCompleteSearch(search);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
-  
+                   getService(Ci.nsIAutoCompleteController);
+
   // Make an AutoCompleteInput that uses our searches and confirms results.
   let input = new AutoCompleteInput([ search.name ]);
   input.textValue = aSearchString;
 
   // Caret must be at the end for autofill to happen.
   let strLen = aSearchString.length;
   input.selectTextRange(strLen, strLen);
   controller.input = input;
--- a/toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
+++ b/toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
@@ -11,51 +11,51 @@ AutoCompleteResult.prototype = Object.cr
 function AutoCompleteTypeAheadResult(aValues) {
   this._values = aValues;
   this.defaultIndex = 0;
   this._typeAheadResult = true;
 }
 AutoCompleteTypeAheadResult.prototype = Object.create(AutoCompleteResultBase.prototype);
 
 
-/** 
+/**
  * Test AutoComplete with multiple AutoCompleteSearch sources, with one of them
  * being hidden from the popup, but can still do typeahead completion.
  */
 function run_test() {
   do_test_pending();
 
   var inputStr = "moz";
 
   // Type ahead result
   var searchTypeAhead = new AutoCompleteSearchBase("search1",
                                                    new AutoCompleteTypeAheadResult(["mozillaTest1"]));
   // Regular result
   var searchNormal = new AutoCompleteSearchBase("search2",
                                                 new AutoCompleteResult(["mozillaTest2"]));
-  
+
   // Register searches so AutoCompleteController can find them
   registerAutoCompleteSearch(searchNormal);
   registerAutoCompleteSearch(searchTypeAhead);
-  
+
   // Make an AutoCompleteInput that uses our searches
   // and confirms results on search complete.
   var input = new AutoCompleteInputBase([searchTypeAhead.name, searchNormal.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
   // characters at the end.
   var strLen = inputStr.length;
   input.selectTextRange(strLen, strLen);
   do_check_eq(input.selectionStart, strLen);
   do_check_eq(input.selectionEnd, strLen);
 
   var controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   controller.input = input;
   controller.startSearch(inputStr);
 
   input.onSearchComplete = function() {
     // Hidden results should still be able to do inline autocomplete
     do_check_eq(input.textValue, "mozillaTest1");
 
--- a/toolkit/components/autocomplete/tests/unit/test_immediate_search.js
+++ b/toolkit/components/autocomplete/tests/unit/test_immediate_search.js
@@ -41,17 +41,17 @@ add_test(function test_immediate_search(
   let immediateSearch = new AutoCompleteImmediateSearch(
     "immediate", new AutoCompleteResult(["moz-immediate"], 0));
   registerAutoCompleteSearch(immediateSearch);
   let delayedSearch = new AutoCompleteDelayedSearch(
     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   registerAutoCompleteSearch(delayedSearch);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   let input = new AutoCompleteInputBase([delayedSearch.name,
                                          immediateSearch.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
   // characters at the end.
@@ -86,17 +86,17 @@ add_test(function test_immediate_search_
     "immediate", new AutoCompleteResult(["moz-immediate"], 0));
   registerAutoCompleteSearch(immediateSearch);
 
   let delayedSearch = new AutoCompleteDelayedSearch(
     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   registerAutoCompleteSearch(delayedSearch);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   let input = new AutoCompleteInputBase([delayedSearch.name,
                                          immediateSearch.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
   input.timeout = 0;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
@@ -127,17 +127,17 @@ add_test(function test_delayed_search_no
   let immediateResults = ["mozillaTest"];
   let inputStr = "moz";
 
   let delayedSearch = new AutoCompleteDelayedSearch(
     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   registerAutoCompleteSearch(delayedSearch);
 
   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
-                   getService(Ci.nsIAutoCompleteController);  
+                   getService(Ci.nsIAutoCompleteController);
 
   let input = new AutoCompleteInputBase([delayedSearch.name]);
   input.completeDefaultIndex = true;
   input.textValue = inputStr;
   input.timeout = 0;
 
   // Caret must be at the end. Autofill doesn't happen unless you're typing
   // characters at the end.
--- a/toolkit/components/autocomplete/tests/unit/test_previousResult.js
+++ b/toolkit/components/autocomplete/tests/unit/test_previousResult.js
@@ -7,121 +7,121 @@
 /**
  * Unit test for Bug 438861 - Previous search results not returned to multiple
  * searches.
  */
 
 
 /**
  * Dummy nsIAutoCompleteInput source that returns
- * the given list of AutoCompleteSearch names. 
- * 
+ * the given list of AutoCompleteSearch names.
+ *
  * Implements only the methods needed for this test.
  */
 function AutoCompleteInput(aSearches) {
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
-  constructor: AutoCompleteInput, 
-  
+  constructor: AutoCompleteInput,
+
   // Array of AutoCompleteSearch names
   searches: null,
-  
+
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "",
-  disableAutoComplete: false,  
+  disableAutoComplete: false,
   completeDefaultIndex: false,
-  
+
   get searchCount() {
     return this.searches.length;
   },
-  
+
   getSearchAt: function(aIndex) {
     return this.searches[aIndex];
   },
-  
+
   onSearchBegin: function() {},
   onSearchComplete: function() {},
-  
-  popupOpen: false,  
-  
-  popup: { 
+
+  popupOpen: false,
+
+  popup: {
     setSelectedIndex: function(aIndex) {},
     invalidate: function() {},
 
     // nsISupports implementation
     QueryInterface: function(iid) {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIAutoCompletePopup))
         return this;
 
       throw Components.results.NS_ERROR_NO_INTERFACE;
-    }    
+    }
   },
-    
+
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteInput))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   }
 }
 
 
 
-/** 
+/**
  * nsIAutoCompleteResult implementation
  */
 function AutoCompleteResult(aValues, aComments, aStyles) {
   this._values = aValues;
   this._comments = aComments;
   this._styles = aStyles;
   if (this._values.length > 0) {
     this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
   } else {
     this.searchResult = Ci.nsIAutoCompleteResult.NOMATCH;
   }
 }
 AutoCompleteResult.prototype = {
   constructor: AutoCompleteResult,
-  
+
   // Arrays
   _values: null,
   _comments: null,
   _styles: null,
-  
+
   searchString: "",
   searchResult: null,
-  
+
   defaultIndex: 0,
 
   get matchCount() {
     return this._values.length;
   },
 
   getValueAt: function(aIndex) {
     return this._values[aIndex];
   },
 
   getLabelAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
-  
+
   getCommentAt: function(aIndex) {
     return this._comments[aIndex];
   },
-  
+
   getStyleAt: function(aIndex) {
     return this._styles[aIndex];
   },
-  
+
   getImageAt: function(aIndex) {
     return "";
   },
 
   getFinalCompleteValueAt: function(aIndex) {
     return this.getValueAt(aIndex);
   },
 
@@ -129,111 +129,111 @@ AutoCompleteResult.prototype = {
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIAutoCompleteResult))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
-  }  
+  }
 }
 
 
-/** 
+/**
  * nsIAutoCompleteSearch implementation that always returns
  * the same result set.
  */
 function AutoCompleteSearch(aName, aResult) {
   this.name = aName;
   this._result = aResult;
 }
 AutoCompleteSearch.prototype = {
   constructor: AutoCompleteSearch,
-  
+
   // Search name. Used by AutoCompleteController
   name: null,
 
   // AutoCompleteResult
   _result: null,
 
   _previousResult: null,
-  
-  
+
+
   /**
    * Return the same result set for every search
    */
-  startSearch: function(aSearchString, 
-                        aSearchParam, 
-                        aPreviousResult, 
-                        aListener) 
+  startSearch: function(aSearchString,
+                        aSearchParam,
+                        aPreviousResult,
+                        aListener)
   {
     this._previousResult = aPreviousResult;
     aListener.onSearchResult(this, this._result);
   },
-  
+
   stopSearch: function() {},
 
   // nsISupports implementation
   QueryInterface: function(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIFactory) ||
         iid.equals(Ci.nsIAutoCompleteSearch))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
-  
+
   // nsIFactory implementation
   createInstance: function(outer, iid) {
     return this.QueryInterface(iid);
   }
 }
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch) {
   var name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
 
   var uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   var cid = uuidGenerator.generateUUID();
 
   var desc = "Test AutoCompleteSearch";
-  
+
   var componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
 
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   var componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
-/** 
+/**
  */
 function run_test() {
   // Make an AutoCompleteSearch that always returns nothing
   var search1 = new AutoCompleteSearch("test-previous-result1",
     new AutoCompleteResult(["hello1"], [""], [""]));
 
-  var search2 = new AutoCompleteSearch("test-previous-result2", 
+  var search2 = new AutoCompleteSearch("test-previous-result2",
     new AutoCompleteResult(["hello2"], [""], [""]));
 
   // Register search so AutoCompleteController can find them
   registerAutoCompleteSearch(search1);
   registerAutoCompleteSearch(search2);
 
   var controller = Components.classes["@mozilla.org/autocomplete/controller;1"].
                    getService(Components.interfaces.nsIAutoCompleteController);
@@ -245,17 +245,17 @@ function run_test() {
   var numSearchesStarted = 0;
   var previousResult = null;
 
   input.onSearchBegin = function() {
     numSearchesStarted++;
   };
 
   input.onSearchComplete = function() {
-    do_check_eq(controller.searchStatus, 
+    do_check_eq(controller.searchStatus,
                 Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH);
     do_check_eq(controller.matchCount, 2);
 
     if (numSearchesStarted == 1) {
       do_check_eq(search1._previousResult, null);
       do_check_eq(search2._previousResult, null);
 
       // Now start it again
@@ -273,12 +273,12 @@ function run_test() {
 
     do_test_finished();
   };
 
   controller.input = input;
 
   // Search is asynchronous, so don't let the test finish immediately
   do_test_pending();
-  
+
   controller.startSearch("test");
 }
 
--- a/toolkit/components/autocomplete/tests/unit/test_stopSearch.js
+++ b/toolkit/components/autocomplete/tests/unit/test_stopSearch.js
@@ -22,17 +22,17 @@ function AutoCompleteInput(aSearches)
   this.searches = aSearches;
 }
 AutoCompleteInput.prototype = {
   constructor: AutoCompleteInput,
   minResultsForPopup: 0,
   timeout: 10,
   searchParam: "",
   textValue: "hello",
-  disableAutoComplete: false, 
+  disableAutoComplete: false,
   completeDefaultIndex: false,
   set popupOpen(val) { return val; }, // ignore
   get popupOpen() { return false; },
   get searchCount() { return this.searches.length; },
   getSearchAt: function(aIndex) { return this.searches[aIndex]; },
   onSearchBegin: function() {},
   onSearchComplete: function() {},
   onTextReverted: function () {},
@@ -74,41 +74,41 @@ AutoCompleteSearch.prototype = {
   ]),
   createInstance: function(outer, iid)
   {
     return this.QueryInterface(iid);
   }
 }
 
 
-/** 
+/**
  * Helper to register an AutoCompleteSearch with the given name.
  * Allows the AutoCompleteController to find the search.
  */
 function registerAutoCompleteSearch(aSearch)
 {
   let name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name;
   let uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].
                       getService(Ci.nsIUUIDGenerator);
   let cid = uuidGenerator.generateUUID();
   let desc = "Test AutoCompleteSearch";
   let componentManager = Components.manager
                                    .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.registerFactory(cid, desc, name, aSearch);
   // Keep the id on the object so we can unregister later
-  aSearch.cid = cid; 
+  aSearch.cid = cid;
 }
 
 
-/** 
- * Helper to unregister an AutoCompleteSearch. 
+/**
+ * Helper to unregister an AutoCompleteSearch.
  */
 function unregisterAutoCompleteSearch(aSearch) {
   let componentManager = Components.manager
-                                   .QueryInterface(Ci.nsIComponentRegistrar);  
+                                   .QueryInterface(Ci.nsIComponentRegistrar);
   componentManager.unregisterFactory(aSearch.cid, aSearch);
 }
 
 
 var gTests = [
   function(controller) {
     print("handleText");
     controller.input.textValue = "hel";
--- a/toolkit/components/commandlines/test/unit/test_bug666224.js
+++ b/toolkit/components/commandlines/test/unit/test_bug666224.js
@@ -1,6 +1,6 @@
 function run_test() {
     var cmdLine=Components.classes["@mozilla.org/toolkit/command-line;1"].createInstance(Components.interfaces.nsICommandLine);
     try {
         cmdLine.getArgument(cmdLine.length);
-    } catch(e) {} 
+    } catch(e) {}
 }
--- a/toolkit/components/console/content/console.js
+++ b/toolkit/components/console/content/console.js
@@ -13,17 +13,17 @@ var gFilter;
 
 window.onload = function()
 {
   gConsole = document.getElementById("ConsoleBox");
   gConsoleBundle = document.getElementById("ConsoleBundle");
   gTextBoxEval = document.getElementById("TextboxEval");
   gEvaluator = document.getElementById("Evaluator");
   gFilter = document.getElementById("Filter");
-  
+
   updateSortCommand(gConsole.sortOrder);
   updateModeCommand(gConsole.mode);
 
   gEvaluator.addEventListener("load", loadOrDisplayResult, true);
 }
 
 /* :::::::: Console UI Functions ::::::::::::::: */
 
@@ -40,17 +40,17 @@ function changeMode(aMode)
     case "Errors":
     case "Warnings":
     case "Messages":
       gConsole.mode = aMode;
       break;
     case "All":
       gConsole.mode = null;
   }
-  
+
   document.persist("ConsoleBox", "mode");
 }
 
 function clearConsole()
 {
   gConsole.clear();
 }
 
@@ -58,17 +58,17 @@ function changeSortOrder(aOrder)
 {
   updateSortCommand(gConsole.sortOrder = aOrder);
 }
 
 function updateSortCommand(aOrder)
 {
   var orderString = aOrder == 'reverse' ? "Descend" : "Ascend";
   var bc = document.getElementById("Console:sort"+orderString);
-  bc.setAttribute("checked", true);  
+  bc.setAttribute("checked", true);
 
   orderString = aOrder == 'reverse' ? "Ascend" : "Descend";
   bc = document.getElementById("Console:sort"+orderString);
   bc.setAttribute("checked", false);
 }
 
 function updateModeCommand(aMode)
 {
--- a/toolkit/components/console/content/consoleBindings.xml
+++ b/toolkit/components/console/content/consoleBindings.xml
@@ -7,17 +7,17 @@
 <!DOCTYPE bindings SYSTEM "chrome://global/locale/console.dtd">
 
 <bindings id="consoleBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
 
   <binding id="console-box" extends="xul:box">
-    <content>  
+    <content>
       <xul:stringbundle src="chrome://global/locale/console.properties" role="string-bundle"/>
       <xul:vbox class="console-box-internal">
         <xul:vbox class="console-rows" role="console-rows" xbl:inherits="dir=sortOrder"/>
       </xul:vbox>
     </content>
 
     <implementation>
       <field name="limit" readonly="true">
@@ -84,17 +84,17 @@
         ]]></setter>
       </property>
 
       <method name="init">
         <body><![CDATA[
           this.mCount = 0;
 
           this.mConsoleListener = {
-            console: this, 
+            console: this,
             observe : function(aObject) {
               // The message can arrive a little bit after the xbl binding has been
               // unbind. So node.appendItem will not be available anymore.
               if ('appendItem' in this.console)
                 this.console.appendItem(aObject);
             }
           };
 
@@ -355,17 +355,17 @@
             aRow.classList.remove("filtered-by-string")
           } else {
             aRow.classList.add("filtered-by-string")
           }
         ]]></body>
       </method>
 
       <!-- UTILITY FUNCTIONS -->
-      
+
       <method name="repeatChar">
         <parameter name="aChar"/>
         <parameter name="aCol"/>
         <body><![CDATA[
           if (--aCol <= 0)
             return "";
 
           for (var i = 2; i < aCol; i += i)
@@ -385,19 +385,19 @@
 
           let searchStr = aString.toLowerCase();
           let filterStrings = aFilter.split(/\s+/);
           return !filterStrings.some(function (f) {
             return searchStr.indexOf(f) == -1;
           });
         ]]></body>
       </method>
-          
-      <constructor> this.init(); </constructor>
-      <destructor> this.destroy(); </destructor>
+
+      <constructor>this.init();</constructor>
+      <destructor>this.destroy();</destructor>
 
       <!-- Command controller for the copy command -->
       <field name="_controller"><![CDATA[({
         _outer: this,
 
         QueryInterface: function(aIID) {
           if (aIID.equals(Components.interfaces.nsIController) ||
               aIID.equals(Components.interfaces.nsISupports))
--- a/toolkit/components/contentprefs/tests/unit/head_contentPrefs.js
+++ b/toolkit/components/contentprefs/tests/unit/head_contentPrefs.js
@@ -41,17 +41,17 @@ var ContentPrefTest = {
       this.__ioSvc = Cc["@mozilla.org/network/io-service;1"].
                      getService(Ci.nsIIOService);
     return this.__ioSvc;
   },
 
 
   //**************************************************************************//
   // nsISupports
-  
+
   interfaces: [Ci.nsIDirectoryServiceProvider, Ci.nsISupports],
 
   QueryInterface: function ContentPrefTest_QueryInterface(iid) {
     if (!this.interfaces.some( function(v) { return iid.equals(v) } ))
       throw Cr.NS_ERROR_NO_INTERFACE;
     return this;
   },
 
--- a/toolkit/components/contentprefs/tests/unit/test_bug503971.js
+++ b/toolkit/components/contentprefs/tests/unit/test_bug503971.js
@@ -1,17 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 function run_test() {
   var cps = new ContentPrefInstance(null);
 
   var uri = ContentPrefTest.getURI("http://www.example.com/");
-  
+
   do_check_thrown(function () { cps.setPref(uri, null, 8); });
   do_check_thrown(function () { cps.hasPref(uri, null); });
   do_check_thrown(function () { cps.getPref(uri, null); });
   do_check_thrown(function () { cps.removePref(uri, null); });
   do_check_thrown(function () { cps.getPrefsByName(null); });
   do_check_thrown(function () { cps.removePrefsByName(null); });
 
   do_check_thrown(function () { cps.setPref(uri, "", 21); });
--- a/toolkit/components/contentprefs/tests/unit/test_bug679784.js
+++ b/toolkit/components/contentprefs/tests/unit/test_bug679784.js
@@ -46,17 +46,17 @@ function run_test() {
   do_check_eq(cps.getPref(null, "value-global"), "foo-private-browsing-global");
   do_check_eq(prefObserver.setCalledNum, num + 1);
 
   // test removePref
   num = prefObserver.removedCalledNum;
   cps.removePref(uri, "value");
   do_check_eq(cps.hasPref(uri, "value"), true);
   // fallback to non private mode value
-  do_check_eq(cps.getPref(uri, "value"), "foo"); 
+  do_check_eq(cps.getPref(uri, "value"), "foo");
   do_check_eq(prefObserver.removedCalledNum, num + 1);
 
   num = prefObserver.removedCalledNum;
   cps.removePref(null, "value-global");
   do_check_eq(cps.hasPref(null, "value-global"), true);
   // fallback to non private mode value
   do_check_eq(cps.getPref(null, "value-global"), "foo-global") ;
   do_check_eq(prefObserver.removedCalledNum, num + 1);
--- a/toolkit/components/contentprefs/tests/unit/test_unusedGroupsAndSettings.js
+++ b/toolkit/components/contentprefs/tests/unit/test_unusedGroupsAndSettings.js
@@ -1,34 +1,34 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var cps = new ContentPrefInstance(null);
-          
+
 function run_test() {
   var uri1 = ContentPrefTest.getURI("http://www.domain1.com/");
   var uri2 = ContentPrefTest.getURI("http://foo.domain1.com/");
   var uri3 = ContentPrefTest.getURI("http://domain1.com/");
   var uri4 = ContentPrefTest.getURI("http://www.domain2.com/");
 
   cps.setPref(uri1, "one", 1);
   cps.setPref(uri1, "two", 2);
   cps.setPref(uri2, "one", 4);
   cps.setPref(uri3, "three", 8);
   cps.setPref(uri4, "two", 16);
-  
+
   cps.removePref(uri3, "three"); // uri3 should be removed now
   checkForUnusedGroups();
   checkForUnusedSettings();
 
   cps.removePrefsByName("two"); // uri4 should be removed now
   checkForUnusedGroups();
   checkForUnusedSettings();
-  
+
   cps.removeGroupedPrefs();
   checkForUnusedGroups();
   checkForUnusedSettings();
 }
 
 function checkForUnusedGroups() {
   var stmt = cps.DBConnection.createStatement(`
                SELECT COUNT(*) AS count FROM groups
--- a/toolkit/components/cookie/content/cookieAcceptDialog.js
+++ b/toolkit/components/cookie/content/cookieAcceptDialog.js
@@ -6,17 +6,17 @@
 
 const nsICookieAcceptDialog = Components.interfaces.nsICookieAcceptDialog;
 const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
 const nsICookie = Components.interfaces.nsICookie;
 const nsICookiePromptService = Components.interfaces.nsICookiePromptService;
 
 Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
 
-var params; 
+var params;
 var cookieBundle;
 var gDateService = null;
 
 var showDetails = "";
 var hideDetails = "";
 var detailsAccessKey = "";
 
 function onload()
@@ -151,17 +151,17 @@ function showhideinfo()
     document.getElementById('disclosureButton').setAttribute("label",showDetails);
   }
   sizeToContent();
 }
 
 function cookieAcceptNormal()
 {
   // accept the cookie normally
-  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.ACCEPT_COOKIE); 
+  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.ACCEPT_COOKIE);
   // And remember that when needed
   params.SetInt(nsICookieAcceptDialog.REMEMBER_DECISION, document.getElementById('persistDomainAcceptance').checked);
   window.close();
 }
 
 function cookieAcceptSession()
 {
   // accept for the session only
@@ -169,34 +169,34 @@ function cookieAcceptSession()
   // And remember that when needed
   params.SetInt(nsICookieAcceptDialog.REMEMBER_DECISION, document.getElementById('persistDomainAcceptance').checked);
   window.close();
 }
 
 function cookieDeny()
 {
   // say that the cookie was rejected
-  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.DENY_COOKIE); 
+  params.SetInt(nsICookieAcceptDialog.ACCEPT_COOKIE, nsICookiePromptService.DENY_COOKIE);
   // And remember that when needed
   params.SetInt(nsICookieAcceptDialog.REMEMBER_DECISION, document.getElementById('persistDomainAcceptance').checked);
   window.close();
 }
 
 function GetExpiresString(secondsUntilExpires) {
   if (secondsUntilExpires) {
     var date = new Date(1000*secondsUntilExpires);
 
     // if a server manages to set a really long-lived cookie, the dateservice
     // can't cope with it properly, so we'll just return a blank string
     // see bug 238045 for details
     var expiry = "";
     try {
       expiry = gDateService.FormatDateTime("", gDateService.dateFormatLong,
-                                           gDateService.timeFormatSeconds, 
-                                           date.getFullYear(), date.getMonth()+1, 
+                                           gDateService.timeFormatSeconds,
+                                           date.getFullYear(), date.getMonth()+1,
                                            date.getDate(), date.getHours(),
                                            date.getMinutes(), date.getSeconds());
     } catch(ex) {
       // do nothing
     }
     return expiry;
   }
   return cookieBundle.getString("expireAtEndOfSession");
--- a/toolkit/components/crashes/CrashManager.jsm
+++ b/toolkit/components/crashes/CrashManager.jsm
@@ -821,17 +821,17 @@ CrashStore.prototype = Object.freeze({
 
           this._data.crashes.set(id, denormalized);
 
           let key = dateToDays(denormalized.crashDate) + "-" + denormalized.type;
           actualCounts.set(key, (actualCounts.get(key) || 0) + 1);
 
           // If we have an OOM size, count the crash as an OOM in addition to
           // being a main process crash.
-          if (denormalized.metadata && 
+          if (denormalized.metadata &&
               denormalized.metadata.OOMAllocationSize) {
             let oomKey = key + "-oom";
             actualCounts.set(oomKey, (actualCounts.get(oomKey) || 0) + 1);
           }
 
         }
 
         // The validation in this loop is arguably not necessary. We perform
--- a/toolkit/components/downloads/nsDownloadManagerUI.js
+++ b/toolkit/components/downloads/nsDownloadManagerUI.js
@@ -28,17 +28,17 @@ nsDownloadManagerUI.prototype = {
   {
     if (!aReason)
       aReason = Ci.nsIDownloadManagerUI.REASON_USER_INTERACTED;
 
     // First we see if it is already visible
     let window = this.recentWindow;
     if (window) {
       window.focus();
-      
+
       // If we are being asked to show again, with a user interaction reason,
       // set the appropriate variable.
       if (aReason == Ci.nsIDownloadManagerUI.REASON_USER_INTERACTED)
         window.gUserInteracted = true;
       return;
     }
 
     let parent = null;
--- a/toolkit/components/downloads/test/browser/browser_bug414214.js
+++ b/toolkit/components/downloads/test/browser/browser_bug414214.js
@@ -44,16 +44,16 @@ function test()
     // Reset the pref to its default value
     try {
       Services.prefs.clearUserPref(PREF_BDM_CLOSEWHENDONE);
     }
     catch (err) { }
 
     finish();
   }
-  
+
   // OK, let's pull up the UI
   // Linux uses y, everything else is j
   var key = navigator.platform.match("Linux") ? "y" : "j";
   EventUtils.synthesizeKey(key, {metaKey: true}, window.opener);
 
   waitForExplicitFinish();
 }
--- a/toolkit/components/downloads/test/browser/browser_nsIDownloadManagerUI.js
+++ b/toolkit/components/downloads/test/browser/browser_nsIDownloadManagerUI.js
@@ -95,12 +95,12 @@ function test()
     var win = Services.wm.getMostRecentWindow("Download:Manager");
 
     // Now we can run our tests
     for (var t of testFuncs)
       t(win);
 
     finish();
   }
-  
+
   waitForExplicitFinish();
   window.setTimeout(finishUp, 1000);
 }
--- a/toolkit/components/downloads/test/unit/test_download_samename.js
+++ b/toolkit/components/downloads/test/unit/test_download_samename.js
@@ -31,17 +31,17 @@ var DownloadListener = {
   prevFiles : [],
 
   init: function () {
     Services.obs.addObserver(this, "dl-start", true);
     Services.obs.addObserver(this, "dl-done", true);
   },
 
   observe: function (aSubject, aTopic, aData) {
-    
+
     if (aTopic == "dl-start") {
       // pause the download if requested
       if (this.set.doPause) {
         let dl = aSubject.QueryInterface(Ci.nsIDownload);
         // Don't pause immediately, otherwise the external helper app handler
         // won't be able to assign a permanent file name.
         do_execute_soon(function() {
           downloadUtils.downloadManager.pauseDownload(dl.id);
--- a/toolkit/components/downloads/test/unit/test_history_expiration.js
+++ b/toolkit/components/downloads/test/unit/test_history_expiration.js
@@ -66,17 +66,17 @@ add_task(function* test_execute()
     let file = Cc["@mozilla.org/file/directory_service;1"].
                getService(Ci.nsIProperties).get("TmpD", Ci.nsIFile);
     file.append("expireTest");
     stmt.bindByIndex(2, Cc["@mozilla.org/network/io-service;1"].
       getService(Ci.nsIIOService).newFileURI(file).spec);
 
     // Give it some state
     stmt.bindByIndex(3, dm.DOWNLOAD_FINISHED);
-    
+
     stmt.bindByIndex(4, theGUID);
 
     // Add it!
     stmt.execute();
   }
   finally {
     stmt.reset();
     stmt.finalize();
--- a/toolkit/components/feeds/FeedProcessor.js
+++ b/toolkit/components/feeds/FeedProcessor.js
@@ -92,34 +92,34 @@ function isIFeedContainer(a) {
   return isIID(a, Ci.nsIFeedContainer);
 }
 
 function stripTags(someHTML) {
   return someHTML.replace(/<[^>]+>/g,"");
 }
 
 /**
- * Searches through an array of links and returns a JS array 
+ * Searches through an array of links and returns a JS array
  * of matching property bags.
  */
 const IANA_URI = "http://www.iana.org/assignments/relation/";
 function findAtomLinks(rel, links) {
   var rvLinks = [];
   for (var i = 0; i < links.length; ++i) {
     var linkElement = links.queryElementAt(i, Ci.nsIPropertyBag2);
     // atom:link MUST have @href
     if (bagHasKey(linkElement, "href")) {
       var relAttribute = null;
       if (bagHasKey(linkElement, "rel"))
         relAttribute = linkElement.getPropertyAsAString("rel")
       if ((!relAttribute && rel == "alternate") || relAttribute == rel) {
         rvLinks.push(linkElement);
         continue;
       }
-      // catch relations specified by IANA URI 
+      // catch relations specified by IANA URI
       if (relAttribute == IANA_URI + rel) {
         rvLinks.push(linkElement);
       }
     }
   }
   return rvLinks;
 }
 
@@ -172,18 +172,18 @@ var gNamespaces = {
   "http://www.w3.org/2005/Atom":"atom",
   "http://purl.org/atom/ns#":"atom03",
   "http://purl.org/rss/1.0/modules/content/":"content",
   "http://purl.org/dc/elements/1.1/":"dc",
   "http://purl.org/dc/terms/":"dcterms",
   "http://www.w3.org/1999/02/22-rdf-syntax-ns#":"rdf",
   "http://purl.org/rss/1.0/":"rss1",
   "http://my.netscape.com/rdf/simple/0.9/":"rss1",
-  "http://wellformedweb.org/CommentAPI/":"wfw",                              
-  "http://purl.org/rss/1.0/modules/wiki/":"wiki", 
+  "http://wellformedweb.org/CommentAPI/":"wfw",
+  "http://purl.org/rss/1.0/modules/wiki/":"wiki",
   "http://www.w3.org/XML/1998/namespace":"xml",
   "http://search.yahoo.com/mrss/":"media",
   "http://search.yahoo.com/mrss":"media"
 }
 
 // We allow a very small set of namespaces in XHTML content,
 // for attributes only
 var gAllowedXHTMLNamespaces = {
@@ -204,17 +204,17 @@ FeedResult.prototype = {
 
   registerExtensionPrefix: function FR_registerExtensionPrefix(ns, prefix) {
     throw Cr.NS_ERROR_NOT_IMPLEMENTED;
   },
 
   // XPCOM stuff
   classID: FR_CLASSID,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFeedResult])
-}  
+}
 
 function Feed() {
   this.subtitle = null;
   this.title = null;
   this.items = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
   this.link = null;
   this.id = null;
   this.generator = null;
@@ -262,17 +262,17 @@ Feed.prototype = {
       this._atomLinksToURI();
 
     this._calcEnclosureCountAndFeedType();
 
     // Resolve relative image links
     if (this.image && bagHasKey(this.image, "url"))
       this._resolveImageLink();
 
-    this._resetBagMembersToRawText([this.searchLists.subtitle, 
+    this._resetBagMembersToRawText([this.searchLists.subtitle,
                                     this.searchLists.title]);
   },
 
   _calcEnclosureCountAndFeedType: function Feed_calcEnclosureCountAndFeedType() {
     var entries_with_enclosures = 0;
     var audio_count = 0;
     var image_count = 0;
     var video_count = 0;
@@ -303,17 +303,17 @@ Feed.prototype = {
             ++other_count;
           }
         }
       }
     }
 
     var feedtype = Ci.nsIFeed.TYPE_FEED;
 
-    // For a feed to be marked as TYPE_VIDEO, TYPE_AUDIO and TYPE_IMAGE, 
+    // For a feed to be marked as TYPE_VIDEO, TYPE_AUDIO and TYPE_IMAGE,
     // we enforce two things:
     //
     //    1. all entries must have at least one enclosure
     //    2. all enclosures must be video for TYPE_VIDEO, audio for TYPE_AUDIO or image
     //       for TYPE_IMAGE
     //
     // Otherwise it's a TYPE_FEED.
     if (entries_with_enclosures == this.items.length && other_count == 0) {
@@ -363,27 +363,27 @@ Feed.prototype = {
       LOG(e);
     }
 
     return uri;
   },
 
   // reset the bag to raw contents, not text constructs
   _resetBagMembersToRawText: function Feed_resetBagMembers(fieldLists) {
-    for (var i=0; i<fieldLists.length; i++) {      
+    for (var i=0; i<fieldLists.length; i++) {
       for (var j=0; j<fieldLists[i].length; j++) {
         if (bagHasKey(this.fields, fieldLists[i][j])) {
           var textConstruct = this.fields.getProperty(fieldLists[i][j]);
           this.fields.setPropertyAsAString(fieldLists[i][j],
                                            textConstruct.text);
         }
       }
     }
   },
-  
+
   // XPCOM stuff
   classID: FEED_CLASSID,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFeed, Ci.nsIFeedContainer])
 }
 
 function Entry() {
   this.summary = null;
   this.content = null;
@@ -393,67 +393,67 @@ function Entry() {
   this.link = null;
   this.id = null;
   this.baseURI = null;
   this.updated = null;
   this.published = null;
   this.authors = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
   this.contributors = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
 }
-  
+
 Entry.prototype = {
   fields: null,
   enclosures: null,
   mediaContent: null,
-  
+
   searchLists: {
     title: ["title", "rss1:title", "atom03:title", "atom:title"],
     link: [["link",strToURI],["rss1:link",strToURI]],
     id: [["guid", makePropGetter("guid")], "rdf:about",
          "atom03:id", "atom:id"],
     authors : ["authors"],
     contributors: ["contributors"],
     summary: ["description", "rss1:description", "dc:description",
               "atom03:summary", "atom:summary"],
     content: ["content:encoded","atom03:content","atom:content"],
     rights: ["atom03:rights","atom:rights"],
     published: ["pubDate", "atom03:issued", "dcterms:issued", "atom:published"],
     updated: ["pubDate", "atom03:modified", "dc:date", "dcterms:modified",
               "atom:updated"]
   },
-  
+
   normalize: function Entry_normalize() {
     fieldsToObj(this, this.searchLists);
- 
+
     // Assign Atom link if needed
     if (bagHasKey(this.fields, "links"))
       this._atomLinksToURI();
 
     // Populate enclosures array
     this._populateEnclosures();
 
     // The link might be a guid w/ permalink=true
     if (!this.link && bagHasKey(this.fields, "guid")) {
       var guid = this.fields.getProperty("guid");
       var isPermaLink = true;
-      
+
       if (bagHasKey(guid, "isPermaLink"))
         isPermaLink = guid.getProperty("isPermaLink").toLowerCase() != "false";
-      
+
       if (guid && isPermaLink)
         this.link = strToURI(guid.getProperty("guid"));
     }
 
     if (this.updated)
       this.updated = dateParse(this.updated);
     if (this.published)
       this.published = dateParse(this.published);
 
-    this._resetBagMembersToRawText([this.searchLists.content, 
-                                    this.searchLists.summary, 
+    this._resetBagMembersToRawText([this.searchLists.content,
+                                    this.searchLists.summary,
                                     this.searchLists.title]);
   },
 
   _populateEnclosures: function Entry_populateEnclosures() {
     if (bagHasKey(this.fields, "links"))
       this._atomLinksToEnclosures();
 
     // Add RSS2 enclosure to enclosures
@@ -489,17 +489,17 @@ Entry.prototype = {
     if (previous_enc != undefined) {
       previous_enc.QueryInterface(Ci.nsIWritablePropertyBag2);
 
       if (!bagHasKey(previous_enc, "type") && bagHasKey(new_enc, "type"))
         previous_enc.setPropertyAsAString("type", new_enc.getPropertyAsAString("type"));
 
       if (!bagHasKey(previous_enc, "length") && bagHasKey(new_enc, "length"))
         previous_enc.setPropertyAsAString("length", new_enc.getPropertyAsAString("length"));
-      
+
       return;
     }
 
     if (this.enclosures == null) {
       this.enclosures = Cc[ARRAY_CONTRACTID].createInstance(Ci.nsIMutableArray);
       this.enclosures.QueryInterface(Ci.nsIMutableArray);
     }
 
@@ -586,17 +586,17 @@ Entry.prototype = {
   classID: ENTRY_CLASSID,
   QueryInterface: XPCOMUtils.generateQI(
     [Ci.nsIFeedEntry, Ci.nsIFeedContainer]
   )
 }
 
 Entry.prototype._atomLinksToURI = Feed.prototype._atomLinksToURI;
 Entry.prototype._resolveURI = Feed.prototype._resolveURI;
-Entry.prototype._resetBagMembersToRawText = 
+Entry.prototype._resetBagMembersToRawText =
    Feed.prototype._resetBagMembersToRawText;
 
 // TextConstruct represents and element that could contain (X)HTML
 function TextConstruct() {
   this.lang = null;
   this.base = null;
   this.type = "text";
   this.text = null;
@@ -628,17 +628,17 @@ TextConstruct.prototype = {
     else if (this.type == "html")
       isXML = false;
     else
       return null;
 
     return this.parserUtils.parseFragment(this.text, 0, isXML,
                                           this.base, element);
   },
- 
+
   // XPCOM stuff
   classID: TEXTCONSTRUCT_CLASSID,
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFeedTextConstruct])
 }
 
 // Generator represents the software that produced the feed
 function Generator() {
   this.lang = null;
@@ -692,36 +692,36 @@ function Person() {
 Person.prototype = {
   // XPCOM stuff
   classID: PERSON_CLASSID,
   QueryInterface: XPCOMUtils.generateQI(
     [Ci.nsIFeedPerson, Ci.nsIFeedElementBase]
   )
 }
 
-/** 
+/**
  * Map a list of fields into properties on a container.
  *
  * @param container An nsIFeedContainer
  * @param fields A list of fields to search for. List members can
- *               be a list, in which case the second member is 
+ *               be a list, in which case the second member is
  *               transformation function (like parseInt).
  */
 function fieldsToObj(container, fields) {
   var props,prop,field,searchList;
   for (var key in fields) {
     searchList = fields[key];
     for (var i=0; i < searchList.length; ++i) {
       props = searchList[i];
       prop = null;
       field = isArray(props) ? props[0] : props;
       try {
         prop = container.fields.getProperty(field);
-      } 
-      catch(e) { 
+      }
+      catch(e) {
       }
       if (prop) {
         prop = isArray(props) ? props[1](prop) : prop;
         container[key] = prop;
       }
     }
   }
 }
@@ -749,43 +749,43 @@ function atomLogo(s, logo) {
   logo.setPropertyAsAString("url", s.trim());
 }
 
 // post-process an RSS category, map it to the Atom fields.
 function rssCatTerm(s, cat) {
   // add slash handling?
   cat.setPropertyAsAString("term", s.trim());
   return cat;
-} 
+}
 
-// post-process a GUID 
+// post-process a GUID
 function rssGuid(s, guid) {
   guid.setPropertyAsAString("guid", s.trim());
   return guid;
 }
 
 // post-process an RSS author element
 //
 // It can contain a field like this:
-// 
+//
 //  <author>lawyer@boyer.net (Lawyer Boyer)</author>
 //
 // or, delightfully, a field like this:
 //
 //  <dc:creator>Simon St.Laurent (mailto:simonstl@simonstl.com)</dc:creator>
 //
 // We want to split this up and assign it to corresponding Atom
 // fields.
 //
 function rssAuthor(s,author) {
   author.QueryInterface(Ci.nsIFeedPerson);
   // check for RSS2 string format
   var chars = s.trim();
   var matches = chars.match(/(.*)\((.*)\)/);
-  var emailCheck = 
+  var emailCheck =
     /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   if (matches) {
     var match1 = matches[1].trim();
     var match2 = matches[2].trim();
     if (match2.indexOf("mailto:") == 0)
       match2 = match2.substring(7);
     if (emailCheck.test(match1)) {
       author.email = match1;
@@ -831,17 +831,17 @@ function dateParse(aDateString) {
   // Without bug 682781 fixed, JS won't parse an RFC822 date with a Z for the
   // timezone, so convert to -00:00 which works for any date format.
   dateString = dateString.replace(/z$/i, "-00:00");
   let date = new Date(dateString);
   if (!isNaN(date)) {
     return date.toUTCString();
   }
   return null;
-} 
+}
 
 const XHTML_NS = "http://www.w3.org/1999/xhtml";
 
 // The XHTMLHandler handles inline XHTML found in things like atom:summary
 function XHTMLHandler(processor, isAtom) {
   this._buf = "";
   this._processor = processor;
   this._depth = 0;
@@ -849,17 +849,17 @@ function XHTMLHandler(processor, isAtom)
   // a stack of lists tracking in-scope namespaces
   this._inScopeNS = [];
 }
 
 // The fidelity can be improved here, to allow handling of stuff like
 // SVG and MathML. XXX
 XHTMLHandler.prototype = {
 
-   // look back up at the declared namespaces 
+   // look back up at the declared namespaces
    // we always use the same prefixes for our safe stuff
   _isInScope: function XH__isInScope(ns) {
     for (var i in this._inScopeNS) {
       for (var uri in this._inScopeNS[i]) {
         if (this._inScopeNS[i][uri] == ns)
           return true;
       }
     }
@@ -869,43 +869,43 @@ XHTMLHandler.prototype = {
   startDocument: function XH_startDocument() {
   },
   endDocument: function XH_endDocument() {
   },
   startElement: function XH_startElement(namespace, localName, qName, attributes) {
     ++this._depth;
     this._inScopeNS.push([]);
 
-    // RFC4287 requires XHTML to be wrapped in a div that is *not* part of 
+    // RFC4287 requires XHTML to be wrapped in a div that is *not* part of
     // the content. This prevents people from screwing up namespaces, but
     // we need to skip it here.
     if (this._isAtom && this._depth == 1 && localName == "div")
       return;
 
     // If it's an XHTML element, record it. Otherwise, it's ignored.
     if (namespace == XHTML_NS) {
       this._buf += "<" + localName;
       var uri;
       for (var i=0; i < attributes.length; ++i) {
         uri = attributes.getURI(i);
         // XHTML attributes aren't in a namespace
-        if (uri == "") { 
+        if (uri == "") {
           this._buf += (" " + attributes.getLocalName(i) + "='" +
                         xmlEscape(attributes.getValue(i)) + "'");
         } else {
           // write a small set of allowed attribute namespaces
           var prefix = gAllowedXHTMLNamespaces[uri];
           if (prefix != null) {
             // The attribute value we'll attempt to write
             var attributeValue = xmlEscape(attributes.getValue(i));
 
-            // it's an allowed attribute NS.            
+            // it's an allowed attribute NS.
             // write the attribute
-            this._buf += (" " + prefix + ":" + 
-                          attributes.getLocalName(i) + 
+            this._buf += (" " + prefix + ":" +
+                          attributes.getLocalName(i) +
                           "='" + attributeValue + "'");
 
             // write an xmlns declaration if necessary
             if (prefix != "xml" && !this._isInScope(uri)) {
               this._inScopeNS[this._inScopeNS.length - 1].push(uri);
               this._buf += " xmlns:" + prefix + "='" + uri + "'";
             }
           }
@@ -936,17 +936,17 @@ XHTMLHandler.prototype = {
   characters: function XH_characters(data) {
     this._buf += xmlEscape(data);
   },
   startPrefixMapping: function XH_startPrefixMapping(prefix, uri) {
   },
   endPrefixMapping: function FP_endPrefixMapping(prefix) {
   },
   processingInstruction: function XH_processingInstruction() {
-  }, 
+  },
 }
 
 /**
  * The ExtensionHandler deals with elements we haven't explicitly
  * added to our transition table in the FeedProcessor.
  */
 function ExtensionHandler(processor) {
   this._buf = "";
@@ -967,55 +967,55 @@ ExtensionHandler.prototype = {
   startDocument: function EH_startDocument() {
   },
   endDocument: function EH_endDocument() {
   },
   startElement: function EH_startElement(uri, localName, qName, attrs) {
     ++this._depth;
     var prefix = gNamespaces[uri] ? gNamespaces[uri] + ":" : "";
     var key =  prefix + localName;
-    
+
     if (this._depth == 1) {
       this._uri = uri;
       this._localName = localName;
       this._qName = qName;
       this._attrs = attrs;
     }
-    
+
     // if we descend into another element, we won't send text
     this._hasChildElements = (this._depth > 1);
-    
+
   },
   endElement: function EH_endElement(uri, localName, qName) {
     --this._depth;
     if (this._depth == 0) {
       var text = this._hasChildElements ? null : this._buf.trim();
-      this._processor.returnFromExtHandler(this._uri, this._localName, 
+      this._processor.returnFromExtHandler(this._uri, this._localName,
                                            text, this._attrs);
     }
   },
   characters: function EH_characters(data) {
     if (!this._hasChildElements)
       this._buf += data;
   },
   startPrefixMapping: function EH_startPrefixMapping() {
   },
   endPrefixMapping: function EH_endPrefixMapping() {
   },
   processingInstruction: function EH_processingInstruction() {
-  }, 
+  },
 };
 
 
 /**
  * ElementInfo is a simple container object that describes
  * some characteristics of a feed element. For example, it
  * says whether an element can be expected to appear more
  * than once inside a given entry or feed.
- */ 
+ */
 function ElementInfo(fieldName, containerClass, closeFunc, isArray) {
   this.fieldName = fieldName;
   this.containerClass = containerClass;
   this.closeFunc = closeFunc;
   this.isArray = isArray;
   this.isWrapper = false;
 }
 
@@ -1046,17 +1046,17 @@ function FeedProcessor() {
   this._handlerStack = [];
   this._xmlBaseStack = []; // sparse array keyed to nesting depth
   this._depth = 0;
   this._state = "START";
   this._result = null;
   this._extensionHandler = null;
   this._xhtmlHandler = null;
   this._haveSentResult = false;
-  
+
   // The nsIFeedResultListener waiting for the parse results
   this.listener = null;
 
   // These elements can contain (X)HTML or plain text.
   // We keep a table here that contains their default treatment
   this._textConstructs = {"atom:title":"text",
                           "atom:summary":"text",
                           "atom:rights":"text",
@@ -1069,32 +1069,32 @@ function FeedProcessor() {
                           "title":"text",
                           "rss1:title":"text",
                           "atom03:title":"text",
                           "atom03:tagline":"text",
                           "atom03:summary":"text",
                           "atom03:content":"text"};
   this._stack = [];
 
-  this._trans = {   
+  this._trans = {
     "START": {
       //If we hit a root RSS element, treat as RSS2.
       "rss": new FeedElementInfo("RSS2", "rss2"),
 
       // If we hit an RDF element, if could be RSS1, but we can't
       // verify that until we hit a rss1:channel element.
       "rdf:RDF": new WrapperElementInfo("RDF"),
 
       // If we hit a Atom 1.0 element, treat as Atom 1.0.
       "atom:feed": new FeedElementInfo("Atom", "atom"),
 
       // Treat as Atom 0.3
       "atom03:feed": new FeedElementInfo("Atom03", "atom03"),
     },
-    
+
     /********* RSS2 **********/
     "IN_RSS2": {
       "channel": new WrapperElementInfo("channel")
     },
 
     "IN_CHANNEL": {
       "item": new ElementInfo("items", Cc[ENTRY_CONTRACTID], null, true),
       "managingEditor": new ElementInfo("authors", Cc[PERSON_CONTRACTID],
@@ -1139,17 +1139,17 @@ function FeedProcessor() {
     "IN_SKIPHOURS":{
       "hour": new ElementInfo("hours", null, rssArrayElement, true)
     },
 
     "IN_MEDIAGROUP": {
       "media:content": new ElementInfo("mediacontent", null, null, true),
       "media:thumbnail": new ElementInfo("mediathumbnail", null, null, true)
     },
- 
+
     /********* RSS1 **********/
     "IN_RDF": {
       // If we hit a rss1:channel, we can verify that we have RSS1
       "rss1:channel": new FeedElementInfo("rdf_channel", "rss1"),
       "rss1:image": new ElementInfo("image", null, null, false),
       "rss1:textinput": new ElementInfo("textInput", null, null, false),
       "rss1:item": new ElementInfo("items", Cc[ENTRY_CONTRACTID], null, true),
     },
@@ -1211,18 +1211,18 @@ function FeedProcessor() {
       "atom03:link": new ElementInfo("links", null, null, true),
       "atom03:entry": new ElementInfo("atom03_entries", Cc[ENTRY_CONTRACTID],
                                       null, true)
     }
   }
 }
 
 // See startElement for a long description of how feeds are processed.
-FeedProcessor.prototype = { 
-  
+FeedProcessor.prototype = {
+
   // Set ourselves as the SAX handler, and set the base URI
   _init: function FP_init(uri) {
     this._reader.contentHandler = this;
     this._reader.errorHandler = this;
     this._result = Cc[FR_CONTRACTID].createInstance(Ci.nsIFeedResult);
     if (uri) {
       this._result.uri = uri;
       this._reader.baseURI = uri;
@@ -1230,17 +1230,17 @@ FeedProcessor.prototype = {
     }
   },
 
   // This function is called once we figure out what type of feed
   // we're dealing with. Some feed types require digging a bit further
   // than the root.
   _docVerified: function FP_docVerified(version) {
     this._result.doc = Cc[FEED_CONTRACTID].createInstance(Ci.nsIFeed);
-    this._result.doc.baseURI = 
+    this._result.doc.baseURI =
       this._xmlBaseStack[this._xmlBaseStack.length - 1];
     this._result.doc.fields = this._feed;
     this._result.version = version;
   },
 
   // When we're done with the feed, let the listener know what
   // happened.
   _sendResult: function FP_sendResult() {
@@ -1261,33 +1261,33 @@ FeedProcessor.prototype = {
     finally {
       this._result = null;
     }
   },
 
   // Parsing functions
   parseFromStream: function FP_parseFromStream(stream, uri) {
     this._init(uri);
-    this._reader.parseFromStream(stream, null, stream.available(), 
+    this._reader.parseFromStream(stream, null, stream.available(),
                                  "application/xml");
     this._reader = null;
   },
 
   parseFromString: function FP_parseFromString(inputString, uri) {
     this._init(uri);
     this._reader.parseFromString(inputString, "application/xml");
     this._reader = null;
   },
 
   parseAsync: function FP_parseAsync(requestObserver, uri) {
     this._init(uri);
     this._reader.parseAsync(requestObserver);
   },
 
-  // nsIStreamListener 
+  // nsIStreamListener
 
   // The XMLReader will throw sensible exceptions if these get called
   // out of order.
   onStartRequest: function FP_onStartRequest(request, context) {
     // this will throw if the request is not a channel, but so will nsParser.
     var channel = request.QueryInterface(Ci.nsIChannel);
     channel.contentType = "application/vnd.mozilla.maybe.feed";
     this._reader.onStartRequest(request, context);
@@ -1337,29 +1337,29 @@ FeedProcessor.prototype = {
   // do Atom authors. The only commonly used elements that contain
   // mixed content are Atom Text Constructs of type="xhtml", which we
   // delegate to another handler for cleaning. That leaves a couple
   // different types of elements to deal with: those that should occur
   // only once, such as title elements, and those that can occur
   // multiple times, such as the RSS category element and the Atom
   // link element. Most of the RSS1/DC elements can occur multiple
   // times in theory, but in practice, the only ones that do have
-  // analogues in Atom. 
+  // analogues in Atom.
   //
   // Some elements are also groups of attributes or sub-elements,
   // while others are simple text fields. For the most part, we don't
   // have to pay explicit attention to the simple text elements,
   // unless we want to post-process the resulting string to transform
   // it into some richer object like a Date or URI.
   //
   // Elements that have more sophisticated content models still end up
   // being dictionaries, whether they are based on attributes like RSS
   // cloud, sub-elements like Atom author, or even items and
   // entries. These elements are treated as "containers". It's
-  // theoretically possible for a container to have an attribute with 
+  // theoretically possible for a container to have an attribute with
   // the same universal name as a sub-element, but none of the feed
   // formats allow this by default, and I don't of any extension that
   // works this way.
   //
   startElement: function FP_startElement(uri, localName, qName, attributes) {
     this._buf = "";
     ++this._depth;
     var elementInfo;
@@ -1378,36 +1378,36 @@ FeedProcessor.prototype = {
     // a "canonical" prefix for a namespace URI. For example, this
     // allows Dublin Core "creator" elements to be consistently mapped
     // to "dc:creator", for easy field access by consumer code. This
     // strategy also happens to shorten up our state table.
     var key =  this._prefixForNS(uri) + localName;
 
     // Check to see if we need to hand this off to our XHTML handler.
     // The elements we're dealing with will look like this:
-    // 
+    //
     // <title type="xhtml">
     //   <div xmlns="http://www.w3.org/1999/xhtml">
     //     A title with <b>bold</b> and <i>italics</i>.
     //   </div>
     // </title>
     //
     // When it returns in returnFromXHTMLHandler, the handler should
-    // give us back a string like this: 
-    // 
+    // give us back a string like this:
+    //
     //    "A title with <b>bold</b> and <i>italics</i>."
     //
     // The Atom spec explicitly says the div is not part of the content,
     // and explicitly allows whitespace collapsing.
-    // 
+    //
     if ((this._result.version == "atom" || this._result.version == "atom03") &&
         this._textConstructs[key] != null) {
       var type = attributes.getValueFromName("","type");
       if (type != null && type.indexOf("xhtml") >= 0) {
-        this._xhtmlHandler = 
+        this._xhtmlHandler =
           new XHTMLHandler(this, (this._result.version == "atom"));
         this._reader.contentHandler = this._xhtmlHandler;
         return;
       }
     }
 
     // Check our current state, and see if that state has a defined
     // transition. For example, this._trans["atom:entry"]["atom:author"]
@@ -1417,24 +1417,24 @@ FeedProcessor.prototype = {
     }
     else {
       // If we don't have a transition, hand off to extension handler
       this._extensionHandler = new ExtensionHandler(this);
       this._reader.contentHandler = this._extensionHandler;
       this._extensionHandler.startElement(uri, localName, qName, attributes);
       return;
     }
-      
+
     // This distinguishes wrappers like 'channel' from elements
     // we'd actually like to do something with (which will test true).
-    this._handlerStack[this._depth] = elementInfo; 
+    this._handlerStack[this._depth] = elementInfo;
     if (elementInfo.isWrapper) {
       this._state = "IN_" + elementInfo.fieldName.toUpperCase();
       this._stack.push([this._feed, this._state]);
-    } 
+    }
     else if (elementInfo.feedVersion) {
       this._state = "IN_" + elementInfo.fieldName.toUpperCase();
 
       // Check for the older RSS2 variants
       if (elementInfo.feedVersion == "rss2")
         elementInfo.feedVersion = this._findRSSVersion(attributes);
       else if (uri == RSS090NS)
         elementInfo.feedVersion = "rss090";
@@ -1453,17 +1453,17 @@ FeedProcessor.prototype = {
   // of the state transition works as above in startElement, but
   // the state we're looking for is prefixed with an underscore
   // to distinguish endElement events from startElement events.
   endElement:  function FP_endElement(uri, localName, qName) {
     var elementInfo = this._handlerStack[this._depth];
     //LOG("</" + localName + ">");
     if (elementInfo && !elementInfo.isWrapper)
       this._closeComplexElement(elementInfo);
-  
+
     // cut down xml:base context
     if (this._xmlBaseStack.length == this._depth + 1)
       this._xmlBaseStack = this._xmlBaseStack.slice(0, this._depth);
 
     // our new state is whatever is at the top of the stack now
     if (this._stack.length > 0)
       this._state = this._stack[this._stack.length - 1][1];
     this._handlerStack = this._handlerStack.slice(0, this._depth);
@@ -1471,41 +1471,41 @@ FeedProcessor.prototype = {
   },
 
   // Buffer up character data. The buffer is cleared with every
   // opening element.
   characters: function FP_characters(data) {
     this._buf += data;
   },
   // TODO: It would be nice to check new prefixes here, and if they
-  // don't conflict with the ones we've defined, throw them in a 
+  // don't conflict with the ones we've defined, throw them in a
   // dictionary to check.
   startPrefixMapping: function FP_startPrefixMapping(prefix, uri) {
   },
-  
+
   endPrefixMapping: function FP_endPrefixMapping(prefix) {
   },
-  
+
   processingInstruction: function FP_processingInstruction(target, data) {
     if (target == "xml-stylesheet") {
       var hrefAttribute = data.match(/href=[\"\'](.*?)[\"\']/);
-      if (hrefAttribute && hrefAttribute.length == 2) 
+      if (hrefAttribute && hrefAttribute.length == 2)
         this._result.stylesheet = strToURI(hrefAttribute[1], this._result.uri);
     }
   },
 
   // end of nsISAXContentHandler
 
   // Handle our more complicated elements--those that contain
   // attributes and child elements.
   _processComplexElement:
   function FP__processComplexElement(elementInfo, attributes) {
     var obj, key, prefix;
 
-    // If the container is an entry/item, it'll need to have its 
+    // If the container is an entry/item, it'll need to have its
     // more esoteric properties put in the 'fields' property bag.
     if (elementInfo.containerClass == Cc[ENTRY_CONTRACTID]) {
       obj = elementInfo.containerClass.createInstance(Ci.nsIFeedEntry);
       obj.baseURI = this._xmlBaseStack[this._xmlBaseStack.length - 1];
       this._mapAttributes(obj.fields, attributes);
     }
     else if (elementInfo.containerClass) {
       obj = elementInfo.containerClass.createInstance(Ci.nsIFeedElementBase);
@@ -1527,45 +1527,45 @@ FeedProcessor.prototype = {
 
     // Check to see if it has the property
     var prop;
     try {
       prop = container.getProperty(elementInfo.fieldName);
     }
     catch(e) {
     }
-    
+
     if (elementInfo.isArray) {
       if (!prop) {
         container.setPropertyAsInterface(elementInfo.fieldName,
                                          Cc[ARRAY_CONTRACTID].
                                          createInstance(Ci.nsIMutableArray));
       }
 
       newProp = container.getProperty(elementInfo.fieldName);
       // XXX This QI should not be necessary, but XPConnect seems to fly
       // off the handle in the browser, and loses track of the interface
       // on large files. Bug 335638.
       newProp.QueryInterface(Ci.nsIMutableArray);
       newProp.appendElement(obj,false);
-      
+
       // If new object is an nsIFeedContainer, we want to deal with
       // its member nsIPropertyBag instead.
       if (isIFeedContainer(obj))
-        newProp = obj.fields; 
+        newProp = obj.fields;
 
     }
     else {
       // If it doesn't, set it.
       if (!prop) {
         container.setPropertyAsInterface(elementInfo.fieldName,obj);
       }
       newProp = container.getProperty(elementInfo.fieldName);
     }
-    
+
     // make our new state name, and push the property onto the stack
     var newState = "IN_" + elementInfo.fieldName.toUpperCase();
     this._stack.push([newProp, newState, obj]);
     return newState;
   },
 
   // Sometimes we need reconcile the element content with the object
   // model for a given feed. We use helper functions to do the
@@ -1593,17 +1593,17 @@ FeedProcessor.prototype = {
     // we need to normalize it
     if (elementInfo.containerClass == Cc[ENTRY_CONTRACTID])
       containerParent.normalize();
 
     // If it's an array, re-set the last element
     if (isArray)
       container.replaceElementAt(element, container.length - 1, false);
   },
-  
+
   _prefixForNS: function FP_prefixForNS(uri) {
     if (!uri)
       return "";
     var prefix = gNamespaces[uri];
     if (prefix)
       return prefix + ":";
     if (uri.toLowerCase().indexOf("http://backend.userland.com") == 0)
       return "";
@@ -1644,70 +1644,70 @@ FeedProcessor.prototype = {
     // take control of the SAX events
     this._reader.contentHandler = this;
     if (localName == null && chars == null)
       return;
 
     // we don't take random elements inside rdf:RDF
     if (this._state == "IN_RDF")
       return;
-    
+
     // Grab the top of the stack
     var top = this._stack[this._stack.length - 1];
-    if (!top) 
+    if (!top)
       return;
 
     var container = top[0];
     // Grab the last element if it's an array
     if (isIArray(container)) {
       var contract = this._handlerStack[this._depth].containerClass;
       // check if it's something specific, but not an entry
       if (contract && contract != Cc[ENTRY_CONTRACTID]) {
-        var el = container.queryElementAt(container.length - 1, 
+        var el = container.queryElementAt(container.length - 1,
                                           Ci.nsIFeedElementBase);
         // XXX there must be a way to flatten these interfaces
-        if (contract == Cc[PERSON_CONTRACTID]) 
+        if (contract == Cc[PERSON_CONTRACTID])
           el.QueryInterface(Ci.nsIFeedPerson);
         else
           return; // don't know about this interface
 
         let propName = localName;
         var prefix = gNamespaces[uri];
 
         // synonyms
-        if ((uri == "" || 
+        if ((uri == "" ||
              prefix &&
              ((prefix.indexOf("atom") > -1) ||
-              (prefix.indexOf("rss") > -1))) && 
+              (prefix.indexOf("rss") > -1))) &&
             (propName == "url" || propName == "href"))
           propName = "uri";
-        
+
         try {
           if (el[propName] !== "undefined") {
             var propValue = chars;
             // convert URI-bearing values to an nsIURI
             if (propName == "uri") {
               var base = this._xmlBaseStack[this._xmlBaseStack.length - 1];
               propValue = strToURI(chars, base);
             }
             el[propName] = propValue;
           }
         }
         catch(e) {
           // ignore XPConnect errors
         }
         // the rest of the function deals with entry- and feed-level stuff
-        return; 
-      } 
+        return;
+      }
       else {
-        container = container.queryElementAt(container.length - 1, 
+        container = container.queryElementAt(container.length - 1,
                                              Ci.nsIWritablePropertyBag2);
       }
     }
-    
+
     // Make the buffer our new property
     var propName = this._prefixForNS(uri) + localName;
 
     // But, it could be something containing HTML. If so,
     // we need to know about that.
     if (this._textConstructs[propName] != null &&
         this._handlerStack[this._depth].containerClass !== null) {
       var newProp = Cc[TEXTCONSTRUCT_CONTRACTID].
@@ -1725,17 +1725,17 @@ FeedProcessor.prototype = {
         }
         else if (typeAttribute.toLowerCase().indexOf("html") >= 0) {
           type = "html";
         }
         else if (typeAttribute.toLowerCase().indexOf("text") >= 0) {
           type = "text";
         }
       }
-      
+
       // If it's rss feed-level description, it's not supposed to have html
       if (this._result.version.indexOf("rss") >= 0 &&
           this._handlerStack[this._depth].containerClass != ENTRY_CONTRACTID) {
         type = "text";
       }
       newProp.type = type;
       newProp.base = this._xmlBaseStack[this._xmlBaseStack.length - 1];
       container.setPropertyAsInterface(propName, newProp);
@@ -1751,29 +1751,29 @@ FeedProcessor.prototype = {
   // XHTMLHandler is done, it'll callback here.
   returnFromXHTMLHandler:
   function FP_returnFromXHTMLHandler(chars, uri, localName, qName) {
     // retake control of the SAX content events
     this._reader.contentHandler = this;
 
     // Grab the top of the stack
     var top = this._stack[this._stack.length - 1];
-    if (!top) 
+    if (!top)
       return;
     var container = top[0];
 
     // Assign the property
     var newProp =  newProp = Cc[TEXTCONSTRUCT_CONTRACTID].
                    createInstance(Ci.nsIFeedTextConstruct);
     newProp.text = chars;
     newProp.type = "xhtml";
     newProp.base = this._xmlBaseStack[this._xmlBaseStack.length - 1];
     container.setPropertyAsInterface(this._prefixForNS(uri) + localName,
                                      newProp);
-    
+
     // XHTML will cause us to peek too far. The XHTML handler will
     // send us an end element to call. RFC4287-valid feeds allow a
     // more graceful way to handle this. Unfortunately, we can't count
     // on compliance at this point.
     this.endElement(uri, localName, qName);
   },
 
   // XPCOM stuff
--- a/toolkit/components/feeds/test/test_xml.js
+++ b/toolkit/components/feeds/test/test_xml.js
@@ -9,17 +9,17 @@
  * called 'xml', where the testcases live.
  *
  * The directory layout looks something like this:
  *
  * tests/test_xml.js*
  *      |
  *      - head.js
  *      |
- *      - xml/ -- rss1/... 
+ *      - xml/ -- rss1/...
  *             |
  *             -- rss2/...
  *             |
  *             -- atom/testcase.xml
  *
  * To add more tests, just include the file in the xml subfolder and add its name to xpcshell.ini
  */
 
--- a/toolkit/components/filepicker/content/filepicker.js
+++ b/toolkit/components/filepicker/content/filepicker.js
@@ -66,17 +66,17 @@ function filepickerLoad() {
     newDirButton.removeAttribute("hidden");
   }
 
   if (filePickerMode == nsIFilePicker.modeGetFolder) {
     var textInputLabel = document.getElementById("textInputLabel");
     textInputLabel.value = gFilePickerBundle.getString("dirTextInputLabel");
     textInputLabel.accessKey = gFilePickerBundle.getString("dirTextInputAccesskey");
   }
-  
+
   if ((filePickerMode == nsIFilePicker.modeOpen) ||
       (filePickerMode == nsIFilePicker.modeOpenMultiple) ||
       (filePickerMode == nsIFilePicker.modeSave)) {
 
     /* build filter popup */
     var filterPopup = document.createElement("menupopup");
 
     for (var i = 0; i < numFilters; i++) {
@@ -292,17 +292,17 @@ function selectOnOK()
                           file);
           ret = nsIFilePicker.returnCancel;
         } else {
           // we need to pop up a dialog asking if you want to save
           var confirmTitle = gFilePickerBundle.getString("confirmTitle");
           var message =
             gFilePickerBundle.getFormattedString("confirmFileReplacing",
                                                  [file.path]);
-          
+
           promptService = Components.classes[NS_PROMPTSERVICE_CONTRACTID].getService(Components.interfaces.nsIPromptService);
           var rv = promptService.confirm(window, confirmTitle, message);
           if (rv) {
             ret = nsIFilePicker.returnReplace;
             retvals.directory = file.parent.path;
           } else {
             ret = nsIFilePicker.returnCancel;
           }
@@ -355,17 +355,17 @@ function selectOnOK()
       break;
     }
   }
 
   gFilesEnumerator.mFiles = fileList;
 
   retvals.files = gFilesEnumerator;
   retvals.buttonStatus = ret;
-  
+
   return (ret != nsIFilePicker.returnCancel);
 }
 
 var gFilesEnumerator = {
   mFiles: null,
   mIndex: 0,
 
   hasMoreElements: function()
@@ -415,49 +415,49 @@ function openSelectedFile() {
 function onClick(e) {
   var t = e.originalTarget;
   if (t.localName == "treecol")
     handleColumnClick(t.id);
 }
 
 function convertColumnIDtoSortType(columnID) {
   var sortKey;
-  
+
   switch (columnID) {
   case "FilenameColumn":
     sortKey = nsIFileView.sortName;
     break;
   case "FileSizeColumn":
     sortKey = nsIFileView.sortSize;
     break;
   case "LastModifiedColumn":
     sortKey = nsIFileView.sortDate;
     break;
   default:
     dump("unsupported sort column: " + columnID + "\n");
     sortKey = 0;
     break;
   }
-  
+
   return sortKey;
 }
 
 function handleColumnClick(columnID) {
   var sortType = convertColumnIDtoSortType(columnID);
   var sortOrder = (treeView.sortType == sortType) ? !treeView.reverseSort : false;
   treeView.sort(sortType, sortOrder);
-  
+
   // set the sort indicator on the column we are sorted by
   var sortedColumn = document.getElementById(columnID);
   if (treeView.reverseSort) {
     sortedColumn.setAttribute("sortDirection", "descending");
   } else {
     sortedColumn.setAttribute("sortDirection", "ascending");
   }
-  
+
   // remove the sort indicator from the rest of the columns
   var currCol = sortedColumn.parentNode.firstChild;
   while (currCol) {
     if (currCol != sortedColumn && currCol.localName == "treecol")
       currCol.removeAttribute("sortDirection");
     currCol = currCol.nextSibling;
   }
 }
@@ -592,33 +592,33 @@ function onDirectoryChanged(target)
 }
 
 function populateAncestorList(directory) {
   var menu = document.getElementById("lookInMenu");
 
   while (menu.hasChildNodes()) {
     menu.removeChild(menu.firstChild);
   }
-  
+
   var menuItem = document.createElement("menuitem");
   menuItem.setAttribute("label", directory.path);
   menuItem.setAttribute("crop", "start");
   menu.appendChild(menuItem);
 
   // .parent is _sometimes_ null, see bug 121489.  Do a dance around that.
   var parent = directory.parent;
   while (parent && !parent.equals(directory)) {
     menuItem = document.createElement("menuitem");
     menuItem.setAttribute("label", parent.path);
     menuItem.setAttribute("crop", "start");
     menu.appendChild(menuItem);
     directory = parent;
     parent = directory.parent;
   }
-  
+
   var menuList = document.getElementById("lookInMenuList");
   menuList.selectedIndex = 0;
 }
 
 function goUp() {
   try {
     var parent = sfile.parent;
   } catch(ex) { dump("can't get parent directory\n"); }
@@ -645,17 +645,17 @@ function newDir() {
   if (ret) {
     file = processPath(gNewDirName.value);
     if (!file) {
       showErrorDialog("errorCreateNewDirTitle",
                       "errorCreateNewDirMessage",
                       file);
       return false;
     }
-    
+
     file = file[0].QueryInterface(nsIFile);
     if (file.exists()) {
       showErrorDialog("errorNewDirDoesExistTitle",
                       "errorNewDirDoesExistMessage",
                       file);
       return false;
     }
 
@@ -676,29 +676,29 @@ function newDir() {
         showErrorDialog("errorCreateNewDirTitle",
                         "errorCreateNewDirPermissionMessage",
                         parent);
         return false;
       }
     }
 
     try {
-      file.create(nsIFile.DIRECTORY_TYPE, 0755); 
+      file.create(nsIFile.DIRECTORY_TYPE, 0755);
     } catch (e) {
       showErrorDialog("errorCreateNewDirTitle",
                       "errorCreateNewDirMessage",
                       file);
       return false;
     }
     file.normalize(); // ... in case ".." was used in the path
     gotoDirectory(file);
     // we remember and reshow a dirname if something goes wrong
     // so that errors can be corrected more easily. If all went well,
     // reset the default value to blank
-    gNewDirName = { value: "" }; 
+    gNewDirName = { value: "" };
   }
   return true;
 }
 
 function gotoDirectory(directory) {
   window.setCursor("wait");
   try {
     populateAncestorList(directory);
@@ -745,17 +745,17 @@ function processPath(path)
       var nextQuote;
 
       // Look for an unescaped quote
       var quoteSearchStart = curFileStart + 1;
       do {
         nextQuote = path.indexOf('"', quoteSearchStart);
         quoteSearchStart = nextQuote + 1;
       } while (nextQuote != -1 && path[nextQuote - 1] == '\\');
-      
+
       if (nextQuote == -1) {
         // we have a filename with no trailing quote.
         // just assume that the filename ends at the end of the string.
 
         if (!processPathEntry(path.substring(curFileStart), fileArray))
           return false;
         break;
       }
@@ -802,17 +802,17 @@ function processPathEntry(path, fileArra
       !(path == "~" && tilde_file.exists()) && // If ~ was entered and such a file exists, don't expand
       (path.length == 1 || path[1] == "/"))    // We don't want to expand ~file to ${HOME}file
     filePath = homeDir.path + path.substring(1);
   else
     filePath = path;
 
   // Unescape quotes
   filePath = filePath.replace(/\\\"/g, "\"");
-  
+
   if (filePath[0] == '/')   /* an absolute path was entered */
     file.initWithPath(filePath);
   else if ((filePath.indexOf("/../") > 0) ||
            (filePath.substr(-3) == "/..") ||
            (filePath.substr(0,3) == "../") ||
            (filePath == "..")) {
     /* appendRelativePath doesn't allow .. */
     try{
--- a/toolkit/components/gfx/SanityTest.js
+++ b/toolkit/components/gfx/SanityTest.js
@@ -223,17 +223,17 @@ var listener = {
     if (this.mm) {
       // We don't have a MessageManager if onWindowLoaded never fired.
       this.messages.forEach((msgName) => {
         this.mm.removeMessageListener(msgName, this);
       });
 
       this.mm = null;
     }
-  
+
     // Remove the annotation after we've cleaned everything up, to catch any
     // incidental crashes from having performed the sanity test.
     annotateCrashReport(false);
   }
 };
 
 function SanityTest() {}
 SanityTest.prototype = {
--- a/toolkit/components/microformats/Microformats.js
+++ b/toolkit/components/microformats/Microformats.js
@@ -11,29 +11,29 @@ this.Microformats = {
   /* for (i in Microformats) */
   __iterator__: function* () {
     for (let i=0; i < this.list.length; i++) {
       yield this.list[i];
     }
   },
   /**
    * Retrieves microformats objects of the given type from a document
-   * 
+   *
    * @param  name          The name of the microformat (required)
    * @param  rootElement   The DOM element at which to start searching (required)
    * @param  options       Literal object with the following options:
    *                       recurseExternalFrames - Whether or not to search child frames
    *                       that reference external pages (with a src attribute)
    *                       for microformats (optional - defaults to true)
    *                       showHidden -  Whether or not to add hidden microformat
    *                       (optional - defaults to false)
    *                       debug - Whether or not we are in debug mode (optional
    *                       - defaults to false)
    * @param  targetArray  An array of microformat objects to which is added the results (optional)
-   * @return A new array of microformat objects or the passed in microformat 
+   * @return A new array of microformat objects or the passed in microformat
    *         object array with the new objects added
    */
   get: function(name, rootElement, options, targetArray) {
     function isAncestor(haystack, needle) {
       var parent = needle;
       while (parent = parent.parentNode) {
         /* We need to check parentNode because defaultView.frames[i].frameElement */
         /* isn't a real DOM node */
@@ -69,27 +69,27 @@ this.Microformats = {
     if (Microformats[name].className) {
       microformatNodes = Microformats.getElementsByClassName(rootElement,
                                         Microformats[name].className);
       /* alternateClassName is for cases where a parent microformat is inferred by the children */
       /* If we find alternateClassName, the entire document becomes the microformat */
       if ((microformatNodes.length == 0) && Microformats[name].alternateClassName) {
         var altClass = Microformats.getElementsByClassName(rootElement, Microformats[name].alternateClassName);
         if (altClass.length > 0) {
-          microformatNodes.push(rootElement); 
+          microformatNodes.push(rootElement);
         }
       }
     } else if (Microformats[name].attributeValues) {
       microformatNodes =
         Microformats.getElementsByAttribute(rootElement,
                                             Microformats[name].attributeName,
                                             Microformats[name].attributeValues);
-      
+
     }
-    
+
 
     function isVisible(node, checkChildren) {
       if (node.getBoundingClientRect) {
         var box = node.getBoundingClientRect();
       } else {
         box = node.ownerDocument.getBoxObjectFor(node);
       }
       /* If the parent has is an empty box, double check the children */
@@ -104,17 +104,17 @@ this.Microformats = {
               }
             }
           }
         }
         return false
       }
       return true;
     }
-    
+
     /* Create objects for the microformat nodes and put them into the microformats */
     /* array */
     for (let i = 0; i < microformatNodes.length; i++) {
       /* If showHidden undefined or false, don't add microformats to the list that aren't visible */
       if (!options || !options.hasOwnProperty("showHidden") || !options.showHidden) {
         if (microformatNodes[i].ownerDocument) {
           if (!isVisible(microformatNodes[i], true)) {
             continue;
@@ -133,17 +133,17 @@ this.Microformats = {
         /* Creation of individual object probably failed because it is invalid. */
         /* This isn't a problem, because the page might have invalid microformats */
       }
     }
     return targetArray;
   },
   /**
    * Counts microformats objects of the given type from a document
-   * 
+   *
    * @param  name          The name of the microformat (required)
    * @param  rootElement   The DOM element at which to start searching (required)
    * @param  options       Literal object with the following options:
    *                       recurseExternalFrames - Whether or not to search child frames
    *                       that reference external pages (with a src attribute)
    *                       for microformats (optional - defaults to true)
    *                       showHidden -  Whether or not to add hidden microformat
    *                       (optional - defaults to false)
@@ -221,17 +221,17 @@ this.Microformats = {
     xpathResult = (node.ownerDocument || node).evaluate(xpathExpression, node, null,  Components.interfaces.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE, null);
     if (xpathResult.singleNodeValue) {
       xpathResult.singleNodeValue.microformat = mfname;
       return xpathResult.singleNodeValue;
     }
     return null;
   },
   /**
-   * If the passed in node is a microformat, this function returns a space 
+   * If the passed in node is a microformat, this function returns a space
    * separated list of the microformat names that correspond to this node
    *
    * @param  node          DOM node to check
    * @return If the node is a microformat, a space separated list of microformat
    *         names, otherwise returns nothing
    */
   getNamesFromNode: function(node) {
     var microformatNames = [];
@@ -271,17 +271,17 @@ this.Microformats = {
   debug: function debug(microformatObject) {
     function dumpObject(item, indent)
     {
       if (!indent) {
         indent = "";
       }
       var toreturn = "";
       var testArray = [];
-      
+
       for (let i in item)
       {
         if (testArray[i]) {
           continue;
         }
         if (typeof item[i] == "object") {
           if ((i != "node") && (i != "resolvedNode")) {
             if (item[i] && item[i].semanticType) {
@@ -349,19 +349,19 @@ this.Microformats = {
         /* Remove any double spaces that are left */
         outstring = outstring.replace(/\s{2,}/gi, '');
         /* Remove any spaces at the beginning */
         outstring = outstring.replace(/^\s+/, '');
         /* Remove any spaces at the end */
         outstring = outstring.replace(/\s+$/, '');
         return outstring;
       }
-      
-      
-      if (((((propnode.localName.toLowerCase() == "abbr") || (propnode.localName.toLowerCase() == "html:abbr")) && !propnode.namespaceURI) || 
+
+
+      if (((((propnode.localName.toLowerCase() == "abbr") || (propnode.localName.toLowerCase() == "html:abbr")) && !propnode.namespaceURI) ||
          ((propnode.localName.toLowerCase() == "abbr") && (propnode.namespaceURI == "http://www.w3.org/1999/xhtml"))) && (propnode.hasAttribute("title"))) {
         return propnode.getAttribute("title");
       } else if ((propnode.nodeName.toLowerCase() == "img") && (propnode.hasAttribute("alt"))) {
         return propnode.getAttribute("alt");
       } else if ((propnode.nodeName.toLowerCase() == "area") && (propnode.hasAttribute("alt"))) {
         return propnode.getAttribute("alt");
       } else if ((propnode.nodeName.toLowerCase() == "textarea") ||
                  (propnode.nodeName.toLowerCase() == "select") ||
@@ -436,17 +436,17 @@ this.Microformats = {
       }
       return Microformats.parser.textGetter(propnode, parentnode);
     },
     /**
      * Used to specifically retrieve a telephone number in a microformat node.
      * Basically this is to handle the face that telephone numbers use value
      * as the name as one of their subproperties, but value is also used for
      * value excerpting (http://microformats.org/wiki/hcard#Value_excerpting)
-     
+
      * @param  propnode   The DOMNode to check
      * @param  parentnode The parent node of the property. If it is a subproperty,
      *                    this is the parent property node. If it is not, this is the
      *                    microformat node.
      * @return A string with the telephone number
      */
     telGetter: function(propnode, parentnode) {
       var pairs = {"a":"href", "object":"data", "area":"href"};
@@ -663,32 +663,32 @@ this.Microformats = {
       var node = in_node;
       if ((Microformats[microformat].className) && in_node.ownerDocument) {
         node = Microformats.parser.preProcessMicroformat(in_node);
       }
 
       for (let i in Microformats[microformat].properties) {
         object.__defineGetter__(i, Microformats.parser.getMicroformatPropertyGenerator(node, microformat, i, object));
       }
-      
+
       /* The node in the object should be the original node */
       object.node = in_node;
       /* we also store the node that has been "resolved" */
-      object.resolvedNode = node; 
+      object.resolvedNode = node;
       object.semanticType = microformat;
       if (validate) {
         Microformats.parser.validate(node, microformat);
       }
     },
     getMicroformatPropertyGenerator: function getMicroformatPropertyGenerator(node, name, property, microformat)
     {
       return function() {
         var result = Microformats.parser.getMicroformatProperty(node, name, property);
 //        delete microformat[property];
-//        microformat[property] = result; 
+//        microformat[property] = result;
         return result;
       };
     },
     getPropertyInternal: function getPropertyInternal(propnode, parentnode, propobj, propname, mfnode) {
       var result;
       if (propobj.subproperties) {
         for (let subpropname in propobj.subproperties) {
           var subpropnodes;
@@ -910,17 +910,17 @@ this.Microformats = {
         return true;
       }
     },
     /* This function normalizes an ISO8601 date by adding punctuation and */
     /* ensuring that hours and seconds have values */
     normalizeISO8601: function normalizeISO8601(string)
     {
       var dateArray = string.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(?:([-+Z])(?:(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
-  
+
       var dateString;
       var tzOffset = 0;
       if (!dateArray) {
         return undefined;
       }
       if (dateArray[1]) {
         dateString = dateArray[1];
         if (dateArray[2]) {
@@ -960,23 +960,23 @@ this.Microformats = {
       return dateString;
     }
   },
   /**
    * Converts an ISO8601 date into a JavaScript date object, honoring the TZ
    * offset and Z if present to convert the date to local time
    * NOTE: I'm using an extra parameter on the date object for this function.
    * I set date.time to true if there is a date, otherwise date.time is false.
-   * 
+   *
    * @param  string ISO8601 formatted date
-   * @return JavaScript date object that represents the ISO date. 
+   * @return JavaScript date object that represents the ISO date.
    */
   dateFromISO8601: function dateFromISO8601(string) {
     var dateArray = string.match(/(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T ](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(?:([-+Z])(?:(\d\d)(?::?(\d\d))?)?)?)?)?)?/);
-  
+
     var date = new Date(dateArray[1], 0, 1);
     date.time = false;
 
     if (dateArray[2]) {
       date.setMonth(dateArray[2] - 1);
     }
     if (dateArray[3]) {
       date.setDate(dateArray[3]);
@@ -1006,32 +1006,32 @@ this.Microformats = {
           date.setMinutes(date.getMinutes() - parseInt(dateArray[10], 10));
         }
       }
       /* at this point we have the time in gmt */
       /* convert to local if we had a Z - or + */
       if (dateArray[8]) {
         var tzOffset = date.getTimezoneOffset();
         if (tzOffset < 0) {
-          date.setMinutes(date.getMinutes() + tzOffset); 
+          date.setMinutes(date.getMinutes() + tzOffset);
         } else if (tzOffset > 0) {
-          date.setMinutes(date.getMinutes() - tzOffset); 
+          date.setMinutes(date.getMinutes() - tzOffset);
         }
       }
     }
     return date;
   },
   /**
    * Converts a Javascript date object into an ISO 8601 formatted date
    * NOTE: I'm using an extra parameter on the date object for this function.
    * If date.time is NOT true, this function only outputs the date.
-   * 
+   *
    * @param  date        Javascript Date object
    * @param  punctuation true if the date should have -/:
-   * @return string with the ISO date. 
+   * @return string with the ISO date.
    */
   iso8601FromDate: function iso8601FromDate(date, punctuation) {
     var string = date.getFullYear().toString();
     if (punctuation) {
       string += "-";
     }
     string += (date.getMonth() + 1).toString().replace(/\b(\d)\b/g, '0$1');
     if (punctuation) {
@@ -1072,17 +1072,17 @@ this.Microformats = {
     s = s.replace(/ /g, '+');
     return s;
   },
   /**
    * Not intended for external consumption. Microformat implementations might use it.
    *
    * Retrieve elements matching all classes listed in a space-separated string.
    * I had to implement my own because I need an Array, not an nsIDomNodeList
-   * 
+   *
    * @param  rootElement      The DOM element at which to start searching (optional)
    * @param  className        A space separated list of classenames
    * @return microformatNodes An array of DOM Nodes, each representing a
                               microformat in the document.
    */
   getElementsByClassName: function getElementsByClassName(rootNode, className)
   {
     var returnElements = [];
@@ -1114,17 +1114,17 @@ this.Microformats = {
       }
     }
     return returnElements;
   },
   /**
    * Not intended for external consumption. Microformat implementations might use it.
    *
    * Retrieve elements matching an attribute and an attribute list in a space-separated string.
-   * 
+   *
    * @param  rootElement      The DOM element at which to start searching (optional)
    * @param  atributeName     The attribute name to match against
    * @param  attributeValues  A space separated list of attribute values
    * @return microformatNodes An array of DOM Nodes, each representing a
                               microformat in the document.
    */
   getElementsByAttribute: function getElementsByAttribute(rootNode, attributeName, attributeValues)
   {
@@ -1137,17 +1137,17 @@ this.Microformats = {
       /* Create an XPath expression based on the attribute list */
       var xpathExpression = ".//*[";
       for (let i = 0; i < attributeList.length; i++) {
         if (i != 0) {
           xpathExpression += " or ";
         }
         xpathExpression += "contains(concat(' ', @" + attributeName + ", ' '), ' " + attributeList[i] + " ')";
       }
-      xpathExpression += "]"; 
+      xpathExpression += "]";
 
       var xpathResult = (rootNode.ownerDocument || rootNode).evaluate(xpathExpression, rootNode, null, 0, null);
 
       var node;
       while (node = xpathResult.iterateNext()) {
         returnElements.push(node);
       }
     } else {
@@ -1309,17 +1309,17 @@ var hCard_definition = {
           plural: true,
           values: ["internet", "x400", "pref"]
         },
         "value" : {
           datatype: "email",
           virtual: true
         }
       },
-      plural: true   
+      plural: true
     },
     "fn" : {
       required: true
     },
     "geo" : {
       datatype: "microformat",
       microformat: "geo"
     },
--- a/toolkit/components/microformats/microformat-shiv.js
+++ b/toolkit/components/microformats/microformat-shiv.js
@@ -1,31 +1,31 @@
 /*
    Modern
    microformat-shiv - v1.3.3
    Built: 2015-12-31 01:12 - http://microformat-shiv.com
    Copyright (c) 2015 Glenn Jones
-   Licensed MIT 
+   Licensed MIT
 */
 
 
 var Microformats; // jshint ignore:line
 
 (function (root, factory) {
     if (typeof define === 'function' && define.amd) {
         define([], factory);
     } else if (typeof exports === 'object') {
         module.exports = factory();
     } else {
         root.Microformats = factory();
   }
 }(this, function () {
-    
+
     var modules = {};
-    
+
 
 	modules.version = '1.3.3';
 	modules.livingStandard = '2015-09-25T12:26:04Z';
 
 	/**
 	 * constructor
 	 *
 	 */
@@ -1458,62 +1458,62 @@ var Microformats; // jshint ignore:line
 	};
 
 
 	modules.Parser.prototype.constructor = modules.Parser;
 
 
 	// check parser module is loaded
 	if(modules.Parser){
-	
+
 		/**
-		 * applies "implied rules" microformat output structure i.e. feed-title, name, photo, url and date 
+		 * applies "implied rules" microformat output structure i.e. feed-title, name, photo, url and date
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf (microformat output structure)
 		 * @param  {Object} parentClasses (classes structure)
 		 * @param  {Boolean} impliedPropertiesByVersion
 		 * @return {Object}
 		 */
 		 modules.Parser.prototype.impliedRules = function(node, uf, parentClasses) {
 			var typeVersion = (uf.typeVersion)? uf.typeVersion: 'v2';
-			
+
 			// TEMP: override to allow v1 implied properties while spec changes
 			if(this.options.impliedPropertiesByVersion === false){
 				typeVersion = 'v2';
 			}
-			
+
 			if(node && uf && uf.properties) {
-				uf = this.impliedBackwardComp( node, uf, parentClasses );  
+				uf = this.impliedBackwardComp( node, uf, parentClasses );
 				if(typeVersion === 'v2'){
 					uf = this.impliedhFeedTitle( uf );
-					uf = this.impliedName( node, uf ); 
-					uf = this.impliedPhoto( node, uf ); 	
+					uf = this.impliedName( node, uf );
+					uf = this.impliedPhoto( node, uf );
 					uf = this.impliedUrl( node, uf );
 				}
 				uf = this.impliedValue( node, uf, parentClasses );
 				uf = this.impliedDate( uf );
-				
+
 				// TEMP: flagged while spec changes are put forward
 				if(this.options.parseLatLonGeo === true){
 					uf = this.impliedGeo( uf );
-				}  
+				}
 			}
 
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied name rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedName = function(node, uf) {
 			// implied name rule
 			/*
 				img.h-x[alt]										<img class="h-card" src="glenn.htm" alt="Glenn Jones"></a>
 				area.h-x[alt] 										<area class="h-card" href="glenn.htm" alt="Glenn Jones"></area>
 				abbr.h-x[title]										<abbr class="h-card" title="Glenn Jones"GJ</abbr>
 
 				.h-x>img:only-child[alt]:not[.h-*]					<div class="h-card"><a src="glenn.htm" alt="Glenn Jones"></a></div>
@@ -1521,134 +1521,134 @@ var Microformats; // jshint ignore:line
 				.h-x>abbr:only-child[title] 						<div class="h-card"><abbr title="Glenn Jones">GJ</abbr></div>
 
 				.h-x>:only-child>img:only-child[alt]:not[.h-*] 		<div class="h-card"><span><img src="jane.html" alt="Jane Doe"/></span></div>
 				.h-x>:only-child>area:only-child[alt]:not[.h-*] 	<div class="h-card"><span><area href="jane.html" alt="Jane Doe"></area></span></div>
 				.h-x>:only-child>abbr:only-child[title]				<div class="h-card"><span><abbr title="Jane Doe">JD</abbr></span></div>
 			*/
 			var name,
 				value;
-					
+
 			if(!uf.properties.name) {
 				value = this.getImpliedProperty(node, ['img', 'area', 'abbr'], this.getNameAttr);
 				var textFormat = this.options.textFormat;
 				// if no value for tags/properties use text
 				if(!value) {
 					name = [modules.text.parse(this.document, node, textFormat)];
 				}else{
 					name = [modules.text.parseText(this.document, value, textFormat)];
 				}
 				if(name && name[0] !== ''){
 					uf.properties.name = name;
 				}
 			}
-			
+
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied photo rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedPhoto = function(node, uf) {
 			// implied photo rule
 			/*
 				img.h-x[src] 												<img class="h-card" alt="Jane Doe" src="jane.jpeg"/>
 				object.h-x[data] 											<object class="h-card" data="jane.jpeg"/>Jane Doe</object>
-				.h-x>img[src]:only-of-type:not[.h-*]						<div class="h-card"><img alt="Jane Doe" src="jane.jpeg"/></div> 
-				.h-x>object[data]:only-of-type:not[.h-*] 					<div class="h-card"><object data="jane.jpeg"/>Jane Doe</object></div> 
-				.h-x>:only-child>img[src]:only-of-type:not[.h-*] 			<div class="h-card"><span><img alt="Jane Doe" src="jane.jpeg"/></span></div> 
-				.h-x>:only-child>object[data]:only-of-type:not[.h-*] 		<div class="h-card"><span><object data="jane.jpeg"/>Jane Doe</object></span></div> 
+				.h-x>img[src]:only-of-type:not[.h-*]						<div class="h-card"><img alt="Jane Doe" src="jane.jpeg"/></div>
+				.h-x>object[data]:only-of-type:not[.h-*] 					<div class="h-card"><object data="jane.jpeg"/>Jane Doe</object></div>
+				.h-x>:only-child>img[src]:only-of-type:not[.h-*] 			<div class="h-card"><span><img alt="Jane Doe" src="jane.jpeg"/></span></div>
+				.h-x>:only-child>object[data]:only-of-type:not[.h-*] 		<div class="h-card"><span><object data="jane.jpeg"/>Jane Doe</object></span></div>
 			*/
 			var value;
 			if(!uf.properties.photo) {
 				value = this.getImpliedProperty(node, ['img', 'object'], this.getPhotoAttr);
 				if(value) {
 					// relative to absolute URL
 					if(value && value !== '' && this.options.baseUrl !== '' && value.indexOf('://') === -1) {
 						value = modules.url.resolve(value, this.options.baseUrl);
 					}
 					uf.properties.photo = [modules.utils.trim(value)];
 				}
-			}		
+			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied URL rule
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedUrl = function(node, uf) {
 			// implied URL rule
 			/*
 				a.h-x[href]  							<a class="h-card" href="glenn.html">Glenn</a>
 				area.h-x[href]  						<area class="h-card" href="glenn.html">Glenn</area>
-				.h-x>a[href]:only-of-type:not[.h-*]  	<div class="h-card" ><a href="glenn.html">Glenn</a><p>...</p></div> 
+				.h-x>a[href]:only-of-type:not[.h-*]  	<div class="h-card" ><a href="glenn.html">Glenn</a><p>...</p></div>
 				.h-x>area[href]:only-of-type:not[.h-*]  <div class="h-card" ><area href="glenn.html">Glenn</area><p>...</p></div>
 			*/
 			var value;
 			if(!uf.properties.url) {
 				value = this.getImpliedProperty(node, ['a', 'area'], this.getURLAttr);
 				if(value) {
 					// relative to absolute URL
 					if(value && value !== '' && this.options.baseUrl !== '' && value.indexOf('://') === -1) {
 						value = modules.url.resolve(value, this.options.baseUrl);
 					}
 					uf.properties.url = [modules.utils.trim(value)];
 				}
-			}	
+			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * apply implied date rule - if there is a time only property try to concat it with any date property
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */		
+		 */
 		modules.Parser.prototype.impliedDate = function(uf) {
 			// implied date rule
 			// http://microformats.org/wiki/value-class-pattern#microformats2_parsers
 			// http://microformats.org/wiki/microformats2-parsing-issues#implied_date_for_dt_properties_both_mf2_and_backcompat
 			var newDate;
 			if(uf.times.length > 0 && uf.dates.length > 0) {
 				newDate = modules.dates.dateTimeUnion(uf.dates[0][1], uf.times[0][1], this.options.dateFormat);
 				uf.properties[this.removePropPrefix(uf.times[0][0])][0] = newDate.toString(this.options.dateFormat);
 			}
 			// clean-up object
 			delete uf.times;
 			delete uf.dates;
 			return uf;
 		};
-			
-			
+
+
 		/**
 		 * get an implied property value from pre-defined tag/attriubte combinations
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {String} tagList (Array of tags from which an implied value can be pulled)
 		 * @param  {String} getAttrFunction (Function which can extract implied value)
 		 * @return {String || null}
 		 */
 		modules.Parser.prototype.getImpliedProperty = function(node, tagList, getAttrFunction) {
 			// i.e. img.h-card
-			var value = getAttrFunction(node), 
+			var value = getAttrFunction(node),
 				descendant,
 				child;
-					
+
 			if(!value) {
 				// i.e. .h-card>img:only-of-type:not(.h-card)
 				descendant = modules.domUtils.getSingleDescendantOfType( node, tagList);
 				if(descendant && this.hasHClass(descendant) === false){
 					value = getAttrFunction(descendant);
 				}
 				if(node.children.length > 0 ){
 					// i.e.  .h-card>:only-child>img:only-of-type:not(.h-card)
@@ -1656,114 +1656,114 @@ var Microformats; // jshint ignore:line
 					if(child && this.hasHClass(child) === false){
 						descendant = modules.domUtils.getSingleDescendantOfType(child, tagList);
 						if(descendant && this.hasHClass(descendant) === false){
 							value = getAttrFunction(descendant);
 						}
 					}
 				}
 			}
-					
+
 			return value;
 		};
-			
-			
+
+
 		/**
 		 * get an implied name value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */		
+		 */
 		modules.Parser.prototype.getNameAttr = function(node) {
 			var value = modules.domUtils.getAttrValFromTagList(node, ['img','area'], 'alt');
 			if(!value) {
 				value = modules.domUtils.getAttrValFromTagList(node, ['abbr'], 'title');
 			}
 			return value;
 		};
-	
-	
+
+
 		/**
 		 * get an implied photo value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */	
+		 */
 		modules.Parser.prototype.getPhotoAttr = function(node) {
 			var value = modules.domUtils.getAttrValFromTagList(node, ['img'], 'src');
 			if(!value && modules.domUtils.hasAttributeValue(node, 'class', 'include') === false) {
 				value = modules.domUtils.getAttrValFromTagList(node, ['object'], 'data');
 			}
 			return value;
 		};
-			
-			
+
+
 		/**
 		 * get an implied photo value from a node
 		 *
 		 * @param  {DOM Node} node
 		 * @return {String || null}
-		 */		
+		 */
 		modules.Parser.prototype.getURLAttr = function(node) {
 			var value = null;
 			if(modules.domUtils.hasAttributeValue(node, 'class', 'include') === false){
-				
+
 				value = modules.domUtils.getAttrValFromTagList(node, ['a'], 'href');
 				if(!value) {
 					value = modules.domUtils.getAttrValFromTagList(node, ['area'], 'href');
 				}
-				
+
 			}
 			return value;
 		};
-		
-		
+
+
 		/**
-		 * 
+		 *
 		 *
 		 * @param  {DOM Node} node
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedValue = function(node, uf, parentClasses){
-			
+
 			// intersection of implied name and implied value rules
-			if(uf.properties.name) {	
+			if(uf.properties.name) {
 				if(uf.value && parentClasses.root.length > 0 && parentClasses.properties.length === 1){
 					uf = this.getAltValue(uf, parentClasses.properties[0][0], 'p-name', uf.properties.name[0]);
 				}
 			}
-			
+
 			// intersection of implied URL and implied value rules
 			if(uf.properties.url) {
 				if(parentClasses && parentClasses.root.length === 1 && parentClasses.properties.length === 1){
 					uf = this.getAltValue(uf, parentClasses.properties[0][0], 'u-url', uf.properties.url[0]);
 				}
-			}	
-			
+			}
+
 			// apply alt value
 			if(uf.altValue !== null){
 				uf.value = uf.altValue.value;
 			}
 			delete uf.altValue;
-	
-	
+
+
 			return uf;
 		};
-			
-		
+
+
 		/**
 		 * get alt value based on rules about parent property prefix
 		 *
 		 * @param  {Object} uf
 		 * @param  {String} parentPropertyName
 		 * @param  {String} propertyName
 		 * @param  {String} value
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.getAltValue = function(uf, parentPropertyName, propertyName, value){
 			if(uf.value && !uf.altValue){
 				// first p-name of the h-* child
 				if(modules.utils.startWith(parentPropertyName,'p-') && propertyName === 'p-name'){
 					uf.altValue = {name: propertyName, value: value};
 				}
 				// if it's an e-* property element
 				if(modules.utils.startWith(parentPropertyName,'e-') && modules.utils.startWith(propertyName,'e-')){
@@ -1771,266 +1771,266 @@ var Microformats; // jshint ignore:line
 				}
 				// if it's an u-* property element
 				if(modules.utils.startWith(parentPropertyName,'u-') && propertyName === 'u-url'){
 					uf.altValue = {name: propertyName, value: value};
 				}
 			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * if a h-feed does not have a title use the title tag of a page
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedhFeedTitle = function( uf ){
 			if(uf.type && uf.type.indexOf('h-feed') > -1){
 				// has no name property
 				if(uf.properties.name === undefined || uf.properties.name[0] === '' ){
 					// use the text from the title tag
 					var title = modules.domUtils.querySelector(this.document, 'title');
 					if(title){
 						uf.properties.name = [modules.domUtils.textContent(title)];
 					}
 				}
 			}
 			return uf;
 		};
-		
-		
-		
+
+
+
 	    /**
 		 * implied Geo from pattern <abbr class="p-geo" title="37.386013;-122.082932">
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedGeo = function( uf ){
 			var geoPair,
 				parts,
 				longitude,
 				latitude,
 				valid = true;
-			
+
 			if(uf.type && uf.type.indexOf('h-geo') > -1){
-				
+
 				// has no latitude or longitude property
 				if(uf.properties.latitude === undefined || uf.properties.longitude === undefined ){
 
 					geoPair = (uf.properties.name)? uf.properties.name[0] : null;
 					geoPair = (!geoPair && uf.properties.value)? uf.properties.value : geoPair;
-					
+
 					if(geoPair){
 						// allow for the use of a ';' as in microformats and also ',' as in Geo URL
 						geoPair = geoPair.replace(';',',');
-						
+
 						// has sep char
 						if(geoPair.indexOf(',') > -1 ){
 							parts = geoPair.split(',');
-							
+
 							// only correct if we have two or more parts
 							if(parts.length > 1){
 
-								// latitude no value outside the range -90 or 90 
+								// latitude no value outside the range -90 or 90
 								latitude = parseFloat( parts[0] );
 								if(modules.utils.isNumber(latitude) && latitude > 90 || latitude < -90){
 									valid = false;
 								}
-								
+
 								// longitude no value outside the range -180 to 180
 								longitude = parseFloat( parts[1] );
 								if(modules.utils.isNumber(longitude) && longitude > 180 || longitude < -180){
 									valid = false;
 								}
-								
+
 								if(valid){
 									uf.properties.latitude = [latitude];
 									uf.properties.longitude  = [longitude];
 								}
 							}
-							
+
 						}
 					}
 				}
 			}
 			return uf;
 		};
-		
-		
+
+
 		/**
 		 * if a backwards compat built structure has no properties add name through this.impliedName
 		 *
 		 * @param  {Object} uf
 		 * @return {Object}
-		 */	
+		 */
 		modules.Parser.prototype.impliedBackwardComp = function(node, uf, parentClasses){
-			
+
 			// look for pattern in parent classes like "p-geo h-geo"
 			// these are structures built from backwards compat parsing of geo
 			if(parentClasses.root.length === 1 && parentClasses.properties.length === 1) {
 				if(parentClasses.root[0].replace('h-','') === this.removePropPrefix(parentClasses.properties[0][0])) {
-					
+
 					// if microformat has no properties apply the impliedName rule to get value from containing node
 					// this will get value from html such as <abbr class="geo" title="30.267991;-97.739568">Brighton</abbr>
 					if( modules.utils.hasProperties(uf.properties) === false ){
 						uf = this.impliedName( node, uf );
 					}
 				}
 			}
-			
+
 			return uf;
 		};
-		
-		
-	
+
+
+
 	}
 
 
 	// check parser module is loaded
 	if(modules.Parser){
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure
 		 *
 		 * @param  {DOM node} rootNode
-		 */	
+		 */
 		modules.Parser.prototype.addIncludes = function(rootNode) {
 			this.addAttributeIncludes(rootNode, 'itemref');
 			this.addAttributeIncludes(rootNode, 'headers');
 			this.addClassIncludes(rootNode);
 		};
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure for attribute based includes
 		 *
 		 * @param  {DOM node} rootNode
 		 * @param  {String} attributeName
 		 */
 		modules.Parser.prototype.addAttributeIncludes = function(rootNode, attributeName) {
 			var arr,
 				idList,
 				i,
 				x,
 				z,
 				y;
-	
+
 			arr = modules.domUtils.getNodesByAttribute(rootNode, attributeName);
 			x = 0;
 			i = arr.length;
 			while(x < i) {
 				idList = modules.domUtils.getAttributeList(arr[x], attributeName);
 				if(idList) {
 					z = 0;
 					y = idList.length;
 					while(z < y) {
 						this.apppendInclude(arr[x], idList[z]);
 						z++;
 					}
 				}
 				x++;
 			}
 		};
-	
-		
+
+
 		/**
 		 * appends clones of include Nodes into the DOM structure for class based includes
 		 *
 		 * @param  {DOM node} rootNode
 		 */
 		modules.Parser.prototype.addClassIncludes = function(rootNode) {
 			var id,
 				arr,
 				x = 0,
 				i;
-	
+
 			arr = modules.domUtils.getNodesByAttributeValue(rootNode, 'class', 'include');
 			i = arr.length;
 			while(x < i) {
 				id = modules.domUtils.getAttrValFromTagList(arr[x], ['a'], 'href');
 				if(!id) {
 					id = modules.domUtils.getAttrValFromTagList(arr[x], ['object'], 'data');
 				}
 				this.apppendInclude(arr[x], id);
 				x++;
 			}
 		};
-	
-	
+
+
 		/**
 		 * appends a clone of an include into another Node using Id
 		 *
 		 * @param  {DOM node} rootNode
 		 * @param  {Stringe} id
 		 */
 		modules.Parser.prototype.apppendInclude = function(node, id){
 			var include,
 				clone;
-	
+
 			id = modules.utils.trim(id.replace('#', ''));
 			include = modules.domUtils.getElementById(this.document, id);
 			if(include) {
 				clone = modules.domUtils.clone(include);
 				this.markIncludeChildren(clone);
 				modules.domUtils.appendChild(node, clone);
 			}
 		};
-	
-		
+
+
 		/**
-		 * adds an attribute marker to all the child microformat roots 
+		 * adds an attribute marker to all the child microformat roots
 		 *
 		 * @param  {DOM node} rootNode
-		 */ 
+		 */
 		modules.Parser.prototype.markIncludeChildren = function(rootNode) {
 			var arr,
 				x,
 				i;
-	
+
 			// loop the array and add the attribute
 			arr = this.findRootNodes(rootNode);
 			x = 0;
 			i = arr.length;
 			modules.domUtils.setAttribute(rootNode, 'data-include', 'true');
 			modules.domUtils.setAttribute(rootNode, 'style', 'display:none');
 			while(x < i) {
 				modules.domUtils.setAttribute(arr[x], 'data-include', 'true');
 				x++;
 			}
 		};
-		
-		
+
+
 		/**
-		 * removes all appended include clones from DOM 
+		 * removes all appended include clones from DOM
 		 *
 		 * @param  {DOM node} rootNode
-		 */ 
+		 */
 		modules.Parser.prototype.removeIncludes = function(rootNode){
 			var arr,
 				i;
-	
+
 			// remove all the items that were added as includes
 			arr = modules.domUtils.getNodesByAttribute(rootNode, 'data-include');
 			i = arr.length;
 			while(i--) {
 				modules.domUtils.removeChild(rootNode,arr[i]);
 			}
 		};
-	
-		
+
+
 	}
 
 
 	// check parser module is loaded
 	if(modules.Parser){
-	
+
 		/**
 		 * finds rel=* structures
 		 *
 		 * @param  {DOM node} rootNode
 		 * @return {Object}
 		 */
 		modules.Parser.prototype.findRels = function(rootNode) {
 			var out = {
@@ -2042,363 +2042,363 @@ var Microformats; // jshint ignore:line
 				i,
 				y,
 				z,
 				relList,
 				items,
 				item,
 				value,
 				arr;
-	
+
 			arr = modules.domUtils.getNodesByAttribute(rootNode, 'rel');
 			x = 0;
 			i = arr.length;
 			while(x < i) {
 				relList = modules.domUtils.getAttribute(arr[x], 'rel');
-	
+
 				if(relList) {
 					items = relList.split(' ');
-					
-					
+
+
 					// add rels
 					z = 0;
 					y = items.length;
 					while(z < y) {
 						item = modules.utils.trim(items[z]);
-	
+
 						// get rel value
 						value = modules.domUtils.getAttrValFromTagList(arr[x], ['a', 'area'], 'href');
 						if(!value) {
 							value = modules.domUtils.getAttrValFromTagList(arr[x], ['link'], 'href');
 						}
-	
+
 						// create the key
 						if(!out.rels[item]) {
 							out.rels[item] = [];
 						}
-	
+
 						if(typeof this.options.baseUrl === 'string' && typeof value === 'string') {
-					
+
 							var resolved = modules.url.resolve(value, this.options.baseUrl);
 							// do not add duplicate rels - based on resolved URLs
 							if(out.rels[item].indexOf(resolved) === -1){
 								out.rels[item].push( resolved );
 							}
 						}
 						z++;
 					}
-					
-					
+
+
 					var url = null;
 					if(modules.domUtils.hasAttribute(arr[x], 'href')){
 						url = modules.domUtils.getAttribute(arr[x], 'href');
 						if(url){
 							url = modules.url.resolve(url, this.options.baseUrl );
 						}
 					}
-	
-					
+
+
 					// add to rel-urls
 					var relUrl = this.getRelProperties(arr[x]);
 					relUrl.rels = items;
 					// // do not add duplicate rel-urls - based on resolved URLs
 					if(url && out['rel-urls'][url] === undefined){
 						out['rel-urls'][url] = relUrl;
 					}
-	
-			
+
+
 				}
 				x++;
 			}
 			return out;
 		};
-		
-		
+
+
 		/**
 		 * gets the properties of a rel=*
 		 *
 		 * @param  {DOM node} node
 		 * @return {Object}
 		 */
 		modules.Parser.prototype.getRelProperties = function(node){
 			var obj = {};
-			
+
 			if(modules.domUtils.hasAttribute(node, 'media')){
 				obj.media = modules.domUtils.getAttribute(node, 'media');
 			}
 			if(modules.domUtils.hasAttribute(node, 'type')){
 				obj.type = modules.domUtils.getAttribute(node, 'type');
 			}
 			if(modules.domUtils.hasAttribute(node, 'hreflang')){
 				obj.hreflang = modules.domUtils.getAttribute(node, 'hreflang');
 			}
 			if(modules.domUtils.hasAttribute(node, 'title')){
 				obj.title = modules.domUtils.getAttribute(node, 'title');
 			}
 			if(modules.utils.trim(this.getPValue(node, false)) !== ''){
 				obj.text = this.getPValue(node, false);
-			}	
-			
+			}
+
 			return obj;
 		};
-		
-		
+
+
 		/**
 		 * finds any alt rel=* mappings for a given node/microformat
 		 *
 		 * @param  {DOM node} node
 		 * @param  {String} ufName
 		 * @return {String || undefined}
 		 */
 		modules.Parser.prototype.findRelImpied = function(node, ufName) {
 			var out,
 				map,
 				i;
-	
+
 			map = this.getMapping(ufName);
 			if(map) {
 				for(var key in map.properties) {
 					if (map.properties.hasOwnProperty(key)) {
 						var prop = map.properties[key],
 							propName = (prop.map) ? prop.map : 'p-' + key,
 							relCount = 0;
-		
-						// is property an alt rel=* mapping 
+
+						// is property an alt rel=* mapping
 						if(prop.relAlt && modules.domUtils.hasAttribute(node, 'rel')) {
 							i = prop.relAlt.length;
 							while(i--) {
 								if(modules.domUtils.hasAttributeValue(node, 'rel', prop.relAlt[i])) {
 									relCount++;
 								}
 							}
 							if(relCount === prop.relAlt.length) {
 								out = propName;
 							}
 						}
 					}
 				}
 			}
 			return out;
 		};
-		
-		
+
+
 		/**
 		 * returns whether a node or its children has rel=* microformat
 		 *
 		 * @param  {DOM node} node
 		 * @return {Boolean}
 		 */
 		modules.Parser.prototype.hasRel = function(node) {
 			return (this.countRels(node) > 0);
 		};
-		
-		
+
+
 		/**
 		 * returns the number of rel=* microformats
 		 *
 		 * @param  {DOM node} node
 		 * @return {Int}
 		 */
 		modules.Parser.prototype.countRels = function(node) {
 			if(node){
 				return modules.domUtils.getNodesByAttribute(node, 'rel').length;
 			}
 			return 0;
 		};
-	
-	
-		
+
+
+
 	}
 
 
 	modules.utils = {
-		
+
 		/**
 		 * is the object a string
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isString: function( obj ) {
 			return typeof( obj ) === 'string';
 		},
-		
+
 		/**
 		 * is the object a number
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isNumber: function( obj ) {
 			return !isNaN(parseFloat( obj )) && isFinite( obj );
 		},
-		
-		
+
+
 		/**
 		 * is the object an array
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isArray: function( obj ) {
 			return obj && !( obj.propertyIsEnumerable( 'length' ) ) && typeof obj === 'object' && typeof obj.length === 'number';
 		},
-		
-		
+
+
 		/**
 		 * is the object a function
 		 *
 		 * @param  {Object} obj
 		 * @return {Boolean}
 		 */
 		isFunction: function(obj) {
 			return !!(obj && obj.constructor && obj.call && obj.apply);
 		},
-	
-	
+
+
 		/**
 		 * does the text start with a test string
 		 *
 		 * @param  {String} text
 		 * @param  {String} test
 		 * @return {Boolean}
 		 */
 		startWith: function( text, test ) {
 			return(text.indexOf(test) === 0);
 		},
-	
-		
+
+
 		/**
 		 * removes spaces at front and back of text
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		trim: function( text ) {
 			if(text && this.isString(text)){
 				return (text.trim())? text.trim() : text.replace(/^\s+|\s+$/g, '');
 			}else{
 				return '';
 			}
 		},
-		
-		
+
+
 		/**
 		 * replaces a character in text
 		 *
 		 * @param  {String} text
 		 * @param  {Int} index
 		 * @param  {String} character
 		 * @return {String}
 		 */
 		replaceCharAt: function( text, index, character ) {
 			if(text && text.length > index){
-			   return text.substr(0, index) + character + text.substr(index+character.length); 
+			   return text.substr(0, index) + character + text.substr(index+character.length);
 			}else{
 				return text;
 			}
 		},
-		
-		
+
+
 		/**
 		 * removes whitespace, tabs and returns from start and end of text
 		 *
 		 * @param  {String} text
 		 * @return {String}
 		 */
 		trimWhitespace: function( text ){
 			if(text && text.length){
 				var i = text.length,
 					x = 0;
-