15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/renderer_webcolorchooser_impl.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_impl.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int GenerateColorChooserIdentifier() {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int next = 0;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ++next;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebColorChooserImpl::RendererWebColorChooserImpl(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewImpl* render_view,
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebColorChooserClient* client)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : RenderViewObserver(render_view),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      identifier_(GenerateColorChooserIdentifier()),
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      client_(client) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RendererWebColorChooserImpl::~RendererWebColorChooserImpl() {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RendererWebColorChooserImpl::OnMessageReceived(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const IPC::Message& message) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool handled = true;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(RendererWebColorChooserImpl, message)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ViewMsg_DidChooseColorResponse,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnDidChooseColorResponse)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ViewMsg_DidEndColorChooser,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnDidEndColorChooser)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return handled;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RendererWebColorChooserImpl::setSelectedColor(blink::WebColor color) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Send(new ViewHostMsg_SetSelectedColorInColorChooser(routing_id(), identifier_,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      static_cast<SkColor>(color)));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebColorChooserImpl::endChooser() {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Send(new ViewHostMsg_EndColorChooser(routing_id(), identifier_));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RendererWebColorChooserImpl::Open(
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SkColor initial_color,
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const std::vector<content::ColorSuggestion>& suggestions) {
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Send(new ViewHostMsg_OpenColorChooser(routing_id(),
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                        identifier_,
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                        initial_color,
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                        suggestions));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebColorChooserImpl::OnDidChooseColorResponse(int color_chooser_id,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                           SkColor color) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(identifier_ == color_chooser_id);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  client_->didChooseColor(static_cast<blink::WebColor>(color));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RendererWebColorChooserImpl::OnDidEndColorChooser(int color_chooser_id) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (identifier_ != color_chooser_id)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  client_->didEndChooser();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
73