Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1775)

Unified Diff: chrome/browser/media/router/media_source_helper.cc

Issue 2310753002: Media Remoting: Data/Control plumbing between renderer and Media Router. (Closed)
Patch Set: Just a REBASE on ToT before commit. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/router/media_source_helper.cc
diff --git a/chrome/browser/media/router/media_source_helper.cc b/chrome/browser/media/router/media_source_helper.cc
index 9cf7620fe58bc83fab8aab13a3dcf98356488cba..73517d2c9fb12df6b15bdb9076b6e8e246785647 100644
--- a/chrome/browser/media/router/media_source_helper.cc
+++ b/chrome/browser/media/router/media_source_helper.cc
@@ -4,21 +4,36 @@
#include "chrome/browser/media/router/media_source_helper.h"
+#include <stdio.h>
+
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/media/router/media_source.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
#include "url/gurl.h"
namespace media_router {
+namespace {
+
// Prefixes used to format and detect various protocols' media source URNs.
// See: https://www.ietf.org/rfc/rfc3406.txt
-const char kTabMediaUrnPrefix[] = "urn:x-org.chromium.media:source:tab";
-const char kDesktopMediaUrn[] = "urn:x-org.chromium.media:source:desktop";
-const char kCastUrnPrefix[] = "urn:x-com.google.cast:application:";
+constexpr char kTabMediaUrnFormat[] = "urn:x-org.chromium.media:source:tab:%d";
+constexpr char kDesktopMediaUrn[] = "urn:x-org.chromium.media:source:desktop";
+constexpr char kCastUrnPrefix[] = "urn:x-com.google.cast:application:";
+constexpr char kTabRemotingUrnFormat[] =
+ "urn:x-org.chromium.media:source:tab_content_remoting:%d";
+
+} // namespace
MediaSource MediaSourceForTab(int tab_id) {
- return MediaSource(base::StringPrintf("%s:%d", kTabMediaUrnPrefix, tab_id));
+ return MediaSource(base::StringPrintf(kTabMediaUrnFormat, tab_id));
+}
+
+MediaSource MediaSourceForTabContentRemoting(content::WebContents* contents) {
+ DCHECK(contents);
+ return MediaSource(base::StringPrintf(kTabRemotingUrnFormat,
+ SessionTabHelper::IdForTab(contents)));
}
MediaSource MediaSourceForDesktop() {
@@ -39,8 +54,9 @@ bool IsDesktopMirroringMediaSource(const MediaSource& source) {
}
bool IsTabMirroringMediaSource(const MediaSource& source) {
- return base::StartsWith(source.id(), kTabMediaUrnPrefix,
- base::CompareCase::SENSITIVE);
+ int tab_id;
+ return sscanf(source.id().c_str(), kTabMediaUrnFormat, &tab_id) == 1 &&
+ tab_id > 0;
}
bool IsMirroringMediaSource(const MediaSource& source) {
@@ -48,14 +64,22 @@ bool IsMirroringMediaSource(const MediaSource& source) {
IsTabMirroringMediaSource(source);
}
+int TabIdFromMediaSource(const MediaSource& source) {
+ int tab_id;
+ if (sscanf(source.id().c_str(), kTabMediaUrnFormat, &tab_id) == 1)
+ return tab_id;
+ else if (sscanf(source.id().c_str(), kTabRemotingUrnFormat, &tab_id) == 1)
+ return tab_id;
+ else
+ return -1;
+}
+
bool IsValidMediaSource(const MediaSource& source) {
- if (IsMirroringMediaSource(source) ||
- base::StartsWith(source.id(), kCastUrnPrefix,
- base::CompareCase::SENSITIVE)) {
- return true;
- }
- GURL url(source.id());
- return url.is_valid() && url.SchemeIsHTTPOrHTTPS();
+ return (TabIdFromMediaSource(source) > 0 ||
+ IsDesktopMirroringMediaSource(source) ||
+ base::StartsWith(source.id(), kCastUrnPrefix,
+ base::CompareCase::SENSITIVE) ||
+ IsValidPresentationUrl(source.id()));
}
std::string PresentationUrlFromMediaSource(const MediaSource& source) {

Powered by Google App Engine
This is Rietveld 408576698