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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/media_router/media_router_ui_helper.h"
#include "base/atomic_sequence_num.h"
#include "base/strings/string_util.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "components/media_router/browser/presentation/start_presentation_context.h"
#include "extensions/browser/extension_registry.h"
#include "url/gurl.h"
#if BUILDFLAG(IS_MAC)
#include "ui/base/cocoa/permissions_utils.h"
#endif
namespace media_router {
namespace {
// The amount of time to wait for a response when creating a new route.
const int kCreateRouteTimeoutSeconds = 20;
const int kCreateRouteTimeoutSecondsForTab = 60;
const int kCreateRouteTimeoutSecondsForDesktop = 120;
const int kCreateRouteTimeoutSecondsForRemotePlayback = 60;
#if BUILDFLAG(IS_MAC)
std::optional<bool> g_screen_capture_allowed_for_testing;
#endif
} // namespace
std::string GetExtensionName(const GURL& gurl,
extensions::ExtensionRegistry* registry) {
if (gurl.is_empty() || !registry) {
return std::string();
}
const extensions::Extension* extension =
registry->enabled_extensions().GetExtensionOrAppByURL(gurl);
return extension ? extension->name() : std::string();
}
std::string GetHostFromURL(const GURL& gurl) {
if (gurl.is_empty()) {
return std::string();
}
std::string host = gurl.host();
if (base::StartsWith(host, "www.", base::CompareCase::INSENSITIVE_ASCII)) {
host = host.substr(4);
}
return host;
}
base::TimeDelta GetRouteRequestTimeout(MediaCastMode cast_mode) {
switch (cast_mode) {
case PRESENTATION:
return base::Seconds(kCreateRouteTimeoutSeconds);
case TAB_MIRROR:
return base::Seconds(kCreateRouteTimeoutSecondsForTab);
case DESKTOP_MIRROR:
return base::Seconds(kCreateRouteTimeoutSecondsForDesktop);
case REMOTE_PLAYBACK:
return base::Seconds(kCreateRouteTimeoutSecondsForRemotePlayback);
default:
NOTREACHED();
}
}
bool RequiresScreenCapturePermission(MediaCastMode cast_mode) {
#if BUILDFLAG(IS_MAC)
return cast_mode == MediaCastMode::DESKTOP_MIRROR;
#else
return false;
#endif
}
bool GetScreenCapturePermission() {
#if BUILDFLAG(IS_MAC)
return g_screen_capture_allowed_for_testing.has_value()
? *g_screen_capture_allowed_for_testing
: (ui::IsScreenCaptureAllowed() ||
ui::TryPromptUserForScreenCapture());
#else
return true;
#endif
}
void set_screen_capture_allowed_for_testing(bool allowed) {
#if BUILDFLAG(IS_MAC)
g_screen_capture_allowed_for_testing = allowed;
#endif
}
void clear_screen_capture_allowed_for_testing() {
#if BUILDFLAG(IS_MAC)
g_screen_capture_allowed_for_testing.reset();
#endif
}
RouteRequest::RouteRequest(const MediaSink::Id& sink_id) : sink_id(sink_id) {
static base::AtomicSequenceNumber g_next_request_id;
id = g_next_request_id.GetNext();
}
RouteRequest::~RouteRequest() = default;
RouteParameters::RouteParameters() = default;
RouteParameters::RouteParameters(RouteParameters&& other) = default;
RouteParameters::~RouteParameters() = default;
RouteParameters& RouteParameters::operator=(RouteParameters&& other) = default;
MediaRouterUIParameters::MediaRouterUIParameters(
CastModeSet initial_modes,
content::WebContents* initiator,
std::unique_ptr<StartPresentationContext> start_presentation_context,
media::VideoCodec video_codec,
media::AudioCodec audio_codec)
: initial_modes(initial_modes),
initiator(initiator),
start_presentation_context(std::move(start_presentation_context)),
video_codec(video_codec),
audio_codec(audio_codec) {}
MediaRouterUIParameters::MediaRouterUIParameters(
MediaRouterUIParameters&& other) = default;
MediaRouterUIParameters::~MediaRouterUIParameters() = default;
} // namespace media_router
|