Bug 1037430 - implement webrtc global indicator in the Mac menubar, r=dolske.
authorFlorian Quèze <florian@queze.net>
Sat, 19 Jul 2014 02:49:19 +0200
changeset 217103 8e6b2cf3b2e628dad87540dca2bd0572613dfd2f
parent 217102 fe54b4c9be09d89324975b2ee1513f0815f1c733
child 217104 88a6043b07e01b87e94f95e60563174047c91227
push id515
push userraliiev@mozilla.com
push dateMon, 06 Oct 2014 12:51:51 +0000
treeherdermozilla-release@267c7a481bef [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdolske
bugs1037430
milestone33.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1037430 - implement webrtc global indicator in the Mac menubar, r=dolske.
browser/base/jar.mn
browser/locales/en-US/chrome/browser/webrtcIndicator.properties
browser/modules/moz.build
browser/modules/webrtcUI.jsm
browser/themes/linux/jar.mn
browser/themes/osx/jar.mn
browser/themes/osx/webRTC-camera-black-16.png
browser/themes/osx/webRTC-microphone-black-16.png
browser/themes/osx/webRTC-screen-black-16.png
browser/themes/shared/webrtc/indicator.css
browser/themes/windows/jar.mn
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -130,18 +130,20 @@ browser.jar:
 *       content/browser/hiddenWindow.xul              (content/hiddenWindow.xul)
 #ifdef XP_MACOSX
 *       content/browser/macBrowserOverlay.xul         (content/macBrowserOverlay.xul)
 *       content/browser/downloadManagerOverlay.xul    (content/downloadManagerOverlay.xul)
 *       content/browser/jsConsoleOverlay.xul          (content/jsConsoleOverlay.xul)
 *       content/browser/softwareUpdateOverlay.xul  (content/softwareUpdateOverlay.xul)
 #endif
 *       content/browser/viewSourceOverlay.xul         (content/viewSourceOverlay.xul)
+#ifndef XP_MACOSX
 *       content/browser/webrtcIndicator.xul           (content/webrtcIndicator.xul)
         content/browser/webrtcIndicator.js            (content/webrtcIndicator.js)
+#endif
 #ifdef XP_WIN
         content/browser/win6BrowserOverlay.xul        (content/win6BrowserOverlay.xul)
 #endif
         content/browser/socialmarks.xml               (content/socialmarks.xml)
         content/browser/socialchat.xml                (content/socialchat.xml)
 # the following files are browser-specific overrides
 *       content/browser/license.html                  (/toolkit/content/license.html)
 % override chrome://global/content/license.html chrome://browser/content/license.html
--- a/browser/locales/en-US/chrome/browser/webrtcIndicator.properties
+++ b/browser/locales/en-US/chrome/browser/webrtcIndicator.properties
@@ -9,8 +9,29 @@
 # titles. It is not normally visible anywhere.
 webrtcIndicator.windowtitle = %S - Sharing Indicator
 
 webrtcIndicator.sharingCameraAndMicrophone.tooltip = Your camera and microphone are being shared. Click to control sharing.
 webrtcIndicator.sharingCamera.tooltip              = Your camera is being shared. Click to control sharing.
 webrtcIndicator.sharingMicrophone.tooltip          = Your microphone is being shared. Click to control sharing.
 webrtcIndicator.sharingScreen.tooltip = Your screen is being shared. Click to control sharing.
 webrtcIndicator.sharingWindow.tooltip = A window is being shared. Click to control sharing.
+
+
+# LOCALIZATION NOTE : The following strings are only used on Mac for
+# menus attached to icons near the clock on the mac menubar.
+
+# LOCALIZATION NOTE (webrtcIndicator.sharing*With.menuitem):
+# %S is the title of the tab using the share.
+webrtcIndicator.sharingCameraWith.menuitem = Sharing Camera with "%S"
+webrtcIndicator.sharingMicrophoneWith.menuitem = Sharing Microphone with "%S"
+webrtcIndicator.sharingScreenWith.menuitem = Sharing Screen with "%S"
+webrtcIndicator.sharingWindowWith.menuitem = Sharing a Window with "%S"
+webrtcIndicator.controlSharing.menuitem = Control Sharing
+# LOCALIZATION NOTE (webrtcIndicator.sharing*WithNTabs.menuitem):
+# Semicolon-separated list of plural forms.
+webrtcIndicator.sharingCameraWithNTabs.menuitem = Sharing Camera with #1 tab;Sharing Camera with #1 tabs
+webrtcIndicator.sharingMicrophoneWithNTabs.menuitem = Sharing Microphone with #1 tab;Sharing Microphone with #1 tabs
+webrtcIndicator.sharingScreenWithNTabs.menuitem = Sharing Screen with #1 tab;Sharing Screen with #1 tabs
+webrtcIndicator.sharingWindowWithNTabs.menuitem = Sharing a Window with #1 tab;Sharing Windows with #1 tabs
+# LOCALIZATION NOTE (webrtcIndicator.controlSharingOn.menuitem):
+# %S is the title of the tab using the share.
+webrtcIndicator.controlSharingOn.menuitem = Control Sharing on "%S"
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -19,17 +19,16 @@ EXTRA_JS_MODULES += [
     'offlineAppCache.jsm',
     'PanelFrame.jsm',
     'RemotePrompt.jsm',
     'SharedFrame.jsm',
     'SitePermissions.jsm',
     'Social.jsm',
     'TabCrashReporter.jsm',
     'WebappManager.jsm',
-    'webrtcUI.jsm',
 ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
     EXTRA_JS_MODULES += [
         'Windows8WindowFrameColor.jsm',
         'WindowsJumpLists.jsm',
         'WindowsPreviewPerTab.jsm',
     ]
@@ -38,12 +37,13 @@ if CONFIG['NIGHTLY_BUILD']:
     EXTRA_JS_MODULES += [
         'SignInToWebsite.jsm',
     ]
 
 EXTRA_PP_JS_MODULES += [
     'AboutHome.jsm',
     'RecentWindow.jsm',
     'UITour.jsm',
+    'webrtcUI.jsm',
 ]
 
 if CONFIG['MOZILLA_OFFICIAL']:
     DEFINES['MOZILLA_OFFICIAL'] = 1
--- a/browser/modules/webrtcUI.jsm
+++ b/browser/modules/webrtcUI.jsm
@@ -8,18 +8,16 @@ this.EXPORTED_SYMBOLS = ["webrtcUI"];
 
 const Cu = Components.utils;
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
-const INDICATOR_CHROME_URI = "chrome://browser/content/webrtcIndicator.xul";
-
 XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
                                   "resource://gre/modules/PluralForm.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "MediaManagerService",
                                    "@mozilla.org/mediaManagerService;1",
                                    "nsIMediaManagerService");
 
 this.webrtcUI = {
@@ -413,16 +411,148 @@ function prompt(aContentWindow, aCallID,
   if (requestTypes.length == 1 && requestTypes[0] == "Microphone")
     anchorId = "webRTC-shareMicrophone-notification-icon";
   if (requestTypes.indexOf("Screen") != -1)
     anchorId = "webRTC-shareScreen-notification-icon";
   chromeWin.PopupNotifications.show(browser, "webRTC-shareDevices", message,
                                     anchorId, mainAction, secondaryActions, options);
 }
 
+function getGlobalIndicator() {
+#ifndef XP_MACOSX
+  const INDICATOR_CHROME_URI = "chrome://browser/content/webrtcIndicator.xul";
+  const features = "chrome,dialog=yes,titlebar=no,popup=yes";
+
+  return Services.ww.openWindow(null, INDICATOR_CHROME_URI, "_blank", features, []);
+#else
+  let indicator = {
+    _camera: null,
+    _microphone: null,
+    _screen: null,
+
+    _hiddenDoc: Cc["@mozilla.org/appshell/appShellService;1"]
+                  .getService(Ci.nsIAppShellService)
+                  .hiddenDOMWindow.document,
+    _statusBar: Cc["@mozilla.org/widget/macsystemstatusbar;1"]
+                  .getService(Ci.nsISystemStatusBar),
+
+    _command: function(aEvent) {
+      let type = this.getAttribute("type");
+      if (type == "Camera" || type == "Microphone")
+        type = "Devices";
+      else if (type == "Window")
+        type = "Screen";
+      webrtcUI.showSharingDoorhanger(aEvent.target.stream, type);
+    },
+
+    _popupShowing: function(aEvent) {
+      let type = this.getAttribute("type");
+      let activeStreams;
+      if (type == "Camera") {
+        activeStreams = webrtcUI.getActiveStreams(true, false, false);
+      }
+      else if (type == "Microphone") {
+        activeStreams = webrtcUI.getActiveStreams(false, true, false);
+      }
+      else if (type == "Screen") {
+        activeStreams = webrtcUI.getActiveStreams(false, false, true);
+        type = webrtcUI.showScreenSharingIndicator;
+      }
+
+      let bundle =
+        Services.strings.createBundle("chrome://browser/locale/webrtcIndicator.properties");
+
+      if (activeStreams.length == 1) {
+        let stream = activeStreams[0];
+
+        let menuitem = this.ownerDocument.createElement("menuitem");
+        let labelId = "webrtcIndicator.sharing" + type + "With.menuitem";
+        let label = stream.browser.contentTitle || stream.uri;
+        menuitem.setAttribute("label", bundle.formatStringFromName(labelId, [label], 1));
+        menuitem.setAttribute("disabled", "true");
+        this.appendChild(menuitem);
+
+        menuitem = this.ownerDocument.createElement("menuitem");
+        menuitem.setAttribute("label",
+                              bundle.GetStringFromName("webrtcIndicator.controlSharing.menuitem"));
+        menuitem.setAttribute("type", type);
+        menuitem.stream = stream;
+        menuitem.addEventListener("command", indicator._command);
+
+        this.appendChild(menuitem);
+        return true;
+      }
+
+      // We show a different menu when there are several active streams.
+      let menuitem = this.ownerDocument.createElement("menuitem");
+      let labelId = "webrtcIndicator.sharing" + type + "WithNTabs.menuitem";
+      let count = activeStreams.length;
+      let label = PluralForm.get(count, bundle.GetStringFromName(labelId)).replace("#1", count);
+      menuitem.setAttribute("label", label);
+      menuitem.setAttribute("disabled", "true");
+      this.appendChild(menuitem);
+
+      for (let stream of activeStreams) {
+        let item = this.ownerDocument.createElement("menuitem");
+        let labelId = "webrtcIndicator.controlSharingOn.menuitem";
+        let label = stream.browser.contentTitle || stream.uri;
+        item.setAttribute("label", bundle.formatStringFromName(labelId, [label], 1));
+        item.setAttribute("type", type);
+        item.stream = stream;
+        item.addEventListener("command", indicator._command);
+        this.appendChild(item);
+      }
+
+      return true;
+    },
+
+    _popupHiding: function(aEvent) {
+      while (this.firstChild)
+        this.firstChild.remove();
+    },
+
+    _setIndicatorState: function(aName, aState) {
+      let field = "_" + aName.toLowerCase();
+      if (aState && !this[field]) {
+        let menu = this._hiddenDoc.createElement("menu");
+        let uri = "chrome://browser/skin/webRTC-" + aName.toLowerCase() + "-black-16.png";
+        menu.setAttribute("image", uri);
+        this._statusBar.addItem(menu);
+
+        let menupopup = this._hiddenDoc.createElement("menupopup");
+        menupopup.setAttribute("type", aName);
+        menupopup.addEventListener("popupshowing", this._popupShowing);
+        menupopup.addEventListener("popuphiding", this._popupHiding);
+        menupopup.addEventListener("command", this._command);
+        menu.appendChild(menupopup);
+
+        this[field] = menu;
+      }
+      else if (this[field] && !aState) {
+        this._statusBar.removeItem(this[field]);
+        this[field] = null
+      }
+    },
+    updateIndicatorState: function() {
+      this._setIndicatorState("Camera", webrtcUI.showCameraIndicator);
+      this._setIndicatorState("Microphone", webrtcUI.showMicrophoneIndicator);
+      this._setIndicatorState("Screen", webrtcUI.showScreenSharingIndicator);
+    },
+    close: function() {
+      this._setIndicatorState("Camera", false);
+      this._setIndicatorState("Microphone", false);
+      this._setIndicatorState("Screen", false);
+    }
+  };
+
+  indicator.updateIndicatorState();
+  return indicator;
+#endif
+}
+
 var gIndicatorWindow = null;
 
 function updateIndicators() {
   let contentWindowSupportsArray = MediaManagerService.activeMediaCaptureWindows;
   let count = contentWindowSupportsArray.Count();
 
   webrtcUI.showGlobalIndicator = count > 0;
 
@@ -447,23 +577,20 @@ function updateIndicators() {
       webrtcUI.showScreenSharingIndicator = "Screen";
     else if (window.value && !webrtcUI.showScreenSharingIndicator)
       webrtcUI.showScreenSharingIndicator = "Window";
 
     showBrowserSpecificIndicator(getBrowserForWindow(contentWindow));
   }
 
   if (webrtcUI.showGlobalIndicator) {
-    if (!gIndicatorWindow) {
-      const features = "chrome,dialog=yes,titlebar=no,popup=yes";
-      gIndicatorWindow = Services.ww.openWindow(null, INDICATOR_CHROME_URI, "_blank",
-                                                features, []);
-    } else {
+    if (!gIndicatorWindow)
+      gIndicatorWindow = getGlobalIndicator();
+    else
       gIndicatorWindow.updateIndicatorState();
-    }
   } else if (gIndicatorWindow) {
     gIndicatorWindow.close();
     gIndicatorWindow = null;
   }
 }
 
 function showBrowserSpecificIndicator(aBrowser) {
   let camera = {}, microphone = {}, screen = {}, window = {};
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -72,17 +72,17 @@ browser.jar:
   skin/classic/browser/webRTC-shareDevice-64.png
   skin/classic/browser/webRTC-sharingDevice-16.png
   skin/classic/browser/webRTC-shareMicrophone-16.png
   skin/classic/browser/webRTC-shareMicrophone-64.png
   skin/classic/browser/webRTC-sharingMicrophone-16.png
   skin/classic/browser/webRTC-shareScreen-16.png      (../shared/webrtc/webRTC-shareScreen-16.png)
   skin/classic/browser/webRTC-shareScreen-64.png      (../shared/webrtc/webRTC-shareScreen-64.png)
   skin/classic/browser/webRTC-sharingScreen-16.png    (../shared/webrtc/webRTC-sharingScreen-16.png)
-* skin/classic/browser/webRTC-indicator.css           (../shared/webrtc/indicator.css)
+  skin/classic/browser/webRTC-indicator.css           (../shared/webrtc/indicator.css)
   skin/classic/browser/webRTC-camera-white-16.png     (../shared/webrtc/camera-white-16.png)
   skin/classic/browser/webRTC-microphone-white-16.png (../shared/webrtc/microphone-white-16.png)
   skin/classic/browser/webRTC-screen-white-16.png     (../shared/webrtc/screen-white-16.png)
   skin/classic/browser/customizableui/background-noise-toolbar.png  (customizableui/background-noise-toolbar.png)
   skin/classic/browser/customizableui/customize-illustration.png  (../shared/customizableui/customize-illustration.png)
   skin/classic/browser/customizableui/customize-illustration-rtl.png  (../shared/customizableui/customize-illustration-rtl.png)
   skin/classic/browser/customizableui/customizeMode-gridTexture.png  (customizableui/customizeMode-gridTexture.png)
   skin/classic/browser/customizableui/customizeMode-separatorHorizontal.png  (customizableui/customizeMode-separatorHorizontal.png)
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -126,23 +126,19 @@ browser.jar:
   skin/classic/browser/webRTC-sharingMicrophone-16.png
   skin/classic/browser/webRTC-sharingMicrophone-16@2x.png
   skin/classic/browser/webRTC-shareScreen-16.png      (../shared/webrtc/webRTC-shareScreen-16.png)
   skin/classic/browser/webRTC-shareScreen-16@2x.png   (../shared/webrtc/webRTC-shareScreen-16@2x.png)
   skin/classic/browser/webRTC-shareScreen-64.png      (../shared/webrtc/webRTC-shareScreen-64.png)
   skin/classic/browser/webRTC-shareScreen-64@2x.png   (../shared/webrtc/webRTC-shareScreen-64@2x.png)
   skin/classic/browser/webRTC-sharingScreen-16.png    (../shared/webrtc/webRTC-sharingScreen-16.png)
   skin/classic/browser/webRTC-sharingScreen-16@2x.png (../shared/webrtc/webRTC-sharingScreen-16@2x.png)
-* skin/classic/browser/webRTC-indicator.css           (../shared/webrtc/indicator.css)
-  skin/classic/browser/webRTC-camera-white-16.png     (../shared/webrtc/camera-white-16.png)
-  skin/classic/browser/webRTC-camera-white-16@2x.png  (../shared/webrtc/camera-white-16@2x.png)
-  skin/classic/browser/webRTC-microphone-white-16.png (../shared/webrtc/microphone-white-16.png)
-  skin/classic/browser/webRTC-microphone-white-16@2x.png (../shared/webrtc/microphone-white-16@2x.png)
-  skin/classic/browser/webRTC-screen-white-16.png     (../shared/webrtc/screen-white-16.png)
-  skin/classic/browser/webRTC-screen-white-16@2x.png  (../shared/webrtc/screen-white-16@2x.png)
+  skin/classic/browser/webRTC-camera-black-16.png
+  skin/classic/browser/webRTC-microphone-black-16.png
+  skin/classic/browser/webRTC-screen-black-16.png
   skin/classic/browser/customizableui/background-noise-toolbar.png  (customizableui/background-noise-toolbar.png)
   skin/classic/browser/customizableui/customize-titleBar-toggle.png  (customizableui/customize-titleBar-toggle.png)
   skin/classic/browser/customizableui/customize-titleBar-toggle@2x.png  (customizableui/customize-titleBar-toggle@2x.png)
   skin/classic/browser/customizableui/customize-illustration.png  (../shared/customizableui/customize-illustration.png)
   skin/classic/browser/customizableui/customize-illustration@2x.png  (../shared/customizableui/customize-illustration@2x.png)
   skin/classic/browser/customizableui/customize-illustration-rtl.png  (../shared/customizableui/customize-illustration-rtl.png)
   skin/classic/browser/customizableui/customize-illustration-rtl@2x.png  (../shared/customizableui/customize-illustration-rtl@2x.png)
   skin/classic/browser/customizableui/customizeFavicon.ico  (../shared/customizableui/customizeFavicon.ico)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6f72a4c269e9dbda8f7495ab3dd3946dd65abf96
GIT binary patch
literal 15059
zc%1E<Ux?g99LMLNsJFFHTG7&qhLjdXvzcU*%_i*T*zWHA!R~q7ow!$!Hk(ZDLU)ri
z$#wV62es`>3sV0*_#Yp{2T@-{d}yTw6`?*<{6nD#RuHKoh*&6!QYZWG_OjWdLLVoP
zWHU40?`P&We_!_G%=E;T#Lff&V9V5GaTdR~hW8z};phE--q7%C)SX=L0oc4fyhp&R
zukQdrK5NZaf=YS6qC54ZW;j)pY}Q>6UfHpxtLcYPKvmJAW#{PM&zz$v%gE7>i)C1L
z3uwujT=mf0>h!$6dRUhYdQ44Zn+i6lqd=pY^_uM~%^cnGRq*dHnWd>#k>GHS&W9OP
zr949w91l@qQe<?<bCe_}IZ>1({$YxToWMek<x&hMD}tavNOdk+P2gwNGfZW+INrhG
zuN=J;1g^rejYcEcNF^O_k>zArW+Bh=JcCOx{)!!FO~&?jw@tb}Mda(A<p!2xQ{lH(
zb(Vu1O(&?ntJAK!TQ2udw%>^!jw9RDT$W2hwq9rBlzuRa%#D@){ECa%S>!v*o{n(w
z-SI}Hqrv|%Djh|35Nm~7v$0W}$k2NlciF480&VCls-ZgO_*loq>f9wKaQr1_2(p(w
z6dYLQkN}1`LuIIG4UvU8ZJD~J%eJ~$dDOG;@YiZZM_&%xHC0q`M$)hh#Wd4t0j5kQ
zEt)bT$YzSER%L_92x-Xi5|sE<Cd&@B89>D#_<TN{;!6+;vdnQMAuo@YGE$n~SAqpD
z!{@v98`)0TexTVp>eyP?Ry3+&Mn@VWK!IljLDHBEhajGQI;R;KzA8$+n)k^EYm7YW
zC^E)9r{0<{uIBkD9CJCkJLvjD8VXy(U$F-3gv>M)p}{jol{Xndha8hJ4af+l2_-?~
zIbFnc8j#1i8*9;MFFrT{6M7>{$w(4P;ih7Yfmaqzk{Au9AybviDiV23Nb_2kWyFS-
z9SFc+bS5o7aJ-dB6~j2qp(E>4yBRg>Cga#^FJ1!_O%InW)z@%U!fN-W4Hw09!Oabe
z0r_x7V+q-6xP~)OVmNW0ODnvn@G}0yD|y$dRcg42@0dYD^H6>f_k!BqG-kS8Nfios
zlfawC17%IO>@e}cuJ3x`aDcv~*^9_f*{-mgFwjM8yN@D0$_{pEcYF*EfpBan1rKRB
zeco|u@eSgH^$m)O;`~q%-;rp;jKZb6(T<dic$6K(GFM_e*7aDVWYh!i@P-y>H|5e_
zw$I1V71QzRTA*5WZ4t4qy_jX!68lQ7&F6wsb39xvq^7cLTymc(+#|x}7>^09HAT2A
zJCGJFUkRsSZMl^v@ep4u7d|`E{_Lo9VPomS2GX^x$80N5`Hm!#+@}gRvUaQI@Zk-q
zX;DmxSvHy+Rm@mTRI3y%yv+Hnh@?B3Xhy7XVVH1XK-iuteaEc!8IJ87;_&&A?HwTF
zChV=h2!ucggg^*{KnR3D2!ucggg^*{KnR3D2!ucggg^*{KnR3D2!ucggg^*{KnR3D
z2!ucggg^*{KnR3D2!ucggg^*{KyEQ4vG$itWE(lUL652Ly*s-b06^)Jvt<BQ_W<zp
zaRC0hf#1IXunYnC^$-Bc%K+Ttym0XIaa{KKsbYS<dHLHHxy13At;HV_$I3e&dFb@j
z(X->HzW?m&?QdTgsbx=GsQmQQmi)7S9KUk@uFYpY{O6T(drxjHZlWvT`ia{iIPl|@
z)$F#nUJ^#H?fUf1H+D@w^Y<rD-u>0|&*#6qG_mRO#RJ>+j;6lJ-}vp?j@Lfgaeei<
zk&An_pBby39r^C#^Z$Nv@ahw%C+@s!E^$eH=LmRz;?%wSuT0z*{_S+CG+q2)-=Smw
E0TU5h$p8QV
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bfaa4413e85b9b2c83822d9fb97bbc04f049255a
GIT binary patch
literal 15179
zc%1E<du$X%9LJX^1*#Yb308b?9wHdn+sEzWcD=jixVzdaSDUtko*HFuceb~3x4Yfl
zw%4M>NPIv9fkZ+GL4t`17=;Lb)Ksh>kO)dNM*lD|X@D3XBn`o+BqTU{kM??x1{40A
zO?LNoX1?Fg%x|9m+}4ivr{*^<X~ZyWep_p-6TTO?_uK~fTzdVM1Yh&a)})PL_bhVn
zS=he)O&BJ8u66e~J&CoVY-D|sVx)jCmo+i>3O46VN!|z?PYU#EddNF5I_C9gO31sO
zO^^vQ3esBZum!q?+q>oAjk2J4o5PL4oCpoFz>z$;Y(}@mT*#aE72$6;neck@MVyTx
zZ^X^;^dvewQNscr*2m&9NmCwP@KG$w^Ym&DO;QX&QUvA4DM4fykt99E%NuTl&!DBK
zVrQ(Sh=X4tZ`yH8kst;K2YrKnpJDY9lpqKMNfR`U!xFeXq&rd$*X?Bmlafyi*s`UW
zj%Mf{_ghLC{Z7d1ZS<5~#dc-QL}C)9+r{X?I1)L@Bq$$AWV1vqrR{VAb!MgAJ!Ar+
z6WB(-B?DM|S#6{Efb)Nh;sZc;YFfe8%xqLkq{x#Rv){_(1Fgse$bc;5*ic8+)R}3+
zG3>Na2RWHt7wl+iodCKyb!8x@)seY51zC7X7tD9D_^hSD;V)%khTQMAt1T9W89qf*
zL{;TDhV-jA$EpI(2&x}Xr33{JFdRwIJjv7kK#-_wQ-!L5U|RfvxSwW8Mi3|}&P0Tk
zc!1~VHE}XZ1?Wi0ekR*C-F75h21Q#9+VTNDpa?vPtA3Kj85#(9O5!P8@%w2`=17i~
z*^+gcyt>A~(guLiVj0=|gfS({2JV;(c}s(?JfyBLKm0|lx=ujlNS0J+TuIR?&d4N%
z2ULZ`8C4~DhNUT)h0&~%*K${;qET3UU;-pejw~_2^T01t62vHQWubT;mq?DpQ@ol2
zEG;n{EtObG&Cn860jQ2nt7bcfHB?bWH%?ukZ+dDeBct7B94Ffg*8owH-6bn*ORy?#
zwae1#i)wVi?G1}6d40xU8t7qn4aZ3yr`T?a6KPiTv+xtH<Rz<osrn|ip*n+-1tPt$
z7s7>2qodT7o@f+q5^&R4nUG{ncN3o|`A!$s2gqqj?*&SjC<#jmRb50B`lzBuiRvyb
zjgRUf;EoM3Y5@tRcN<2gc7rHpdV?xOwfsN~-WAa%10u_nqFqt4!XsfQnmSa&V_J_@
zl&tiCJG>$}(rvkvmo4*AWKlJ&tmK5Xtkeq#Q|}EDQ;B6Ir{;6i$QTx^76|);M6Kj9
zmAgl{%P|}iQhth1L82<HvV4y_4Kw}uJf0@uMNsauC@s&flqP4ECTEaNWv$aSCrlS5
z70G2PcOxsbx(goOK$v4$Kb*0Z$(4!@EeA3^F%2$rc0M9pQB#>wQ<$tLOjZdCQ>E;f
zRXD>D#X}rCKN6D%$XXNj&R+<EAP9mW2!bF8f*=TjAP9mW2!bF8f*=TjAP9mW2!bF8
zf*=TjAP9mW2!bF8f*=TjAP9mW2!bF8f*=TjAP9mW2!bGY7}7ZPmrS55A@88KIlOhf
zcmu;QkKEdsz_8)v81~v047+g)zJJHCeiFm}*nnZ;UJSe6*!|Mk77Uv;uPqko&i(w(
z4=10FMi$H-pE%dF^WgTKogd#keD|jJzdU{Z@$4fj#-r)%W&f3hhqm|htfaWb+jcKF
z`fY5_rsG@Zy!nf8RXE;!Jf7V1>&k6wX8%dGchNsGSH3^{OpG5rviibU>#^;Ro_||1
z*@Qml`QIKJS~0T3YUo<K`<2d<Z>?)M+x*$S$f}VBbzbvV&+R?2=Yjp>i=S*-esk{V
z$f;}emc&Ex_x?(5KD6RKIq}o@qND%r=-biv!j-0_hYu#H-024|_PsICJ$7#Pfomg2
zc3m{z4gY=V>Z`%=6CZx<T$<(k;I4_(7h}iL=dj_nRsVcC`r?M~?mdM~EZj1_?MP(T
pjf>gLnUB7?est)-%bVw5H&c5bUV8b=1^4f+ZSnTlCu=sm{vQCvnCAch
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6a69eeccd9b6cd07a6e3f32700565cc551c34c7e
GIT binary patch
literal 15055
zc%1E<Ux?g99LL92&US0{YDL>pFr)}AG&_@Q{%qpzmhJAHchbF{cc<RrLz_(|cky<U
zHObxX-BZyA5fQ})l~M#Bd=Y7F5h+-;6pMm?ph%@CC`Az!L{w1fgLSfh?)I|Tqe34i
zkYqD6-|uJUH-BID+3~Rlw<dNa003J@M~V~VJs94b2FUZiKd<ZLwYfGj;{&i|dwAah
zj-S{8fO^iJnhvH*hcv^jCUw&-<7A^+1L2i9(5UIgJPw#Lp0%AU``ddTvW#tJ*~g?3
zD%A>j&K_Cz@Z|E?l(9T-s3v<Lm&i0UVo=3_&NQkO$JZKJw&|;p-(fOjnP!n-KFj9A
z3}(7C&J<h^Gg4CG3?%T3q9%DsQWRl7BOqRch=+WN<5f)*HH4V<#pV*^nej|Zn<x&q
zapWt@&ILhDgRow&C+n%C>&-%5RaJ-tC<q)W!TC#0pf@<j-_tVb_!O~kcy=wYU55$3
z^|HGVWLY-BbY1OsRcocv3d-@@(Iat$4ZQ~WB!bl{j8po-1h&>!`cq3a3@5PfE_ene
z#rMP;4J`)$$7pB~J3*`!Y0dgZaU#=L(bN{aN;A-=0dWOa3CAZoK2}$oa|73(bNe7y
zvipJq+v*d*FsH8!H|##LFsCKUt?Dw(F4hivHW~hUrRW+9VY^0)Ig*hyZBw%>Sr$>s
z;$+EEIZ?GzT)C{8Tw0V7FDOV6Qt1rrYtw^@K`82QURKir5>=Jwhs3-(Jd{>s;ouM|
z@M$66v0u-2)bRt|F>u?~CbmY|Fy%B-I3AIiB?@JcOP3{s<1ImwEnQYE6L+k;<h?b<
zp1p|8Vb85LCrnNEd>oFsEZZ4$-60Ky&Ec=vy>-Htj3i_VoLLquPBakDr7aV2qGcgP
zlmy<8NHlxoaqi}7G+K)fNg#xkk)@>-1*Z&NCm55gEWDy{I+77rR;)6X1YMK`y~8qN
zLkoKX&>Ni*+YelCDN@BSPLue_wW*zqihYA|Txl;^12o+Tm#mzxld6Q(?n>(~is^zI
z8x}qC{*3w@c5>kw&V{DZ6fbLnq@{TBNmlZXRkKuo6W_Ihy6)lpEa`<@YttC-bR|<L
zkWGSY8hcB+VLM^szK-u&VSj)zr#rLQ%)ySZlhD&eu+>MA9)-PK+8H0cLm(U*TEW9Q
zNuP4vN_>NOaczU5qBuWXBzGj*NYx~%6YWUJh)2maZEGpUV@;1mN=7}%4sYs#enT$Z
zWxIS#L$h43ss}l{s?TCrb7nJeHL<JY>U=J^71txx!nsri#wB;D!aX8fj>(wNn^T0(
zz@D^d`RQ;PRu-Chih#%k`S976c4tSWGwVxd){(AeJ>u9wPH0Oa$z7^&BWtyKk{sS}
zPL`yUl!4LYsAAl1;L3E-Cd-`PjELOUL^EQAGyQ}!J;K&h={jb$&Tz1Oh$H7mxN?Au
zo3J<kq7Vw95DK9X3ZW1Rp%4n85DK9X3ZW1Rp%4n85DK9X3ZW1Rp%4n85DK9X3ZW1R
zp%4n85DK9X3ZW1Rp%4n85DK9X3c1OU#Ohx%v14Z0I(s1Z+Lgt5003i*Oq2jvz8`>N
zPXlo6I(h#Lzybo`m!kk^uL5wd`_hq%!=&u<qs9DG<Ll49{Cx9<{OuQi|L(2jGxz*@
zXs~i&!@C<#J^Fg%oq-1i&z<_{xs9JDzW;dBu1!Du@$c35U%Y$U6K_5|a~W*A>KHHV
z4W79?{)#uS?~U`jzPa#0YHa7R+s^Nv+>iDhTikZ(4(?X#O6K%kKb<*w4PCi({lw`z
z&wjPx<+JCu?D+e~zaHPY`^ek=Cxw5mDc=r&!(Ti!zy0d*@Q<osbZD%2^5D^@{sS!+
BTyOvY
--- a/browser/themes/shared/webrtc/indicator.css
+++ b/browser/themes/shared/webrtc/indicator.css
@@ -104,26 +104,8 @@ window[sharingaudio][sharingvideo] > #au
   z-index: 1;
   display: none;
 }
 
 window[sharingscreen][sharingvideo] > #shareSeparator,
 window[sharingscreen][sharingaudio] > #shareSeparator {
   display: -moz-box;
 }
-
-%ifdef XP_MACOSX
-@media (min-resolution: 2dppx) {
-  window[sharingvideo] > #audioVideoButton {
-    background-image: url("webRTC-camera-white-16@2x.png");
-  }
-
-  window[sharingaudio] > #audioVideoButton {
-    background-image: url("webRTC-microphone-white-16@2x.png");
-  }
-
-  /* Multi-icon button: */
-  window[sharingaudio][sharingvideo] > #audioVideoButton {
-    background-image: url("webRTC-camera-white-16@2x.png"),
-                      url("webRTC-microphone-white-16@2x.png");
-  }
-}
-%endif
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -93,17 +93,17 @@ browser.jar:
         skin/classic/browser/webRTC-shareDevice-64.png
         skin/classic/browser/webRTC-sharingDevice-16.png
         skin/classic/browser/webRTC-shareMicrophone-16.png
         skin/classic/browser/webRTC-shareMicrophone-64.png
         skin/classic/browser/webRTC-sharingMicrophone-16.png
         skin/classic/browser/webRTC-shareScreen-16.png               (../shared/webrtc/webRTC-shareScreen-16.png)
         skin/classic/browser/webRTC-shareScreen-64.png               (../shared/webrtc/webRTC-shareScreen-64.png)
         skin/classic/browser/webRTC-sharingScreen-16.png             (../shared/webrtc/webRTC-sharingScreen-16.png)
-*       skin/classic/browser/webRTC-indicator.css                    (../shared/webrtc/indicator.css)
+        skin/classic/browser/webRTC-indicator.css                    (../shared/webrtc/indicator.css)
         skin/classic/browser/webRTC-camera-white-16.png              (../shared/webrtc/camera-white-16.png)
         skin/classic/browser/webRTC-microphone-white-16.png          (../shared/webrtc/microphone-white-16.png)
         skin/classic/browser/webRTC-screen-white-16.png              (../shared/webrtc/screen-white-16.png)
         skin/classic/browser/customizableui/background-noise-toolbar.png  (customizableui/background-noise-toolbar.png)
         skin/classic/browser/customizableui/customizeFavicon.ico  (../shared/customizableui/customizeFavicon.ico)
         skin/classic/browser/customizableui/customize-illustration.png  (../shared/customizableui/customize-illustration.png)
         skin/classic/browser/customizableui/customize-illustration-rtl.png  (../shared/customizableui/customize-illustration-rtl.png)
         skin/classic/browser/customizableui/customize-titleBar-toggle.png  (customizableui/customize-titleBar-toggle.png)
@@ -509,17 +509,17 @@ browser.jar:
         skin/classic/aero/browser/webRTC-shareDevice-64.png
         skin/classic/aero/browser/webRTC-sharingDevice-16.png
         skin/classic/aero/browser/webRTC-shareMicrophone-16.png
         skin/classic/aero/browser/webRTC-shareMicrophone-64.png
         skin/classic/aero/browser/webRTC-sharingMicrophone-16.png
         skin/classic/aero/browser/webRTC-shareScreen-16.png               (../shared/webrtc/webRTC-shareScreen-16.png)
         skin/classic/aero/browser/webRTC-shareScreen-64.png               (../shared/webrtc/webRTC-shareScreen-64.png)
         skin/classic/aero/browser/webRTC-sharingScreen-16.png             (../shared/webrtc/webRTC-sharingScreen-16.png)
-*       skin/classic/aero/browser/webRTC-indicator.css                    (../shared/webrtc/indicator.css)
+        skin/classic/aero/browser/webRTC-indicator.css                    (../shared/webrtc/indicator.css)
         skin/classic/aero/browser/webRTC-camera-white-16.png              (../shared/webrtc/camera-white-16.png)
         skin/classic/aero/browser/webRTC-microphone-white-16.png          (../shared/webrtc/microphone-white-16.png)
         skin/classic/aero/browser/webRTC-screen-white-16.png              (../shared/webrtc/screen-white-16.png)
         skin/classic/aero/browser/customizableui/background-noise-toolbar.png  (customizableui/background-noise-toolbar.png)
         skin/classic/aero/browser/customizableui/customize-illustration.png  (../shared/customizableui/customize-illustration.png)
         skin/classic/aero/browser/customizableui/customize-illustration-rtl.png  (../shared/customizableui/customize-illustration-rtl.png)
         skin/classic/aero/browser/customizableui/customize-titleBar-toggle.png  (customizableui/customize-titleBar-toggle.png)
         skin/classic/aero/browser/customizableui/customizeFavicon.ico  (../shared/customizableui/customizeFavicon.ico)