summaryrefslogtreecommitdiffstats
path: root/chrome/browser/media/router/media_source_helper.cc
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