blob: f285961bef09be441b030fcaeb22a7bf450603dd [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/media_router/browser/mirroring_to_flinging_switcher.h"
#include "components/media_router/browser/media_router.h"
#include "components/media_router/browser/media_router_factory.h"
#include "components/media_router/browser/presentation/web_contents_presentation_manager.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/presentation_request.h"
#include "content/public/browser/web_contents.h"
namespace media_router {
void SwitchToFlingingIfPossible(content::FrameTreeNodeId frame_tree_node_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
auto* web_contents =
content::WebContents::FromFrameTreeNodeId(frame_tree_node_id);
if (!web_contents) {
return;
}
base::WeakPtr<WebContentsPresentationManager>
web_contents_presentation_manager =
WebContentsPresentationManager::Get(web_contents);
if (!web_contents_presentation_manager ||
!web_contents_presentation_manager->HasDefaultPresentationRequest()) {
return;
}
auto* media_router = MediaRouterFactory::GetApiForBrowserContextIfExists(
web_contents->GetBrowserContext());
if (!media_router) {
return;
}
// TODO(crbug.com/1418744): Handle multiple URLs.
const auto& presentation_request =
web_contents_presentation_manager->GetDefaultPresentationRequest();
const auto source_id =
MediaSource::ForPresentationUrl(presentation_request.presentation_urls[0])
.id();
media_router->JoinRoute(
source_id, kAutoJoinPresentationId, presentation_request.frame_origin,
web_contents,
base::BindOnce(&WebContentsPresentationManager::OnPresentationResponse,
std::move(web_contents_presentation_manager),
presentation_request),
base::TimeDelta());
}
} // namespace media_router