1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "fuchsia/runners/cast/cast_streaming.h"
6 
7 #include "base/fuchsia/file_utils.h"
8 #include "base/path_service.h"
9 
10 namespace {
11 
12 constexpr char kCastStreamingAppUrl[] = "cast-streaming:receiver";
13 constexpr char kCastDataDirectory[] = "fuchsia/runners/cast/data";
14 constexpr char kCastStreamingContentDirectoryName[] = "cast-streaming";
15 
16 // Returns the content directories for the Cast Streaming application.
17 std::vector<fuchsia::web::ContentDirectoryProvider>
GetCastStreamingContentDirectories()18 GetCastStreamingContentDirectories() {
19   base::FilePath pkg_path;
20   bool success = base::PathService::Get(base::DIR_ASSETS, &pkg_path);
21   DCHECK(success);
22 
23   fuchsia::web::ContentDirectoryProvider content_directory;
24   content_directory.set_directory(
25       base::OpenDirectoryHandle(pkg_path.AppendASCII(kCastDataDirectory)));
26   content_directory.set_name(kCastStreamingContentDirectoryName);
27   std::vector<fuchsia::web::ContentDirectoryProvider> content_directories;
28   content_directories.emplace_back(std::move(content_directory));
29 
30   return content_directories;
31 }
32 
33 }  // namespace
34 
35 const char kCastStreamingWebUrl[] =
36     "fuchsia-dir://cast-streaming/receiver.html";
37 
38 const char kCastStreamingMessagePortOrigin[] = "cast-streaming:receiver";
39 
40 const char kCastStreamingMessagePortName[] = "cast.__platform__.cast_transport";
41 
IsAppConfigForCastStreaming(const chromium::cast::ApplicationConfig & application_config)42 bool IsAppConfigForCastStreaming(
43     const chromium::cast::ApplicationConfig& application_config) {
44   return application_config.web_url() == kCastStreamingAppUrl;
45 }
46 
ApplyCastStreamingContextParams(fuchsia::web::CreateContextParams * params)47 void ApplyCastStreamingContextParams(
48     fuchsia::web::CreateContextParams* params) {
49   // Disable the HARDWARE_VIDEO_DECODER_ONLY tag.
50   // TODO(crbug.com/1078227): Remove HARDWARE_VIDEO_DECODER_ONLY once it is
51   // no longer set in CastRunner::CommonContextParams(). For now, this is
52   // required to enable software decoders.
53   *params->mutable_features() &=
54       ~fuchsia::web::ContextFeatureFlags::HARDWARE_VIDEO_DECODER_ONLY;
55 
56   // Disable the WIDEVINE_CDM tag.
57   // TODO(crbug.com/1069746): Remove this once WIDEVINE_CDM is no longer set in
58   // CastRunner::CommonContextParams().
59   *params->mutable_features() &=
60       ~fuchsia::web::ContextFeatureFlags::WIDEVINE_CDM;
61 
62   *params->mutable_features() |= fuchsia::web::ContextFeatureFlags::NETWORK;
63 
64   // Set the content directory with the streaming app.
65   params->set_content_directories(GetCastStreamingContentDirectories());
66 }
67