OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/text_input_client_message_filter.h" | 5 #include "content/browser/renderer_host/text_input_client_message_filter.h" |
6 | 6 |
7 #include "base/strings/string16.h" | 7 #include "base/strings/string16.h" |
8 #include "content/browser/renderer_host/render_view_host_impl.h" | 8 #include "content/browser/renderer_host/render_view_host_impl.h" |
9 #include "content/browser/renderer_host/text_input_client_mac.h" | 9 #include "content/browser/renderer_host/text_input_client_mac.h" |
10 #include "content/common/text_input_client_messages.h" | 10 #include "content/common/text_input_client_messages.h" |
11 #include "content/public/browser/render_widget_host_view.h" | 11 #include "content/public/browser/render_widget_host_view.h" |
12 #include "ipc/ipc_message_macros.h" | 12 #include "ipc/ipc_message_macros.h" |
| 13 #include "ui/gfx/point.h" |
13 #include "ui/gfx/range/range.h" | 14 #include "ui/gfx/range/range.h" |
14 #include "ui/gfx/rect.h" | |
15 | 15 |
16 namespace content { | 16 namespace content { |
17 | 17 |
18 TextInputClientMessageFilter::TextInputClientMessageFilter(int child_id) | 18 TextInputClientMessageFilter::TextInputClientMessageFilter(int child_id) |
19 : BrowserMessageFilter(TextInputClientMsgStart), | 19 : BrowserMessageFilter(TextInputClientMsgStart), |
20 child_process_id_(child_id) { | 20 child_process_id_(child_id) { |
21 } | 21 } |
22 | 22 |
23 bool TextInputClientMessageFilter::OnMessageReceived( | 23 bool TextInputClientMessageFilter::OnMessageReceived( |
24 const IPC::Message& message, | 24 const IPC::Message& message, |
25 bool* message_was_ok) { | 25 bool* message_was_ok) { |
26 bool handled = true; | 26 bool handled = true; |
27 IPC_BEGIN_MESSAGE_MAP_EX(TextInputClientMessageFilter, message, | 27 IPC_BEGIN_MESSAGE_MAP_EX(TextInputClientMessageFilter, message, |
28 *message_was_ok) | 28 *message_was_ok) |
| 29 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotStringAtPoint, |
| 30 OnGotStringAtPoint) |
29 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotCharacterIndexForPoint, | 31 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotCharacterIndexForPoint, |
30 OnGotCharacterIndexForPoint) | 32 OnGotCharacterIndexForPoint) |
31 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotFirstRectForRange, | 33 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotFirstRectForRange, |
32 OnGotFirstRectForRange) | 34 OnGotFirstRectForRange) |
33 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotStringForRange, | 35 IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotStringForRange, |
34 OnGotStringFromRange) | 36 OnGotStringFromRange) |
35 IPC_MESSAGE_UNHANDLED(handled = false) | 37 IPC_MESSAGE_UNHANDLED(handled = false) |
36 IPC_END_MESSAGE_MAP_EX() | 38 IPC_END_MESSAGE_MAP_EX() |
37 return handled; | 39 return handled; |
38 } | 40 } |
39 | 41 |
40 TextInputClientMessageFilter::~TextInputClientMessageFilter() {} | 42 TextInputClientMessageFilter::~TextInputClientMessageFilter() {} |
41 | 43 |
| 44 void TextInputClientMessageFilter::OnGotStringAtPoint( |
| 45 const mac::AttributedStringCoder::EncodedString& encoded_string, |
| 46 const gfx::Point& point) { |
| 47 TextInputClientMac* service = TextInputClientMac::GetInstance(); |
| 48 NSAttributedString* string = |
| 49 mac::AttributedStringCoder::Decode(&encoded_string); |
| 50 service->GetStringAtPointReply(string, NSPointFromCGPoint(point.ToCGPoint())); |
| 51 } |
| 52 |
42 void TextInputClientMessageFilter::OnGotCharacterIndexForPoint(size_t index) { | 53 void TextInputClientMessageFilter::OnGotCharacterIndexForPoint(size_t index) { |
43 TextInputClientMac* service = TextInputClientMac::GetInstance(); | 54 TextInputClientMac* service = TextInputClientMac::GetInstance(); |
44 // |index| could be WTF::notFound (-1) and its value is different from | 55 // |index| could be WTF::notFound (-1) and its value is different from |
45 // NSNotFound so we need to convert it. | 56 // NSNotFound so we need to convert it. |
46 if (index == static_cast<size_t>(-1)) { | 57 if (index == static_cast<size_t>(-1)) { |
47 index = NSNotFound; | 58 index = NSNotFound; |
48 } | 59 } |
49 service->SetCharacterIndexAndSignal(index); | 60 service->SetCharacterIndexAndSignal(index); |
50 } | 61 } |
51 | 62 |
52 void TextInputClientMessageFilter::OnGotFirstRectForRange( | 63 void TextInputClientMessageFilter::OnGotFirstRectForRange( |
53 const gfx::Rect& rect) { | 64 const gfx::Rect& rect) { |
54 TextInputClientMac* service = TextInputClientMac::GetInstance(); | 65 TextInputClientMac* service = TextInputClientMac::GetInstance(); |
55 service->SetFirstRectAndSignal(NSRectFromCGRect(rect.ToCGRect())); | 66 service->SetFirstRectAndSignal(NSRectFromCGRect(rect.ToCGRect())); |
56 } | 67 } |
57 | 68 |
58 void TextInputClientMessageFilter::OnGotStringFromRange( | 69 void TextInputClientMessageFilter::OnGotStringFromRange( |
59 const mac::AttributedStringCoder::EncodedString& encoded_string) { | 70 const mac::AttributedStringCoder::EncodedString& encoded_string) { |
60 TextInputClientMac* service = TextInputClientMac::GetInstance(); | 71 TextInputClientMac* service = TextInputClientMac::GetInstance(); |
61 NSAttributedString* string = | 72 NSAttributedString* string = |
62 mac::AttributedStringCoder::Decode(&encoded_string); | 73 mac::AttributedStringCoder::Decode(&encoded_string); |
63 if (![string length]) | 74 if (![string length]) |
64 string = nil; | 75 string = nil; |
65 service->SetSubstringAndSignal(string); | 76 service->SetSubstringAndSignal(string); |
66 } | 77 } |
67 | 78 |
68 } // namespace content | 79 } // namespace content |
OLD | NEW |