Index: chrome/browser/media/media_stream_capture_indicator.h |
diff --git a/chrome/browser/media/media_stream_capture_indicator.h b/chrome/browser/media/media_stream_capture_indicator.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d904d6f3fab829ccdf668ea1931af35efff2651a |
--- /dev/null |
+++ b/chrome/browser/media/media_stream_capture_indicator.h |
@@ -0,0 +1,132 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_MEDIA_MEDIA_STREAM_CAPTURE_INDICATOR_H_ |
+#define CHROME_BROWSER_MEDIA_MEDIA_STREAM_CAPTURE_INDICATOR_H_ |
+#pragma once |
+ |
+#include <list> |
+#include <string> |
+ |
+#include "base/memory/ref_counted.h" |
+#include "content/public/common/media_stream_request.h" |
+#include "third_party/skia/include/core/SkBitmap.h" |
+#include "ui/base/models/simple_menu_model.h" |
+ |
+class StatusIcon; |
+class StatusTray; |
+ |
+// This indicator is owned by MediaInternals and deleted when MediaInternals |
+// is deleted. |
+class MediaStreamCaptureIndicator |
+ : public base::RefCountedThreadSafe<MediaStreamCaptureIndicator>, |
+ public ui::SimpleMenuModel::Delegate { |
+ public: |
+ MediaStreamCaptureIndicator(); |
+ |
+ // Overrides from SimpleMenuModel::Delegate implementation. |
+ virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; |
+ virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; |
+ virtual bool GetAcceleratorForCommandId( |
+ int command_id, |
+ ui::Accelerator* accelerator) OVERRIDE; |
+ virtual void ExecuteCommand(int command_id) OVERRIDE; |
+ |
+ // Called on IO thread when MediaStream opens new capture devices. |
+ void CaptureDevicesOpened(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevices& devices); |
+ |
+ // Called on IO thread when MediaStream closes the opened devices. |
+ void CaptureDevicesClosed(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevices& devices); |
+ |
+ private: |
+ // Struct to store the usage information of the capture devices for each tab. |
+ struct CaptureDeviceTab { |
+ CaptureDeviceTab(int render_process_id, |
+ int render_view_id, |
+ content::MediaStreamDeviceType type) |
+ : render_process_id(render_process_id), |
+ render_view_id(render_view_id), |
+ type(type) {} |
+ |
+ int render_process_id; |
+ int render_view_id; |
+ content::MediaStreamDeviceType type; |
+ }; |
+ |
+ // A private predicate used in std::find_if to find a |CaptureDeviceTab| |
+ // which matches the information specified at construction. |
+ class TabEquals { |
+ public: |
+ TabEquals(int render_process_id, int render_view_id, |
+ content::MediaStreamDeviceType type); |
+ TabEquals(int render_process_id, int render_view_id); |
+ |
+ bool operator() ( |
+ const MediaStreamCaptureIndicator::CaptureDeviceTab& tab); |
+ |
+ private: |
+ int render_process_id_; |
+ int render_view_id_; |
+ content::MediaStreamDeviceType type_; |
+ }; |
+ |
+ friend class base::RefCountedThreadSafe<MediaStreamCaptureIndicator>; |
+ virtual ~MediaStreamCaptureIndicator(); |
+ |
+ // Called by the public functions, executed on UI thread. |
+ void DoDevicesOpenedOnUIThread(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevices& devices); |
+ void DoDevicesClosedOnUIThread(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevices& devices); |
+ |
+ // Following functions/variables are executed/accessed only on UI thread. |
+ // Creates the status tray if it has not been created. |
+ void CreateStatusTray(); |
+ |
+ // Makes sure we have done one-time initialization of the |icon_image_|. |
+ void EnsureStatusTrayIcon(); |
+ |
+ // Triggers a balloon in the corner telling capture devices are being used. |
+ void ShowBalloon(int render_process_id, int render_view_id, |
+ const content::MediaStreamDevices& devices) const; |
+ |
+ // Hides the status tray from the desktop. |
+ void Hide(); |
+ |
+ // Adds the new tab to the device usage list. |
+ void AddCaptureDeviceTab(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevices& devices); |
+ |
+ // Removes the tab from the device usage list. |
+ void RemoveCaptureDeviceTab(int render_process_id, |
+ int render_view_id, |
+ const content::MediaStreamDevices& devices); |
+ |
+ // Gets the title of the tab. |
+ string16 GetTitle(int render_process_id, int render_view_id) const; |
+ |
+ // Updates the status tray menu with the new device list. This call will be |
+ // triggered by both AddCaptureDeviceTab() and RemoveCaptureDeviceTab(). |
+ void UpdateStatusTrayIconContextMenu(); |
+ |
+ // Reference to our status icon - owned by the StatusTray. If null, |
+ // the platform doesn't support status icons. |
+ StatusIcon* status_icon_; |
+ |
+ // Icon to be displayed on the status tray. |
+ SkBitmap icon_image_; |
+ |
+ // A list that contains the usage information of the opened capture devices. |
+ typedef std::list<CaptureDeviceTab> CaptureDeviceTabList; |
+ CaptureDeviceTabList tabs_; |
+}; |
+ |
+#endif // CHROME_BROWSER_MEDIA_MEDIA_STREAM_CAPTURE_INDICATOR_H_ |