Home | History | Annotate | Download | only in renderer
      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