blob: ef9f0630bf50341d14d907d32706111ad153e5de [file] [log] [blame]
// Copyright 2020 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/presentation/start_presentation_context.h"
#include "components/media_router/common/mojom/media_router.mojom.h"
#include "components/media_router/common/route_request_result.h"
namespace media_router {
StartPresentationContext::StartPresentationContext(
const content::PresentationRequest& presentation_request,
PresentationConnectionCallback success_cb,
PresentationConnectionErrorCallback error_cb)
: presentation_request_(presentation_request),
success_cb_(std::move(success_cb)),
error_cb_(std::move(error_cb)) {
DCHECK(success_cb_);
DCHECK(error_cb_);
}
StartPresentationContext::~StartPresentationContext() {
if (success_cb_ && error_cb_) {
std::move(error_cb_).Run(blink::mojom::PresentationError(
blink::mojom::PresentationErrorType::UNKNOWN, "Unknown error."));
}
}
void StartPresentationContext::InvokeSuccessCallback(
const std::string& presentation_id,
const GURL& presentation_url,
const MediaRoute& route,
mojom::RoutePresentationConnectionPtr connection) {
if (success_cb_ && error_cb_) {
std::move(success_cb_)
.Run(blink::mojom::PresentationInfo(presentation_url, presentation_id),
std::move(connection), route);
}
}
void StartPresentationContext::InvokeErrorCallback(
const blink::mojom::PresentationError& error) {
if (success_cb_ && error_cb_) {
std::move(error_cb_).Run(error);
}
}
void StartPresentationContext::HandleRouteResponse(
mojom::RoutePresentationConnectionPtr connection,
const RouteRequestResult& result) {
if (!result.route()) {
InvokeErrorCallback(blink::mojom::PresentationError(
blink::mojom::PresentationErrorType::UNKNOWN, result.error()));
} else {
InvokeSuccessCallback(result.presentation_id(), result.presentation_url(),
*result.route(), std::move(connection));
}
}
} // namespace media_router