Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6665)

Unified Diff: chrome/renderer/extensions/cast_streaming_native_handler.cc

Issue 121543003: Set AES key and IV mask to CastSender (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/api/cast_streaming_rtp_stream.idl ('k') | chrome/renderer/media/cast_rtp_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/extensions/cast_streaming_native_handler.cc
diff --git a/chrome/renderer/extensions/cast_streaming_native_handler.cc b/chrome/renderer/extensions/cast_streaming_native_handler.cc
index 55d0a69eaacd47726a0bf4d3887eddb461c32500..dcc1ede5b0691efd216c29a64547bcdbbc3b9135 100644
--- a/chrome/renderer/extensions/cast_streaming_native_handler.cc
+++ b/chrome/renderer/extensions/cast_streaming_native_handler.cc
@@ -6,6 +6,7 @@
#include <functional>
+#include "base/base64.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "chrome/common/extensions/api/cast_streaming_rtp_stream.h"
@@ -35,6 +36,8 @@ const char kRtpStreamNotFound[] = "The RTP stream cannot be found";
const char kUdpTransportNotFound[] = "The UDP transport cannot be found";
const char kInvalidUdpParams[] = "Invalid UDP params";
const char kInvalidRtpParams[] = "Invalid value for RTP params";
+const char kInvalidAesKey[] = "Invalid value for AES key";
+const char kInvalidAesIvMask[] = "Invalid value for AES IV mask";
const char kUnableToConvertArgs[] = "Unable to convert arguments";
const char kUnableToConvertParams[] = "Unable to convert params";
@@ -52,8 +55,9 @@ void FromCastCodecSpecificParams(const CastCodecSpecificParams& cast_params,
ext_params->value = cast_params.value;
}
-void ToCastRtpPayloadParams(const RtpPayloadParams& ext_params,
- CastRtpPayloadParams* cast_params) {
+bool ToCastRtpPayloadParamsOrThrow(v8::Isolate* isolate,
+ const RtpPayloadParams& ext_params,
+ CastRtpPayloadParams* cast_params) {
cast_params->payload_type = ext_params.payload_type;
cast_params->codec_name = ext_params.codec_name;
cast_params->ssrc = ext_params.ssrc ? *ext_params.ssrc : 0;
@@ -67,12 +71,26 @@ void ToCastRtpPayloadParams(const RtpPayloadParams& ext_params,
cast_params->channels = ext_params.channels ? *ext_params.channels : 0;
cast_params->width = ext_params.width ? *ext_params.width : 0;
cast_params->height = ext_params.height ? *ext_params.height : 0;
+ if (ext_params.aes_key &&
+ !base::Base64Decode(*ext_params.aes_key, &cast_params->aes_key)) {
+ isolate->ThrowException(v8::Exception::Error(
+ v8::String::NewFromUtf8(isolate, kInvalidAesKey)));
+ return false;
+ }
+ if (ext_params.aes_iv_mask &&
+ !base::Base64Decode(*ext_params.aes_iv_mask,
+ &cast_params->aes_iv_mask)) {
+ isolate->ThrowException(v8::Exception::Error(
+ v8::String::NewFromUtf8(isolate, kInvalidAesIvMask)));
+ return false;
+ }
for (size_t i = 0; i < ext_params.codec_specific_params.size(); ++i) {
CastCodecSpecificParams cast_codec_params;
ToCastCodecSpecificParams(*ext_params.codec_specific_params[i],
&cast_codec_params);
cast_params->codec_specific_params.push_back(cast_codec_params);
}
+ return true;
}
void FromCastRtpPayloadParams(const CastRtpPayloadParams& cast_params,
@@ -114,14 +132,21 @@ void FromCastRtpCaps(const CastRtpCaps& cast_caps, RtpCaps* ext_caps) {
}
}
-void ToCastRtpParams(const RtpParams& ext_params, CastRtpParams* cast_params) {
+bool ToCastRtpParamsOrThrow(v8::Isolate* isolate,
+ const RtpParams& ext_params,
+ CastRtpParams* cast_params) {
std::copy(ext_params.rtcp_features.begin(), ext_params.rtcp_features.end(),
cast_params->rtcp_features.begin());
for (size_t i = 0; i < ext_params.payloads.size(); ++i) {
CastRtpPayloadParams cast_payload_params;
- ToCastRtpPayloadParams(*ext_params.payloads[i], &cast_payload_params);
+ if (!ToCastRtpPayloadParamsOrThrow(isolate,
+ *ext_params.payloads[i],
+ &cast_payload_params)) {
+ return false;
+ }
cast_params->payloads.push_back(cast_payload_params);
}
+ return true;
}
} // namespace
@@ -277,7 +302,9 @@ void CastStreamingNativeHandler::StartCastRtpStream(
}
CastRtpCaps cast_params;
- ToCastRtpParams(*params, &cast_params);
+ v8::Isolate* isolate = context()->v8_context()->GetIsolate();
+ if (!ToCastRtpParamsOrThrow(isolate, *params, &cast_params))
+ return;
transport->Start(cast_params);
}
« no previous file with comments | « chrome/common/extensions/api/cast_streaming_rtp_stream.idl ('k') | chrome/renderer/media/cast_rtp_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698