Backed out 6 changesets (bug 1132301) for various test failures.
authorRyan VanderMeulen <ryanvm@gmail.com>
Wed, 15 Apr 2015 14:22:32 -0400
changeset 265617 9b2e30c662d67d435f763e42ef7b82bfdc310aae
parent 265616 0cb54dc95c80373e8e940fd72d37b495c757c38e
child 265618 2db797961dda984314341dbadfa8ad2121e81f24
push id4718
push userraliiev@mozilla.com
push dateMon, 11 May 2015 18:39:53 +0000
treeherdermozilla-beta@c20c4ef55f08 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1132301
milestone39.0a2
backs out1687db474cd21946901fa9f1297de4da58cf088e
719d7e41abeac7fee33b6d7ab4676ed6b537c3af
d83f5a2c95215469d42e0e9300ef4b379926ac2a
c3999b13c644ba1511350539a1ec45a539d5903a
f1064a1b4a2ab8f8e1e9cce0c1c9badf094740a9
8eafef4aa1c337976a92883496af909e5dc09cbb
Backed out 6 changesets (bug 1132301) for various test failures. Backed out changeset 1687db474cd2 (bug 1132301) Backed out changeset 719d7e41abea (bug 1132301) Backed out changeset d83f5a2c9521 (bug 1132301) Backed out changeset c3999b13c644 (bug 1132301) Backed out changeset f1064a1b4a2a (bug 1132301) Backed out changeset 8eafef4aa1c3 (bug 1132301)
browser/app/profile/firefox.js
browser/components/customizableui/CustomizableWidgets.jsm
browser/components/loop/MozLoopAPI.jsm
browser/components/loop/content/css/contacts.css
browser/components/loop/content/css/panel.css
browser/components/loop/content/js/panel.js
browser/components/loop/content/js/panel.jsx
browser/components/loop/content/js/roomViews.js
browser/components/loop/content/js/roomViews.jsx
browser/components/loop/content/shared/css/common.css
browser/components/loop/content/shared/css/conversation.css
browser/components/loop/content/shared/img/icons-16x16.svg
browser/components/loop/content/shared/js/actions.js
browser/components/loop/content/shared/js/activeRoomStore.js
browser/components/loop/content/shared/js/mixins.js
browser/components/loop/content/shared/js/roomStore.js
browser/components/loop/standalone/content/img/logo.png
browser/components/loop/standalone/content/index.html
browser/components/loop/test/desktop-local/panel_test.js
browser/components/loop/test/desktop-local/roomViews_test.js
browser/components/loop/test/mochitest/browser.ini
browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
browser/components/loop/test/mochitest/browser_mozLoop_socialShare.js
browser/components/loop/test/mochitest/head.js
browser/components/loop/test/shared/activeRoomStore_test.js
browser/components/loop/test/shared/roomStore_test.js
browser/components/loop/ui/ui-showcase.js
browser/components/loop/ui/ui-showcase.jsx
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1720,19 +1720,19 @@ pref("loop.ping.timeout", 10000);
 pref("loop.feedback.baseUrl", "https://input.mozilla.org/api/v1/feedback");
 pref("loop.feedback.product", "Loop");
 pref("loop.debug.loglevel", "Error");
 pref("loop.debug.dispatcher", false);
 pref("loop.debug.websocket", false);
 pref("loop.debug.sdk", false);
 pref("loop.debug.twoWayMediaTelemetry", false);
 #ifdef DEBUG
-pref("loop.CSP", "default-src 'self' about: file: chrome: http://localhost:*; img-src * data:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net http://localhost:* ws://localhost:*; media-src blob:");
+pref("loop.CSP", "default-src 'self' about: file: chrome: http://localhost:*; img-src *; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net http://localhost:* ws://localhost:*; media-src blob:");
 #else
-pref("loop.CSP", "default-src 'self' about: file: chrome:; img-src * data:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net; media-src blob:");
+pref("loop.CSP", "default-src 'self' about: file: chrome:; img-src *; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net; media-src blob:");
 #endif
 pref("loop.oauth.google.redirect_uri", "urn:ietf:wg:oauth:2.0:oob:auto");
 pref("loop.oauth.google.scope", "https://www.google.com/m8/feeds");
 pref("loop.fxa_oauth.tokendata", "");
 pref("loop.fxa_oauth.profile", "");
 pref("loop.support_url", "https://support.mozilla.org/kb/group-conversations-firefox-hello-webrtc");
 pref("loop.contacts.gravatars.show", false);
 pref("loop.contacts.gravatars.promo", true);
--- a/browser/components/customizableui/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/CustomizableWidgets.jsm
@@ -408,41 +408,16 @@ const CustomizableWidgets = [
       node.setAttribute("id", this.id);
       node.classList.add("toolbarbutton-1");
       node.classList.add("chromeclass-toolbar-additional");
       node.setAttribute("label", CustomizableUI.getLocalizedProperty(this, "label"));
       node.setAttribute("tooltiptext", CustomizableUI.getLocalizedProperty(this, "tooltiptext"));
       node.setAttribute("removable", "true");
       node.setAttribute("observes", "Social:PageShareOrMark");
       node.setAttribute("command", "Social:SharePage");
-
-      let listener = {
-        onWidgetAdded: (aWidgetId) => {
-          if (aWidgetId != this.id)
-            return;
-
-          Services.obs.notifyObservers(null, "social:" + this.id + "-added", null);
-        },
-
-        onWidgetRemoved: aWidgetId => {
-          if (aWidgetId != this.id)
-            return;
-
-          Services.obs.notifyObservers(null, "social:" + this.id + "-removed", null);
-        },
-
-        onWidgetInstanceRemoved: (aWidgetId, aDoc) => {
-          if (aWidgetId != this.id || aDoc != aDocument)
-            return;
-
-          CustomizableUI.removeListener(listener);
-        }
-      };
-      CustomizableUI.addListener(listener);
-
       return node;
     }
   }, {
     id: "add-ons-button",
     shortcutId: "key_openAddons",
     tooltiptext: "add-ons-button.tooltiptext3",
     defaultArea: CustomizableUI.AREA_PANEL,
     onCommand: function(aEvent) {
--- a/browser/components/loop/MozLoopAPI.jsm
+++ b/browser/components/loop/MozLoopAPI.jsm
@@ -24,18 +24,16 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "PageMetadata",
                                         "resource://gre/modules/PageMetadata.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
                                         "resource://gre/modules/PluralForm.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "UpdateChannel",
                                         "resource://gre/modules/UpdateChannel.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "UITour",
                                         "resource:///modules/UITour.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Social",
-                                        "resource:///modules/Social.jsm");
 XPCOMUtils.defineLazyGetter(this, "appInfo", function() {
   return Cc["@mozilla.org/xre/app-info;1"]
            .getService(Ci.nsIXULAppInfo)
            .QueryInterface(Ci.nsIXULRuntime);
 });
 XPCOMUtils.defineLazyServiceGetter(this, "clipboardHelper",
                                          "@mozilla.org/widget/clipboardhelper;1",
                                          "nsIClipboardHelper");
@@ -199,20 +197,16 @@ const injectObjectAPI = function(api, ta
 function injectLoopAPI(targetWindow) {
   let ringer;
   let ringerStopper;
   let appVersionInfo;
   let contactsAPI;
   let roomsAPI;
   let callsAPI;
   let savedWindowListeners = new Map();
-  let socialProviders;
-  const kShareWidgetId = "social-share-button";
-  let socialShareButtonListenersAdded = false;
-
 
   let api = {
     /**
      * Gets an object with data that represents the currently
      * authenticated user's identity.
      *
      * @return null if user not logged in; profile object otherwise
      */
@@ -914,222 +908,30 @@ function injectLoopAPI(targetWindow) {
      * @param {Boolean} active  Whether or not screen sharing is now active.
      */
     setScreenShareState: {
       enumerable: true,
       writable: true,
       value: function(windowId, active) {
         MozLoopService.setScreenShareState(windowId, active);
       }
-    },
-
-    /**
-     * Checks if the Social Share widget is available in any of the registered
-     * widget areas (navbar, MenuPanel, etc).
-     *
-     * @return {Boolean} `true` if the widget is available and `false` when it's
-     *                   still in the Customization palette.
-     */
-    isSocialShareButtonAvailable: {
-      enumerable: true,
-      writable: true,
-      value: function() {
-        let win = Services.wm.getMostRecentWindow("navigator:browser");
-        if (!win || !win.CustomizableUI) {
-          return false;
-        }
-
-        let widget = win.CustomizableUI.getWidget(kShareWidgetId);
-        if (widget) {
-          if (!socialShareButtonListenersAdded) {
-            let eventName = "social:" + kShareWidgetId;
-            Services.obs.addObserver(onShareWidgetChanged, eventName + "-added", false);
-            Services.obs.addObserver(onShareWidgetChanged, eventName + "-removed", false);
-            socialShareButtonListenersAdded = true;
-          }
-          return !!widget.areaType;
-        }
-
-        return false;
-      }
-    },
-
-    /**
-     * Add the Social Share widget to the navbar area, but only when it's not
-     * located anywhere else than the Customization palette.
-     */
-    addSocialShareButton: {
-      enumerable: true,
-      writable: true,
-      value: function() {
-        // Don't do anything if the button is already available.
-        if (api.isSocialShareButtonAvailable.value()) {
-          return;
-        }
-
-        let win = Services.wm.getMostRecentWindow("navigator:browser");
-        if (!win || !win.CustomizableUI) {
-          return;
-        }
-        win.CustomizableUI.addWidgetToArea(kShareWidgetId, win.CustomizableUI.AREA_NAVBAR);
-      }
-    },
-
-    /**
-     * Activates the Social Share panel with the Social Provider panel opened
-     * when the popup open.
-     */
-    addSocialShareProvider: {
-      enumerable: true,
-      writable: true,
-      value: function() {
-        // Don't do anything if the button is _not_ available.
-        if (!api.isSocialShareButtonAvailable.value()) {
-          return;
-        }
-
-        let win = Services.wm.getMostRecentWindow("navigator:browser");
-        if (!win || !win.SocialShare) {
-          return;
-        }
-        win.SocialShare.showDirectory();
-      }
-    },
-
-    /**
-     * Returns a sorted list of Social Providers that can share URLs. See
-     * `updateSocialProvidersCache()` for more information.
-     * 
-     * @return {Array} Sorted list of share-capable Social Providers.
-     */
-    getSocialShareProviders: {
-      enumerable: true,
-      writable: true,
-      value: function() {
-        if (socialProviders) {
-          return socialProviders;
-        }
-        return updateSocialProvidersCache();
-      }
-    },
-
-    /**
-     * Share a room URL through a Social Provider with the provided title message.
-     * This action will open the share panel, which is anchored to the Social
-     * Share widget.
-     *
-     * @param {String} providerOrigin Identifier of the targeted Social Provider
-     * @param {String} roomURL        URL that points to the standalone client
-     * @param {String} title          Message that augments the URL inside the
-     *                                share message
-     * @param {String} [body]         Optional longer message to be displayed
-     *                                similar to the body of an email 
-     */
-    socialShareRoom: {
-      enumerable: true,
-      writable: true,
-      value: function(providerOrigin, roomURL, title, body = null) {
-        let win = Services.wm.getMostRecentWindow("navigator:browser");
-        if (!win || !win.SocialShare) {
-          return;
-        }
-
-        let graphData = {
-          url: roomURL,
-          title: title
-        };
-        if (body) {
-          graphData.body = body;
-        }
-        win.SocialShare.sharePage(providerOrigin, graphData);
-      }
     }
   };
 
-  /**
-   * Send an event to the content window to indicate that the state on the chrome
-   * side was updated.
-   *
-   * @param  {name} name Name of the event, defaults to 'LoopStatusChanged'
-   */
-  function sendEvent(name = "LoopStatusChanged") {
-    if (typeof targetWindow.CustomEvent != "function") {
-      MozLoopService.log.debug("Could not send event to content document, " +
-        "because it's being destroyed or we're in a unit test where " +
-        "`targetWindow` is mocked.");
-      return;
-    }
-
-    let event = new targetWindow.CustomEvent(name);
+  function onStatusChanged(aSubject, aTopic, aData) {
+    let event = new targetWindow.CustomEvent("LoopStatusChanged");
     targetWindow.dispatchEvent(event);
-  }
-
-  function onStatusChanged(aSubject, aTopic, aData) {
-    sendEvent();
-  }
+  };
 
   function onDOMWindowDestroyed(aSubject, aTopic, aData) {
     if (targetWindow && aSubject != targetWindow)
       return;
     Services.obs.removeObserver(onDOMWindowDestroyed, "dom-window-destroyed");
     Services.obs.removeObserver(onStatusChanged, "loop-status-changed");
-    // Stop listening for changes in the social provider list, if necessary.
-    if (socialProviders)
-      Services.obs.removeObserver(updateSocialProvidersCache, "social:providers-changed");
-    if (socialShareButtonListenersAdded) {
-      let eventName = "social:" + kShareWidgetId;
-      Services.obs.removeObserver(onShareWidgetChanged, eventName + "-added");
-      Services.obs.removeObserver(onShareWidgetChanged, eventName + "-removed");
-    }
-  }
-
-  function onShareWidgetChanged(aSubject, aTopic, aData) {
-    sendEvent("LoopShareWidgetChanged");
-  }
-
-  /**
-   * Retrieves a list of Social Providers from the Social API that are explicitly
-   * capable of sharing URLs.
-   * It also adds a listener that is fired whenever a new Provider is added or
-   * removed.
-   *
-   * @return {Array} Sorted list of share-capable Social Providers.
-   */
-  function updateSocialProvidersCache() {
-    let providers = [];
-
-    for (let provider of Social.providers) {
-      if (!provider.shareURL) {
-        continue;
-      }
-
-      // Only pass the relevant data on to content.
-      providers.push({
-        iconURL: provider.iconURL,
-        name: provider.name,
-        origin: provider.origin
-      });
-    }
-
-    let providersWasSet = !!socialProviders;
-    // Replace old with new.
-    socialProviders = cloneValueInto(providers.sort((a, b) =>
-      a.name.toLowerCase().localeCompare(b.name.toLowerCase())), targetWindow);
-
-    // Start listening for changes in the social provider list, if we're not
-    // doing that yet.
-    if (!providersWasSet) {
-      Services.obs.addObserver(updateSocialProvidersCache, "social:providers-changed", false);
-    } else {
-      // Dispatch an event to content to let stores freshen-up.
-      sendEvent("LoopSocialProvidersChanged");
-    }
-
-    return socialProviders;
-  }
+  };
 
   let contentObj = Cu.createObjectIn(targetWindow);
   Object.defineProperties(contentObj, api);
   Object.seal(contentObj);
   Cu.makeObjectPropsNormal(contentObj);
   Services.obs.addObserver(onStatusChanged, "loop-status-changed", false);
   Services.obs.addObserver(onDOMWindowDestroyed, "dom-window-destroyed", false);
 
--- a/browser/components/loop/content/css/contacts.css
+++ b/browser/components/loop/content/css/contacts.css
@@ -189,21 +189,22 @@
 }
 
 .contact > .dropdown-menu-up {
   bottom: 10px;
   top: auto;
 }
 
 .contact > .dropdown-menu > .dropdown-menu-item > .icon {
+  display: inline-block;
   width: 20px;
   height: 10px;
   background-position: center left;
   background-size: 10px 10px;
-  margin-top: 3px;
+  background-repeat: no-repeat;
 }
 
 .contact > .dropdown-menu > .dropdown-menu-item > .icon-audio-call {
   background-image: url("../shared/img/icons-16x16.svg#audio");
 }
 
 .contact > .dropdown-menu > .dropdown-menu-item > .icon-video-call {
   background-image: url("../shared/img/icons-16x16.svg#video");
--- a/browser/components/loop/content/css/panel.css
+++ b/browser/components/loop/content/css/panel.css
@@ -450,16 +450,54 @@ body[dir=rtl] .rooms > div > .context > 
 }
 
 .button-close:hover,
 .button-close:hover:active {
   background-color: transparent;
   border: none;
 }
 
+/* Dropdown menu */
+
+.dropdown {
+  position: relative;
+}
+
+.dropdown-menu {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  background-color: #fdfdfd;
+  box-shadow: 0 1px 3px rgba(0,0,0,.3);
+  list-style: none;
+  padding: 5px;
+  border-radius: 2px;
+}
+
+body[dir=rtl] .dropdown-menu-item {
+  left: auto;
+  right: 10px;
+}
+
+.dropdown-menu-item {
+  text-align: start;
+  margin: .3em 0;
+  padding: .2em .5em;
+  cursor: pointer;
+  border: 1px solid transparent;
+  border-radius: 2px;
+  font-size: 1em;
+  white-space: nowrap;
+}
+
+.dropdown-menu-item:hover {
+  border: 1px solid #ccc;
+  background-color: #eee;
+}
+
 /* Spinner */
 
 @keyframes spinnerRotate {
   to { transform: rotate(360deg); }
 }
 
 .spinner {
   width: 16px;
@@ -691,21 +729,21 @@ body[dir=rtl] .generate-url-spinner {
      set by .dropdown-menu */
   top: auto;
   left: auto;
   bottom: -8px;
   right: 14px;
 }
 
 .settings-menu .icon {
+  display: inline-block;
   background-size: contain;
   width: 12px;
   height: 12px;
   margin-right: 1em;
-  margin-top: 2px;
 }
 
 .settings-menu .icon-settings {
   background: transparent url(../shared/img/svg/glyph-settings-16x16.svg) no-repeat center center;
 }
 
 .settings-menu .icon-tour {
   background: transparent url("../shared/img/icons-16x16.svg#tour") no-repeat center center;
--- a/browser/components/loop/content/js/panel.js
+++ b/browser/components/loop/content/js/panel.js
@@ -162,17 +162,18 @@ loop.panel = (function(_, mozL10n) {
                               mozL10n.get("display_name_available_status");
 
       return (
         React.createElement("div", {className: "dropdown"}, 
           React.createElement("p", {className: "dnd-status", onClick: this.showDropdownMenu}, 
             React.createElement("span", null, availabilityText), 
             React.createElement("i", {className: availabilityStatus})
           ), 
-          React.createElement("ul", {className: availabilityDropdown}, 
+          React.createElement("ul", {className: availabilityDropdown, 
+              onMouseLeave: this.hideDropdownMenu}, 
             React.createElement("li", {onClick: this.changeAvailability("available"), 
                 className: "dropdown-menu-item dnd-make-available"}, 
               React.createElement("i", {className: "status status-available"}), 
               React.createElement("span", null, mozL10n.get("display_name_available_status"))
             ), 
             React.createElement("li", {onClick: this.changeAvailability("do-not-disturb"), 
                 className: "dropdown-menu-item dnd-make-unavailable"}, 
               React.createElement("i", {className: "status status-dnd"}), 
@@ -339,17 +340,18 @@ loop.panel = (function(_, mozL10n) {
 
     render: function() {
       var cx = React.addons.classSet;
 
       return (
         React.createElement("div", {className: "settings-menu dropdown"}, 
           React.createElement("a", {className: "button-settings", onClick: this.showDropdownMenu, 
              title: mozL10n.get("settings_menu_button_tooltip")}), 
-          React.createElement("ul", {className: cx({"dropdown-menu": true, hide: !this.state.showMenu})}, 
+          React.createElement("ul", {className: cx({"dropdown-menu": true, hide: !this.state.showMenu}), 
+              onMouseLeave: this.hideDropdownMenu}, 
             React.createElement(SettingsDropdownEntry, {label: mozL10n.get("settings_menu_item_settings"), 
                                    onClick: this.handleClickSettingsEntry, 
                                    displayed: false, 
                                    icon: "settings"}), 
             React.createElement(SettingsDropdownEntry, {label: mozL10n.get("settings_menu_item_account"), 
                                    onClick: this.handleClickAccountEntry, 
                                    icon: "account", 
                                    displayed: this._isSignedIn() && navigator.mozLoop.fxAEnabled}), 
--- a/browser/components/loop/content/js/panel.jsx
+++ b/browser/components/loop/content/js/panel.jsx
@@ -162,17 +162,18 @@ loop.panel = (function(_, mozL10n) {
                               mozL10n.get("display_name_available_status");
 
       return (
         <div className="dropdown">
           <p className="dnd-status" onClick={this.showDropdownMenu}>
             <span>{availabilityText}</span>
             <i className={availabilityStatus}></i>
           </p>
-          <ul className={availabilityDropdown}>
+          <ul className={availabilityDropdown}
+              onMouseLeave={this.hideDropdownMenu}>
             <li onClick={this.changeAvailability("available")}
                 className="dropdown-menu-item dnd-make-available">
               <i className="status status-available"></i>
               <span>{mozL10n.get("display_name_available_status")}</span>
             </li>
             <li onClick={this.changeAvailability("do-not-disturb")}
                 className="dropdown-menu-item dnd-make-unavailable">
               <i className="status status-dnd"></i>
@@ -339,17 +340,18 @@ loop.panel = (function(_, mozL10n) {
 
     render: function() {
       var cx = React.addons.classSet;
 
       return (
         <div className="settings-menu dropdown">
           <a className="button-settings" onClick={this.showDropdownMenu}
              title={mozL10n.get("settings_menu_button_tooltip")} />
-          <ul className={cx({"dropdown-menu": true, hide: !this.state.showMenu})}>
+          <ul className={cx({"dropdown-menu": true, hide: !this.state.showMenu})}
+              onMouseLeave={this.hideDropdownMenu}>
             <SettingsDropdownEntry label={mozL10n.get("settings_menu_item_settings")}
                                    onClick={this.handleClickSettingsEntry}
                                    displayed={false}
                                    icon="settings" />
             <SettingsDropdownEntry label={mozL10n.get("settings_menu_item_account")}
                                    onClick={this.handleClickAccountEntry}
                                    icon="account"
                                    displayed={this._isSignedIn() && navigator.mozLoop.fxAEnabled} />
--- a/browser/components/loop/content/js/roomViews.js
+++ b/browser/components/loop/content/js/roomViews.js
@@ -50,120 +50,21 @@ loop.roomViews = (function(mozL10n) {
       var storeState = this.props.roomStore.getStoreState("activeRoom");
       return _.extend({
         // Used by the UI showcase.
         roomState: this.props.roomState || storeState.roomState
       }, storeState);
     }
   };
 
-  var SocialShareDropdown = React.createClass({displayName: "SocialShareDropdown",
-    mixins: [ActiveRoomStoreMixin],
-
-    propTypes: {
-      dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
-      show: React.PropTypes.bool.isRequired
-    },
-
-    handleToolbarAddButtonClick: function(event) {
-      event.preventDefault();
-
-      this.props.dispatcher.dispatch(new sharedActions.AddSocialShareButton());
-    },
-
-    handleAddServiceClick: function(event) {
-      event.preventDefault();
-
-      this.props.dispatcher.dispatch(new sharedActions.AddSocialShareProvider());
-    },
-
-    handleProviderClick: function(event) {
-      event.preventDefault();
-
-      var origin = event.currentTarget.dataset.provider;
-      var provider = this.state.socialShareProviders.filter(function(provider) {
-        return provider.origin == origin;
-      })[0];
-
-      this.props.dispatcher.dispatch(new sharedActions.ShareRoomUrl({
-        provider: provider,
-        roomUrl: this.state.roomUrl,
-        previews: []
-      }));
-    },
-
-    render: function() {
-      // Don't render a thing when no data has been fetched yet.
-      if (!this.state.socialShareProviders) {
-        return null;
-      }
-
-      var cx = React.addons.classSet;
-      var shareDropdown = cx({
-        "share-service-dropdown": true,
-        "dropdown-menu": true,
-        "share-button-unavailable": !this.state.socialShareButtonAvailable,
-        "hide": !this.props.show
-      });
-
-      // When the button is not yet available, we offer to put it in the navbar
-      // for the user.
-      if (!this.state.socialShareButtonAvailable) {
-        return (
-          React.createElement("div", {className: shareDropdown}, 
-            React.createElement("div", {className: "share-panel-header"}, 
-              mozL10n.get("share_panel_header")
-            ), 
-            React.createElement("div", {className: "share-panel-body"}, 
-              
-                mozL10n.get("share_panel_body", {
-                  brandShortname: mozL10n.get("brandShortname"),
-                  clientSuperShortname: mozL10n.get("clientSuperShortname"),
-                })
-              
-            ), 
-            React.createElement("button", {className: "btn btn-info btn-toolbar-add", 
-                    onClick: this.handleToolbarAddButtonClick}, 
-              mozL10n.get("add_to_toolbar_button")
-            )
-          )
-        );
-      }
-
-      return (
-        React.createElement("ul", {className: shareDropdown}, 
-          React.createElement("li", {className: "dropdown-menu-item", onClick: this.handleAddServiceClick}, 
-            React.createElement("i", {className: "icon icon-add-share-service"}), 
-            React.createElement("span", null, mozL10n.get("share_add_service_button"))
-          ), 
-          this.state.socialShareProviders.length ? React.createElement("li", {className: "dropdown-menu-separator"}) : null, 
-          
-            this.state.socialShareProviders.map(function(provider, idx) {
-              return (
-                React.createElement("li", {className: "dropdown-menu-item", 
-                    key: "provider-" + idx, 
-                    "data-provider": provider.origin, 
-                    onClick: this.handleProviderClick}, 
-                  React.createElement("img", {className: "icon", src: provider.iconURL}), 
-                  React.createElement("span", null, provider.name)
-                )
-              );
-            }.bind(this))
-          
-        )
-      );
-    }
-  });
-
   /**
    * Desktop room invitation view (overlay).
    */
   var DesktopRoomInvitationView = React.createClass({displayName: "DesktopRoomInvitationView",
-    mixins: [ActiveRoomStoreMixin, React.addons.LinkedStateMixin,
-             sharedMixins.DropdownMenuMixin],
+    mixins: [ActiveRoomStoreMixin, React.addons.LinkedStateMixin],
 
     propTypes: {
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired
     },
 
     getInitialState: function() {
       return {
         copiedUrl: false,
@@ -211,22 +112,16 @@ loop.roomViews = (function(mozL10n) {
       event.preventDefault();
 
       this.props.dispatcher.dispatch(
         new sharedActions.CopyRoomUrl({roomUrl: this.state.roomUrl}));
 
       this.setState({copiedUrl: true});
     },
 
-    handleShareButtonClick: function(event) {
-      event.preventDefault();
-
-      this.toggleDropdownMenu();
-    },
-
     onRoomError: function() {
       // Only update the state if we're mounted, to avoid the problem where
       // stopListening doesn't nuke the active listeners during a event
       // processing.
       if (this.isMounted()) {
         this.setState({error: this.props.roomStore.getStoreState("error")});
       }
     },
@@ -251,27 +146,18 @@ loop.roomViews = (function(mozL10n) {
             React.createElement("button", {className: "btn btn-info btn-email", 
                     onClick: this.handleEmailButtonClick}, 
               mozL10n.get("email_link_button")
             ), 
             React.createElement("button", {className: "btn btn-info btn-copy", 
                     onClick: this.handleCopyButtonClick}, 
               this.state.copiedUrl ? mozL10n.get("copied_url_button") :
                                       mozL10n.get("copy_url_button2")
-            ), 
-            React.createElement("button", {className: "btn btn-info btn-share", 
-                    ref: "anchor", 
-                    onClick: this.handleShareButtonClick}, 
-              mozL10n.get("share_button3")
             )
-          ), 
-          React.createElement(SocialShareDropdown, {dispatcher: this.props.dispatcher, 
-                               roomStore: this.props.roomStore, 
-                               show: this.state.showMenu, 
-                               ref: "menu"})
+          )
         )
       );
     }
   });
 
   /**
    * Desktop room conversation view.
    */
@@ -397,14 +283,13 @@ loop.roomViews = (function(mozL10n) {
           );
         }
       }
     }
   });
 
   return {
     ActiveRoomStoreMixin: ActiveRoomStoreMixin,
-    SocialShareDropdown: SocialShareDropdown,
     DesktopRoomConversationView: DesktopRoomConversationView,
     DesktopRoomInvitationView: DesktopRoomInvitationView
   };
 
 })(document.mozL10n || navigator.mozL10n);
--- a/browser/components/loop/content/js/roomViews.jsx
+++ b/browser/components/loop/content/js/roomViews.jsx
@@ -50,120 +50,21 @@ loop.roomViews = (function(mozL10n) {
       var storeState = this.props.roomStore.getStoreState("activeRoom");
       return _.extend({
         // Used by the UI showcase.
         roomState: this.props.roomState || storeState.roomState
       }, storeState);
     }
   };
 
-  var SocialShareDropdown = React.createClass({
-    mixins: [ActiveRoomStoreMixin],
-
-    propTypes: {
-      dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
-      show: React.PropTypes.bool.isRequired
-    },
-
-    handleToolbarAddButtonClick: function(event) {
-      event.preventDefault();
-
-      this.props.dispatcher.dispatch(new sharedActions.AddSocialShareButton());
-    },
-
-    handleAddServiceClick: function(event) {
-      event.preventDefault();
-
-      this.props.dispatcher.dispatch(new sharedActions.AddSocialShareProvider());
-    },
-
-    handleProviderClick: function(event) {
-      event.preventDefault();
-
-      var origin = event.currentTarget.dataset.provider;
-      var provider = this.state.socialShareProviders.filter(function(provider) {
-        return provider.origin == origin;
-      })[0];
-
-      this.props.dispatcher.dispatch(new sharedActions.ShareRoomUrl({
-        provider: provider,
-        roomUrl: this.state.roomUrl,
-        previews: []
-      }));
-    },
-
-    render: function() {
-      // Don't render a thing when no data has been fetched yet.
-      if (!this.state.socialShareProviders) {
-        return null;
-      }
-
-      var cx = React.addons.classSet;
-      var shareDropdown = cx({
-        "share-service-dropdown": true,
-        "dropdown-menu": true,
-        "share-button-unavailable": !this.state.socialShareButtonAvailable,
-        "hide": !this.props.show
-      });
-
-      // When the button is not yet available, we offer to put it in the navbar
-      // for the user.
-      if (!this.state.socialShareButtonAvailable) {
-        return (
-          <div className={shareDropdown}>
-            <div className="share-panel-header">
-              {mozL10n.get("share_panel_header")}
-            </div>
-            <div className="share-panel-body">
-              {
-                mozL10n.get("share_panel_body", {
-                  brandShortname: mozL10n.get("brandShortname"),
-                  clientSuperShortname: mozL10n.get("clientSuperShortname"),
-                })
-              }
-            </div>
-            <button className="btn btn-info btn-toolbar-add"
-                    onClick={this.handleToolbarAddButtonClick}>
-              {mozL10n.get("add_to_toolbar_button")}
-            </button>
-          </div>
-        );
-      }
-
-      return (
-        <ul className={shareDropdown}>
-          <li className="dropdown-menu-item" onClick={this.handleAddServiceClick}>
-            <i className="icon icon-add-share-service"></i>
-            <span>{mozL10n.get("share_add_service_button")}</span>
-          </li>
-          {this.state.socialShareProviders.length ? <li className="dropdown-menu-separator"/> : null}
-          {
-            this.state.socialShareProviders.map(function(provider, idx) {
-              return (
-                <li className="dropdown-menu-item"
-                    key={"provider-" + idx}
-                    data-provider={provider.origin}
-                    onClick={this.handleProviderClick}>
-                  <img className="icon" src={provider.iconURL}/>
-                  <span>{provider.name}</span>
-                </li>
-              );
-            }.bind(this))
-          }
-        </ul>
-      );
-    }
-  });
-
   /**
    * Desktop room invitation view (overlay).
    */
   var DesktopRoomInvitationView = React.createClass({
-    mixins: [ActiveRoomStoreMixin, React.addons.LinkedStateMixin,
-             sharedMixins.DropdownMenuMixin],
+    mixins: [ActiveRoomStoreMixin, React.addons.LinkedStateMixin],
 
     propTypes: {
       dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired
     },
 
     getInitialState: function() {
       return {
         copiedUrl: false,
@@ -211,22 +112,16 @@ loop.roomViews = (function(mozL10n) {
       event.preventDefault();
 
       this.props.dispatcher.dispatch(
         new sharedActions.CopyRoomUrl({roomUrl: this.state.roomUrl}));
 
       this.setState({copiedUrl: true});
     },
 
-    handleShareButtonClick: function(event) {
-      event.preventDefault();
-
-      this.toggleDropdownMenu();
-    },
-
     onRoomError: function() {
       // Only update the state if we're mounted, to avoid the problem where
       // stopListening doesn't nuke the active listeners during a event
       // processing.
       if (this.isMounted()) {
         this.setState({error: this.props.roomStore.getStoreState("error")});
       }
     },
@@ -252,26 +147,17 @@ loop.roomViews = (function(mozL10n) {
                     onClick={this.handleEmailButtonClick}>
               {mozL10n.get("email_link_button")}
             </button>
             <button className="btn btn-info btn-copy"
                     onClick={this.handleCopyButtonClick}>
               {this.state.copiedUrl ? mozL10n.get("copied_url_button") :
                                       mozL10n.get("copy_url_button2")}
             </button>
-            <button className="btn btn-info btn-share"
-                    ref="anchor"
-                    onClick={this.handleShareButtonClick}>
-              {mozL10n.get("share_button3")}
-            </button>
           </div>
-          <SocialShareDropdown dispatcher={this.props.dispatcher}
-                               roomStore={this.props.roomStore}
-                               show={this.state.showMenu}
-                               ref="menu"/>
         </div>
       );
     }
   });
 
   /**
    * Desktop room conversation view.
    */
@@ -397,14 +283,13 @@ loop.roomViews = (function(mozL10n) {
           );
         }
       }
     }
   });
 
   return {
     ActiveRoomStoreMixin: ActiveRoomStoreMixin,
-    SocialShareDropdown: SocialShareDropdown,
     DesktopRoomConversationView: DesktopRoomConversationView,
     DesktopRoomInvitationView: DesktopRoomInvitationView
   };
 
 })(document.mozL10n || navigator.mozL10n);
--- a/browser/components/loop/content/shared/css/common.css
+++ b/browser/components/loop/content/shared/css/common.css
@@ -11,17 +11,16 @@
 *, *:before, *:after {
   box-sizing: border-box;
 }
 
 body {
   font: message-box;
   font-size: 12px;
   background: #fbfbfb;
-  overflow: hidden;
 }
 
 img {
   border: none;
 }
 
 h1, h2, h3 {
   color: #666;
@@ -403,58 +402,8 @@ p {
 
 .firefox-logo {
   margin: 0 auto; /* horizontal block centering */
   width: 100px;
   height: 100px;
   background: transparent url(../img/firefox-logo.png) no-repeat center center;
   background-size: contain;
 }
-
-/* Dropdown menu */
-
-.dropdown {
-  position: relative;
-}
-
-.dropdown-menu {
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  background-color: #fdfdfd;
-  box-shadow: 0 1px 3px rgba(0,0,0,.3);
-  list-style: none;
-  padding: 5px;
-  border-radius: 2px;
-}
-
-body[dir=rtl] .dropdown-menu-item {
-  left: auto;
-  right: 10px;
-}
-
-.dropdown-menu-item {
-  text-align: start;
-  margin: .3em 0;
-  padding: .2em .5em;
-  cursor: pointer;
-  border: 1px solid transparent;
-  border-radius: 2px;
-  font-size: 1em;
-  white-space: nowrap;
-}
-
-.dropdown-menu-item:hover {
-  border: 1px solid #ccc;
-  background-color: #eee;
-}
-
-.dropdown-menu-item > .icon {
-  background-repeat: no-repeat;
-  display: inline-block;
-}
-
-.dropdown-menu-separator {
-  height: 1px;
-  margin: 2px -2px 1px -2px;
-  border-top: 1px solid #dedede;
-  background-color: #fff;
-}
--- a/browser/components/loop/content/shared/css/conversation.css
+++ b/browser/components/loop/content/shared/css/conversation.css
@@ -897,73 +897,16 @@ html, .fx-embedded, #main,
   border-radius: .5em;
 }
 
 .room-invitation-overlay .btn-group {
   position: absolute;
   bottom: 10px;
 }
 
-.share-service-dropdown {
-  color: #000;
-  text-align: start;
-  bottom: auto;
-  top: 0;
-}
-
-.share-service-dropdown.share-button-unavailable {
-  width: 230px;
-  padding: 8px;
-}
-
-.share-service-dropdown > .dropdown-menu-item > .icon {
-  width: 14px;
-  height: 14px;
-  margin-right: 4px;
-}
-
-.share-service-dropdown .share-panel-header {
-  background-image: url("../img/icons-16x16.svg#share-darkgrey");
-  background-size: 3em 3em;
-  background-repeat: no-repeat;
-  min-height: 3em;
-  font-weight: bold;
-  margin-bottom: 1em;
-  padding-left: 4.5em;
-}
-
-body[dir=rtl] .share-service-dropdown .share-panel-header {
-  background-position: top right;
-  padding-left: 0;
-  padding-right: 4.5em;
-}
-
-.share-service-dropdown .btn-toolbar-add {
-  padding: 4px 2px;
-  border-radius: 2px;
-  margin-top: 1em;
-  width: 100%;
-}
-
-.dropdown-menu-item > .icon-add-share-service {
-  background-image: url("../img/icons-16x16.svg#add");
-  background-repeat: no-repeat;
-  background-size: 12px 12px;
-  width: 12px;
-  height: 12px;
-}
-
-.dropdown-menu-item:hover > .icon-add-share-service {
-  background-image: url("../img/icons-16x16.svg#add-hover");
-}
-
-.dropdown-menu-item:hover:active > .icon-add-share-service {
-  background-image: url("../img/icons-16x16.svg#add-active");
-}
-
 /* Standalone rooms */
 
 .standalone .room-conversation-wrapper {
   position: relative;
   height: 100%;
   background: #000;
 }
 
--- a/browser/components/loop/content/shared/img/icons-16x16.svg
+++ b/browser/components/loop/content/shared/img/icons-16x16.svg
@@ -28,27 +28,21 @@ use[id$="-active"] {
 use[id$="-red"] {
   fill: #d74345
 }
 
 use[id$="-white"] {
   fill: #fff;
 }
 
-use[id$="-darkgrey"] {
-  fill: #666;
-}
-
 use[id$="-disabled"] {
   fill: rgba(255,255,255,.6);
 }
 </style>
 <defs style="display:none">
-  <polygon id="add-shape" fill-rule="evenodd" clip-rule="evenodd" points="16,6.4 9.6,6.4 9.6,0 6.4,0 6.4,6.4 0,6.4 0,9.6
-    6.4,9.6 6.4,16 9.6,16 9.6,9.6 16,9.6"/>
   <path id="audio-shape" fill-rule="evenodd" clip-rule="evenodd" d="M11.429,6.857v2.286c0,1.894-1.535,3.429-3.429,3.429
     c-1.894,0-3.429-1.535-3.429-3.429V6.857H3.429v2.286c0,2.129,1.458,3.913,3.429,4.422v1.293H6.286
     c-0.746,0-1.379,0.477-1.615,1.143h6.658c-0.236-0.665-0.869-1.143-1.615-1.143H9.143v-1.293c1.971-0.508,3.429-2.292,3.429-4.422
     V6.857H11.429z M8,12c1.578,0,2.857-1.279,2.857-2.857V2.857C10.857,1.279,9.578,0,8,0C6.422,0,5.143,1.279,5.143,2.857v6.286
     C5.143,10.721,6.422,12,8,12z"/>
   <path id="block-shape" fill-rule="evenodd" clip-rule="evenodd" d="M8,0C3.582,0,0,3.582,0,8c0,4.418,3.582,8,8,8
     c4.418,0,8-3.582,8-8C16,3.582,12.418,0,8,0z M8,2.442c1.073,0,2.075,0.301,2.926,0.821l-7.673,7.673
     C2.718,10.085,2.408,9.079,2.408,8C2.408,4.931,4.911,2.442,8,2.442z M8,13.557c-1.073,0-2.075-0.301-2.926-0.821l7.673-7.673
@@ -85,27 +79,16 @@ use[id$="-disabled"] {
     l-0.209,0.596c-0.874-0.205-1.692-0.553-2.434-1.011l0.272-0.567c0.171-0.355-0.17-1.066-0.739-1.635
     c-0.568-0.568-1.279-0.909-1.635-0.738l-0.568,0.273c-0.46-0.741-0.79-1.566-0.998-2.439l0.584-0.205
     C0.969,9.547,1.231,8.804,1.231,8c0-0.804-0.262-1.548-0.634-1.678L0,6.112c0.206-0.874,0.565-1.685,1.025-2.427l0.554,0.266
     c0.355,0.171,1.066-0.17,1.635-0.738c0.569-0.568,0.909-1.28,0.739-1.635L3.686,1.025c0.742-0.46,1.553-0.818,2.427-1.024
     l0.209,0.596C6.453,0.969,7.197,1.23,8.001,1.23s1.548-0.262,1.678-0.634l0.209-0.596c0.874,0.205,1.692,0.553,2.434,1.011
     l-0.272,0.567c-0.171,0.355,0.17,1.066,0.738,1.635c0.569,0.568,1.279,0.909,1.635,0.738l0.568-0.273
     c0.46,0.741,0.79,1.566,0.998,2.438l-0.584,0.205C15.032,6.452,14.77,7.196,14.77,8z M8.001,3.661C5.604,3.661,3.661,5.603,3.661,8
     c0,2.397,1.943,4.34,4.339,4.34c2.397,0,4.339-1.943,4.339-4.34C12.34,5.603,10.397,3.661,8.001,3.661z"/>
-  <g id="share-shape">
-    <path fill="transparent" d="M11.704,12.375H7.556c-0.183,0-0.353-0.071-0.48-0.199c-0.124-0.125-0.191-0.29-0.19-0.464V10.09h-2.59
-      c-0.37,0-0.671-0.296-0.671-0.661V4.286c0-0.365,0.301-0.661,0.671-0.661h3.384L7.817,3.73l1.299,1.254v0.927h1.851
-      l1.408,1.359v4.444C12.375,12.079,12.074,12.375,11.704,12.375z M7.635,11.625h3.989V7.588l-0.961-0.927H7.635V11.625z
-      M4.375,9.34h2.5V6.561c0-0.365,0.301-0.661,0.671-0.661h0.82V5.302L7.405,4.375h-3.03V9.34z"/>
-    <polygon fill="transparent" points="10.222,8 10.222,6.857 11.407,8"/>
-    <polygon fill="transparent" points="6.963,5.714 6.963,4.571 8.148,5.714"/>
-    <path fill-rule="evenodd" clip-rule="evenodd" d="M8.999,10.654L8.69,10.6L8.999,16l2.56-3.754L8.999,10.654z
-      M8.658,10.041l0.341-0.043l6,2.898V0L1,10.998l4.55-0.569L8.999,16l-1.892-5.68l-0.283-0.05l0.256-0.032L7,9.998l6.999-8.003
-      L8.656,9.998L8.658,10.041z"/>
-  </g>
   <path id="tag-shape" fill-rule="evenodd" clip-rule="evenodd" d="M15.578,7.317L9.659,1.398
     C9.374,1.033,8.955,0.777,8.471,0.761L2.556,0C1.72-0.027-0.027,1.72,0,2.556l0.761,5.916c0.016,0.484,0.272,0.902,0.637,1.188
     l5.919,5.919c0.591,0.591,1.584,0.557,2.218-0.076l5.966-5.966C16.135,8.902,16.169,7.909,15.578,7.317z M4.222,4.163
     c-0.511,0.511-1.339,0.511-1.85,0c-0.511-0.511-0.511-1.339,0-1.85c0.511-0.511,1.339-0.511,1.85,0
     C4.733,2.823,4.733,3.652,4.222,4.163z"/>
   <path id="unblock-shape" fill-rule="evenodd" clip-rule="evenodd" d="M8,16c-4.418,0-8-3.582-8-8c0-4.418,3.582-8,8-8
     c4.418,0,8,3.582,8,8C16,12.418,12.418,16,8,16z M8,2.442C4.911,2.442,2.408,4.931,2.408,8c0,3.069,2.504,5.557,5.592,5.557
     S13.592,11.069,13.592,8C13.592,4.931,11.089,2.442,8,2.442z"/>
@@ -160,19 +143,16 @@ use[id$="-disabled"] {
   <g id="screenmute-shape">
     <path fill-rule="evenodd" clip-rule="evenodd" d="M13.55,4.73h-0.54l-8.13,8.13L4.2,13.53
       C4.46,13.82,4.84,14,5.25,14h8.3c0.8,0,1.45-0.68,1.45-1.52V6.24C15,5.41,14.35,4.73,13.55,4.73z"/>
     <path fill-rule="evenodd" clip-rule="evenodd" d="M14.21,2.72l-0.99-0.99l-1.15,1.15C11.83,2.36,11.33,2,10.75,2
       h-8.3C1.65,2,1,2.68,1,3.52v6.24c0,0.83,0.65,1.51,1.45,1.51h0.52V5.43c0-0.84,0.65-1.51,1.45-1.51h6.61l-0.81,
       0.81H5.25 c-0.8,0-1.45,0.68-1.45,1.51v4.91l-1.89,1.89l0.99,0.99l1-1l8.3-8.3L14.21,2.72z"/>
   </g>
 </defs>
-<use id="add"                 xlink:href="#add-shape"/>
-<use id="add-hover"           xlink:href="#add-shape"/>
-<use id="add-active"          xlink:href="#add-shape"/>
 <use id="audio"               xlink:href="#audio-shape"/>
 <use id="audio-hover"         xlink:href="#audio-shape"/>
 <use id="audio-active"        xlink:href="#audio-shape"/>
 <use id="block"               xlink:href="#block-shape"/>
 <use id="block-red"           xlink:href="#block-shape"/>
 <use id="block-hover"         xlink:href="#block-shape"/>
 <use id="block-active"        xlink:href="#block-shape"/>
 <use id="contacts"            xlink:href="#contacts-shape"/>
@@ -188,17 +168,16 @@ use[id$="-disabled"] {
 <use id="history-active"      xlink:href="#history-shape"/>
 <use id="leave"               xlink:href="#leave-shape"/>
 <use id="precall"             xlink:href="#precall-shape"/>
 <use id="precall-hover"       xlink:href="#precall-shape"/>
 <use id="precall-active"      xlink:href="#precall-shape"/>
 <use id="settings"            xlink:href="#settings-shape"/>
 <use id="settings-hover"      xlink:href="#settings-shape"/>
 <use id="settings-active"     xlink:href="#settings-shape"/>
-<use id="share-darkgrey"      xlink:href="#share-shape"/>
 <use id="tag"                 xlink:href="#tag-shape"/>
 <use id="tag-hover"           xlink:href="#tag-shape"/>
 <use id="tag-active"          xlink:href="#tag-shape"/>
 <use id="trash"               xlink:href="#trash-shape"/>
 <use id="unblock"             xlink:href="#unblock-shape"/>
 <use id="unblock-hover"       xlink:href="#unblock-shape"/>
 <use id="unblock-active"      xlink:href="#unblock-shape"/>
 <use id="video"               xlink:href="#video-shape"/>
--- a/browser/components/loop/content/shared/js/actions.js
+++ b/browser/components/loop/content/shared/js/actions.js
@@ -353,39 +353,16 @@ loop.shared.actions = (function() {
      * Email a room url.
      * XXX: should move to some roomActions module - refs bug 1079284
      */
     EmailRoomUrl: Action.define("emailRoomUrl", {
       roomUrl: String
     }),
 
     /**
-     * Share a room url via the Social API.
-     * XXX: should move to some roomActions module - refs bug 1079284
-     */
-    ShareRoomUrl: Action.define("shareRoomUrl", {
-      provider: Object,
-      roomUrl: String
-    }),
-
-    /**
-     * Add the Social Share button to the browser toolbar.
-     * XXX: should move to some roomActions module - refs bug 1079284
-     */
-    AddSocialShareButton: Action.define("addSocialShareButton", {
-    }),
-
-    /**
-     * Open the share panel to add a Social share provider.
-     * XXX: should move to some roomActions module - refs bug 1079284
-     */
-    AddSocialShareProvider: Action.define("addSocialShareProvider", {
-    }),
-
-    /**
      * XXX: should move to some roomActions module - refs bug 1079284
      */
     RoomFailure: Action.define("roomFailure", {
       error: Object,
       // True when the failures occurs in the join room request to the loop-server.
       failedJoinRequest: Boolean
     }),
 
@@ -394,43 +371,32 @@ loop.shared.actions = (function() {
      * XXX: should move to some roomActions module - refs bug 1079284
      *
      * @see https://wiki.mozilla.org/Loop/Architecture/Rooms#GET_.2Frooms.2F.7Btoken.7D
      */
     SetupRoomInfo: Action.define("setupRoomInfo", {
       // roomName: String - Optional.
       roomOwner: String,
       roomToken: String,
-      roomUrl: String,
-      socialShareButtonAvailable: Boolean,
-      socialShareProviders: Array
+      roomUrl: String
     }),
 
     /**
      * Updates the room information when it is received.
      * XXX: should move to some roomActions module - refs bug 1079284
      *
      * @see https://wiki.mozilla.org/Loop/Architecture/Rooms#GET_.2Frooms.2F.7Btoken.7D
      */
     UpdateRoomInfo: Action.define("updateRoomInfo", {
       // roomName: String - Optional.
       roomOwner: String,
       roomUrl: String
     }),
 
     /**
-     * Updates the Social API information when it is received.
-     * XXX: should move to some roomActions module - refs bug 1079284
-     */
-    UpdateSocialShareInfo: Action.define("updateSocialShareInfo", {
-      socialShareButtonAvailable: Boolean,
-      socialShareProviders: Array
-    }),
-
-+    /**
      * Starts the process for the user to join the room.
      * XXX: should move to some roomActions module - refs bug 1079284
      */
     JoinRoom: Action.define("joinRoom", {
     }),
 
     /**
      * Signals the user has successfully joined the room on the loop-server.
--- a/browser/components/loop/content/shared/js/activeRoomStore.js
+++ b/browser/components/loop/content/shared/js/activeRoomStore.js
@@ -71,20 +71,17 @@ loop.store.ActiveRoomStore = (function()
         // Tracks if the room has been used during this
         // session. 'Used' means at least one call has been placed
         // with it. Entering and leaving the room without seeing
         // anyone is not considered as 'used'
         used: false,
         localVideoDimensions: {},
         remoteVideoDimensions: {},
         screenSharingState: SCREEN_SHARE_STATES.INACTIVE,
-        receivingScreenShare: false,
-        // Social API state.
-        socialShareButtonAvailable: false,
-        socialShareProviders: null
+        receivingScreenShare: false
       };
     },
 
     /**
      * Handles a room failure.
      *
      * @param {sharedActions.RoomFailure} actionData
      */
@@ -130,18 +127,17 @@ loop.store.ActiveRoomStore = (function()
         "receivingScreenShare",
         "remotePeerDisconnected",
         "remotePeerConnected",
         "windowUnload",
         "leaveRoom",
         "feedbackComplete",
         "videoDimensionsChanged",
         "startScreenShare",
-        "endScreenShare",
-        "updateSocialShareInfo"
+        "endScreenShare"
       ]);
     },
 
     /**
      * Execute setupWindowData event action from the dispatcher. This gets
      * the room data from the mozLoop api, and dispatches an UpdateRoomInfo event.
      * It also dispatches JoinRoom as this action is only applicable to the desktop
      * client, and needs to auto-join.
@@ -171,19 +167,17 @@ loop.store.ActiveRoomStore = (function()
             }));
             return;
           }
 
           this.dispatchAction(new sharedActions.SetupRoomInfo({
             roomToken: actionData.roomToken,
             roomName: roomData.roomName,
             roomOwner: roomData.roomOwner,
-            roomUrl: roomData.roomUrl,
-            socialShareButtonAvailable: this._mozLoop.isSocialShareButtonAvailable(),
-            socialShareProviders: this._mozLoop.getSocialShareProviders()
+            roomUrl: roomData.roomUrl
           }));
 
           // For the conversation window, we need to automatically
           // join the room.
           this.dispatchAction(new sharedActions.JoinRoom());
         }.bind(this));
     },
 
@@ -238,58 +232,40 @@ loop.store.ActiveRoomStore = (function()
         return;
       }
 
       this.setStoreState({
         roomName: actionData.roomName,
         roomOwner: actionData.roomOwner,
         roomState: ROOM_STATES.READY,
         roomToken: actionData.roomToken,
-        roomUrl: actionData.roomUrl,
-        socialShareButtonAvailable: actionData.socialShareButtonAvailable,
-        socialShareProviders: actionData.socialShareProviders
+        roomUrl: actionData.roomUrl
       });
 
       this._onUpdateListener = this._handleRoomUpdate.bind(this);
       this._onDeleteListener = this._handleRoomDelete.bind(this);
-      this._onSocialShareUpdate = this._handleSocialShareUpdate.bind(this);
 
       this._mozLoop.rooms.on("update:" + actionData.roomToken, this._onUpdateListener);
       this._mozLoop.rooms.on("delete:" + actionData.roomToken, this._onDeleteListener);
-      window.addEventListener("LoopShareWidgetChanged", this._onSocialShareUpdate);
-      window.addEventListener("LoopSocialProvidersChanged", this._onSocialShareUpdate);
     },
 
     /**
      * Handles the updateRoomInfo action. Updates the room data.
      *
      * @param {sharedActions.UpdateRoomInfo} actionData
      */
     updateRoomInfo: function(actionData) {
       this.setStoreState({
         roomName: actionData.roomName,
         roomOwner: actionData.roomOwner,
         roomUrl: actionData.roomUrl
       });
     },
 
     /**
-     * Handles the updateSocialShareInfo action. Updates the room data with new
-     * Social API info.
-     *
-     * @param  {sharedActions.UpdateSocialShareInfo} actionData
-     */
-    updateSocialShareInfo: function(actionData) {
-      this.setStoreState({
-        socialShareButtonAvailable: actionData.socialShareButtonAvailable,
-        socialShareProviders: actionData.socialShareProviders
-      });
-    },
-
-    /**
      * Handles room updates notified by the mozLoop rooms API.
      *
      * @param {String} eventName The name of the event
      * @param {Object} roomData  The new roomData.
      */
     _handleRoomUpdate: function(eventName, roomData) {
       this.dispatchAction(new sharedActions.UpdateRoomInfo({
         roomName: roomData.roomName,
@@ -306,27 +282,16 @@ loop.store.ActiveRoomStore = (function()
      */
     _handleRoomDelete: function(eventName, roomData) {
       this._sdkDriver.forceDisconnectAll(function() {
         window.close();
       });
     },
 
     /**
-     * Handles an update of the position of the Share widget and changes to list
-     * of Social API providers, notified by the mozLoop API.
-     */
-    _handleSocialShareUpdate: function() {
-      this.dispatchAction(new sharedActions.UpdateSocialShareInfo({
-        socialShareButtonAvailable: this._mozLoop.isSocialShareButtonAvailable(),
-        socialShareProviders: this._mozLoop.getSocialShareProviders()
-      }));
-    },
-
-    /**
      * Handles the action to join to a room.
      */
     joinRoom: function() {
       // Reset the failure reason if necessary.
       if (this.getStoreState().failureReason) {
         this.setStoreState({failureReason: undefined});
       }
 
@@ -567,22 +532,18 @@ loop.store.ActiveRoomStore = (function()
       if (!this._onUpdateListener) {
         return;
       }
 
       // If we're closing the window, we can stop listening to updates.
       var roomToken = this.getStoreState().roomToken;
       this._mozLoop.rooms.off("update:" + roomToken, this._onUpdateListener);
       this._mozLoop.rooms.off("delete:" + roomToken, this._onDeleteListener);
-      window.removeEventListener("LoopShareWidgetChanged", this._onShareWidgetUpdate);
-      window.removeEventListener("LoopSocialProvidersChanged", this._onSocialProvidersUpdate);
       delete this._onUpdateListener;
       delete this._onDeleteListener;
-      delete this._onShareWidgetUpdate;
-      delete this._onSocialProvidersUpdate;
     },
 
     /**
      * Handles a room being left.
      */
     leaveRoom: function() {
       this._leaveRoom(ROOM_STATES.ENDED);
     },
--- a/browser/components/loop/content/shared/js/mixins.js
+++ b/browser/components/loop/content/shared/js/mixins.js
@@ -93,96 +93,61 @@ loop.shared.mixins = (function() {
     getInitialState: function() {
       return {showMenu: false};
     },
 
     _onBodyClick: function() {
       this.setState({showMenu: false});
     },
 
-    _correctMenuPosition: function() {
-      var menu = this.refs.menu && this.refs.menu.getDOMNode();
+    componentDidMount: function() {
+      this.documentBody.addEventListener("click", this._onBodyClick);
+      this.documentBody.addEventListener("blur", this.hideDropdownMenu);
+
+      var menu = this.refs.menu;
       if (!menu) {
         return;
       }
 
-      // Correct the position of the menu only if necessary.
-      var x, y;
-      var menuNodeRect = menu.getBoundingClientRect();
-      var x = menuNodeRect.left;
-      var y = menuNodeRect.top;
-      // Amount of pixels that the dropdown needs to stay away from the edges of
-      // the page body.
-      var bodyMargin = 10;
+      // Correct the position of the menu if necessary.
+      var menuNode = menu.getDOMNode();
+      var menuNodeRect = menuNode.getBoundingClientRect();
       var bodyRect = {
-        height: this.documentBody.offsetHeight - bodyMargin,
-        width: this.documentBody.offsetWidth - bodyMargin
+        height: this.documentBody.offsetHeight,
+        width: this.documentBody.offsetWidth
       };
 
-      // If there's an anchor present, position it relative to it first.
-      var anchor = this.refs.anchor && this.refs.anchor.getDOMNode();
-      if (anchor) {
-        // XXXmikedeboer: at the moment we only support positioning centered above
-        //                anchor node. Please add more modes as necessary.
-        var anchorNodeRect = anchor.getBoundingClientRect();
-        // Because we're _correcting_ the position of the dropdown, we assume that
-        // the node is positioned absolute at 0,0 coordinates (top left).
-        x = anchorNodeRect.left - (menuNodeRect.width / 2) + (anchorNodeRect.width / 2);
-        y = anchorNodeRect.top - menuNodeRect.height - anchorNodeRect.height;
+      // First we check the vertical overflow.
+      var y = menuNodeRect.top + menuNodeRect.height;
+      if (y >= bodyRect.height) {
+        menuNode.style.marginTop = bodyRect.height - y + "px";
       }
 
-      var overflowX = false;
-      var overflowY = false;
-      // Check the horizontal overflow.
-      if (x + menuNodeRect.width > bodyRect.width) {
-        // Anchor positioning is already relative, so don't subtract it again.
-        x = bodyRect.width - ((anchor ? 0 : x) + menuNodeRect.width);
-        overflowX = true;
-      }
-      // Check the vertical overflow.
-      if (y + menuNodeRect.height > bodyRect.height) {
-        // Anchor positioning is already relative, so don't subtract it again.
-        y = bodyRect.height - ((anchor ? 0 : y) + menuNodeRect.height);
-        overflowY = true;
+      // Then we check the horizontal overflow.
+      var x = menuNodeRect.left + menuNodeRect.width;
+      if (x >= bodyRect.width) {
+        menuNode.style.marginLeft = bodyRect.width - x + "px";
       }
-
-      if (anchor || overflowX) {
-        menu.style.marginLeft = x + "px";
-      } else if (!menu.style.marginLeft) {
-        menu.style.marginLeft = "auto";
-      }
-
-      if (anchor || overflowY) {
-        menu.style.marginTop =  y + "px";
-      } else if (!menu.style.marginLeft) {
-        menu.style.marginTop = "auto";
-      }
-    },
-
-    componentDidMount: function() {
-      this.documentBody.addEventListener("click", this._onBodyClick);
-      rootObject.addEventListener("blur", this.hideDropdownMenu);
     },
 
     componentWillUnmount: function() {
       this.documentBody.removeEventListener("click", this._onBodyClick);
-      rootObject.removeEventListener("blur", this.hideDropdownMenu);
+      this.documentBody.removeEventListener("blur", this.hideDropdownMenu);
     },
 
     showDropdownMenu: function() {
       this.setState({showMenu: true});
-      rootObject.setTimeout(this._correctMenuPosition, 0);
     },
 
     hideDropdownMenu: function() {
       this.setState({showMenu: false});
     },
 
     toggleDropdownMenu: function() {
-      this[this.state.showMenu ? "hideDropdownMenu" : "showDropdownMenu"]();
+      this.setState({showMenu: !this.state.showMenu});
     },
   };
 
   /**
    * Document visibility mixin. Allows defining the following hooks for when the
    * document visibility status changes:
    *
    * - {Function} onDocumentVisible For when the document becomes visible.
--- a/browser/components/loop/content/shared/js/roomStore.js
+++ b/browser/components/loop/content/shared/js/roomStore.js
@@ -85,31 +85,28 @@ loop.store = loop.store || {};
      */
     defaultExpiresIn: DEFAULT_EXPIRES_IN,
 
     /**
      * Registered actions.
      * @type {Array}
      */
     actions: [
-      "addSocialShareButton",
-      "addSocialShareProvider",
       "createRoom",
       "createdRoom",
       "createRoomError",
       "copyRoomUrl",
       "deleteRoom",
       "deleteRoomError",
       "emailRoomUrl",
       "getAllRooms",
       "getAllRoomsError",
       "openRoom",
       "renameRoom",
       "renameRoomError",
-      "shareRoomUrl",
       "updateRoomList"
     ],
 
     initialize: function(options) {
       if (!options.mozLoop) {
         throw new Error("Missing option mozLoop");
       }
       this._mozLoop = options.mozLoop;
@@ -340,70 +337,16 @@ loop.store = loop.store || {};
      * @param  {sharedActions.EmailRoomUrl} actionData The action data.
      */
     emailRoomUrl: function(actionData) {
       loop.shared.utils.composeCallUrlEmail(actionData.roomUrl);
       this._mozLoop.notifyUITour("Loop:RoomURLEmailed");
     },
 
     /**
-     * Share a room url.
-     *
-     * @param  {sharedActions.ShareRoomUrl} actionData The action data.
-     */
-    shareRoomUrl: function(actionData) {
-      var providerOrigin = new URL(actionData.provider.origin).hostname;
-      var shareTitle = "";
-      var shareBody = null;
-
-      switch (providerOrigin) {
-        case "mail.google.com":
-          shareTitle = mozL10n.get("share_email_subject5", {
-            clientShortname2: mozL10n.get("clientShortname2")
-          });
-          shareBody = mozL10n.get("share_email_body5", {
-            callUrl: actionData.roomUrl,
-            brandShortname: mozL10n.get("brandShortname"),
-            clientShortname2: mozL10n.get("clientShortname2"),
-            clientSuperShortname: mozL10n.get("clientSuperShortname"),
-            learnMoreUrl: this._mozLoop.getLoopPref("learnMoreUrl")
-          });
-          break;
-        case "twitter.com":
-        default:
-          shareTitle = mozL10n.get("share_tweet", {
-            clientShortname2: mozL10n.get("clientShortname2")
-          });
-          break;
-      }
-
-      this._mozLoop.socialShareRoom(actionData.provider.origin, actionData.roomUrl,
-        shareTitle, shareBody);
-      this._mozLoop.notifyUITour("Loop:RoomURLShared");
-    },
-
-    /**
-     * Add the Social Share button to the browser toolbar.
-     *
-     * @param {sharedActions.AddSocialShareButton} actionData The action data.
-     */
-    addSocialShareButton: function(actionData) {
-      this._mozLoop.addSocialShareButton();
-    },
-
-    /**
-     * Open the share panel to add a Social share provider.
-     *
-     * @param {sharedActions.AddSocialShareProvider} actionData The action data.
-     */
-    addSocialShareProvider: function(actionData) {
-      this._mozLoop.addSocialShareProvider();
-    },
-
-    /**
      * Creates a new room.
      *
      * @param {sharedActions.DeleteRoom} actionData The action data.
      */
     deleteRoom: function(actionData) {
       this._mozLoop.rooms.delete(actionData.roomToken, function(err) {
         if (err) {
          this.dispatchAction(new sharedActions.DeleteRoomError({error: err}));
deleted file mode 100644
index 2de263f511e864a149b72d2f67589f072a3ec041..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/components/loop/standalone/content/index.html
+++ b/browser/components/loop/standalone/content/index.html
@@ -131,14 +131,10 @@
     <script type="text/javascript" src="js/webapp.js"></script>
 
     <script>
       // Wait for all the localization notes to load
       window.addEventListener('localized', function() {
         loop.webapp.init();
       }, false);
     </script>
-
-    <noscript>
-      <img src="img/logo.png" border="0" alt="Logo"/>
-    </noscript>
   </body>
 </html>
--- a/browser/components/loop/test/desktop-local/panel_test.js
+++ b/browser/components/loop/test/desktop-local/panel_test.js
@@ -23,19 +23,17 @@ describe("loop.panel", function() {
     requests = [];
     // https://github.com/cjohansen/Sinon.JS/issues/393
     fakeXHR.xhr.onCreate = function (xhr) {
       requests.push(xhr);
     };
 
     fakeWindow = {
       close: sandbox.stub(),
-      addEventListener: function() {},
-      document: { addEventListener: function(){} },
-      setTimeout: function(callback) { callback(); }
+      document: { addEventListener: function(){} }
     };
     loop.shared.mixins.setRootObject(fakeWindow);
 
     notifications = new loop.shared.models.NotificationCollection();
 
     fakeMozLoop = navigator.mozLoop = {
       doNotDisturb: true,
       fxAEnabled: true,
--- a/browser/components/loop/test/desktop-local/roomViews_test.js
+++ b/browser/components/loop/test/desktop-local/roomViews_test.js
@@ -13,29 +13,27 @@ describe("loop.roomViews", function () {
 
   beforeEach(function() {
     sandbox = sinon.sandbox.create();
 
     dispatcher = new loop.Dispatcher();
 
     fakeMozLoop = {
       getAudioBlob: sinon.stub(),
-      getLoopPref: sinon.stub(),
-      isSocialShareButtonAvailable: sinon.stub()
+      getLoopPref: sinon.stub()
     };
 
     fakeWindow = {
       close: sinon.stub(),
       document: {},
       navigator: {
         mozLoop: fakeMozLoop
       },
       addEventListener: function() {},
-      removeEventListener: function() {},
-      setTimeout: function(callback) { callback(); }
+      removeEventListener: function() {}
     };
     loop.shared.mixins.setRootObject(fakeWindow);
 
     // XXX These stubs should be hoisted in a common file
     // Bug 1040968
     sandbox.stub(document.mozL10n, "get", function(x) {
       return x;
     });
@@ -195,31 +193,16 @@ describe("loop.roomViews", function () {
           var copyBtn = view.getDOMNode().querySelector('.btn-copy');
 
           React.addons.TestUtils.Simulate.click(copyBtn);
 
           // copied_url_button is the l10n string.
           expect(copyBtn.textContent).eql("copied_url_button");
       });
     });
-
-    describe("Share button", function() {
-      beforeEach(function() {
-        view = mountTestComponent();
-      });
-
-      it("should toggle the share dropdown when the share button is clicked", function() {
-        var shareBtn = view.getDOMNode().querySelector(".btn-share");
-
-        React.addons.TestUtils.Simulate.click(shareBtn);
-
-        expect(view.state.showMenu).to.eql(true);
-        expect(view.refs.menu.props.show).to.eql(true);
-      });
-    });
   });
 
   describe("DesktopRoomConversationView", function() {
     var view;
 
     beforeEach(function() {
       loop.store.StoreMixin.register({
         feedbackStore: new loop.store.FeedbackStore(dispatcher, {
@@ -445,145 +428,9 @@ describe("loop.roomViews", function () {
 
           view = mountTestComponent();
 
           expect(view.getDOMNode().querySelector(".local-stream-audio"))
             .not.eql(null);
         });
     });
   });
-
-  describe("SocialShareDropdown", function() {
-    var view, fakeProvider;
-
-    beforeEach(function() {
-      sandbox.stub(dispatcher, "dispatch");
-
-      fakeProvider = {
-        name: "foo",
-        origin: "https://foo",
-        iconURL: "http://example.com/foo.png"
-      };
-    });
-
-    afterEach(function() {
-      view = fakeProvider = null;
-    });
-
-    function mountTestComponent() {
-      return TestUtils.renderIntoDocument(
-        React.createElement(loop.roomViews.SocialShareDropdown, {
-          dispatcher: dispatcher,
-          roomStore: roomStore,
-          show: true
-        })
-      );
-    }
-
-    describe("#render", function() {
-      it("should show no contents when the Social Providers have not been fetched yet", function() {
-        view = mountTestComponent();
-
-        expect(view.getDOMNode()).to.eql(null);
-      });
-
-      it("should show different contents when the Share XUL button is not available", function() {
-        activeRoomStore.setStoreState({
-          socialShareProviders: []
-        });
-        view = mountTestComponent();
-
-        var node = view.getDOMNode();
-        expect(node.querySelector(".share-panel-header")).to.not.eql(null);
-      });
-
-      it("should show an empty list when no Social Providers are available", function() {
-        activeRoomStore.setStoreState({
-          socialShareButtonAvailable: true,
-          socialShareProviders: []
-        });
-
-        view = mountTestComponent();
-
-        var node = view.getDOMNode();
-        expect(node.querySelector(".icon-add-share-service")).to.not.eql(null);
-        expect(node.querySelectorAll(".dropdown-menu-item").length).to.eql(1);
-      });
-
-      it("should show a list of available Social Providers", function() {
-        activeRoomStore.setStoreState({
-          socialShareButtonAvailable: true,
-          socialShareProviders: [fakeProvider]
-        });
-
-        view = mountTestComponent();
-
-        var node = view.getDOMNode();
-        expect(node.querySelector(".icon-add-share-service")).to.not.eql(null);
-        expect(node.querySelector(".dropdown-menu-separator")).to.not.eql(null);
-
-        var dropdownNodes = node.querySelectorAll(".dropdown-menu-item");
-        expect(dropdownNodes.length).to.eql(2);
-        expect(dropdownNodes[1].querySelector("img").src).to.eql(fakeProvider.iconURL);
-        expect(dropdownNodes[1].querySelector("span").textContent)
-          .to.eql(fakeProvider.name);
-      });
-    });
-
-    describe("#handleToolbarAddButtonClick", function() {
-      it("should dispatch an action when the 'add to toolbar' button is clicked", function() {
-        activeRoomStore.setStoreState({
-          socialShareProviders: []
-        });
-
-        view = mountTestComponent();
-
-        var addButton = view.getDOMNode().querySelector(".btn-toolbar-add");
-        React.addons.TestUtils.Simulate.click(addButton);
-
-        sinon.assert.calledOnce(dispatcher.dispatch);
-        sinon.assert.calledWithExactly(dispatcher.dispatch,
-          new sharedActions.AddSocialShareButton());
-      });
-    });
-
-    describe("#handleAddServiceClick", function() {
-      it("should dispatch an action when the 'add provider' item is clicked", function() {
-        activeRoomStore.setStoreState({
-          socialShareProviders: [],
-          socialShareButtonAvailable: true
-        });
-
-        view = mountTestComponent();
-
-        var addItem = view.getDOMNode().querySelector(".dropdown-menu-item:first-child");
-        React.addons.TestUtils.Simulate.click(addItem);
-
-        sinon.assert.calledOnce(dispatcher.dispatch);
-        sinon.assert.calledWithExactly(dispatcher.dispatch,
-          new sharedActions.AddSocialShareProvider());
-      });
-    });
-
-    describe("#handleProviderClick", function() {
-      it("should dispatch an action when a provider item is clicked", function() {
-        activeRoomStore.setStoreState({
-          roomUrl: "http://example.com",
-          socialShareButtonAvailable: true,
-          socialShareProviders: [fakeProvider]
-        });
-
-        view = mountTestComponent();
-
-        var providerItem = view.getDOMNode().querySelector(".dropdown-menu-item:last-child");
-        React.addons.TestUtils.Simulate.click(providerItem);
-
-        sinon.assert.calledOnce(dispatcher.dispatch);
-        sinon.assert.calledWithExactly(dispatcher.dispatch,
-          new sharedActions.ShareRoomUrl({
-            provider: fakeProvider,
-            roomUrl: activeRoomStore.getStoreState().roomUrl,
-            previews: []
-          }));
-      });
-    });
-  });
 });
--- a/browser/components/loop/test/mochitest/browser.ini
+++ b/browser/components/loop/test/mochitest/browser.ini
@@ -15,14 +15,13 @@ support-files =
 skip-if = e10s
 [browser_loop_fxa_server.js]
 [browser_LoopContacts.js]
 [browser_mozLoop_appVersionInfo.js]
 [browser_mozLoop_prefs.js]
 [browser_mozLoop_doNotDisturb.js]
 skip-if = buildapp == 'mulet'
 [browser_mozLoop_pluralStrings.js]
-[browser_mozLoop_socialShare.js]
 [browser_mozLoop_sharingListeners.js]
 skip-if = e10s
 [browser_mozLoop_telemetry.js]
 skip-if = e10s
 [browser_toolbarbutton.js]
--- a/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
@@ -49,29 +49,19 @@ function promiseWindowIdReceivedNewTab(h
   let createdTab = gBrowser.selectedTab = gBrowser.addTab();
   createdTabs.push(createdTab);
 
   promiseHandlers.push(promiseTabLoadEvent(createdTab, "about:mozilla"));
 
   return Promise.all(promiseHandlers);
 };
 
-function promiseRemoveTab(tab) {
-  return new Promise(resolve => {
-    gBrowser.tabContainer.addEventListener("TabClose", function onTabClose() {
-      gBrowser.tabContainer.removeEventListener("TabClose", onTabClose);
-      resolve();
-    });
-    gBrowser.removeTab(tab);
-  });
-}
-
-function* removeTabs() {
+function removeTabs() {
   for (let createdTab of createdTabs) {
-    yield promiseRemoveTab(createdTab);
+    gBrowser.removeTab(createdTab);
   }
 
   createdTabs = [];
 }
 
 add_task(function* test_singleListener() {
   yield promiseWindowIdReceivedOnAdd(handlers[0]);
 
@@ -84,17 +74,17 @@ add_task(function* test_singleListener()
 
   let newWindowId = handlers[0].windowId;
 
   Assert.notEqual(initialWindowId, newWindowId, "Tab contentWindow IDs shouldn't be the same");
 
   // Now remove the listener.
   gMozLoopAPI.removeBrowserSharingListener(handlers[0].listener);
 
-  yield removeTabs();
+  removeTabs();
 });
 
 add_task(function* test_multipleListener() {
   yield promiseWindowIdReceivedOnAdd(handlers[0]);
 
   let initialWindowId0 = handlers[0].windowId;
 
   Assert.notEqual(initialWindowId0, null, "window id should be valid");
@@ -127,17 +117,17 @@ add_task(function* test_multipleListener
 
   Assert.ok(nextWindowId0, "windowId should not be null anymore");
   Assert.equal(newWindowId0, nextWindowId0, "First listener shouldn't have updated");
   Assert.notEqual(newWindowId1, nextWindowId1, "Second listener should have updated");
 
   // Cleanup.
   gMozLoopAPI.removeBrowserSharingListener(handlers[1].listener);
 
-  yield removeTabs();
+  removeTabs();
 });
 
 add_task(function* test_infoBar() {
   const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
   const kBrowserSharingNotificationId = "loop-sharing-notification";
   const kPrefBrowserSharingInfoBar = "loop.browserSharing.showInfoBar";
 
   Services.prefs.setBoolPref(kPrefBrowserSharingInfoBar, true);
@@ -191,11 +181,11 @@ add_task(function* test_infoBar() {
     "The pref should be set to false when the menu item is clicked");
 
   gBrowser.selectedIndex = Array.indexOf(gBrowser.tabs, createdTabs[1]);
 
   Assert.equal(getInfoBar(), null, "The notification should still be hidden");
 
   // Cleanup.
   gMozLoopAPI.removeBrowserSharingListener(handlers[0].listener);
-  yield removeTabs();
+  removeTabs();
   Services.prefs.clearUserPref(kPrefBrowserSharingInfoBar);
 });
deleted file mode 100644
--- a/browser/components/loop/test/mochitest/browser_mozLoop_socialShare.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * This is an integration test from navigator.mozLoop through to the end
- * effects - rather than just testing MozLoopAPI alone.
- */
-
-Cu.import("resource://gre/modules/Promise.jsm");
-const {SocialService} = Cu.import("resource://gre/modules/SocialService.jsm", {});
-
-add_task(loadLoopPanel);
-
-const kShareWidgetId = "social-share-button";
-const kShareProvider = {
-  name: "provider 1",
-  origin: "https://example.com",
-  iconURL: "https://example.com/browser/browser/base/content/test/general/moz.png",
-  shareURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar_empty.html"
-};
-const kShareProviderInvalid = {
-  name: "provider 1",
-  origin: "https://example2.com"
-};
-
-registerCleanupFunction(function* () {
-  yield new Promise(resolve => SocialService.disableProvider(kShareProvider.origin, resolve));
-  yield new Promise(resolve => SocialService.disableProvider(kShareProviderInvalid.origin, resolve));
-  Assert.strictEqual(Social.providers.length, 0, "all providers should be removed");
-  SocialShare.uninit();
-});
-
-add_task(function* test_mozLoop_isSocialShareButtonAvailable() {
-  Assert.ok(gMozLoopAPI, "mozLoop should exist");
-
-  // First make sure the Social Share button is not available. This is probably
-  // already the case, but make it explicit here.
-  CustomizableUI.removeWidgetFromArea(kShareWidgetId);
-
-  Assert.ok(!gMozLoopAPI.isSocialShareButtonAvailable(),
-    "Social Share button should not be available");
-
-  // Add the widget to the navbar.
-  CustomizableUI.addWidgetToArea(kShareWidgetId, CustomizableUI.AREA_NAVBAR);
-
-  Assert.ok(gMozLoopAPI.isSocialShareButtonAvailable(),
-    "Social Share button should be available");
-
-  // Add the widget to the MenuPanel.
-  CustomizableUI.addWidgetToArea(kShareWidgetId, CustomizableUI.AREA_PANEL);
-
-  Assert.ok(gMozLoopAPI.isSocialShareButtonAvailable(),
-    "Social Share button should still be available");
-
-  // Test button removal during the same session.
-  CustomizableUI.removeWidgetFromArea(kShareWidgetId);
-
-  Assert.ok(!gMozLoopAPI.isSocialShareButtonAvailable(),
-    "Social Share button should not be available");
-});
-
-add_task(function* test_mozLoop_addSocialShareButton() {
-  gMozLoopAPI.addSocialShareButton();
-
-  Assert.ok(gMozLoopAPI.isSocialShareButtonAvailable(),
-    "Social Share button should be available");
-
-  let widget = CustomizableUI.getWidget(kShareWidgetId);
-  Assert.strictEqual(widget.areaType, CustomizableUI.TYPE_TOOLBAR,
-    "Social Share button should be placed in the navbar");
-
-  CustomizableUI.removeWidgetFromArea(kShareWidgetId);
-});
-
-add_task(function* test_mozLoop_addSocialShareProvider() {
-  gMozLoopAPI.addSocialShareButton();
-
-  gMozLoopAPI.addSocialShareProvider();
-
-  yield promiseWaitForCondition(() => SocialShare.panel.state == "open");
-
-  Assert.equal(SocialShare.iframe.getAttribute("src"), "about:providerdirectory",
-    "Provider directory page should be visible");
-
-  SocialShare.panel.hidePopup();
-  CustomizableUI.removeWidgetFromArea(kShareWidgetId);
-});
-
-add_task(function* test_mozLoop_getSocialShareProviders() {
-  Assert.strictEqual(gMozLoopAPI.getSocialShareProviders().length, 0,
-    "Provider list should be empty initially");
-
-  // Add a provider.
-  yield new Promise(resolve => SocialService.addProvider(kShareProvider, resolve));
-
-  let providers = gMozLoopAPI.getSocialShareProviders();
-  Assert.strictEqual(providers.length, 1,
-    "The newly added provider should be part of the list");
-  let provider = providers[0];
-  Assert.strictEqual(provider.iconURL, kShareProvider.iconURL, "Icon URLs should match");
-  Assert.strictEqual(provider.name, kShareProvider.name, "Names should match");
-  Assert.strictEqual(provider.origin, kShareProvider.origin, "Origins should match");
-
-  // Add another provider that should not be picked up by Loop.
-  yield new Promise(resolve => SocialService.addProvider(kShareProviderInvalid, resolve));
-
-  providers = gMozLoopAPI.getSocialShareProviders();
-  Assert.strictEqual(providers.length, 1,
-    "The newly added provider should not be part of the list");
-
-  // Let's add a valid second provider object.
-  let provider2 = Object.create(kShareProvider);
-  provider2.name = "Wildly different name";
-  provider2.origin = "https://example3.com";
-  yield new Promise(resolve => SocialService.addProvider(provider2, resolve));
-
-  providers = gMozLoopAPI.getSocialShareProviders();
-  Assert.strictEqual(providers.length, 2,
-    "The newly added provider should be part of the list");
-  Assert.strictEqual(providers[1].name, provider2.name,
-    "Providers should be ordered alphabetically");
-
-  // Remove the second valid provider.
-  yield new Promise(resolve => SocialService.disableProvider(provider2.origin, resolve));
-  providers = gMozLoopAPI.getSocialShareProviders();
-  Assert.strictEqual(providers.length, 1,
-    "The uninstalled provider should not be part of the list");
-  Assert.strictEqual(providers[0].name, kShareProvider.name, "Names should match");
-});
-
-add_task(function* test_mozLoop_socialShareRoom() {
-  gMozLoopAPI.addSocialShareButton();
-
-  gMozLoopAPI.socialShareRoom(kShareProvider.origin, "https://someroom.com", "Some Title");
-
-  yield promiseWaitForCondition(() => SocialShare.panel.state == "open");
-
-  Assert.equal(SocialShare.iframe.getAttribute("origin"), kShareProvider.origin,
-    "Origins should match");
-  Assert.equal(SocialShare.iframe.getAttribute("src"), kShareProvider.shareURL,
-    "Provider's share page should be displayed");
-
-  SocialShare.panel.hidePopup();
-  CustomizableUI.removeWidgetFromArea(kShareWidgetId);
-});
--- a/browser/components/loop/test/mochitest/head.js
+++ b/browser/components/loop/test/mochitest/head.js
@@ -66,44 +66,16 @@ function promiseGetMozLoopAPI() {
       let frame = document.getElementById(frameId);
       if (frame) {
         frame.remove();
       }
     });
   });
 }
 
-function waitForCondition(condition, nextTest, errorMsg) {
-  var tries = 0;
-  var interval = setInterval(function() {
-    if (tries >= 30) {
-      ok(false, errorMsg);
-      moveOn();
-    }
-    var conditionPassed;
-    try {
-      conditionPassed = condition();
-    } catch (e) {
-      ok(false, e + "\n" + e.stack);
-      conditionPassed = false;
-    }
-    if (conditionPassed) {
-      moveOn();
-    }
-    tries++;
-  }, 100);
-  var moveOn = function() { clearInterval(interval); nextTest(); };
-}
-
-function promiseWaitForCondition(aConditionFn) {
-  let deferred = Promise.defer();
-  waitForCondition(aConditionFn, deferred.resolve, "Condition didn't pass.");
-  return deferred.promise;
-}
-
 /**
  * Loads the loop panel by clicking the button and waits for its open to complete.
  * It also registers
  *
  * This assumes that the tests are running in a generatorTest.
  */
 function loadLoopPanel(aOverrideOptions = {}) {
   // Turn off the network for loop tests, so that we don't
--- a/browser/components/loop/test/shared/activeRoomStore_test.js
+++ b/browser/components/loop/test/shared/activeRoomStore_test.js
@@ -29,19 +29,17 @@ describe("loop.store.ActiveRoomStore", f
         get: sinon.stub(),
         join: sinon.stub(),
         refreshMembership: sinon.stub(),
         leave: sinon.stub(),
         on: sinon.stub(),
         off: sinon.stub()
       },
       setScreenShareState: sinon.stub(),
-      getActiveTabWindowId: sandbox.stub().callsArgWith(0, null, 42),
-      isSocialShareButtonAvailable: sinon.stub().returns(false),
-      getSocialShareProviders: sinon.stub().returns([])
+      getActiveTabWindowId: sandbox.stub().callsArgWith(0, null, 42)
     };
 
     fakeSdkDriver = {
       connectSession: sinon.stub(),
       disconnectSession: sinon.stub(),
       forceDisconnectAll: sinon.stub().callsArg(0),
       retryPublishWithoutVideo: sinon.stub(),
       startScreenShare: sinon.stub(),
@@ -274,19 +272,17 @@ describe("loop.store.ActiveRoomStore", f
           windowId: "42",
           type: "room",
           roomToken: fakeToken
         }));
 
         sinon.assert.calledTwice(dispatcher.dispatch);
         sinon.assert.calledWithExactly(dispatcher.dispatch,
           new sharedActions.SetupRoomInfo(_.extend({
-            roomToken: fakeToken,
-            socialShareButtonAvailable: false,
-            socialShareProviders: []
+            roomToken: fakeToken
           }, fakeRoomData)));
       });
 
     it("should dispatch a JoinRoom action if the get is successful",
       function() {
         store.setupWindowData(new sharedActions.SetupWindowData({
           windowId: "42",
           type: "room",
@@ -412,19 +408,17 @@ describe("loop.store.ActiveRoomStore", f
   describe("#setupRoomInfo", function() {
     var fakeRoomInfo;
 
     beforeEach(function() {
       fakeRoomInfo = {
         roomName: "Its a room",
         roomOwner: "Me",
         roomToken: "fakeToken",
-        roomUrl: "http://invalid",
-        socialShareButtonAvailable: false,
-        socialShareProviders: []
+        roomUrl: "http://invalid"
       };
     });
 
     it("should set the state to READY", function() {
       store.setupRoomInfo(new sharedActions.SetupRoomInfo(fakeRoomInfo));
 
       expect(store._storeState.roomState).eql(ROOM_STATES.READY);
     });
@@ -432,18 +426,16 @@ describe("loop.store.ActiveRoomStore", f
     it("should save the room information", function() {
       store.setupRoomInfo(new sharedActions.SetupRoomInfo(fakeRoomInfo));
 
       var state = store.getStoreState();
       expect(state.roomName).eql(fakeRoomInfo.roomName);
       expect(state.roomOwner).eql(fakeRoomInfo.roomOwner);
       expect(state.roomToken).eql(fakeRoomInfo.roomToken);
       expect(state.roomUrl).eql(fakeRoomInfo.roomUrl);
-      expect(state.socialShareButtonAvailable).eql(false);
-      expect(state.socialShareProviders).eql([]);
     });
   });
 
   describe("#updateRoomInfo", function() {
     var fakeRoomInfo;
 
     beforeEach(function() {
       fakeRoomInfo = {
@@ -458,41 +450,16 @@ describe("loop.store.ActiveRoomStore", f
 
       var state = store.getStoreState();
       expect(state.roomName).eql(fakeRoomInfo.roomName);
       expect(state.roomOwner).eql(fakeRoomInfo.roomOwner);
       expect(state.roomUrl).eql(fakeRoomInfo.roomUrl);
     });
   });
 
-  describe("#updateSocialShareInfo", function() {
-    var fakeSocialShareInfo;
-
-    beforeEach(function() {
-      fakeSocialShareInfo = {
-        socialShareButtonAvailable: true,
-        socialShareProviders: [{
-          name: "foo",
-          origin: "https://example.com",
-          iconURL: "icon.png"
-        }]
-      };
-    });
-
-    it("should save the Social API information", function() {
-      store.updateSocialShareInfo(new sharedActions.UpdateSocialShareInfo(fakeSocialShareInfo));
-
-      var state = store.getStoreState();
-      expect(state.socialShareButtonAvailable)
-        .eql(fakeSocialShareInfo.socialShareButtonAvailable);
-      expect(state.socialShareProviders)
-        .eql(fakeSocialShareInfo.socialShareProviders);
-    });
-  });
-
   describe("#joinRoom", function() {
     it("should reset failureReason", function() {
       store.setStoreState({failureReason: "Test"});
 
       store.joinRoom();
 
       expect(store.getStoreState().failureReason).eql(undefined);
     });
@@ -1122,46 +1089,24 @@ describe("loop.store.ActiveRoomStore", f
 
     it("should set the state to ENDED", function() {
       store.leaveRoom();
 
       expect(store._storeState.roomState).eql(ROOM_STATES.ENDED);
     });
   });
 
-  describe("#_handleSocialShareUpdate", function() {
-    it("should dispatch an UpdateRoomInfo action", function() {
-      store._handleSocialShareUpdate();
-
-      sinon.assert.calledOnce(dispatcher.dispatch);
-      sinon.assert.calledWithExactly(dispatcher.dispatch,
-        new sharedActions.UpdateSocialShareInfo({
-          socialShareButtonAvailable: false,
-          socialShareProviders: []
-        }));
-    });
-
-    it("should call respective mozLoop methods", function() {
-      store._handleSocialShareUpdate();
-
-      sinon.assert.calledOnce(fakeMozLoop.isSocialShareButtonAvailable);
-      sinon.assert.calledOnce(fakeMozLoop.getSocialShareProviders);
-    });
-  });
-
   describe("Events", function() {
     describe("update:{roomToken}", function() {
       beforeEach(function() {
         store.setupRoomInfo(new sharedActions.SetupRoomInfo({
           roomName: "Its a room",
           roomOwner: "Me",
           roomToken: "fakeToken",
-          roomUrl: "http://invalid",
-          socialShareButtonAvailable: false,
-          socialShareProviders: []
+          roomUrl: "http://invalid"
         }));
       });
 
       it("should dispatch an UpdateRoomInfo action", function() {
         sinon.assert.calledTwice(fakeMozLoop.rooms.on);
 
         var fakeRoomData = {
           roomName: "fakeName",
@@ -1181,22 +1126,17 @@ describe("loop.store.ActiveRoomStore", f
       var fakeRoomData = {
         roomName: "Its a room",
         roomOwner: "Me",
         roomToken: "fakeToken",
         roomUrl: "http://invalid"
       };
 
       beforeEach(function() {
-        store.setupRoomInfo(new sharedActions.SetupRoomInfo(
-          _.extend(fakeRoomData, {
-            socialShareButtonAvailable: false,
-            socialShareProviders: []
-          })
-        ));
+        store.setupRoomInfo(new sharedActions.SetupRoomInfo(fakeRoomData));
       });
 
       it("should disconnect all room connections", function() {
         fakeMozLoop.rooms.on.callArgWith(1, "delete:" + fakeRoomData.roomToken, fakeRoomData);
 
         sinon.assert.calledOnce(fakeSdkDriver.forceDisconnectAll);
       });
 
--- a/browser/components/loop/test/shared/roomStore_test.js
+++ b/browser/components/loop/test/shared/roomStore_test.js
@@ -72,19 +72,16 @@ describe("loop.store.RoomStore", functio
       pendingInitialRetrieval: false,
       rooms: [],
       activeRoom: {}
     };
 
     beforeEach(function() {
       fakeMozLoop = {
         copyString: function() {},
-        getLoopPref: function(pref) {
-          return pref;
-        },
         notifyUITour: function() {},
         rooms: {
           create: function() {},
           getAll: function() {},
           open: function() {},
           rename: function() {},
           on: sandbox.stub()
         }
@@ -366,72 +363,16 @@ describe("loop.store.RoomStore", functio
         }));
 
         sinon.assert.calledOnce(sharedUtils.composeCallUrlEmail);
         sinon.assert.calledWithExactly(sharedUtils.composeCallUrlEmail,
           "http://invalid");
       });
     });
 
-    describe("#shareRoomUrl", function() {
-      beforeEach(function() {
-        fakeMozLoop.socialShareRoom = sinon.stub();
-      });
-
-      it("should pass the correct data for GMail sharing", function() {
-        var roomUrl = "http://invalid";
-        var origin = "https://mail.google.com/v1";
-        store.shareRoomUrl(new sharedActions.ShareRoomUrl({
-          roomUrl: roomUrl,
-          provider: {
-            origin: origin
-          }
-        }));
-
-        sinon.assert.calledOnce(fakeMozLoop.socialShareRoom);
-        sinon.assert.calledWithExactly(fakeMozLoop.socialShareRoom, origin,
-          roomUrl, "share_email_subject5", "share_email_body5");
-      });
-
-      it("should pass the correct data for all other Social Providers", function() {
-        var roomUrl = "http://invalid2";
-        var origin = "https://twitter.com/share";
-        store.shareRoomUrl(new sharedActions.ShareRoomUrl({
-          roomUrl: roomUrl,
-          provider: {
-            origin: origin
-          }
-        }));
-
-        sinon.assert.calledOnce(fakeMozLoop.socialShareRoom);
-        sinon.assert.calledWithExactly(fakeMozLoop.socialShareRoom, origin,
-          roomUrl, "share_tweet", null);
-      });
-    });
-
-    describe("#addSocialShareButton", function() {
-      it("should invoke to the correct mozLoop function", function() {
-        fakeMozLoop.addSocialShareButton = sinon.stub();
-
-        store.addSocialShareButton(new sharedActions.AddSocialShareButton());
-
-        sinon.assert.calledOnce(fakeMozLoop.addSocialShareButton);
-      });
-    });
-
-    describe("#addSocialShareProvider", function() {
-      it("should invoke to the correct mozLoop function", function() {
-        fakeMozLoop.addSocialShareProvider = sinon.stub();
-
-        store.addSocialShareProvider(new sharedActions.AddSocialShareProvider());
-
-        sinon.assert.calledOnce(fakeMozLoop.addSocialShareProvider);
-      });
-    });
-
     describe("#setStoreState", function() {
       it("should update store state data", function() {
         store.setStoreState({pendingCreation: true});
 
         expect(store.getStoreState().pendingCreation).eql(true);
       });
 
       it("should trigger a `change` event", function(done) {
--- a/browser/components/loop/ui/ui-showcase.js
+++ b/browser/components/loop/ui/ui-showcase.js
@@ -171,24 +171,24 @@
       "14x14": ["audio", "audio-active", "audio-disabled", "facemute",
         "facemute-active", "facemute-disabled", "hangup", "hangup-active",
         "hangup-disabled", "incoming", "incoming-active", "incoming-disabled",
         "link", "link-active", "link-disabled", "mute", "mute-active",
         "mute-disabled", "pause", "pause-active", "pause-disabled", "video",
         "video-white", "video-active", "video-disabled", "volume", "volume-active",
         "volume-disabled"
       ],
-      "16x16": ["add", "add-hover", "add-active", "audio", "audio-hover", "audio-active",
-        "block", "block-red", "block-hover", "block-active", "contacts", "contacts-hover",
-        "contacts-active", "copy", "checkmark", "google", "google-hover", "google-active",
-        "history", "history-hover", "history-active", "leave", "precall", "precall-hover",
+      "16x16": ["audio", "audio-hover", "audio-active", "block", "block-red",
+        "block-hover", "block-active", "contacts", "contacts-hover", "contacts-active",
+        "copy", "checkmark", "google", "google-hover", "google-active", "history",
+        "history-hover", "history-active", "leave", "precall", "precall-hover",
         "precall-active", "screen-white", "screenmute-white", "settings",
-        "settings-hover", "settings-active", "share-darkgrey", "tag", "tag-hover",
-        "tag-active", "trash", "unblock", "unblock-hover", "unblock-active", "video",
-        "video-hover", "video-active", "tour"
+        "settings-hover", "settings-active", "tag", "tag-hover", "tag-active",
+        "trash", "unblock", "unblock-hover", "unblock-active", "video", "video-hover",
+        "video-active", "tour"
       ]
     },
 
     render: function() {
       var icons = this.shapes[this.props.size].map(function(shapeId, i) {
         return (
           React.createElement("li", {key: this.props.size + "-" + i, className: "svg-icon-entry"}, 
             React.createElement("p", null, React.createElement(SVGIcon, {shapeId: shapeId, size: this.props.size})), 
--- a/browser/components/loop/ui/ui-showcase.jsx
+++ b/browser/components/loop/ui/ui-showcase.jsx
@@ -171,24 +171,24 @@
       "14x14": ["audio", "audio-active", "audio-disabled", "facemute",
         "facemute-active", "facemute-disabled", "hangup", "hangup-active",
         "hangup-disabled", "incoming", "incoming-active", "incoming-disabled",
         "link", "link-active", "link-disabled", "mute", "mute-active",
         "mute-disabled", "pause", "pause-active", "pause-disabled", "video",
         "video-white", "video-active", "video-disabled", "volume", "volume-active",
         "volume-disabled"
       ],
-      "16x16": ["add", "add-hover", "add-active", "audio", "audio-hover", "audio-active",
-        "block", "block-red", "block-hover", "block-active", "contacts", "contacts-hover",
-        "contacts-active", "copy", "checkmark", "google", "google-hover", "google-active",
-        "history", "history-hover", "history-active", "leave", "precall", "precall-hover",
+      "16x16": ["audio", "audio-hover", "audio-active", "block", "block-red",
+        "block-hover", "block-active", "contacts", "contacts-hover", "contacts-active",
+        "copy", "checkmark", "google", "google-hover", "google-active", "history",
+        "history-hover", "history-active", "leave", "precall", "precall-hover",
         "precall-active", "screen-white", "screenmute-white", "settings",
-        "settings-hover", "settings-active", "share-darkgrey", "tag", "tag-hover",
-        "tag-active", "trash", "unblock", "unblock-hover", "unblock-active", "video",
-        "video-hover", "video-active", "tour"
+        "settings-hover", "settings-active", "tag", "tag-hover", "tag-active",
+        "trash", "unblock", "unblock-hover", "unblock-active", "video", "video-hover",
+        "video-active", "tour"
       ]
     },
 
     render: function() {
       var icons = this.shapes[this.props.size].map(function(shapeId, i) {
         return (
           <li key={this.props.size + "-" + i} className="svg-icon-entry">
             <p><SVGIcon shapeId={shapeId} size={this.props.size} /></p>