7c3bd4eae4264be5c8a4b02b525683b04596f25d
[WebKit-https.git] / Source / WebKit / Shared / WebPopupItem.cpp
1 /*
2  * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27
28 #include "WebPopupItem.h"
29
30 #include "ArgumentCoders.h"
31
32 using namespace WebCore;
33
34 namespace WebKit {
35
36 WebPopupItem::WebPopupItem()
37     : m_type(Item)
38     , m_textDirection(LTR)
39     , m_hasTextDirectionOverride(false)
40     , m_isEnabled(true)
41     , m_isSelected(false)
42 {
43 }
44
45 WebPopupItem::WebPopupItem(Type type)
46     : m_type(type)
47     , m_textDirection(LTR)
48     , m_hasTextDirectionOverride(false)
49     , m_isEnabled(true)
50     , m_isLabel(false)
51     , m_isSelected(false)
52 {
53 }
54
55 WebPopupItem::WebPopupItem(Type type, const String& text, TextDirection textDirection, bool hasTextDirectionOverride, const String& toolTip, const String& accessibilityText, bool isEnabled, bool isLabel, bool isSelected)
56     : m_type(type)
57     , m_text(text)
58     , m_textDirection(textDirection)
59     , m_hasTextDirectionOverride(hasTextDirectionOverride)
60     , m_toolTip(toolTip)
61     , m_accessibilityText(accessibilityText)
62     , m_isEnabled(isEnabled)
63     , m_isLabel(isLabel)
64     , m_isSelected(isSelected)
65 {
66 }
67
68 void WebPopupItem::encode(IPC::Encoder& encoder) const
69 {
70     encoder.encodeEnum(m_type);
71     encoder << m_text;
72     encoder.encodeEnum(m_textDirection);
73     encoder << m_hasTextDirectionOverride;
74     encoder << m_toolTip;
75     encoder << m_accessibilityText;
76     encoder << m_isEnabled;
77     encoder << m_isLabel;
78     encoder << m_isSelected;
79 }
80
81 std::optional<WebPopupItem> WebPopupItem::decode(IPC::Decoder& decoder)
82 {
83     Type type;
84     if (!decoder.decodeEnum(type))
85         return std::nullopt;
86
87     String text;
88     if (!decoder.decode(text))
89         return std::nullopt;
90     
91     TextDirection textDirection;
92     if (!decoder.decodeEnum(textDirection))
93         return std::nullopt;
94
95     bool hasTextDirectionOverride;
96     if (!decoder.decode(hasTextDirectionOverride))
97         return std::nullopt;
98
99     String toolTip;
100     if (!decoder.decode(toolTip))
101         return std::nullopt;
102
103     String accessibilityText;
104     if (!decoder.decode(accessibilityText))
105         return std::nullopt;
106
107     bool isEnabled;
108     if (!decoder.decode(isEnabled))
109         return std::nullopt;
110
111     bool isLabel;
112     if (!decoder.decode(isLabel))
113         return std::nullopt;
114
115     bool isSelected;
116     if (!decoder.decode(isSelected))
117         return std::nullopt;
118
119     return {{ type, text, textDirection, hasTextDirectionOverride, toolTip, accessibilityText, isEnabled, isLabel, isSelected }};
120 }
121
122 } // namespace WebKit