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_webcolorchooser_impl.h" 6 7 #include "content/common/frame_messages.h" 8 9 namespace content { 10 11 static int GenerateColorChooserIdentifier() { 12 static int next = 0; 13 return ++next; 14 } 15 16 RendererWebColorChooserImpl::RendererWebColorChooserImpl( 17 RenderFrame* render_frame, 18 blink::WebColorChooserClient* client) 19 : RenderFrameObserver(render_frame), 20 identifier_(GenerateColorChooserIdentifier()), 21 client_(client) { 22 } 23 24 RendererWebColorChooserImpl::~RendererWebColorChooserImpl() { 25 } 26 27 bool RendererWebColorChooserImpl::OnMessageReceived( 28 const IPC::Message& message) { 29 bool handled = true; 30 IPC_BEGIN_MESSAGE_MAP(RendererWebColorChooserImpl, message) 31 IPC_MESSAGE_HANDLER(FrameMsg_DidChooseColorResponse, 32 OnDidChooseColorResponse) 33 IPC_MESSAGE_HANDLER(FrameMsg_DidEndColorChooser, OnDidEndColorChooser) 34 IPC_MESSAGE_UNHANDLED(handled = false) 35 IPC_END_MESSAGE_MAP() 36 return handled; 37 } 38 39 void RendererWebColorChooserImpl::setSelectedColor(blink::WebColor color) { 40 Send(new FrameHostMsg_SetSelectedColorInColorChooser( 41 routing_id(), identifier_, static_cast<SkColor>(color))); 42 } 43 44 void RendererWebColorChooserImpl::endChooser() { 45 Send(new FrameHostMsg_EndColorChooser(routing_id(), identifier_)); 46 } 47 48 void RendererWebColorChooserImpl::Open( 49 SkColor initial_color, 50 const std::vector<content::ColorSuggestion>& suggestions) { 51 Send(new FrameHostMsg_OpenColorChooser(routing_id(), 52 identifier_, 53 initial_color, 54 suggestions)); 55 } 56 57 void RendererWebColorChooserImpl::OnDidChooseColorResponse(int color_chooser_id, 58 SkColor color) { 59 DCHECK(identifier_ == color_chooser_id); 60 61 client_->didChooseColor(static_cast<blink::WebColor>(color)); 62 } 63 64 void RendererWebColorChooserImpl::OnDidEndColorChooser(int color_chooser_id) { 65 if (identifier_ != color_chooser_id) 66 return; 67 client_->didEndChooser(); 68 } 69 70 } // namespace content 71