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_suggestion_builder.h"
     10 #include "content/renderer/render_view_impl.h"
     11 #include "third_party/WebKit/public/web/WebDateTimeChooserCompletion.h"
     12 #include "third_party/WebKit/public/web/WebDateTimeChooserParams.h"
     13 #include "third_party/WebKit/public/web/WebDateTimeInputType.h"
     14 #include "ui/base/ime/text_input_type.h"
     15 
     16 using blink::WebString;
     17 
     18 namespace content {
     19 
     20 static ui::TextInputType ToTextInputType(int type) {
     21   switch (type) {
     22     case blink::WebDateTimeInputTypeDate:
     23       return ui::TEXT_INPUT_TYPE_DATE;
     24       break;
     25     case blink::WebDateTimeInputTypeDateTime:
     26       return ui::TEXT_INPUT_TYPE_DATE_TIME;
     27       break;
     28     case blink::WebDateTimeInputTypeDateTimeLocal:
     29       return ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL;
     30       break;
     31     case blink::WebDateTimeInputTypeMonth:
     32       return ui::TEXT_INPUT_TYPE_MONTH;
     33       break;
     34     case blink::WebDateTimeInputTypeTime:
     35       return ui::TEXT_INPUT_TYPE_TIME;
     36       break;
     37     case blink::WebDateTimeInputTypeWeek:
     38       return ui::TEXT_INPUT_TYPE_WEEK;
     39       break;
     40     case blink::WebDateTimeInputTypeNone:
     41     default:
     42       return ui::TEXT_INPUT_TYPE_NONE;
     43   }
     44 }
     45 
     46 RendererDateTimePicker::RendererDateTimePicker(
     47     RenderViewImpl* sender,
     48     const blink::WebDateTimeChooserParams& params,
     49     blink::WebDateTimeChooserCompletion* completion)
     50     : RenderViewObserver(sender),
     51       chooser_params_(params),
     52       chooser_completion_(completion) {
     53 }
     54 
     55 RendererDateTimePicker::~RendererDateTimePicker() {
     56 }
     57 
     58 bool RendererDateTimePicker::Open() {
     59   ViewHostMsg_DateTimeDialogValue_Params message;
     60   message.dialog_type = ToTextInputType(chooser_params_.type);
     61   message.dialog_value = chooser_params_.doubleValue;
     62   message.minimum = chooser_params_.minimum;
     63   message.maximum = chooser_params_.maximum;
     64   message.step = chooser_params_.step;
     65   for (size_t i = 0; i < chooser_params_.suggestions.size(); i++) {
     66     message.suggestions.push_back(
     67         DateTimeSuggestionBuilder::Build(chooser_params_.suggestions[i]));
     68   }
     69   Send(new ViewHostMsg_OpenDateTimeDialog(routing_id(), message));
     70   return true;
     71 }
     72 
     73 bool RendererDateTimePicker::OnMessageReceived(
     74     const IPC::Message& message) {
     75   bool handled = true;
     76   IPC_BEGIN_MESSAGE_MAP(RendererDateTimePicker, message)
     77     IPC_MESSAGE_HANDLER(ViewMsg_ReplaceDateTime, OnReplaceDateTime)
     78     IPC_MESSAGE_HANDLER(ViewMsg_CancelDateTimeDialog, OnCancel)
     79     IPC_MESSAGE_UNHANDLED(handled = false)
     80   IPC_END_MESSAGE_MAP()
     81   return handled;
     82 }
     83 
     84 void RendererDateTimePicker::OnReplaceDateTime(double value) {
     85   if (chooser_completion_)
     86     chooser_completion_->didChooseValue(value);
     87 #if defined(OS_ANDROID)
     88   static_cast<RenderViewImpl*>(render_view())->DismissDateTimeDialog();
     89 #endif
     90 }
     91 
     92 void RendererDateTimePicker::OnCancel() {
     93   if (chooser_completion_)
     94     chooser_completion_->didCancelChooser();
     95 #if defined(OS_ANDROID)
     96   static_cast<RenderViewImpl*>(render_view())->DismissDateTimeDialog();
     97 #endif
     98 }
     99 
    100 }  // namespace content
    101