Index: content/public/browser/desktop_media_id.cc |
diff --git a/content/public/browser/desktop_media_id.cc b/content/public/browser/desktop_media_id.cc |
index 523c61d39bc696c912a50f7253076bf912091354..dc2ca9b872fbd87fb44345ca936730c777c0fdd0 100644 |
--- a/content/public/browser/desktop_media_id.cc |
+++ b/content/public/browser/desktop_media_id.cc |
@@ -82,7 +82,8 @@ const char kWindowPrefix[] = "window"; |
// static |
DesktopMediaID DesktopMediaID::RegisterAuraWindow(DesktopMediaID::Type type, |
aura::Window* window) { |
- DCHECK(type == TYPE_SCREEN || type == TYPE_WINDOW); |
+ DCHECK(type == TYPE_SCREEN || type == TYPE_WINDOW || |
+ type == TYPE_WEB_CONTENTS); |
DCHECK(window); |
DesktopMediaID media_id(type, kNullId); |
media_id.aura_id = AuraWindowRegistry::GetInstance()->RegisterWindow(window); |
@@ -96,45 +97,84 @@ aura::Window* DesktopMediaID::GetAuraWindowById(const DesktopMediaID& id) { |
#endif // defined(USE_AURA) |
+bool DesktopMediaID::operator<(const DesktopMediaID& other) const { |
+#if defined(USE_AURA) |
+ return std::tie(type, id, aura_id, web_contents_id) < |
+ std::tie(other.type, other.id, other.aura_id, other.web_contents_id); |
+#else |
+ return std::tie(type, id, web_contens_id) < |
+ std::tie(other.type, other.id, web_contents_id); |
+#endif |
+} |
+ |
+bool DesktopMediaID::operator==(const DesktopMediaID& other) const { |
+#if defined(USE_AURA) |
+ return type == other.type && id == other.id && aura_id == other.aura_id && |
+ web_contents_id == other.web_contents_id; |
+#else |
+ return type == other.type && id == other.id && |
+ web_contents_id == other.web_contents_id; |
+#endif |
+} |
+ |
// static |
+// Input string should in format: |
+// for WebContents: |
+// web-contents-media-stream://"render_process_id":"render_process_id" |
+// for no WebContentsand aura: screen:"window_id" or window:"window_id" |
miu
2016/01/12 22:05:03
s/WebContentsand/WebContents and/
GeorgeZ
2016/01/13 17:51:07
Done.
|
+// for no web_contents and no aura: screen:"window_id:aura_id" or |
+// window:"window_id:aura_id". |
DesktopMediaID DesktopMediaID::Parse(const std::string& str) { |
std::vector<std::string> parts = base::SplitString( |
str, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
-#if defined(USE_AURA) |
- if (parts.size() != 3) |
- return DesktopMediaID(); |
-#else |
- if (parts.size() != 2) |
+ if (parts.size() < 2) |
return DesktopMediaID(); |
-#endif |
Type type = TYPE_NONE; |
if (parts[0] == kScreenPrefix) { |
type = TYPE_SCREEN; |
} else if (parts[0] == kWindowPrefix) { |
type = TYPE_WINDOW; |
+ } else if (parts[0] == kWebContentsCaptureScheme) { |
+ type = TYPE_WEB_CONTENTS; |
} else { |
return DesktopMediaID(); |
} |
- int64_t id; |
- if (!base::StringToInt64(parts[1], &id)) |
+ // WebContents type. |
+ if (type == TYPE_WEB_CONTENTS) { |
+ WebContentsMediaCaptureId temp_id = WebContentsMediaCaptureId::Parse(str); |
+ return DesktopMediaID(type, 0, temp_id); |
+ } |
+ |
+// Screen and window types. |
+#if defined(USE_AURA) |
+ if (parts.size() != 3) |
+ return DesktopMediaID(); |
+#else |
+ if (parts.size() != 2) |
+ return DesktopMediaID(); |
+#endif // defined(USE_AURA) |
+ |
+ int64_t tempid; |
+ if (!base::StringToInt64(parts[1], &tempid)) |
return DesktopMediaID(); |
- DesktopMediaID media_id(type, id); |
+ DesktopMediaID media_id(type, tempid); |
#if defined(USE_AURA) |
int64_t aura_id; |
if (!base::StringToInt64(parts[2], &aura_id)) |
return DesktopMediaID(); |
+ |
media_id.aura_id = aura_id; |
#endif // defined(USE_AURA) |
return media_id; |
} |
-std::string DesktopMediaID::ToString() { |
+std::string DesktopMediaID::ToString() const { |
std::string prefix; |
switch (type) { |
case TYPE_NONE: |
@@ -146,9 +186,13 @@ std::string DesktopMediaID::ToString() { |
case TYPE_WINDOW: |
prefix = kWindowPrefix; |
break; |
+ case TYPE_WEB_CONTENTS: |
+ return web_contents_id.ToString(); |
+ break; |
} |
DCHECK(!prefix.empty()); |
+ // Screen and Window types. |
prefix.append(":"); |
prefix.append(base::Int64ToString(id)); |