1 // Copyright (c) 2012 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/renderer/renderer_date_time_picker.h" 6 7 #include "base/strings/string_util.h" 8 #include "content/common/view_messages.h" 9 #include "content/renderer/date_time_formatter.h" 10 #include "content/renderer/render_view_impl.h" 11 12 #include "third_party/WebKit/public/web/WebDateTimeChooserCompletion.h" 13 #include "third_party/WebKit/public/web/WebDateTimeChooserParams.h" 14 #include "third_party/WebKit/public/web/WebDateTimeInputType.h" 15 16 using WebKit::WebString; 17 18 namespace content { 19 20 RendererDateTimePicker::RendererDateTimePicker( 21 RenderViewImpl* sender, 22 const WebKit::WebDateTimeChooserParams& params, 23 WebKit::WebDateTimeChooserCompletion* completion) 24 : RenderViewObserver(sender), 25 chooser_params_(params), 26 chooser_completion_(completion){ 27 } 28 29 RendererDateTimePicker::~RendererDateTimePicker() { 30 } 31 32 bool RendererDateTimePicker::Open() { 33 DateTimeFormatter parser(chooser_params_); 34 ViewHostMsg_DateTimeDialogValue_Params message; 35 message.dialog_type = parser.GetType(); 36 if (message.dialog_type == ui::TEXT_INPUT_TYPE_WEEK) { 37 message.year = parser.GetWeekYear(); 38 message.week = parser.GetWeek(); 39 } else { 40 message.year = parser.GetYear(); 41 message.month = parser.GetMonth(); 42 message.day = parser.GetDay(); 43 message.hour = parser.GetHour(); 44 message.minute = parser.GetMinute(); 45 message.second = parser.GetSecond(); 46 } 47 message.minimum = chooser_params_.minimum; 48 message.maximum = chooser_params_.maximum; 49 Send(new ViewHostMsg_OpenDateTimeDialog(routing_id(), message)); 50 return true; 51 } 52 53 bool RendererDateTimePicker::OnMessageReceived( 54 const IPC::Message& message) { 55 bool handled = true; 56 IPC_BEGIN_MESSAGE_MAP(RendererDateTimePicker, message) 57 IPC_MESSAGE_HANDLER(ViewMsg_ReplaceDateTime, OnReplaceDateTime) 58 IPC_MESSAGE_HANDLER(ViewMsg_CancelDateTimeDialog, OnCancel) 59 IPC_MESSAGE_UNHANDLED(handled = false) 60 IPC_END_MESSAGE_MAP() 61 return handled; 62 } 63 64 void RendererDateTimePicker::OnReplaceDateTime( 65 const ViewHostMsg_DateTimeDialogValue_Params& value) { 66 67 DateTimeFormatter formatter( 68 static_cast<ui::TextInputType>(value.dialog_type), 69 value.year, value.month, value.day, 70 value.hour, value.minute, value.second, value.year, value.week); 71 72 if (chooser_completion_) 73 chooser_completion_->didChooseValue(WebString::fromUTF8( 74 formatter.GetFormattedValue().c_str())); 75 } 76 77 void RendererDateTimePicker::OnCancel() { 78 if (chooser_completion_) 79 chooser_completion_->didCancelChooser(); 80 } 81 82 } // namespace content 83