Coverage Report

Created: 2025-11-02 07:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/serenity/Userland/Libraries/LibWeb/WebGL/WebGLContextAttributes.cpp
Line
Count
Source
1
/*
2
 * Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#include <LibJS/Runtime/Completion.h>
8
#include <LibJS/Runtime/GlobalObject.h>
9
#include <LibJS/Runtime/ValueInlines.h>
10
#include <LibWeb/WebGL/WebGLContextAttributes.h>
11
12
namespace Web::WebGL {
13
14
JS::ThrowCompletionOr<WebGLContextAttributes> convert_value_to_context_attributes_dictionary(JS::VM& vm, JS::Value value)
15
0
{
16
    // NOTE: This code was generated by the IDL code generator and then cleaned up.
17
0
    if (!value.is_nullish() && !value.is_object())
18
0
        return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "WebGLContextAttributes");
19
20
0
    WebGLContextAttributes context_attributes {};
21
22
0
    JS::Value alpha;
23
0
    if (value.is_nullish())
24
0
        alpha = JS::js_undefined();
25
0
    else
26
0
        alpha = TRY(value.as_object().get("alpha"));
27
28
0
    bool alpha_value;
29
0
    if (!alpha.is_undefined())
30
0
        alpha_value = alpha.to_boolean();
31
0
    else
32
0
        alpha_value = true;
33
34
0
    context_attributes.alpha = alpha_value;
35
36
0
    JS::Value antialias;
37
0
    if (value.is_nullish())
38
0
        antialias = JS::js_undefined();
39
0
    else
40
0
        antialias = TRY(value.as_object().get("antialias"));
41
42
0
    bool antialias_value;
43
0
    if (!antialias.is_undefined())
44
0
        antialias_value = antialias.to_boolean();
45
0
    else
46
0
        antialias_value = true;
47
48
0
    context_attributes.antialias = antialias_value;
49
50
0
    JS::Value depth;
51
0
    if (value.is_nullish())
52
0
        depth = JS::js_undefined();
53
0
    else
54
0
        depth = TRY(value.as_object().get("depth"));
55
56
0
    bool depth_value;
57
0
    if (!depth.is_undefined())
58
0
        depth_value = depth.to_boolean();
59
0
    else
60
0
        depth_value = true;
61
62
0
    context_attributes.depth = depth_value;
63
64
0
    JS::Value desynchronized;
65
0
    if (value.is_nullish())
66
0
        desynchronized = JS::js_undefined();
67
0
    else
68
0
        desynchronized = TRY(value.as_object().get("desynchronized"));
69
70
0
    bool desynchronized_value;
71
72
0
    if (!desynchronized.is_undefined())
73
0
        desynchronized_value = desynchronized.to_boolean();
74
0
    else
75
0
        desynchronized_value = false;
76
77
0
    context_attributes.desynchronized = desynchronized_value;
78
79
0
    JS::Value fail_if_major_performance_caveat;
80
0
    if (value.is_nullish())
81
0
        fail_if_major_performance_caveat = JS::js_undefined();
82
0
    else
83
0
        fail_if_major_performance_caveat = TRY(value.as_object().get("failIfMajorPerformanceCaveat"));
84
85
0
    bool fail_if_major_performance_caveat_value;
86
0
    if (!fail_if_major_performance_caveat.is_undefined())
87
0
        fail_if_major_performance_caveat_value = fail_if_major_performance_caveat.to_boolean();
88
0
    else
89
0
        fail_if_major_performance_caveat_value = false;
90
91
0
    context_attributes.fail_if_major_performance_caveat = fail_if_major_performance_caveat_value;
92
93
0
    JS::Value power_preference;
94
0
    if (value.is_nullish())
95
0
        power_preference = JS::js_undefined();
96
0
    else
97
0
        power_preference = TRY(value.as_object().get("powerPreference"));
98
99
0
    WebGLPowerPreference power_preference_value { WebGLPowerPreference::Default };
100
101
0
    if (!power_preference.is_undefined()) {
102
0
        auto power_preference_string = TRY(power_preference.to_string(vm));
103
104
0
        if (power_preference_string == "high-performance"sv)
105
0
            power_preference_value = WebGLPowerPreference::HighPerformance;
106
0
        else if (power_preference_string == "low-power"sv)
107
0
            power_preference_value = WebGLPowerPreference::LowPower;
108
0
        else if (power_preference_string == "default"sv)
109
0
            power_preference_value = WebGLPowerPreference::Default;
110
0
        else
111
0
            return vm.throw_completion<JS::TypeError>(JS::ErrorType::InvalidEnumerationValue, power_preference_string, "WebGLPowerPreference");
112
0
    }
113
114
0
    context_attributes.power_preference = power_preference_value;
115
116
0
    JS::Value premultiplied_alpha;
117
0
    if (value.is_nullish())
118
0
        premultiplied_alpha = JS::js_undefined();
119
0
    else
120
0
        premultiplied_alpha = TRY(value.as_object().get("premultipliedAlpha"));
121
122
0
    bool premultiplied_alpha_value;
123
124
0
    if (!premultiplied_alpha.is_undefined())
125
0
        premultiplied_alpha_value = premultiplied_alpha.to_boolean();
126
0
    else
127
0
        premultiplied_alpha_value = true;
128
129
0
    context_attributes.premultiplied_alpha = premultiplied_alpha_value;
130
131
0
    JS::Value preserve_drawing_buffer;
132
0
    if (value.is_nullish())
133
0
        preserve_drawing_buffer = JS::js_undefined();
134
0
    else
135
0
        preserve_drawing_buffer = TRY(value.as_object().get("preserveDrawingBuffer"));
136
137
0
    bool preserve_drawing_buffer_value;
138
0
    if (!preserve_drawing_buffer.is_undefined())
139
0
        preserve_drawing_buffer_value = preserve_drawing_buffer.to_boolean();
140
0
    else
141
0
        preserve_drawing_buffer_value = false;
142
143
0
    context_attributes.preserve_drawing_buffer = preserve_drawing_buffer_value;
144
145
0
    JS::Value stencil;
146
0
    if (value.is_nullish())
147
0
        stencil = JS::js_undefined();
148
0
    else
149
0
        stencil = TRY(value.as_object().get("stencil"));
150
151
0
    bool stencil_value;
152
153
0
    if (!stencil.is_undefined())
154
0
        stencil_value = stencil.to_boolean();
155
0
    else
156
0
        stencil_value = false;
157
158
0
    context_attributes.stencil = stencil_value;
159
160
0
    return context_attributes;
161
0
}
162
163
}