2 * Copyright (C) 2012 Google Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 #if !ENABLE(INPUT_MULTIPLE_FIELDS_UI)
28 #include "web/ExternalDateTimeChooser.h"
30 #include "core/InputTypeNames.h"
31 #include "core/html/forms/DateTimeChooserClient.h"
32 #include "public/web/WebDateTimeChooserCompletion.h"
33 #include "public/web/WebDateTimeChooserParams.h"
34 #include "public/web/WebViewClient.h"
35 #include "web/ChromeClientImpl.h"
36 #include "wtf/text/AtomicString.h"
40 class WebDateTimeChooserCompletionImpl
: public WebDateTimeChooserCompletion
{
42 WebDateTimeChooserCompletionImpl(ExternalDateTimeChooser
* chooser
)
48 void didChooseValue(const WebString
& value
) override
50 m_chooser
->didChooseValue(value
);
54 void didChooseValue(double value
) override
56 m_chooser
->didChooseValue(value
);
60 void didCancelChooser() override
62 m_chooser
->didCancelChooser();
66 RefPtr
<ExternalDateTimeChooser
> m_chooser
;
69 ExternalDateTimeChooser::~ExternalDateTimeChooser()
73 ExternalDateTimeChooser::ExternalDateTimeChooser(DateTimeChooserClient
* client
)
79 PassRefPtr
<ExternalDateTimeChooser
> ExternalDateTimeChooser::create(ChromeClientImpl
* chromeClient
, WebViewClient
* webViewClient
, DateTimeChooserClient
* client
, const DateTimeChooserParameters
& parameters
)
82 RefPtr
<ExternalDateTimeChooser
> chooser
= adoptRef(new ExternalDateTimeChooser(client
));
83 if (!chooser
->openDateTimeChooser(chromeClient
, webViewClient
, parameters
))
85 return chooser
.release();
89 static WebDateTimeInputType
toWebDateTimeInputType(const AtomicString
& source
)
91 if (source
== InputTypeNames::date
)
92 return WebDateTimeInputTypeDate
;
93 if (source
== InputTypeNames::datetime
)
94 return WebDateTimeInputTypeDateTime
;
95 if (source
== InputTypeNames::datetime_local
)
96 return WebDateTimeInputTypeDateTimeLocal
;
97 if (source
== InputTypeNames::month
)
98 return WebDateTimeInputTypeMonth
;
99 if (source
== InputTypeNames::time
)
100 return WebDateTimeInputTypeTime
;
101 if (source
== InputTypeNames::week
)
102 return WebDateTimeInputTypeWeek
;
103 return WebDateTimeInputTypeNone
;
106 bool ExternalDateTimeChooser::openDateTimeChooser(ChromeClientImpl
* chromeClient
, WebViewClient
* webViewClient
, const DateTimeChooserParameters
& parameters
)
111 WebDateTimeChooserParams webParams
;
112 webParams
.type
= toWebDateTimeInputType(parameters
.type
);
113 webParams
.anchorRectInScreen
= parameters
.anchorRectInScreen
;
114 webParams
.currentValue
= parameters
.currentValue
;
115 webParams
.doubleValue
= parameters
.doubleValue
;
116 webParams
.suggestions
= parameters
.suggestions
;
117 webParams
.minimum
= parameters
.minimum
;
118 webParams
.maximum
= parameters
.maximum
;
119 webParams
.step
= parameters
.step
;
120 webParams
.stepBase
= parameters
.stepBase
;
121 webParams
.isRequired
= parameters
.required
;
122 webParams
.isAnchorElementRTL
= parameters
.isAnchorElementRTL
;
124 WebDateTimeChooserCompletion
* completion
= new WebDateTimeChooserCompletionImpl(this);
125 if (webViewClient
->openDateTimeChooser(webParams
, completion
))
127 // We can't open a chooser. Calling
128 // WebDateTimeChooserCompletionImpl::didCancelChooser to delete the
129 // WebDateTimeChooserCompletionImpl object and deref this.
130 completion
->didCancelChooser();
134 void ExternalDateTimeChooser::didChooseValue(const WebString
& value
)
137 m_client
->didChooseValue(value
);
138 // didChooseValue might run JavaScript code, and endChooser() might be
139 // called. However DateTimeChooserCompletionImpl still has one reference to
142 m_client
->didEndChooser();
145 void ExternalDateTimeChooser::didChooseValue(double value
)
148 m_client
->didChooseValue(value
);
149 // didChooseValue might run JavaScript code, and endChooser() might be
150 // called. However DateTimeChooserCompletionImpl still has one reference to
153 m_client
->didEndChooser();
156 void ExternalDateTimeChooser::didCancelChooser()
159 m_client
->didEndChooser();
162 void ExternalDateTimeChooser::endChooser()
164 DateTimeChooserClient
* client
= m_client
;
166 client
->didEndChooser();
169 AXObject
* ExternalDateTimeChooser::rootAXObject()