Commit e0a03a53 authored by Kent Tamura's avatar Kent Tamura Committed by Commit Bot

Remove blink::DateTimeSuggestion

Use blink::mojom::DateTimeSuggestion instead.

Because mojo structs are not copyable, this CL makes
DateTimeChooserParameters non-copyable too.

DateTimeChooserImpl constructor copied DateTimeChooserParameters.
Now DateTimeChooserImpl stores a raw pointer to
DateTimeChooserParameters to avoid copying it.  It's safe
because DateTimeChooserImpl::WriteDocument() is called back in the
constructor.

Explicitly define DateTimeChooserParameters constructor and destructor
in order to generate DateTimeSuggestionPtr constructor/destructor code
in date_time_chooser.cc.


Bug: 950157
Change-Id: I4a8da56aa085e69fa234e8cf7886e59e6f4430e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1619589
Commit-Queue: Kent Tamura <tkent@chromium.org>
Reviewed-by: default avatarRakina Zata Amni <rakina@chromium.org>
Cr-Commit-Position: refs/heads/master@{#662502}
parent 26b1de89
......@@ -30,8 +30,14 @@
#include "third_party/blink/renderer/core/html/forms/date_time_chooser.h"
#include "third_party/blink/public/mojom/choosers/date_time_chooser.mojom-blink.h"
namespace blink {
DateTimeChooserParameters::DateTimeChooserParameters() = default;
DateTimeChooserParameters::~DateTimeChooserParameters() = default;
DateTimeChooser::~DateTimeChooser() = default;
} // namespace blink
......@@ -31,6 +31,8 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_DATE_TIME_CHOOSER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_FORMS_DATE_TIME_CHOOSER_H_
#include "base/macros.h"
#include "third_party/blink/public/mojom/choosers/date_time_chooser.mojom-blink-forward.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/geometry/int_rect.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
......@@ -41,15 +43,11 @@ namespace blink {
class AXObject;
struct DateTimeSuggestion {
DISALLOW_NEW();
double value;
String localized_value;
String label;
};
struct DateTimeChooserParameters {
DISALLOW_NEW();
CORE_EXPORT DateTimeChooserParameters();
CORE_EXPORT ~DateTimeChooserParameters();
AtomicString type;
IntRect anchor_rect_in_screen;
// Locale name for which the chooser should be localized. This
......@@ -57,13 +55,17 @@ struct DateTimeChooserParameters {
// attributes.
AtomicString locale;
double double_value;
Vector<DateTimeSuggestion> suggestions;
Vector<mojom::blink::DateTimeSuggestionPtr> suggestions;
double minimum;
double maximum;
double step;
double step_base;
bool required;
bool is_anchor_element_rtl;
private:
// DateTimeSuggestionPtr is not copyable.
DISALLOW_COPY_AND_ASSIGN(DateTimeChooserParameters);
};
// For pickers like color pickers and date pickers.
......
......@@ -30,6 +30,7 @@
#include "third_party/blink/renderer/core/html/forms/date_time_chooser_impl.h"
#include "third_party/blink/public/mojom/choosers/date_time_chooser.mojom-blink.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/html/forms/date_time_chooser_client.h"
......@@ -50,12 +51,13 @@ DateTimeChooserImpl::DateTimeChooserImpl(
: chrome_client_(chrome_client),
client_(client),
popup_(nullptr),
parameters_(parameters),
parameters_(&parameters),
locale_(Locale::Create(parameters.locale)) {
DCHECK(RuntimeEnabledFeatures::InputMultipleFieldsUIEnabled());
DCHECK(chrome_client_);
DCHECK(client_);
popup_ = chrome_client_->OpenPagePopup(this);
parameters_ = nullptr;
}
DateTimeChooserImpl::~DateTimeChooserImpl() = default;
......@@ -96,16 +98,16 @@ static String ValueToDateTimeString(double value, AtomicString type) {
}
void DateTimeChooserImpl::WriteDocument(SharedBuffer* data) {
String step_string = String::Number(parameters_.step);
String step_base_string = String::Number(parameters_.step_base, 11);
String step_string = String::Number(parameters_->step);
String step_base_string = String::Number(parameters_->step_base, 11);
String today_label_string;
String other_date_label_string;
if (parameters_.type == input_type_names::kMonth) {
if (parameters_->type == input_type_names::kMonth) {
today_label_string =
GetLocale().QueryString(WebLocalizedString::kThisMonthButtonLabel);
other_date_label_string =
GetLocale().QueryString(WebLocalizedString::kOtherMonthLabel);
} else if (parameters_.type == input_type_names::kWeek) {
} else if (parameters_->type == input_type_names::kWeek) {
today_label_string =
GetLocale().QueryString(WebLocalizedString::kThisWeekButtonLabel);
other_date_label_string =
......@@ -126,22 +128,23 @@ void DateTimeChooserImpl::WriteDocument(SharedBuffer* data) {
"</style></head><body><div id=main>Loading...</div><script>\n"
"window.dialogArguments = {\n",
data);
AddProperty("anchorRectInScreen", parameters_.anchor_rect_in_screen, data);
AddProperty("anchorRectInScreen", parameters_->anchor_rect_in_screen, data);
float scale_factor = chrome_client_->WindowToViewportScalar(1.0f);
AddProperty("zoomFactor", ZoomFactor() / scale_factor, data);
AddProperty("min",
ValueToDateTimeString(parameters_.minimum, parameters_.type),
ValueToDateTimeString(parameters_->minimum, parameters_->type),
data);
AddProperty("max",
ValueToDateTimeString(parameters_.maximum, parameters_.type),
ValueToDateTimeString(parameters_->maximum, parameters_->type),
data);
AddProperty("step", step_string, data);
AddProperty("stepBase", step_base_string, data);
AddProperty("required", parameters_.required, data);
AddProperty("currentValue",
ValueToDateTimeString(parameters_.double_value, parameters_.type),
data);
AddProperty("locale", parameters_.locale.GetString(), data);
AddProperty("required", parameters_->required, data);
AddProperty(
"currentValue",
ValueToDateTimeString(parameters_->double_value, parameters_->type),
data);
AddProperty("locale", parameters_->locale.GetString(), data);
AddProperty("todayLabel", today_label_string, data);
AddProperty("clearLabel",
GetLocale().QueryString(WebLocalizedString::kCalendarClear),
......@@ -165,28 +168,30 @@ void DateTimeChooserImpl::WriteDocument(SharedBuffer* data) {
AddProperty("shortMonthLabels", locale_->ShortMonthLabels(), data);
AddProperty("dayLabels", locale_->WeekDayShortLabels(), data);
AddProperty("isLocaleRTL", locale_->IsRTL(), data);
AddProperty("isRTL", parameters_.is_anchor_element_rtl, data);
AddProperty("mode", parameters_.type.GetString(), data);
if (parameters_.suggestions.size()) {
AddProperty("isRTL", parameters_->is_anchor_element_rtl, data);
AddProperty("mode", parameters_->type.GetString(), data);
if (parameters_->suggestions.size()) {
Vector<String> suggestion_values;
Vector<String> localized_suggestion_values;
Vector<String> suggestion_labels;
for (unsigned i = 0; i < parameters_.suggestions.size(); i++) {
for (unsigned i = 0; i < parameters_->suggestions.size(); i++) {
suggestion_values.push_back(ValueToDateTimeString(
parameters_.suggestions[i].value, parameters_.type));
parameters_->suggestions[i]->value, parameters_->type));
localized_suggestion_values.push_back(
parameters_.suggestions[i].localized_value);
suggestion_labels.push_back(parameters_.suggestions[i].label);
parameters_->suggestions[i]->localized_value);
suggestion_labels.push_back(parameters_->suggestions[i]->label);
}
AddProperty("suggestionValues", suggestion_values, data);
AddProperty("localizedSuggestionValues", localized_suggestion_values, data);
AddProperty("suggestionLabels", suggestion_labels, data);
AddProperty(
"inputWidth",
static_cast<unsigned>(parameters_.anchor_rect_in_screen.Width()), data);
static_cast<unsigned>(parameters_->anchor_rect_in_screen.Width()),
data);
AddProperty(
"showOtherDateEntry",
LayoutTheme::GetTheme().SupportsCalendarPicker(parameters_.type), data);
LayoutTheme::GetTheme().SupportsCalendarPicker(parameters_->type),
data);
AddProperty("otherDateLabel", other_date_label_string, data);
AddProperty("suggestionHighlightColor",
LayoutTheme::GetTheme()
......
......@@ -70,7 +70,8 @@ class CORE_EXPORT DateTimeChooserImpl final : public DateTimeChooser,
Member<ChromeClient> chrome_client_;
Member<DateTimeChooserClient> client_;
PagePopup* popup_;
DateTimeChooserParameters parameters_;
// This pointer is valid only in the constructor.
const DateTimeChooserParameters* parameters_;
std::unique_ptr<Locale> locale_;
};
......
......@@ -35,26 +35,6 @@
#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
#include "ui/base/ime/mojo/ime_types.mojom-shared.h"
namespace mojo {
// TODO(https://crbug.com/950157): blink::DateTimeSuggestion should be replaced
// by blink::mojom::DateTimeSuggestion, then blink::DateTimeSuggestion should be
// removed.
template <>
struct TypeConverter<::blink::mojom::blink::DateTimeSuggestionPtr,
::blink::DateTimeSuggestion> {
static blink::mojom::blink::DateTimeSuggestionPtr Convert(
const blink::DateTimeSuggestion& input) {
auto output = blink::mojom::blink::DateTimeSuggestion::New();
output->value = input.value;
output->localized_value = input.localized_value;
output->label = input.label;
return output;
}
};
} // namespace mojo
namespace blink {
static ui::mojom::TextInputType ToTextInputType(const AtomicString& source) {
......@@ -103,8 +83,7 @@ void ExternalDateTimeChooser::OpenDateTimeChooser(
date_time_dialog_value->maximum = parameters.maximum;
date_time_dialog_value->step = parameters.step;
for (const auto& suggestion : parameters.suggestions) {
date_time_dialog_value->suggestions.push_back(
mojo::ConvertTo<mojom::blink::DateTimeSuggestionPtr>(suggestion));
date_time_dialog_value->suggestions.push_back(suggestion->Clone());
}
auto response_callback = WTF::Bind(&ExternalDateTimeChooser::ResponseHandler,
......
......@@ -30,6 +30,7 @@
#include "third_party/blink/renderer/core/html/forms/html_input_element.h"
#include "third_party/blink/public/mojom/choosers/date_time_chooser.mojom-blink.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/public/platform/web_scroll_into_view_params.h"
#include "third_party/blink/renderer/bindings/core/v8/script_event_listener.h"
......@@ -1907,16 +1908,16 @@ bool HTMLInputElement::SetupDateTimeChooserParameters(
if (option->value().IsEmpty() || option->IsDisabledFormControl() ||
!IsValidValue(option->value()))
continue;
DateTimeSuggestion suggestion;
suggestion.value =
auto suggestion = mojom::blink::DateTimeSuggestion::New();
suggestion->value =
input_type_->ParseToNumber(option->value(), Decimal::Nan())
.ToDouble();
if (std::isnan(suggestion.value))
if (std::isnan(suggestion->value))
continue;
suggestion.localized_value = LocalizeValue(option->value());
suggestion.label =
suggestion->localized_value = LocalizeValue(option->value());
suggestion->label =
option->value() == option->label() ? String() : option->label();
parameters.suggestions.push_back(suggestion);
parameters.suggestions.push_back(std::move(suggestion));
}
}
return true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment