// Copyright 2013 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 CONTENT_PUBLIC_BROWSER_DESKTOP_MEDIA_ID_H_ #define CONTENT_PUBLIC_BROWSER_DESKTOP_MEDIA_ID_H_ #include #include #include "content/common/content_export.h" #include "content/public/browser/web_contents_media_capture_id.h" #if defined(USE_AURA) namespace aura { class Window; } // namespace aura #endif // defined(USE_AURA) namespace content { // Type used to identify desktop media sources. It's converted to string and // stored in MediaStreamRequest::requested_video_device_id. struct CONTENT_EXPORT DesktopMediaID { public: enum Type { TYPE_NONE, TYPE_SCREEN, TYPE_WINDOW, TYPE_WEB_CONTENTS }; typedef intptr_t Id; // Represents an "unset" value for either |id| or |aura_id|. static const Id kNullId = 0; #if defined(USE_AURA) // Assigns integer identifier to the |window| and returns its DesktopMediaID. static DesktopMediaID RegisterAuraWindow(Type type, aura::Window* window); // Returns the Window that was previously registered using // RegisterAuraWindow(), else nullptr. static aura::Window* GetAuraWindowById(const DesktopMediaID& id); #endif // defined(USE_AURA) DesktopMediaID() = default; DesktopMediaID(Type type, Id id) : type(type), id(id) {} DesktopMediaID(Type type, Id id, WebContentsMediaCaptureId web_contents_id) : type(type), id(id), web_contents_id(web_contents_id) {} DesktopMediaID(Type type, Id id, bool audio_share) : type(type), id(id), audio_share(audio_share) {} // Operators so that DesktopMediaID can be used with STL containers. bool operator<(const DesktopMediaID& other) const; bool operator==(const DesktopMediaID& other) const; bool is_null() const { return type == TYPE_NONE; } std::string ToString() const; static DesktopMediaID Parse(const std::string& str); Type type = TYPE_NONE; // The IDs referring to the target native screen or window. |id| will be // non-null if and only if it refers to a native screen/window. |aura_id| // will be non-null if and only if it refers to an Aura window. Note that is // it possible for both of these to be non-null, which means both IDs are // referring to the same logical window. Id id = kNullId; #if defined(USE_AURA) // TODO(miu): Make this an int, after clean-up for http://crbug.com/513490. Id aura_id = kNullId; #endif // This records whether the desktop share has sound or not. bool audio_share = false; // This id contains information for WebContents capture. WebContentsMediaCaptureId web_contents_id; }; } // namespace content #endif // CONTENT_PUBLIC_BROWSER_DESKTOP_MEDIA_ID_H_