Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / render_widget_host_view_mac_dictionary_helper.mm
1 // Copyright 2013 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 "base/strings/sys_string_conversions.h"
6 #import "content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.h"
7 #import "content/browser/renderer_host/render_widget_host_view_mac.h"
8
9 namespace content {
10
11 RenderWidgetHostViewMacDictionaryHelper::
12     RenderWidgetHostViewMacDictionaryHelper(RenderWidgetHostView* view)
13     : view_(static_cast<RenderWidgetHostViewMac*>(view)),
14       target_view_(static_cast<RenderWidgetHostViewMac*>(view)) {
15 }
16
17 void RenderWidgetHostViewMacDictionaryHelper::SetTargetView(
18     RenderWidgetHostView* target_view) {
19   target_view_ = static_cast<RenderWidgetHostViewMac*>(target_view);
20 }
21
22 void RenderWidgetHostViewMacDictionaryHelper::ShowDefinitionForSelection() {
23   NSRange selection_range = [view_->cocoa_view() selectedRange];
24   NSAttributedString* attr_string =
25       [view_->cocoa_view() attributedSubstringForProposedRange:selection_range
26                                            actualRange:nil];
27   if (!attr_string) {
28     if (view_->selected_text().empty())
29       return;
30     // The PDF plugin does not support getting the attributed string. Until it
31     // does, use NSPerformService(), which opens Dictionary.app.
32     // http://crbug.com/152438
33     // TODO(asvitkine): This should be removed after the above support is added.
34     NSString* text = base::SysUTF8ToNSString(view_->selected_text());
35     NSPasteboard* pasteboard = [NSPasteboard pasteboardWithUniqueName];
36     NSArray* types = [NSArray arrayWithObject:NSStringPboardType];
37     [pasteboard declareTypes:types owner:nil];
38     if ([pasteboard setString:text forType:NSStringPboardType])
39       NSPerformService(@"Look Up in Dictionary", pasteboard);
40     return;
41   }
42
43   NSRect rect =
44       [view_->cocoa_view() firstViewRectForCharacterRange:selection_range
45                                               actualRange:nil];
46
47   NSDictionary* attrs = [attr_string attributesAtIndex:0 effectiveRange:nil];
48   NSFont* font = [attrs objectForKey:NSFontAttributeName];
49   rect.origin.y += NSHeight(rect) - [font ascender];
50
51   rect.origin.x += offset_.x();
52   rect.origin.y += offset_.y();
53
54   [target_view_->cocoa_view() showDefinitionForAttributedString:attr_string
55                                                         atPoint:rect.origin];
56 }
57
58 }  // namespace content