Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

bug 816030: Adding MSN Repacks to the Repo. r=bhearsum

  • Loading branch information...
commit 8b76e84b66a175e5b1a7ed00e71217f7623e8cfa 1 parent d7fb6dd
Carsten Book BavarianTomcat authored
Showing with 1,417 additions and 0 deletions.
  1. +85 −0 partners/msn-international/distribution/distribution.ini
  2. BIN  partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/.bootstrap.js.swp
  3. +212 −0 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/bootstrap.js
  4. BIN  partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/icon.png
  5. +23 −0 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/install.rdf
  6. +87 −0 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/helper.js
  7. +274 −0 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/utils.js
  8. +17 −0 partners/msn-international/distribution/searchplugins/common/bing.xml
  9. +8 −0 partners/msn-international/repack.cfg
  10. +85 −0 partners/msn-us/distribution/distribution.ini
  11. +217 −0 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/bootstrap.js
  12. BIN  partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/icon.png
  13. +23 −0 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/install.rdf
  14. +87 −0 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/helper.js
  15. +274 −0 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/utils.js
  16. +17 −0 partners/msn-us/distribution/searchplugins/common/bing.xml
  17. +8 −0 partners/msn-us/repack.cfg
85 partners/msn-international/distribution/distribution.ini
View
@@ -0,0 +1,85 @@
+# Partner Distribution Configuration File
+# Author: Mozilla for MSN-international
+# Date: 2012-08-20
+
+[Global]
+id=msninter
+version=1.0
+about=Mozilla Firefox with MSN
+bookmarks.initialized.pref=cck.msninter.initialized
+
+[Preferences]
+app.distributor="msninter"
+app.distributor.channel=""
+app.partner.msnus="msninter"
+browser.search.distributionID="com.bing"
+mozilla.partner.id="msninter"
+_=Cu.import("resource://gre/modules/Services.jsm"); if (!Services.prefs.prefHasUserValue("extensions.installedDistroAddon.firefoxmsn.full@microsoft.com")) { Services.prefs.clearUserPref("extensions.lastAppVersion"); Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart); } throw {};
+lightweightThemes.isThemeSelected=true
+lightweightThemes.persisted.footerURL=false
+lightweightThemes.persisted.headerURL=false
+lightweightThemes.usedThemes="[{\"id\":\"486203\",\"name\":\"MSN - blue\",\"headerURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/Fader_blue_diagnol_header.jpg.jpg?1351246567\",\"footerURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/Fader_blue_diagonal_footer.jpg.jpg?1351246567\",\"textcolor\":\"#000000\",\"accentcolor\":\"#c9c9c9\",\"iconURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/preview_small.jpg?1351246567\",\"previewURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/preview.jpg?1351246567\",\"author\":\"MSNthemes\",\"description\":\"Blue MSN theme.\",\"updateURL\":\"https://www.getpersonas.com/en-US/update_check/486203\",\"version\":\"1351246567\",\"updateDate\":1351258263886,\"installDate\":1351258263886}]"
+
+[LocalizablePreferences]
+browser.search.defaultenginename="Bing"
+browser.search.order.1="Bing"
+browser.search.order.2="Google"
+browser.search.order.3="Yahoo"
+browser.startup.homepage="http://www.msn.com/?pc=MOZM"
+browser.startup.homepage_reset="http://www.msn.com/?pc=MOZM"
+keyword.URL="http://www.bing.com/search?q=&form=MOZFLB&pc=MOZM"
+
+[BookmarksMenu]
+item.1.title=MSN
+item.1.description=MSN provides users breaking news, trending topics, sports updates and entertainment buzz, keeping users always in the know
+item.1.link=http://www.msn.com
+item.2.title=MSN Entertainment
+item.2.description=Celebrity gossip, news, photos and more on MSN Entertainment
+item.2.link=http://entertainment.msn.com
+item.3.title=MSN Sports
+item.3.description=Get the latest sports scores, in-depth player and team news, videos, schedules, fantasy games, & standings for the NFL, MLB, NBA, NHL and NCAA sports on FOX Sports.
+item.3.link=http://msn.foxsports.com/
+item.4.title=MSN Money
+item.4.description=MSN Money offers personal finance, investing and financial news. Also get smart money investment planning and advice from our finance experts.
+item.4.link=http://money.msn.com/
+item.5.title=MSN Living
+item.5.description=MSN Living gives you the latest fashion and beauty tips and trends along with home décor pointers, relationship advice and self-improvemen ideas.
+item.5.link=http://living.msn.com/
+item.6.title=MSN
+item.6.type=folder
+item.6.folderId=1
+
+[BookmarksToolbar]
+item.1.title=MSN
+item.1.description=MSN provides users breaking news, trending topics, sports updates and entertainment buzz, keeping users always in the know
+item.1.link=http://www.msn.com/
+item.2.title=MSN Entertainment
+item.2.description=Celebrity gossip, news, photos and more on MSN Entertainment
+item.2.link=http://entertainment.msn.com/
+item.3.title=MSN Sports
+item.3.description=Get the latest sports scores, in-depth player and team news, videos, schedules, fantasy games, & standings for the NFL, MLB, NBA, NHL and NCAA sports on FOX Sports.
+item.3.link=http://msn.foxsports.com/
+item.4.title=MSN Money
+item.4.description=MSN Money offers personal finance, investing and financial news. Also get smart money investment planning and advice from our finance experts.
+item.4.link=http://money.msn.com/
+item.5.title=MSN Living
+item.5.description=MSN Living gives you the latest fashion and beauty tips and trends along with home décor pointers, relationship advice and self-improvemen ideas.
+item.5.link=http://living.msn.com/
+
+[BookmarksFolder-1]
+item.1.title=MSN
+item.1.description=MSN provides users breaking news, trending topics, sports updates and entertainment buzz, keeping users always in the know
+item.1.link=http://www.msn.com/
+item.2.title=MSN Entertainment
+item.2.description=Celebrity gossip, news, photos and more on MSN Entertainment
+item.2.link=http://entertainment.msn.com/
+item.3.title=MSN Sports
+item.3.description=Get the latest sports scores, in-depth player and team news, videos, schedules, fantasy games, & standings for the NFL, MLB, NBA, NHL and NCAA sports on FOX Sports.
+item.3.link=http://msn.foxsports.com/
+item.4.title=MSN Money
+item.4.description=MSN Money offers personal finance, investing and financial news. Also get smart money investment planning and advice from our finance experts.
+item.4.link=http://money.msn.com/
+item.5.title=MSN Living
+item.5.description=MSN Living gives you the latest fashion and beauty tips and trends along with home décor pointers, relationship advice and self-improvemen ideas.
+item.5.link=http://living.msn.com/
+
BIN  partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/.bootstrap.js.swp
View
Binary file not shown
212 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/bootstrap.js
View
@@ -0,0 +1,212 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Bing Search for Firefox.
+ *
+ * The Initial Developer of the Original Code is The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Edward Lee <edilee@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+"use strict";
+const global = this;
+
+const {classes: Cc, interfaces: Ci, manager: Cm, utils: Cu} = Components;
+Cu.import("resource://gre/modules/AddonManager.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+// Remember if we were just installed
+let justInstalled = false;
+
+// Remember if we're on Firefox or Fennec
+let platform = Services.appinfo.name == "Firefox" ? "desktop" : "mobile";
+
+// Add a default search engine and move it to the right place
+function addSearchEngine() {
+ // Hide any existing custom searches
+ let origEngine = Services.search.getEngineByName(SEARCH_NAME);
+ if (origEngine != null) {
+ origEngine.hidden = true;
+ unload(function() origEngine.hidden = false);
+ }
+
+ // Add the special search engine if necessary
+ let engineName = SEARCH_NAME + " ";
+ try {
+ Services.search.addEngineWithDetails(engineName, SEARCH_ICON, "", "",
+ "GET", SEARCH_URL);
+ }
+ catch(ex) {}
+
+ // Get the just-added or existing engine
+ let engine = Services.search.getEngineByName(engineName);
+ if (engine == null)
+ return;
+
+ // Move it to the desired position
+ Services.search.moveEngine(engine, SEARCH_POSITION);
+
+ // Switch to the engine by default if it's first
+ if (SEARCH_POSITION == 0 && justInstalled)
+ Services.search.currentEngine = engine;
+
+ // Clean up when disabling
+ unload(function() Services.search.removeEngine(engine));
+}
+
+// Customize the default prefs
+function setPref(pref, value) {
+ let branch = Services.prefs.getBranch("");
+ branch.setCharPref(pref, value);
+}
+
+// Make sure the window has an app tab set to MSN
+function ensureMsnAppTab(window) {
+ // Only bother if we were just installed and support app tabs
+ if (!justInstalled || platform != "desktop")
+ return;
+
+ // Try again after a short delay if session store is initializing
+ let {__SSi, __SS_restoreID, gBrowser, setTimeout} = window;
+ if (__SSi == null || __SS_restoreID != null) {
+ setTimeout(function() ensureMsnAppTab(window), 1000);
+ return;
+ }
+
+ // Figure out if we already have a pinned MSN
+ let msnTab = findOpenTab(gBrowser, function(tab, URI) {
+ return tab.pinned && URI.host == "msn.com";
+ });
+
+ // Always remove the MSN tab when uninstalling
+ unload(function() gBrowser.removeTab(msnTab));
+
+ // No need to add!
+ if (msnTab != null)
+ return;
+
+ // Add the tab and pin it as the last app tab
+ msnTab = gBrowser.addTab(getMsnBase("", "apptab"));
+ gBrowser.pinTab(msnTab);
+}
+
+// Open a new tab for the landing page and select it
+function showLandingPage(window) {
+ // Only bother if we were just installed and haven't shown yet
+ if (!justInstalled || showLandingPage.shown)
+ return;
+
+ // Do the appropriate thing on each platform
+ if (platform == "desktop") {
+ // Try again after a short delay if session store is initializing
+ let {__SSi, __SS_restoreID, gBrowser, setTimeout} = window;
+ if (__SSi == null || __SS_restoreID != null) {
+ setTimeout(function() showLandingPage(window), 1000);
+ return;
+ }
+
+ // Figure out if we already have a landing page
+ let landingTab = findOpenTab(gBrowser, function(tab, URI) {
+ return URI.spec == LANDING_PAGE;
+ });
+
+ // Always remove the landing page when uninstalling
+ unload(function() gBrowser.removeTab(landingTab));
+
+ // Add the landing page if not open yet
+ if (landingTab == null)
+ landingTab = gBrowser.loadOneTab(LANDING_PAGE);
+
+ // Make sure it's focused
+ gBrowser.selectedTab = landingTab;
+ }
+ else {
+ let {BrowserUI} = window;
+ let tab = BrowserUI.newTab(LANDING_PAGE);
+ unload(function() BrowserUI.closeTab(tab));
+ }
+
+ // Only show the landing page once
+ showLandingPage.shown = true;
+}
+
+/**
+ * Handle the add-on being activated on install/enable
+ */
+function startup({id}, reason) AddonManager.getAddonByID(id, function(addon) {
+ // Load various javascript includes for helper functions
+ ["helper", "utils"].forEach(function(fileName) {
+ let fileURI = addon.getResourceURI("scripts/" + fileName + ".js");
+ Services.scriptloader.loadSubScript(fileURI.spec, global);
+ });
+
+ // Add custom search support to the browser
+ addSearchEngine();
+
+ // Change some prefs to custom search on install
+ if (justInstalled) {
+ setPref(PREF_KEYWORD, SEARCH_KEYWORD_URL);
+ setPref(PREF_HOME, SEARCH_HOME_URL);
+ setPref(PREF_HOME_RESET, SEARCH_HOME_URL);
+ }
+
+ // Add an MSN app tab
+ watchWindows(ensureMsnAppTab);
+
+ // Open the landing page
+ watchWindows(showLandingPage);
+
+ // We're no longer just installed after we get some windows loaded
+ watchWindows(function(window) {
+ if (justInstalled)
+ window.setTimeout(function() justInstalled = false, 5000);
+ });
+})
+
+/**
+ * Handle the add-on being deactivated on uninstall/disable
+ */
+function shutdown(data, reason) {
+ // Clean up with unloaders when we're deactivating
+ if (reason != APP_SHUTDOWN)
+ unload();
+}
+
+/**
+ * Handle the add-on being installed
+ */
+function install(data, reason) {
+ justInstalled = reason == ADDON_INSTALL;
+}
+
+/**
+ * Handle the add-on being uninstalled
+ */
+function uninstall(data, reason) {}
BIN  partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/icon.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/install.rdf
View
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<r:RDF xmlns="http://www.mozilla.org/2004/em-rdf#"
+ xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <r:Description about="urn:mozilla:install-manifest">
+ <creator>Bing</creator>
+ <description>Search the web with Bing.</description>
+ <homepageURL>http://www.bing.com/</homepageURL>
+ <id>firefoxmsn.full@microsoft.com</id>
+ <name>Bing Search for Firefox</name>
+ <version>1.0</version>
+
+ <bootstrap>true</bootstrap>
+ <type>2</type>
+
+ <targetApplication>
+ <r:Description>
+ <id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
+ <minVersion>4.0</minVersion>
+ <maxVersion>18.0</maxVersion>
+ </r:Description>
+ </targetApplication>
+ </r:Description>
+</r:RDF>
87 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/helper.js
View
@@ -0,0 +1,87 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Bing Search for Firefox Helper Functions.
+ *
+ * The Initial Developer of the Original Code is The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Edward Lee <edilee@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+"use strict";
+
+const HOME_SEARCH = JSON.stringify({
+ name: "Bing",
+ searchUrl: "http://www.bing.com/search?form=MOZMPB&pc=MOZM&q=_searchTerms_",
+ image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAZCAYAAACM9limAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU%2FjZuqdAiCFprDrJ4kCJJWatoRdQ2%2FRFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB%2F%2BAHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5%2B8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq%2FIgAjqIJQTQlVdvsTiQGQYNz%2BXvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3%2BPY8uyPOU55eMG1Dys9xFkifEA1Lc5%2FTbhTzSXTQINIOJT1cVI%2BnNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94%2BwiHCCxmtP0a4jZ71jNU%2F4mHhpObEhj0cGDX0%2BGAVtxqp%2BDXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu%2BLqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz%2BKCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP%2BxXlzHmgjWPxHOw%2B%2FEtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn%2FWpI%2B%2B6qvJPmVflPXvXx%2FGfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ%2FDPVRlBnM0lSJ93%2FCKmQ0nbkOb%2FqP28f8F%2BT3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N%2BOPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk%2Fqv8RGw%2FbBS%2BfmsUtl%2BThrWgZf6b8C8%2FUXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMIklEQVRYCdVZe3BcVRn%2Fzrn37iOPJmm7SZAiUl6SUFseMkxngCCCgm1e7cYqIPyh5TlYFUUE2cQ%2FENEZQYpa7ExnqpYhS%2FMqpOKoRGCmZcqzTuIASnFsKc2mTdrNY3fvvef4%2B87NJpsm0OA4I5zpzb177jnf4%2Fc9z62INXf5JGwplHdE%2BWJlqrv%2BDdFGUidI0YceQhBpvf%2FnK6PlkdGHhBBfAokjQtO9Rbe83kMUvP%2FQZP8PG%2BwP4gk1BLW2QdnjRmtCa036uFmiZFxSnPyK6HhrcXlo%2Fdiw6xVHrZPHMv7W8Y3n1xTdrt%2BlNiEpoWeA%2FqH5zGI8PTEfWsEa6NafnNYtGZ%2BUCfq2JmgGMFq7wcL%2BpC3aBjytE1icmA1AAraHVxnCIDgF0kDSrIXar4yNeJniYicC9hhqd5EbGTbiJwJA4U2C4u2S57SO%2B%2B%2FPpw18agRAn%2BZjCM38IwTWxWvECWn1XSa1rvOYLcGKs0eg7yQwML8m4Ug7ELQ9nuMN1V%2F4bbEfKSuzwiJMGUyEXOFrmhCWn9bt8dE8YdGStALBAQkULtH6CdomdlOWVmBXuviz9DxdoN18KPF6uBzAIL7olJZkdIKiC22VC1MOHEKWcD3LtUK5Yd2eAJ9gTPOZ9lZj%2FXgSyiYMLV5Z1dBTJcKiKC%2Bz1ORnJ6LDujdxjJAiKluSJcqzL5JKXqwFfRq2CymhHhdKngn5NdC1RawJOQaAIMcc9t3c8uoopQa98FdI6DpkmRXYWCOdkhAzZCOrXBoQiTcA%2BOsg%2BGfXznUfaY8fNe9Z4fa4f8cdO8OP7CleSrtPT9Piw8W0PDWi%2F3TFIWNVeCB7mLjwMadySdUqZYkrSenzQXq5cEoiTIe9TOfS8Faxl%2Flokn9QGaf3cO%2FVx8zrtjbkwIQSk3eeq67fcZqy%2FHXYcxlkP1%2FYRTESFn4K0u4YyPh%2Fx7JdyA77cV9L0qmB3kTSAjtJfuZYvSX0uK%2FFaQj2lQwMrGxhtz8CebZAmqukU1yLi1R2BNO5vXi5D8p4AAmUxBlSOrUyUkHKHQXTibfAdWPKzj3KoLCQZ16zc4EbzTxvS%2FszGlx837v2ne0N29i6DEqsuWcdHr4jLOdCGSkn7WUB%2BLGDoPMa6I%2FBH8KQ9mxhR8%2BSoVLIcZTX7MP7hwc7Gx9mHuLyPls%2FW%2BdxSFY2dt8HyneQU7JQ2BFSE0Ps37txDeGCvnQ2OZEaAZ0gL8h4rBdCCQ9AyICn%2FMtTnY19xpuhBwNj8gIIAB84hhVma6URWw8robeVllXs27eljhmZcXL9U0VZ2z0VDvdlyLQBVi4DF7CY6FOudd3QjlUHKpq6ysHtObLDy4yXubmvpjpXP84EKpt7HhJ2%2BJsEwLSXYaS64em%2FBuc9%2BzuaDgdcsA7uLn3rXKXlNzB3I5TCBlZl%2FEkY4VoYIcfgxMpHfi9CpS1AlpUdh1wP2o7c8i5NHMgbysjs6Fqp1A9hjNVauZ6Qjo37Fu2Ln8BxFtuufONAzyoG0oxCYBSHlPa9AUvTuve6Gv6WX8T3vLUL5xbVb6%2BVtv0EmNSCIQAdf42c3CVOJgqM%2FN2YW8YbfS97%2FVBn4%2B8qm7puF6GSRwAiNFSDyKY3Yb6rkOZcfCobOi7VltwqhHUqQgRWH71%2FsKPhHtC7X4RL79a5UfghARRac6ir4Zk8PaYFyWFj%2BOnkqFrTswlOsl4rOIv2U9D1ooOdje%2Fwa%2Fa%2B%2FFqTbDGH1GtJUt57MEs9g8LW4MrDxHkwA%2FPAN8S2uOkx53DPmn7hi0bE1CC7qAwvWEFe6G4gP44dEiuZHUkpkHh5iBuw1ngmW5ZBYdc1lyEfKDLFh98hFw12Nz%2BHBLqBKwTSKITV1y5as3MJ6F%2Bv3XG0YRHspocYFF6fl5t5G65MG%2FrwMzzjW9rPvm3mQ6UxxP4G8xwUhCkA88Aojk2kxEcPdTb%2BE4KGOH65yeOcMHPgNxKf3rTe5XWD3fX%2FAOHfIDyAKzwBie0TazpOBQdO0vgHqeCzsYaeUrz7lLGUQk%2Bp9Qu8mFIxwS4f8CnkhWfOWasPmrzlSfUSBDzEIQjESy2duxK7EYGcHl2SivqYHJWeBfmOlxu0OB9BeWM0Ervg5QAZxVfIk3hbPuz4mQcDwyhZ2ke8C%2F9FnqTUAHLwPEbtAPcDGOoFxDcoQQdNS1yPlkKUrAEGb32yfeFli%2BE6i40iCmaWCqUCI5aaspL5ffwfNJM8BUEZICMXbBUC3NxS4Dc7u0O%2BFKfxujOiEyhFs4fp5ieLAwiebroFgIyQHufVHAWFu9i92N98IWwLtTxqXqZPCnywcOVcz32QF9ZBWBRryUwgsqCMJaxx3HkCu5gUqkDEQoQEa7BIuxo2ntdoAwGA49kC5sMOAEEiJLV6C0L%2FEUn5a8g5zHvDKS3PbP9379VHjJLcFOYHeyU8hn8iL90IL7mYFPolIUFTJM2ywvWYsMHnVbLs8%2FglXP4G3Hro5fUeE%2BeQ4fm5Brsl9bXCigkW9QYkRpgVsnjegAq5%2FeSFo3BybJ2Wj4ELBmCb9wg8hmwPqAfOwPBrDZiF%2Bi76qs8Jp2iJ8HM1GS%2BzEyF7m%2B5OIOxmDg77xa5zK6zzIHuYQNeqssc2ovz3mmg33ff0HlsLdR%2B47NCKPd9qrmrqukXrxl%2BxlYzyQJvq6gBQG3YliPr6YPa%2Fkn42wWkd5bf7NjRJqzmUmCH858eD6IqrmrvhjXkgphn%2Bb54EvNQvOtjRPBhr7ryC3PHNUPQSK1x8EXqePZVN3b1Q5gUp%2FCFIwBY7K0ahzyMPLuMch%2BSbUn5uI%2FqWH72fPHaqo%2BkpgHEX2ZGfIN5IS%2FollFrqkHpAd8Sn%2BgoDClNJMEh1VL7q6YpQyLsLM3cJDiN2Pjd7z2BXQ%2B%2FClmSZTSEf5XOGw%2BAXhpnEH77%2FNyPYB1flnEOQ%2F014d13l6yuu8%2F3sjXDFi1HCrxHSvoZzHsIOMiBdg5%2FKoEE34UyvDo2U3c%2F7uVppHYQZ%2F84PU8JQiR5E95jSUv8MneZChMWduezIOnjDVrTju2Cd%2FcqxU9L1YnBilEnrEsfR62S47JOcxNBHDILg9wHKFiYsRks0RbKccbj65Hnhzs%2B4eLJwumDFCR7zbcZUiHPboDcluB3YyhdXRJU7ukJp6xSErkTnjQD3R1BZqvH%2BTgC2CHNXxSqO7q1cu71BP7vmLY6M46uSzfHFwmjdsAVE%2F%2BJm07diqgHt%2BNlA%2FgfcnfJZQ3poIKQVttBWm7Y7l%2BZW%2FU1s7fRFaOPh7Vfvn8EACVk6RQDBIsvL2MpH8o3gNxBB71HiSPRN8xpB8tU51B3HKmGaKjcWxQknSDjDFcrowAdJVJ13tzf%2FC2T5mjWq13a0Ky%2F7JFnWechL50COJ3FQXqmfuX4syDPT5oLtAtMVKsUtfUjY52jhXSgUnYs8twBcbCx20R6n0R%2FuFb7%2FWk7K%2FuHOxhGWwOSjZAv6HqRFWCDmctdrlyD7i2wo14%2FT32gMJ1p4IzKv8C1X7A0aweluc5YmBROgGVrkW8ulDoUFub6XifTzobJQIW4MjUcCpIKtwWPFUqk3XeAubu48R2q5B%2B4QNccMN%2F29Qx1NPy3U32xgYPIXtbbim0Y7fxKYmjvRM6%2FnfSdaN9d7CGAMM9e7%2BcwZeVuRFfmah9z5NTgfdlSu7dV84flx5gVAZ8hickwAKV5Nluf8Rx8zXzswOxvka35yADQTJgnmaeTvxoPyPyY%2FMs2cC7wrv2Q%2B95n7De%2BpXDP1begEbYbho%2FkrwQePqVD64GUfzbdVzT03o44uR8XhXuM9HCwfYEnNuYg76tq4nvp8%2Bfaw1C%2Btdysbes5Do7gLy2yEkoX8eTv2PXp8KJ0QuY8iJHkl4C4jVnjBzYAClTmHrranKtVV%2F%2B2Z5Xfq86Vf3di9DF3NNpTsMEBB8Ui%2FWJ4NbTY6Tn3zDTT%2B2HoMhzvCWE1%2B9NosnCjKJQByx19Gct%2BstdqNjn4M51ckZPskKNqIjPZ1AFISVMaxXcp140M74gfMOQpHm0In%2BNgCw0rkjy2LGrtrUDLvRdf0RRkpqyB8cMPHNv4QxvnPQr%2BF4o7Tf2YYPaz7JtZtGhpe8Atz4sanlbn%2Bq%2BhjDYwBp6A5q1779FLlu5fiFH8ByuoZ6LxtRBluGt9G5auYewXNxPP4v7N0AOzcoPC7%2FwBfh%2BUgcZXzvgAAAABJRU5ErkJggg%3D%3D",
+});
+const LANDING_PAGE = "http://msn.com";
+const PREF_HOME = "browser.startup.homepage";
+const PREF_HOME_RESET = "browser.startup.homepage_reset";
+const PREF_KEYWORD = "keyword.URL";
+const SEARCH_DOMAIN = "www.bing.com";
+const SEARCH_ICON = "data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAVpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8ysf97zf%2B24%2F%2FF6f%2FF6f%2FF6f%2BK0%2F9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP%2BZ2P%2F%2F%2F%2F%2F%2F%2F%2F%2Fw%2Bf%2FF6f%2FF6f%2Fi9P%2F%2F%2F%2F%2F%2F%2F%2F%2FT7v9Bt%2F8Vpv8Vpv8Vpv8Vpv%2FT7v%2F%2F%2F%2F%2Fw%2Bf97zf8Vpv8Vpv8Vpv8Vpv9QvP%2FT7v%2F%2F%2F%2F%2Fw%2Bf9Bt%2F8Vpv8Vpv97zf%2F%2F%2F%2F%2F%2F%2F%2F9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP%2Fi9P%2F%2F%2F%2F%2Fi9P8Vpv8Vpv%2B24%2F%2F%2F%2F%2F%2Fi9P8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv%2BK0%2F%2F%2F%2F%2F%2F%2F%2F%2F8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F8krP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv%2Bn3v%2F%2F%2F%2F%2Fw%2Bf8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F%2Bn3v8krP8Vpv8Vpv8Vpv8Vpv8Vpv9tx%2F%2F%2F%2F%2F%2F%2F%2F%2F%2BZ2P8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fi9P%2BK0%2F9QvP9QvP9tx%2F%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F%2Bn3v8Vpv8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2FT7v%2BZ2P%2Fi9P%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2B24%2F9QvP8Vpv8Vpv8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2FF6f8Vpv8Vpv8krP9QvP9QvP9Bt%2F8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2FF6f8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv9Bt%2F9QvP9Bt%2F8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8AAHBsAABhdAAAbiAAAHJ0AABsaQAAdGkAACBDAABlbgAAUEEAAEVYAAAuQwAAOy4AAEU7AABBVAAAQ00AAC5W";
+const SEARCH_HOME_URL = "http://www.msn.com/?pc=MOZM";
+const SEARCH_KEYWORD_URL = "http://www.bing.com/search?form=MOZMLB&pc=MOZM&q=";
+const SEARCH_NAME = "Bing";
+const SEARCH_POSITION = 0;
+const SEARCH_URL = "http://www.bing.com/search?form=MOZMSB&pc=MOZM&q={searchTerms}";
+
+// Look through tabs in the browser to see if any match
+function findOpenTab(browser, checkTabAndURI) {
+ let foundTab;
+ Array.some(browser.tabs, function(tab) {
+ // Check if there's an existing page
+ try {
+ // Use an activate navigation if it's still loading
+ let {currentURI, webNavigation, __SS_data} = tab.linkedBrowser;
+ let channel = webNavigation.documentChannel;
+ if (channel != null)
+ currentURI = channel.originalURI
+
+ // Use the session restore entry if it's still restoring
+ if (currentURI.spec == "about:blank" && __SS_data != null)
+ currentURI = Services.io.newURI(__SS_data.entries[0].url, null, null);
+
+ // Short circuit now that we found it
+ if (checkTabAndURI(tab, currentURI)) {
+ foundTab = tab;
+ return true;
+ }
+ }
+ catch(ex) {}
+ });
+ return foundTab;
+}
+
+#// Get a MSN url with a partner code
+#function getMsnBase(path, from) {
+# return "http://msn.com/" + path + "?pc=MOZM&source=" +
+# platform + "-" + from;
+#}
274 partners/msn-international/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/utils.js
View
@@ -0,0 +1,274 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Home Dash Utility.
+ *
+ * The Initial Developer of the Original Code is The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Edward Lee <edilee@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+"use strict";
+
+/**
+ * Get a localized string with string replacement arguments filled in and
+ * correct plural form picked if necessary.
+ *
+ * @note: Initialize the strings to use with getString.init(addon).
+ *
+ * @usage getString(name): Get the localized string for the given name.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @return [string]: Localized string for the string name.
+ *
+ * @usage getString(name, arg): Replace %S references in the localized string.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @param [any] arg: Value to insert for instances of %S.
+ * @return [string]: Localized string with %S references replaced.
+ *
+ * @usage getString(name, args): Replace %1$S references in localized string.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @param [array of any] args: Array of values to replace references like %1$S.
+ * @return [string]: Localized string with %N$S references replaced.
+ *
+ * @usage getString(name, args, plural): Pick the correct plural form.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @param [array of any] args: Array of values to replace references like %1$S.
+ * @param [number] plural: Number to decide what plural form to use.
+ * @return [string]: Localized string of the correct plural form.
+ */
+function getString(name, args, plural) {
+ // Use the cached bundle to retrieve the string
+ let str;
+ try {
+ str = getString.bundle.GetStringFromName(name);
+ }
+ // Use the fallback in-case the string isn't localized
+ catch(ex) {
+ str = getString.fallback.GetStringFromName(name);
+ }
+
+ // Pick out the correct plural form if necessary
+ if (plural != null)
+ str = getString.plural(plural, str);
+
+ // Fill in the arguments if necessary
+ if (args != null) {
+ // Convert a string or something not array-like to an array
+ if (typeof args == "string" || args.length == null)
+ args = [args];
+
+ // Assume %S refers to the first argument
+ str = str.replace(/%s/gi, args[0]);
+
+ // Replace instances of %N$S where N is a 1-based number
+ Array.forEach(args, function(replacement, index) {
+ str = str.replace(RegExp("%" + (index + 1) + "\\$S", "gi"), replacement);
+ });
+ }
+
+ return str;
+}
+
+/**
+ * Initialize getString() for the provided add-on.
+ *
+ * @usage getString.init(addon): Load properties file for the add-on.
+ * @param [object] addon: Add-on object from AddonManager
+ *
+ * @usage getString.init(addon, getAlternate): Load properties with alternate.
+ * @param [object] addon: Add-on object from AddonManager
+ * @param [function] getAlternate: Convert a locale to an alternate locale
+ */
+getString.init = function(addon, getAlternate) {
+ // Set a default get alternate function if it doesn't exist
+ if (typeof getAlternate != "function")
+ getAlternate = function() "en-US";
+
+ // Get the bundled properties file for the app's locale
+ function getBundle(locale) {
+ let propertyPath = "locales/" + locale + ".properties";
+ let propertyFile = addon.getResourceURI(propertyPath);
+
+ // Get a bundle and test if it's able to do simple things
+ try {
+ // Avoid caching issues by always getting a new file
+ let uniqueFileSpec = propertyFile.spec + "#" + Math.random();
+ let bundle = Services.strings.createBundle(uniqueFileSpec);
+ bundle.getSimpleEnumeration();
+ return bundle;
+ }
+ catch(ex) {}
+
+ // The locale must not exist, so give nothing
+ return null;
+ }
+
+ // Use the current locale or the alternate as the primary bundle
+ let locale = Cc["@mozilla.org/chrome/chrome-registry;1"].
+ getService(Ci.nsIXULChromeRegistry).getSelectedLocale("global");
+ getString.bundle = getBundle(locale) || getBundle(getAlternate(locale));
+
+ // Create a fallback in-case a string is missing
+ getString.fallback = getBundle("en-US");
+
+ // Get the appropriate plural form getter
+ Cu.import("resource://gre/modules/PluralForm.jsm");
+ let rule = getString("pluralRule");
+ [getString.plural] = PluralForm.makeGetter(rule);
+}
+
+/**
+ * Helper that adds event listeners and remembers to remove on unload
+ */
+function listen(window, node, event, func, capture) {
+ // Default to use capture
+ if (capture == null)
+ capture = true;
+
+ node.addEventListener(event, func, capture);
+ function undoListen() {
+ node.removeEventListener(event, func, capture);
+ }
+
+ // Undo the listener on unload and provide a way to undo everything
+ let undoUnload = unload(undoListen, window);
+ return function() {
+ undoListen();
+ undoUnload();
+ };
+}
+
+/**
+ * Save callbacks to run when unloading. Optionally scope the callback to a
+ * container, e.g., window. Provide a way to run all the callbacks.
+ *
+ * @usage unload(): Run all callbacks and release them.
+ *
+ * @usage unload(callback): Add a callback to run on unload.
+ * @param [function] callback: 0-parameter function to call on unload.
+ * @return [function]: A 0-parameter function that undoes adding the callback.
+ *
+ * @usage unload(callback, container) Add a scoped callback to run on unload.
+ * @param [function] callback: 0-parameter function to call on unload.
+ * @param [node] container: Remove the callback when this container unloads.
+ * @return [function]: A 0-parameter function that undoes adding the callback.
+ */
+function unload(callback, container) {
+ // Initialize the array of unloaders on the first usage
+ let unloaders = unload.unloaders;
+ if (unloaders == null)
+ unloaders = unload.unloaders = [];
+
+ // Calling with no arguments runs all the unloader callbacks
+ if (callback == null) {
+ unloaders.slice().forEach(function(unloader) unloader());
+ unloaders.length = 0;
+ return;
+ }
+
+ // The callback is bound to the lifetime of the container if we have one
+ if (container != null) {
+ // Remove the unloader when the container unloads
+ container.addEventListener("unload", removeUnloader, false);
+
+ // Wrap the callback to additionally remove the unload listener
+ let origCallback = callback;
+ callback = function() {
+ container.removeEventListener("unload", removeUnloader, false);
+ origCallback();
+ }
+ }
+
+ // Wrap the callback in a function that ignores failures
+ function unloader() {
+ try {
+ callback();
+ }
+ catch(ex) {}
+ }
+ unloaders.push(unloader);
+
+ // Provide a way to remove the unloader
+ function removeUnloader() {
+ let index = unloaders.indexOf(unloader);
+ if (index != -1)
+ unloaders.splice(index, 1);
+ }
+ return removeUnloader;
+}
+
+/**
+ * Apply a callback to each open and new browser windows.
+ *
+ * @usage watchWindows(callback): Apply a callback to each browser window.
+ * @param [function] callback: 1-parameter function that gets a browser window.
+ */
+function watchWindows(callback) {
+ // Wrap the callback in a function that ignores failures
+ function watcher(window) {
+ try {
+ // Now that the window has loaded, only handle browser windows
+ let {documentElement} = window.document;
+ if (documentElement.getAttribute("windowtype") == "navigator:browser")
+ callback(window);
+ }
+ catch(ex) {}
+ }
+
+ // Wait for the window to finish loading before running the callback
+ function runOnLoad(window) {
+ // Listen for one load event before checking the window type
+ window.addEventListener("load", function runOnce() {
+ window.removeEventListener("load", runOnce, false);
+ watcher(window);
+ }, false);
+ }
+
+ // Add functionality to existing windows
+ let windows = Services.wm.getEnumerator(null);
+ while (windows.hasMoreElements()) {
+ // Only run the watcher immediately if the window is completely loaded
+ let window = windows.getNext();
+ if (window.document.readyState == "complete")
+ watcher(window);
+ // Wait for the window to load before continuing
+ else
+ runOnLoad(window);
+ }
+
+ // Watch for new browser windows opening then wait for it to load
+ function windowWatcher(subject, topic) {
+ if (topic == "domwindowopened")
+ runOnLoad(subject);
+ }
+ Services.ww.registerNotification(windowWatcher);
+
+ // Make sure to stop watching for windows if we're unloading
+ unload(function() Services.ww.unregisterNotification(windowWatcher));
+}
17 partners/msn-international/distribution/searchplugins/common/bing.xml
View
@@ -0,0 +1,17 @@
+<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
+ <ShortName>Bing</ShortName>
+ <Description>Bing. Search by Microsoft.</Description>
+ <InputEncoding>UTF-8</InputEncoding>
+ <Image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAVpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8ysf97zf+24//F6f/F6f/F6f+K0/9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP+Z2P/////////w+f/F6f/F6f/i9P/////////T7v9Bt/8Vpv8Vpv8Vpv8Vpv/T7v/////w+f97zf8Vpv8Vpv8Vpv8Vpv9QvP/T7v/////w+f9Bt/8Vpv8Vpv97zf////////9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP/i9P/////i9P8Vpv8Vpv+24//////i9P8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+K0/////////8Vpv8Vpv/F6f////////8krP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+n3v/////w+f8Vpv8Vpv/F6f////////+n3v8krP8Vpv8Vpv8Vpv8Vpv8Vpv9tx/////////+Z2P8Vpv8Vpv/F6f/////////////i9P+K0/9QvP9QvP9tx//F6f////////+n3v8Vpv8Vpv8Vpv/F6f/////T7v+Z2P/i9P////////////////////+24/9QvP8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8krP9QvP9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv9Bt/9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8AAHBsAABhdAAAbiAAAHJ0AABsaQAAdGkAACBDAABlbgAAUEEAAEVYAAAuQwAAOy4AAEU7AABBVAAAQ00AAC5W</Image>
+ <Url type="application/x-suggestions+json" template="http://api.bing.com/osjson.aspx">
+ <Param name="query" value="{searchTerms}"/>
+ <Param name="form" value="MOZFSB"/>
+ <Param name="pc" value="MOZM"/>
+ </Url>
+ <Url type="text/html" method="GET" template="http://www.bing.com/search">
+ <Param name="q" value="{searchTerms}"/>
+ <Param name="form" value="MOZFSB"/>
+ <Param name="pc" value="MOZM"/>
+ </Url>
+ <SearchForm>http://www.bing.com/search</SearchForm>
+</SearchPlugin>
8 partners/msn-international/repack.cfg
View
@@ -0,0 +1,8 @@
+aus="msninter"
+dist_id="msninter"
+dist_version="1.0"
+linux-i686=false
+locales="en-GB en-US de fr ja-JP-mac ja"
+mac=true
+win32=true
+migrationWizardDisabled=true
85 partners/msn-us/distribution/distribution.ini
View
@@ -0,0 +1,85 @@
+# Partner Distribution Configuration File
+# Author: Mozilla for MSN-US
+# Date: 2012-08-20
+
+[Global]
+id=msnus
+version=1.0
+about=Mozilla Firefox with MSN
+bookmarks.initialized.pref=cck.msnus.initialized
+
+[Preferences]
+app.distributor="msnus"
+app.distributor.channel=""
+app.partner.msnus="msnus"
+browser.search.distributionID="com.bing"
+mozilla.partner.id="msnus"
+_=Cu.import("resource://gre/modules/Services.jsm"); if (!Services.prefs.prefHasUserValue("extensions.installedDistroAddon.firefoxmsn.full@microsoft.com")) { Services.prefs.clearUserPref("extensions.lastAppVersion"); Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart); } throw {};
+lightweightThemes.isThemeSelected=true
+lightweightThemes.persisted.footerURL=false
+lightweightThemes.persisted.headerURL=false
+lightweightThemes.usedThemes="[{\"id\":\"486203\",\"name\":\"MSN - blue\",\"headerURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/Fader_blue_diagnol_header.jpg.jpg?1351246567\",\"footerURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/Fader_blue_diagonal_footer.jpg.jpg?1351246567\",\"textcolor\":\"#000000\",\"accentcolor\":\"#c9c9c9\",\"iconURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/preview_small.jpg?1351246567\",\"previewURL\":\"http://getpersonas-cdn.mozilla.net/static/0/3/486203/preview.jpg?1351246567\",\"author\":\"MSNthemes\",\"description\":\"Blue MSN theme.\",\"updateURL\":\"https://www.getpersonas.com/en-US/update_check/486203\",\"version\":\"1351246567\",\"updateDate\":1351258263886,\"installDate\":1351258263886}]"
+
+[LocalizablePreferences]
+browser.search.defaultenginename="Bing"
+browser.search.order.1="Bing"
+browser.search.order.2="Google"
+browser.search.order.3="Yahoo"
+browser.startup.homepage="http://www.msn.com/?pc=MOZM"
+browser.startup.homepage_reset="http://www.msn.com/?pc=MOZM"
+keyword.URL="http://www.bing.com/search?q=&form=MOZFLB&pc=MOZM"
+
+[BookmarksMenu]
+item.1.title=MSN
+item.1.description=MSN provides users breaking news, trending topics, sports updates and entertainment buzz, keeping users always in the know
+item.1.link=http://www.msn.com
+item.2.title=MSN Entertainment
+item.2.description=Celebrity gossip, news, photos and more on MSN Entertainment
+item.2.link=http://entertainment.msn.com
+item.3.title=MSN Sports
+item.3.description=Get the latest sports scores, in-depth player and team news, videos, schedules, fantasy games, & standings for the NFL, MLB, NBA, NHL and NCAA sports on FOX Sports.
+item.3.link=http://msn.foxsports.com/
+item.4.title=MSN Money
+item.4.description=MSN Money offers personal finance, investing and financial news. Also get smart money investment planning and advice from our finance experts.
+item.4.link=http://money.msn.com/
+item.5.title=MSN Living
+item.5.description=MSN Living gives you the latest fashion and beauty tips and trends along with home décor pointers, relationship advice and self-improvemen ideas.
+item.5.link=http://living.msn.com/
+item.6.title=MSN
+item.6.type=folder
+item.6.folderId=1
+
+[BookmarksToolbar]
+item.1.title=MSN
+item.1.description=MSN provides users breaking news, trending topics, sports updates and entertainment buzz, keeping users always in the know
+item.1.link=http://www.msn.com/
+item.2.title=MSN Entertainment
+item.2.description=Celebrity gossip, news, photos and more on MSN Entertainment
+item.2.link=http://entertainment.msn.com/
+item.3.title=MSN Sports
+item.3.description=Get the latest sports scores, in-depth player and team news, videos, schedules, fantasy games, & standings for the NFL, MLB, NBA, NHL and NCAA sports on FOX Sports.
+item.3.link=http://msn.foxsports.com/
+item.4.title=MSN Money
+item.4.description=MSN Money offers personal finance, investing and financial news. Also get smart money investment planning and advice from our finance experts.
+item.4.link=http://money.msn.com/
+item.5.title=MSN Living
+item.5.description=MSN Living gives you the latest fashion and beauty tips and trends along with home décor pointers, relationship advice and self-improvemen ideas.
+item.5.link=http://living.msn.com/
+
+[BookmarksFolder-1]
+item.1.title=MSN
+item.1.description=MSN provides users breaking news, trending topics, sports updates and entertainment buzz, keeping users always in the know
+item.1.link=http://www.msn.com/
+item.2.title=MSN Entertainment
+item.2.description=Celebrity gossip, news, photos and more on MSN Entertainment
+item.2.link=http://entertainment.msn.com/
+item.3.title=MSN Sports
+item.3.description=Get the latest sports scores, in-depth player and team news, videos, schedules, fantasy games, & standings for the NFL, MLB, NBA, NHL and NCAA sports on FOX Sports.
+item.3.link=http://msn.foxsports.com/
+item.4.title=MSN Money
+item.4.description=MSN Money offers personal finance, investing and financial news. Also get smart money investment planning and advice from our finance experts.
+item.4.link=http://money.msn.com/
+item.5.title=MSN Living
+item.5.description=MSN Living gives you the latest fashion and beauty tips and trends along with home décor pointers, relationship advice and self-improvemen ideas.
+item.5.link=http://living.msn.com/
+
217 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/bootstrap.js
View
@@ -0,0 +1,217 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Bing Search for Firefox.
+ *
+ * The Initial Developer of the Original Code is The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Edward Lee <edilee@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+"use strict";
+const global = this;
+
+const {classes: Cc, interfaces: Ci, manager: Cm, utils: Cu} = Components;
+Cu.import("resource://gre/modules/AddonManager.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+// Remember if we were just installed
+let justInstalled = false;
+
+// Remember if we're on Firefox or Fennec
+let platform = Services.appinfo.name == "Firefox" ? "desktop" : "mobile";
+
+// Add a default search engine and move it to the right place
+function addSearchEngine() {
+ // Hide any existing custom searches
+ let origEngine = Services.search.getEngineByName(SEARCH_NAME);
+ if (origEngine != null) {
+ origEngine.hidden = true;
+ unload(function() origEngine.hidden = false);
+ }
+
+ // Add the special search engine if necessary
+ let engineName = SEARCH_NAME + " ";
+ try {
+ Services.search.addEngineWithDetails(engineName, SEARCH_ICON, "", "",
+ "GET", SEARCH_URL);
+ }
+ catch(ex) {}
+
+ // Get the just-added or existing engine
+ let engine = Services.search.getEngineByName(engineName);
+ if (engine == null)
+ return;
+
+ // Move it to the desired position
+ Services.search.moveEngine(engine, SEARCH_POSITION);
+
+ // Switch to the engine by default if it's first
+ if (SEARCH_POSITION == 0 && justInstalled)
+ Services.search.currentEngine = engine;
+
+ // Clean up when disabling
+ unload(function() Services.search.removeEngine(engine));
+}
+
+// Customize the default prefs
+function setPref(pref, value) {
+ let branch = Services.prefs.getBranch("");
+ branch.setCharPref(pref, value);
+}
+
+// Make sure the window has an app tab set to MSN
+function ensureMsnAppTab(window) {
+ // Only bother if we were just installed and support app tabs
+ if (!justInstalled || platform != "desktop")
+ return;
+
+ // Try again after a short delay if session store is initializing
+ let {__SSi, __SS_restoreID, gBrowser, setTimeout} = window;
+ if (__SSi == null || __SS_restoreID != null) {
+ setTimeout(function() ensureMsnAppTab(window), 1000);
+ return;
+ }
+
+ // Figure out if we already have a pinned MSN
+ let msnTab = findOpenTab(gBrowser, function(tab, URI) {
+ return tab.pinned && URI.host == "msn.com";
+ });
+
+ // Always remove the MSN tab when uninstalling
+ unload(function() gBrowser.removeTab(msnTab));
+
+ // No need to add!
+ if (msnTab != null)
+ return;
+
+ // Add the tab and pin it as the last app tab
+ msnTab = gBrowser.addTab(getMsnBase("", "apptab"));
+ gBrowser.pinTab(msnTab);
+}
+
+// Open a new tab for the landing page and select it
+function showLandingPage(window) {
+ // Only bother if we were just installed and haven't shown yet
+ if (!justInstalled || showLandingPage.shown)
+ return;
+
+ // Do the appropriate thing on each platform
+ if (platform == "desktop") {
+ // Try again after a short delay if session store is initializing
+ let {__SSi, __SS_restoreID, gBrowser, setTimeout} = window;
+ if (__SSi == null || __SS_restoreID != null) {
+ setTimeout(function() showLandingPage(window), 1000);
+ return;
+ }
+
+ // Figure out if we already have a landing page
+ let landingTab = findOpenTab(gBrowser, function(tab, URI) {
+ return URI.spec == LANDING_PAGE;
+ });
+
+ // Always remove the landing page when uninstalling
+ unload(function() gBrowser.removeTab(landingTab));
+
+ // Add the landing page if not open yet
+ if (landingTab == null)
+ landingTab = gBrowser.loadOneTab(LANDING_PAGE);
+
+ // Make sure it's focused, unless the Firefox whatsnew is open
+ let firstrunTab = findOpenTab(gbrowser, function(tab, URI) {
+ return URI.spec == FIRST_RUN;
+ });
+ if (firstrunTab == null)
+ gBrowser.selectedTab = landingTab;
+ }
+ else {
+ let {BrowserUI} = window;
+ let tab = BrowserUI.newTab(LANDING_PAGE);
+ unload(function() BrowserUI.closeTab(tab));
+ }
+
+ // Only show the landing page once
+ showLandingPage.shown = true;
+}
+
+/**
+
+ * Handle the add-on being activated on install/enable
+ */
+function startup({id}, reason) AddonManager.getAddonByID(id, function(addon) {
+ // Load various javascript includes for helper functions
+ ["helper", "utils"].forEach(function(fileName) {
+ let fileURI = addon.getResourceURI("scripts/" + fileName + ".js");
+ Services.scriptloader.loadSubScript(fileURI.spec, global);
+ });
+
+ // Add custom search support to the browser
+ addSearchEngine();
+
+ // Change some prefs to custom search on install
+ if (justInstalled) {
+ setPref(PREF_KEYWORD, SEARCH_KEYWORD_URL);
+ setPref(PREF_HOME, SEARCH_HOME_URL);
+ setPref(PREF_HOME_RESET, SEARCH_HOME_URL);
+ }
+
+ // Add an MSN app tab
+ watchWindows(ensureMsnAppTab);
+
+ // Open the landing page
+ watchWindows(showLandingPage);
+
+ // We're no longer just installed after we get some windows loaded
+ watchWindows(function(window) {
+ if (justInstalled)
+ window.setTimeout(function() justInstalled = false, 5000);
+ });
+})
+
+/**
+ * Handle the add-on being deactivated on uninstall/disable
+ */
+function shutdown(data, reason) {
+ // Clean up with unloaders when we're deactivating
+ if (reason != APP_SHUTDOWN)
+ unload();
+}
+
+/**
+ * Handle the add-on being installed
+ */
+function install(data, reason) {
+ justInstalled = reason == ADDON_INSTALL;
+}
+
+/**
+ * Handle the add-on being uninstalled
+ */
+function uninstall(data, reason) {}
BIN  partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/icon.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/install.rdf
View
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<r:RDF xmlns="http://www.mozilla.org/2004/em-rdf#"
+ xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <r:Description about="urn:mozilla:install-manifest">
+ <creator>Bing</creator>
+ <description>Search the web with Bing.</description>
+ <homepageURL>http://www.bing.com/</homepageURL>
+ <id>firefoxmsn.full@microsoft.com</id>
+ <name>Bing Search for Firefox</name>
+ <version>1.0</version>
+
+ <bootstrap>true</bootstrap>
+ <type>2</type>
+
+ <targetApplication>
+ <r:Description>
+ <id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
+ <minVersion>4.0</minVersion>
+ <maxVersion>18.0</maxVersion>
+ </r:Description>
+ </targetApplication>
+ </r:Description>
+</r:RDF>
87 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/helper.js
View
@@ -0,0 +1,87 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Bing Search for Firefox Helper Functions.
+ *
+ * The Initial Developer of the Original Code is The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Edward Lee <edilee@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+"use strict";
+
+const HOME_SEARCH = JSON.stringify({
+ name: "Bing",
+ searchUrl: "http://www.bing.com/search?form=MOZMPB&pc=MOZM&q=_searchTerms_",
+ image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAZCAYAAACM9limAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU%2FjZuqdAiCFprDrJ4kCJJWatoRdQ2%2FRFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB%2F%2BAHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5%2B8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq%2FIgAjqIJQTQlVdvsTiQGQYNz%2BXvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3%2BPY8uyPOU55eMG1Dys9xFkifEA1Lc5%2FTbhTzSXTQINIOJT1cVI%2BnNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94%2BwiHCCxmtP0a4jZ71jNU%2F4mHhpObEhj0cGDX0%2BGAVtxqp%2BDXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu%2BLqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz%2BKCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP%2BxXlzHmgjWPxHOw%2B%2FEtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn%2FWpI%2B%2B6qvJPmVflPXvXx%2FGfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ%2FDPVRlBnM0lSJ93%2FCKmQ0nbkOb%2FqP28f8F%2BT3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N%2BOPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk%2Fqv8RGw%2FbBS%2BfmsUtl%2BThrWgZf6b8C8%2FUXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMIklEQVRYCdVZe3BcVRn%2Fzrn37iOPJmm7SZAiUl6SUFseMkxngCCCgm1e7cYqIPyh5TlYFUUE2cQ%2FENEZQYpa7ExnqpYhS%2FMqpOKoRGCmZcqzTuIASnFsKc2mTdrNY3fvvef4%2B87NJpsm0OA4I5zpzb177jnf4%2Fc9z62INXf5JGwplHdE%2BWJlqrv%2BDdFGUidI0YceQhBpvf%2FnK6PlkdGHhBBfAokjQtO9Rbe83kMUvP%2FQZP8PG%2BwP4gk1BLW2QdnjRmtCa036uFmiZFxSnPyK6HhrcXlo%2Fdiw6xVHrZPHMv7W8Y3n1xTdrt%2BlNiEpoWeA%2FqH5zGI8PTEfWsEa6NafnNYtGZ%2BUCfq2JmgGMFq7wcL%2BpC3aBjytE1icmA1AAraHVxnCIDgF0kDSrIXar4yNeJniYicC9hhqd5EbGTbiJwJA4U2C4u2S57SO%2B%2B%2FPpw18agRAn%2BZjCM38IwTWxWvECWn1XSa1rvOYLcGKs0eg7yQwML8m4Ug7ELQ9nuMN1V%2F4bbEfKSuzwiJMGUyEXOFrmhCWn9bt8dE8YdGStALBAQkULtH6CdomdlOWVmBXuviz9DxdoN18KPF6uBzAIL7olJZkdIKiC22VC1MOHEKWcD3LtUK5Yd2eAJ9gTPOZ9lZj%2FXgSyiYMLV5Z1dBTJcKiKC%2Bz1ORnJ6LDujdxjJAiKluSJcqzL5JKXqwFfRq2CymhHhdKngn5NdC1RawJOQaAIMcc9t3c8uoopQa98FdI6DpkmRXYWCOdkhAzZCOrXBoQiTcA%2BOsg%2BGfXznUfaY8fNe9Z4fa4f8cdO8OP7CleSrtPT9Piw8W0PDWi%2F3TFIWNVeCB7mLjwMadySdUqZYkrSenzQXq5cEoiTIe9TOfS8Faxl%2Flokn9QGaf3cO%2FVx8zrtjbkwIQSk3eeq67fcZqy%2FHXYcxlkP1%2FYRTESFn4K0u4YyPh%2Fx7JdyA77cV9L0qmB3kTSAjtJfuZYvSX0uK%2FFaQj2lQwMrGxhtz8CebZAmqukU1yLi1R2BNO5vXi5D8p4AAmUxBlSOrUyUkHKHQXTibfAdWPKzj3KoLCQZ16zc4EbzTxvS%2FszGlx837v2ne0N29i6DEqsuWcdHr4jLOdCGSkn7WUB%2BLGDoPMa6I%2FBH8KQ9mxhR8%2BSoVLIcZTX7MP7hwc7Gx9mHuLyPls%2FW%2BdxSFY2dt8HyneQU7JQ2BFSE0Ps37txDeGCvnQ2OZEaAZ0gL8h4rBdCCQ9AyICn%2FMtTnY19xpuhBwNj8gIIAB84hhVma6URWw8robeVllXs27eljhmZcXL9U0VZ2z0VDvdlyLQBVi4DF7CY6FOudd3QjlUHKpq6ysHtObLDy4yXubmvpjpXP84EKpt7HhJ2%2BJsEwLSXYaS64em%2FBuc9%2BzuaDgdcsA7uLn3rXKXlNzB3I5TCBlZl%2FEkY4VoYIcfgxMpHfi9CpS1AlpUdh1wP2o7c8i5NHMgbysjs6Fqp1A9hjNVauZ6Qjo37Fu2Ln8BxFtuufONAzyoG0oxCYBSHlPa9AUvTuve6Gv6WX8T3vLUL5xbVb6%2BVtv0EmNSCIQAdf42c3CVOJgqM%2FN2YW8YbfS97%2FVBn4%2B8qm7puF6GSRwAiNFSDyKY3Yb6rkOZcfCobOi7VltwqhHUqQgRWH71%2FsKPhHtC7X4RL79a5UfghARRac6ir4Zk8PaYFyWFj%2BOnkqFrTswlOsl4rOIv2U9D1ooOdje%2Fwa%2Fa%2B%2FFqTbDGH1GtJUt57MEs9g8LW4MrDxHkwA%2FPAN8S2uOkx53DPmn7hi0bE1CC7qAwvWEFe6G4gP44dEiuZHUkpkHh5iBuw1ngmW5ZBYdc1lyEfKDLFh98hFw12Nz%2BHBLqBKwTSKITV1y5as3MJ6F%2Bv3XG0YRHspocYFF6fl5t5G65MG%2FrwMzzjW9rPvm3mQ6UxxP4G8xwUhCkA88Aojk2kxEcPdTb%2BE4KGOH65yeOcMHPgNxKf3rTe5XWD3fX%2FAOHfIDyAKzwBie0TazpOBQdO0vgHqeCzsYaeUrz7lLGUQk%2Bp9Qu8mFIxwS4f8CnkhWfOWasPmrzlSfUSBDzEIQjESy2duxK7EYGcHl2SivqYHJWeBfmOlxu0OB9BeWM0Ervg5QAZxVfIk3hbPuz4mQcDwyhZ2ke8C%2F9FnqTUAHLwPEbtAPcDGOoFxDcoQQdNS1yPlkKUrAEGb32yfeFli%2BE6i40iCmaWCqUCI5aaspL5ffwfNJM8BUEZICMXbBUC3NxS4Dc7u0O%2BFKfxujOiEyhFs4fp5ieLAwiebroFgIyQHufVHAWFu9i92N98IWwLtTxqXqZPCnywcOVcz32QF9ZBWBRryUwgsqCMJaxx3HkCu5gUqkDEQoQEa7BIuxo2ntdoAwGA49kC5sMOAEEiJLV6C0L%2FEUn5a8g5zHvDKS3PbP9379VHjJLcFOYHeyU8hn8iL90IL7mYFPolIUFTJM2ywvWYsMHnVbLs8%2FglXP4G3Hro5fUeE%2BeQ4fm5Brsl9bXCigkW9QYkRpgVsnjegAq5%2FeSFo3BybJ2Wj4ELBmCb9wg8hmwPqAfOwPBrDZiF%2Bi76qs8Jp2iJ8HM1GS%2BzEyF7m%2B5OIOxmDg77xa5zK6zzIHuYQNeqssc2ovz3mmg33ff0HlsLdR%2B47NCKPd9qrmrqukXrxl%2BxlYzyQJvq6gBQG3YliPr6YPa%2Fkn42wWkd5bf7NjRJqzmUmCH858eD6IqrmrvhjXkgphn%2Bb54EvNQvOtjRPBhr7ryC3PHNUPQSK1x8EXqePZVN3b1Q5gUp%2FCFIwBY7K0ahzyMPLuMch%2BSbUn5uI%2FqWH72fPHaqo%2BkpgHEX2ZGfIN5IS%2FollFrqkHpAd8Sn%2BgoDClNJMEh1VL7q6YpQyLsLM3cJDiN2Pjd7z2BXQ%2B%2FClmSZTSEf5XOGw%2BAXhpnEH77%2FNyPYB1flnEOQ%2F014d13l6yuu8%2F3sjXDFi1HCrxHSvoZzHsIOMiBdg5%2FKoEE34UyvDo2U3c%2F7uVppHYQZ%2F84PU8JQiR5E95jSUv8MneZChMWduezIOnjDVrTju2Cd%2FcqxU9L1YnBilEnrEsfR62S47JOcxNBHDILg9wHKFiYsRks0RbKccbj65Hnhzs%2B4eLJwumDFCR7zbcZUiHPboDcluB3YyhdXRJU7ukJp6xSErkTnjQD3R1BZqvH%2BTgC2CHNXxSqO7q1cu71BP7vmLY6M46uSzfHFwmjdsAVE%2F%2BJm07diqgHt%2BNlA%2FgfcnfJZQ3poIKQVttBWm7Y7l%2BZW%2FU1s7fRFaOPh7Vfvn8EACVk6RQDBIsvL2MpH8o3gNxBB71HiSPRN8xpB8tU51B3HKmGaKjcWxQknSDjDFcrowAdJVJ13tzf%2FC2T5mjWq13a0Ky%2F7JFnWechL50COJ3FQXqmfuX4syDPT5oLtAtMVKsUtfUjY52jhXSgUnYs8twBcbCx20R6n0R%2FuFb7%2FWk7K%2FuHOxhGWwOSjZAv6HqRFWCDmctdrlyD7i2wo14%2FT32gMJ1p4IzKv8C1X7A0aweluc5YmBROgGVrkW8ulDoUFub6XifTzobJQIW4MjUcCpIKtwWPFUqk3XeAubu48R2q5B%2B4QNccMN%2F29Qx1NPy3U32xgYPIXtbbim0Y7fxKYmjvRM6%2FnfSdaN9d7CGAMM9e7%2BcwZeVuRFfmah9z5NTgfdlSu7dV84flx5gVAZ8hickwAKV5Nluf8Rx8zXzswOxvka35yADQTJgnmaeTvxoPyPyY%2FMs2cC7wrv2Q%2B95n7De%2BpXDP1begEbYbho%2FkrwQePqVD64GUfzbdVzT03o44uR8XhXuM9HCwfYEnNuYg76tq4nvp8%2Bfaw1C%2Btdysbes5Do7gLy2yEkoX8eTv2PXp8KJ0QuY8iJHkl4C4jVnjBzYAClTmHrranKtVV%2F%2B2Z5Xfq86Vf3di9DF3NNpTsMEBB8Ui%2FWJ4NbTY6Tn3zDTT%2B2HoMhzvCWE1%2B9NosnCjKJQByx19Gct%2BstdqNjn4M51ckZPskKNqIjPZ1AFISVMaxXcp140M74gfMOQpHm0In%2BNgCw0rkjy2LGrtrUDLvRdf0RRkpqyB8cMPHNv4QxvnPQr%2BF4o7Tf2YYPaz7JtZtGhpe8Atz4sanlbn%2Bq%2BhjDYwBp6A5q1779FLlu5fiFH8ByuoZ6LxtRBluGt9G5auYewXNxPP4v7N0AOzcoPC7%2FwBfh%2BUgcZXzvgAAAABJRU5ErkJggg%3D%3D",
+});
+const LANDING_PAGE = "http://discover.msn.com/tourmsn?skipintro=true&bdef=0";
+const PREF_HOME = "browser.startup.homepage";
+const PREF_HOME_RESET = "browser.startup.homepage_reset";
+const PREF_KEYWORD = "keyword.URL";
+const SEARCH_DOMAIN = "www.bing.com";
+const SEARCH_ICON = "data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAVpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8ysf97zf%2B24%2F%2FF6f%2FF6f%2FF6f%2BK0%2F9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP%2BZ2P%2F%2F%2F%2F%2F%2F%2F%2F%2Fw%2Bf%2FF6f%2FF6f%2Fi9P%2F%2F%2F%2F%2F%2F%2F%2F%2FT7v9Bt%2F8Vpv8Vpv8Vpv8Vpv%2FT7v%2F%2F%2F%2F%2Fw%2Bf97zf8Vpv8Vpv8Vpv8Vpv9QvP%2FT7v%2F%2F%2F%2F%2Fw%2Bf9Bt%2F8Vpv8Vpv97zf%2F%2F%2F%2F%2F%2F%2F%2F9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP%2Fi9P%2F%2F%2F%2F%2Fi9P8Vpv8Vpv%2B24%2F%2F%2F%2F%2F%2Fi9P8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv%2BK0%2F%2F%2F%2F%2F%2F%2F%2F%2F8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F8krP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv%2Bn3v%2F%2F%2F%2F%2Fw%2Bf8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F%2Bn3v8krP8Vpv8Vpv8Vpv8Vpv8Vpv9tx%2F%2F%2F%2F%2F%2F%2F%2F%2F%2BZ2P8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fi9P%2BK0%2F9QvP9QvP9tx%2F%2FF6f%2F%2F%2F%2F%2F%2F%2F%2F%2Bn3v8Vpv8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2FT7v%2BZ2P%2Fi9P%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2B24%2F9QvP8Vpv8Vpv8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2FF6f8Vpv8Vpv8krP9QvP9QvP9Bt%2F8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv%2FF6f%2F%2F%2F%2F%2FF6f8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv9Bt%2F9QvP9Bt%2F8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8AAHBsAABhdAAAbiAAAHJ0AABsaQAAdGkAACBDAABlbgAAUEEAAEVYAAAuQwAAOy4AAEU7AABBVAAAQ00AAC5W";
+const SEARCH_HOME_URL = "http://www.msn.com/?pc=MOZM";
+const SEARCH_KEYWORD_URL = "http://www.bing.com/search?form=MOZMLB&pc=MOZM&q=";
+const SEARCH_NAME = "Bing";
+const SEARCH_POSITION = 0;
+const SEARCH_URL = "http://www.bing.com/search?form=MOZMSB&pc=MOZM&q={searchTerms}";
+
+// Look through tabs in the browser to see if any match
+function findOpenTab(browser, checkTabAndURI) {
+ let foundTab;
+ Array.some(browser.tabs, function(tab) {
+ // Check if there's an existing page
+ try {
+ // Use an activate navigation if it's still loading
+ let {currentURI, webNavigation, __SS_data} = tab.linkedBrowser;
+ let channel = webNavigation.documentChannel;
+ if (channel != null)
+ currentURI = channel.originalURI
+
+ // Use the session restore entry if it's still restoring
+ if (currentURI.spec == "about:blank" && __SS_data != null)
+ currentURI = Services.io.newURI(__SS_data.entries[0].url, null, null);
+
+ // Short circuit now that we found it
+ if (checkTabAndURI(tab, currentURI)) {
+ foundTab = tab;
+ return true;
+ }
+ }
+ catch(ex) {}
+ });
+ return foundTab;
+}
+
+// Get a MSN url with a partner code
+function getMsnBase(path, from) {
+ return "http://now.msn.com/" + path + "?pc=MOZM&source=" +
+ platform + "-" + from;
+}
274 partners/msn-us/distribution/extensions/firefoxmsn.full@microsoft.com/scripts/utils.js
View
@@ -0,0 +1,274 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Home Dash Utility.
+ *
+ * The Initial Developer of the Original Code is The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Edward Lee <edilee@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+"use strict";
+
+/**
+ * Get a localized string with string replacement arguments filled in and
+ * correct plural form picked if necessary.
+ *
+ * @note: Initialize the strings to use with getString.init(addon).
+ *
+ * @usage getString(name): Get the localized string for the given name.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @return [string]: Localized string for the string name.
+ *
+ * @usage getString(name, arg): Replace %S references in the localized string.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @param [any] arg: Value to insert for instances of %S.
+ * @return [string]: Localized string with %S references replaced.
+ *
+ * @usage getString(name, args): Replace %1$S references in localized string.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @param [array of any] args: Array of values to replace references like %1$S.
+ * @return [string]: Localized string with %N$S references replaced.
+ *
+ * @usage getString(name, args, plural): Pick the correct plural form.
+ * @param [string] name: Corresponding string name in the properties file.
+ * @param [array of any] args: Array of values to replace references like %1$S.
+ * @param [number] plural: Number to decide what plural form to use.
+ * @return [string]: Localized string of the correct plural form.
+ */
+function getString(name, args, plural) {
+ // Use the cached bundle to retrieve the string
+ let str;
+ try {
+ str = getString.bundle.GetStringFromName(name);
+ }
+ // Use the fallback in-case the string isn't localized
+ catch(ex) {
+ str = getString.fallback.GetStringFromName(name);
+ }
+
+ // Pick out the correct plural form if necessary
+ if (plural != null)
+ str = getString.plural(plural, str);
+
+ // Fill in the arguments if necessary
+ if (args != null) {
+ // Convert a string or something not array-like to an array
+ if (typeof args == "string" || args.length == null)
+ args = [args];
+
+ // Assume %S refers to the first argument
+ str = str.replace(/%s/gi, args[0]);
+
+ // Replace instances of %N$S where N is a 1-based number
+ Array.forEach(args, function(replacement, index) {
+ str = str.replace(RegExp("%" + (index + 1) + "\\$S", "gi"), replacement);
+ });
+ }
+
+ return str;
+}
+
+/**
+ * Initialize getString() for the provided add-on.
+ *
+ * @usage getString.init(addon): Load properties file for the add-on.
+ * @param [object] addon: Add-on object from AddonManager
+ *
+ * @usage getString.init(addon, getAlternate): Load properties with alternate.
+ * @param [object] addon: Add-on object from AddonManager
+ * @param [function] getAlternate: Convert a locale to an alternate locale
+ */
+getString.init = function(addon, getAlternate) {
+ // Set a default get alternate function if it doesn't exist
+ if (typeof getAlternate != "function")
+ getAlternate = function() "en-US";
+
+ // Get the bundled properties file for the app's locale
+ function getBundle(locale) {
+ let propertyPath = "locales/" + locale + ".properties";
+ let propertyFile = addon.getResourceURI(propertyPath);
+
+ // Get a bundle and test if it's able to do simple things
+ try {
+ // Avoid caching issues by always getting a new file
+ let uniqueFileSpec = propertyFile.spec + "#" + Math.random();
+ let bundle = Services.strings.createBundle(uniqueFileSpec);
+ bundle.getSimpleEnumeration();
+ return bundle;
+ }
+ catch(ex) {}
+
+ // The locale must not exist, so give nothing
+ return null;
+ }
+
+ // Use the current locale or the alternate as the primary bundle
+ let locale = Cc["@mozilla.org/chrome/chrome-registry;1"].
+ getService(Ci.nsIXULChromeRegistry).getSelectedLocale("global");
+ getString.bundle = getBundle(locale) || getBundle(getAlternate(locale));
+
+ // Create a fallback in-case a string is missing
+ getString.fallback = getBundle("en-US");
+
+ // Get the appropriate plural form getter
+ Cu.import("resource://gre/modules/PluralForm.jsm");
+ let rule = getString("pluralRule");
+ [getString.plural] = PluralForm.makeGetter(rule);
+}
+
+/**
+ * Helper that adds event listeners and remembers to remove on unload
+ */
+function listen(window, node, event, func, capture) {
+ // Default to use capture
+ if (capture == null)
+ capture = true;
+
+ node.addEventListener(event, func, capture);
+ function undoListen() {
+ node.removeEventListener(event, func, capture);
+ }
+
+ // Undo the listener on unload and provide a way to undo everything
+ let undoUnload = unload(undoListen, window);
+ return function() {
+ undoListen();
+ undoUnload();
+ };
+}
+
+/**
+ * Save callbacks to run when unloading. Optionally scope the callback to a
+ * container, e.g., window. Provide a way to run all the callbacks.
+ *
+ * @usage unload(): Run all callbacks and release them.
+ *
+ * @usage unload(callback): Add a callback to run on unload.
+ * @param [function] callback: 0-parameter function to call on unload.
+ * @return [function]: A 0-parameter function that undoes adding the callback.
+ *
+ * @usage unload(callback, container) Add a scoped callback to run on unload.
+ * @param [function] callback: 0-parameter function to call on unload.
+ * @param [node] container: Remove the callback when this container unloads.
+ * @return [function]: A 0-parameter function that undoes adding the callback.
+ */
+function unload(callback, container) {
+ // Initialize the array of unloaders on the first usage
+ let unloaders = unload.unloaders;
+ if (unloaders == null)
+ unloaders = unload.unloaders = [];
+
+ // Calling with no arguments runs all the unloader callbacks
+ if (callback == null) {
+ unloaders.slice().forEach(function(unloader) unloader());
+ unloaders.length = 0;
+ return;
+ }
+
+ // The callback is bound to the lifetime of the container if we have one
+ if (container != null) {
+ // Remove the unloader when the container unloads
+ container.addEventListener("unload", removeUnloader, false);
+
+ // Wrap the callback to additionally remove the unload listener
+ let origCallback = callback;
+ callback = function() {
+ container.removeEventListener("unload", removeUnloader, false);
+ origCallback();
+ }
+ }
+
+ // Wrap the callback in a function that ignores failures
+ function unloader() {
+ try {
+ callback();
+ }
+ catch(ex) {}
+ }
+ unloaders.push(unloader);
+
+ // Provide a way to remove the unloader
+ function removeUnloader() {
+ let index = unloaders.indexOf(unloader);
+ if (index != -1)
+ unloaders.splice(index, 1);
+ }
+ return removeUnloader;
+}
+
+/**
+ * Apply a callback to each open and new browser windows.
+ *
+ * @usage watchWindows(callback): Apply a callback to each browser window.
+ * @param [function] callback: 1-parameter function that gets a browser window.
+ */
+function watchWindows(callback) {
+ // Wrap the callback in a function that ignores failures
+ function watcher(window) {
+ try {
+ // Now that the window has loaded, only handle browser windows
+ let {documentElement} = window.document;
+ if (documentElement.getAttribute("windowtype") == "navigator:browser")
+ callback(window);
+ }
+ catch(ex) {}
+ }
+
+ // Wait for the window to finish loading before running the callback
+ function runOnLoad(window) {
+ // Listen for one load event before checking the window type
+ window.addEventListener("load", function runOnce() {
+ window.removeEventListener("load", runOnce, false);
+ watcher(window);
+ }, false);
+ }
+
+ // Add functionality to existing windows
+ let windows = Services.wm.getEnumerator(null);
+ while (windows.hasMoreElements()) {
+ // Only run the watcher immediately if the window is completely loaded
+ let window = windows.getNext();
+ if (window.document.readyState == "complete")
+ watcher(window);
+ // Wait for the window to load before continuing
+ else
+ runOnLoad(window);
+ }
+
+ // Watch for new browser windows opening then wait for it to load
+ function windowWatcher(subject, topic) {
+ if (topic == "domwindowopened")
+ runOnLoad(subject);
+ }
+ Services.ww.registerNotification(windowWatcher);
+
+ // Make sure to stop watching for windows if we're unloading
+ unload(function() Services.ww.unregisterNotification(windowWatcher));
+}
17 partners/msn-us/distribution/searchplugins/common/bing.xml
View
@@ -0,0 +1,17 @@
+<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
+ <ShortName>Bing</ShortName>
+ <Description>Bing. Search by Microsoft.</Description>
+ <InputEncoding>UTF-8</InputEncoding>
+ <Image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAVpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8ysf97zf+24//F6f/F6f/F6f+K0/9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP+Z2P/////////w+f/F6f/F6f/i9P/////////T7v9Bt/8Vpv8Vpv8Vpv8Vpv/T7v/////w+f97zf8Vpv8Vpv8Vpv8Vpv9QvP/T7v/////w+f9Bt/8Vpv8Vpv97zf////////9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP/i9P/////i9P8Vpv8Vpv+24//////i9P8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+K0/////////8Vpv8Vpv/F6f////////8krP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+n3v/////w+f8Vpv8Vpv/F6f////////+n3v8krP8Vpv8Vpv8Vpv8Vpv8Vpv9tx/////////+Z2P8Vpv8Vpv/F6f/////////////i9P+K0/9QvP9QvP9tx//F6f////////+n3v8Vpv8Vpv8Vpv/F6f/////T7v+Z2P/i9P////////////////////+24/9QvP8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8krP9QvP9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv9Bt/9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8AAHBsAABhdAAAbiAAAHJ0AABsaQAAdGkAACBDAABlbgAAUEEAAEVYAAAuQwAAOy4AAEU7AABBVAAAQ00AAC5W</Image>
+ <Url type="application/x-suggestions+json" template="http://api.bing.com/osjson.aspx">
+ <Param name="query" value="{searchTerms}"/>
+ <Param name="form" value="MOZFSB"/>
+ <Param name="pc" value="MOZM"/>
+ </Url>
+ <Url type="text/html" method="GET" template="http://www.bing.com/search">
+ <Param name="q" value="{searchTerms}"/>
+ <Param name="form" value="MOZFSB"/>
+ <Param name="pc" value="MOZM"/>
+ </Url>
+ <SearchForm>http://www.bing.com/search</SearchForm>
+</SearchPlugin>
8 partners/msn-us/repack.cfg
View
@@ -0,0 +1,8 @@
+aus="msnus"
+dist_id="msnus"
+dist_version="1.0"
+linux-i686=false
+locales="en-US"
+mac=true
+win32=true
+migrationWizardDisabled=true
Please sign in to comment.
Something went wrong with that request. Please try again.