1// Copyright 2013 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 "content/shell/renderer/test_runner/mock_constraints.h"
6
7#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
8#include "third_party/WebKit/public/platform/WebString.h"
9
10using blink::WebMediaConstraint;
11using blink::WebMediaConstraints;
12using blink::WebString;
13using blink::WebVector;
14
15namespace content {
16
17namespace {
18
19bool IsSupported(const WebString& constraint) {
20  return constraint == "valid_and_supported_1" ||
21         constraint == "valid_and_supported_2";
22}
23
24bool IsValid(const WebString& constraint) {
25  return IsSupported(constraint) || constraint == "valid_but_unsupported_1" ||
26         constraint == "valid_but_unsupported_2";
27}
28
29}  // namespace
30
31bool MockConstraints::VerifyConstraints(const WebMediaConstraints& constraints,
32                                        WebString* failed_constraint) {
33  WebVector<WebMediaConstraint> mandatory_constraints;
34  constraints.getMandatoryConstraints(mandatory_constraints);
35  if (mandatory_constraints.size()) {
36    for (size_t i = 0; i < mandatory_constraints.size(); ++i) {
37      const WebMediaConstraint& curr = mandatory_constraints[i];
38      if (!IsSupported(curr.m_name) || curr.m_value != "1") {
39        if (failed_constraint)
40          *failed_constraint = curr.m_name;
41        return false;
42      }
43    }
44  }
45
46  WebVector<WebMediaConstraint> optional_constraints;
47  constraints.getOptionalConstraints(optional_constraints);
48  if (optional_constraints.size()) {
49    for (size_t i = 0; i < optional_constraints.size(); ++i) {
50      const WebMediaConstraint& curr = optional_constraints[i];
51      if (!IsValid(curr.m_name) || curr.m_value != "0") {
52        if (failed_constraint)
53          *failed_constraint = curr.m_name;
54        return false;
55      }
56    }
57  }
58
59  return true;
60}
61
62}  // namespace content
63