Index: third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
index 74b5f0a9dd26c2a6dbe3a03cde467b16c20ea5bb..de2411a2e13d02338d106e7274e9be72cecb0f8c 100644 |
--- a/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
+++ b/third_party/WebKit/Source/modules/mediastream/MediaConstraintsImpl.cpp |
@@ -34,7 +34,9 @@ |
#include "bindings/core/v8/Dictionary.h" |
#include "bindings/core/v8/ExceptionState.h" |
#include "core/dom/ExceptionCode.h" |
+#include "core/dom/ExecutionContext.h" |
#include "core/frame/UseCounter.h" |
+#include "core/inspector/ConsoleMessage.h" |
#include "modules/mediastream/MediaTrackConstraintSet.h" |
#include "platform/Logging.h" |
#include "platform/RuntimeEnabledFeatures.h" |
@@ -123,6 +125,10 @@ const char kCpuOveruseEncodeUsage[] = "googCpuOveruseEncodeUsage"; |
const char kHighStartBitrate[] = "googHighStartBitrate"; |
const char kPayloadPadding[] = "googPayloadPadding"; |
// End of names from libjingle |
+// Names that have been used in the past, but should now be ignored. |
+// Kept around for backwards compatibility. |
+// https://crbug.com/579729 |
+const char kGoogLeakyBucket[] = "googLeakyBucket"; |
// Names used for testing. |
const char kTestConstraint1[] = "valid_and_supported_1"; |
@@ -247,7 +253,7 @@ static bool toBoolean(const WebString& asWebString) |
// https://crbug.com/576582 |
} |
-static void parseOldStyleNames(const WebVector<WebMediaConstraint>& oldNames, WebMediaTrackConstraintSet& result, MediaErrorState& errorState) |
+static void parseOldStyleNames(ExecutionContext* context, const WebVector<WebMediaConstraint>& oldNames, bool reportUnknownNames, WebMediaTrackConstraintSet& result, MediaErrorState& errorState) |
{ |
for (const WebMediaConstraint& constraint : oldNames) { |
if (constraint.m_name.equals(kMinAspectRatio)) { |
@@ -353,32 +359,44 @@ static void parseOldStyleNames(const WebVector<WebMediaConstraint>& oldNames, We |
result.googHighStartBitrate.setExact(atoi(constraint.m_value.utf8().c_str())); |
} else if (constraint.m_name.equals(kPayloadPadding)) { |
result.googPayloadPadding.setExact(toBoolean(constraint.m_value)); |
+ } else if (constraint.m_name.equals(kGoogLeakyBucket)) { |
+ context->addConsoleMessage(ConsoleMessage::create(DeprecationMessageSource, WarningMessageLevel, |
+ "Obsolete constraint named " + String(constraint.m_name) |
+ + " is ignored. Please stop using it.")); |
} else if (constraint.m_name.equals(kTestConstraint1) |
|| constraint.m_name.equals(kTestConstraint2)) { |
// These constraints are only for testing parsing. |
// Values 0 and 1 are legal, all others are a ConstraintError. |
- if (!constraint.m_value.equals("0") && !constraint.m_value.equals("1")) |
+ if (!constraint.m_value.equals("0") && !constraint.m_value.equals("1")) { |
errorState.throwConstraintError("Illegal value for constraint", constraint.m_name); |
+ } |
} else { |
- // TODO(hta): UMA stats for unknown constraints passed. |
- // https://crbug.com/576613 |
- WTF_LOG(Media, "Unknown constraint name detected"); |
- errorState.throwConstraintError("Unknown name of constraint detected", constraint.m_name); |
+ if (reportUnknownNames) { |
+ // TODO(hta): UMA stats for unknown constraints passed. |
+ // https://crbug.com/576613 |
+ context->addConsoleMessage( |
+ ConsoleMessage::create( |
+ DeprecationMessageSource, |
+ WarningMessageLevel, |
+ "Unknown constraint named " |
+ + String(constraint.m_name) + " rejected")); |
+ errorState.throwConstraintError("Unknown name of constraint detected", constraint.m_name); |
+ } |
} |
} |
} |
-static WebMediaConstraints createFromNamedConstraints(WebVector<WebMediaConstraint>& mandatory, const WebVector<WebMediaConstraint>& optional, MediaErrorState& errorState) |
+static WebMediaConstraints createFromNamedConstraints(ExecutionContext* context, WebVector<WebMediaConstraint>& mandatory, const WebVector<WebMediaConstraint>& optional, MediaErrorState& errorState) |
{ |
WebMediaTrackConstraintSet basic; |
WebMediaTrackConstraintSet advanced; |
WebMediaConstraints constraints; |
- parseOldStyleNames(mandatory, basic, errorState); |
+ parseOldStyleNames(context, mandatory, true, basic, errorState); |
if (errorState.hadException()) |
return constraints; |
- // We ignore errors in optional constraints. |
+ // We ignore unknow names and syntax errors in optional constraints. |
MediaErrorState ignoredErrorState; |
- parseOldStyleNames(optional, advanced, ignoredErrorState); |
+ parseOldStyleNames(context, optional, false, advanced, ignoredErrorState); |
WebVector<WebMediaTrackConstraintSet> advancedVector(&advanced, 1); |
// Use the 4-argument initializer until Chrome has been converted. |
constraints.initialize(optional, mandatory, basic, advancedVector); |
@@ -386,7 +404,7 @@ static WebMediaConstraints createFromNamedConstraints(WebVector<WebMediaConstrai |
} |
// Deprecated. |
-WebMediaConstraints create(const ExecutionContext* context, const Dictionary& constraintsDictionary, MediaErrorState& errorState) |
+WebMediaConstraints create(ExecutionContext* context, const Dictionary& constraintsDictionary, MediaErrorState& errorState) |
{ |
WebVector<WebMediaConstraint> optional; |
WebVector<WebMediaConstraint> mandatory; |
@@ -395,7 +413,7 @@ WebMediaConstraints create(const ExecutionContext* context, const Dictionary& co |
return WebMediaConstraints(); |
} |
UseCounter::count(context, UseCounter::MediaStreamConstraintsFromDictionary); |
- return createFromNamedConstraints(mandatory, optional, errorState); |
+ return createFromNamedConstraints(context, mandatory, optional, errorState); |
} |
void copyLongConstraint(const ConstrainLongRange& blinkForm, LongConstraint& webForm) |
@@ -493,7 +511,7 @@ void copyConstraints(const MediaTrackConstraintSet& constraintsIn, WebMediaTrack |
} |
} |
-WebMediaConstraints create(const ExecutionContext* context, const MediaTrackConstraintSet& constraintsIn, MediaErrorState& errorState) |
+WebMediaConstraints create(ExecutionContext* context, const MediaTrackConstraintSet& constraintsIn, MediaErrorState& errorState) |
{ |
WebMediaConstraints constraints; |
WebMediaTrackConstraintSet constraintBuffer; |
@@ -513,7 +531,7 @@ WebMediaConstraints create(const ExecutionContext* context, const MediaTrackCons |
return WebMediaConstraints(); |
} |
UseCounter::count(context, UseCounter::MediaStreamConstraintsNameValue); |
- return createFromNamedConstraints(mandatory, optional, errorState); |
+ return createFromNamedConstraints(context, mandatory, optional, errorState); |
} |
UseCounter::count(context, UseCounter::MediaStreamConstraintsConformant); |
constraints.initialize(constraintBuffer, advancedBuffer); |