blob: a5d1288a77469a08030dfb9fe945219b8faf0ea9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
// Copyright 2015 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.
#include "chrome/browser/media/router/media_source_helper.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/media/router/media_source.h"
#include "url/gurl.h"
namespace media_router {
// 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:";
MediaSource MediaSourceForTab(int tab_id) {
return MediaSource(base::StringPrintf("%s:%d", kTabMediaUrnPrefix, tab_id));
}
MediaSource MediaSourceForDesktop() {
return MediaSource(std::string(kDesktopMediaUrn));
}
MediaSource MediaSourceForCastApp(const std::string& app_id) {
return MediaSource(kCastUrnPrefix + app_id);
}
MediaSource MediaSourceForPresentationUrl(const std::string& presentation_url) {
return MediaSource(presentation_url);
}
bool IsMirroringMediaSource(const MediaSource& source) {
return base::StartsWithASCII(source.id(), kDesktopMediaUrn, true) ||
base::StartsWithASCII(source.id(), kTabMediaUrnPrefix, true);
}
bool IsValidMediaSource(const MediaSource& source) {
if (IsMirroringMediaSource(source) ||
base::StartsWithASCII(source.id(), kCastUrnPrefix, true)) {
return true;
}
GURL url(source.id());
return url.is_valid() && url.SchemeIsHTTPOrHTTPS();
}
std::string PresentationUrlFromMediaSource(const MediaSource& source) {
return IsValidPresentationUrl(source.id()) ? source.id() : "";
}
bool IsValidPresentationUrl(const std::string& url) {
GURL gurl(url);
return gurl.is_valid() && gurl.SchemeIsHTTPOrHTTPS();
}
} // namespace media_router
|