Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Side by Side Diff: chrome/common/attributed_string_coder_mac.h

Issue 6289009: [Mac] Implement the system dictionary popup by implementing NSTextInput methods. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Clang Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/attributed_string_coder_mac.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 #ifndef CHROME_COMMON_ATTRIBUTED_STRING_CODER_MAC_H_
6 #define CHROME_COMMON_ATTRIBUTED_STRING_CODER_MAC_H_
7
8 #include <set>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "base/string16.h"
12 #include "content/common/font_descriptor_mac.h"
13 #include "ipc/ipc_message_utils.h"
14 #include "ui/base/range/range.h"
15
16 #if __OBJC__
17 @class NSAttributedString;
18 @class NSDictionary;
19 #else
20 class NSAttributedString;
21 class NSDictionary;
22 #endif
23
24 namespace mac {
25
26 // This class will serialize the font information of an NSAttributedString so
27 // that it can be sent over IPC. This class only stores the information of the
28 // NSFontAttributeName. The motive is that of security: using NSArchiver and
29 // friends to send objects from the renderer to the browser could lead to
30 // deserialization of arbitrary objects. This class restricts serialization to
31 // a specific object class and specific attributes of that object.
32 class AttributedStringCoder {
33 public:
34 // A C++ IPC-friendly representation of the NSFontAttributeName attribute
35 // set.
36 class FontAttribute {
37 public:
38 FontAttribute(NSDictionary* ns_attributes, ui::Range effective_range);
39 FontAttribute(FontDescriptor font, ui::Range range);
40 FontAttribute();
41 ~FontAttribute();
42
43 // Creates an autoreleased NSDictionary that can be attached to an
44 // NSAttributedString.
45 NSDictionary* ToAttributesDictionary() const;
46
47 // Whether or not the attribute should be placed in the EncodedString. This
48 // can return false, e.g. if the Cocoa-based constructor can't find any
49 // information to encode.
50 bool ShouldEncode() const;
51
52 // Accessors:
53 FontDescriptor font_descriptor() const { return font_descriptor_; }
54 ui::Range effective_range() const { return effective_range_; }
55
56 private:
57 FontDescriptor font_descriptor_;
58 ui::Range effective_range_;
59 };
60
61 // A class that contains the pertinent information from an NSAttributedString,
62 // which can be serialized over IPC.
63 class EncodedString {
64 public:
65 explicit EncodedString(string16 string);
66 EncodedString();
67 ~EncodedString();
68
69 // Accessors:
70 string16 string() const { return string_; }
71 const std::vector<FontAttribute>& attributes() const {
72 return attributes_;
73 }
74 std::vector<FontAttribute>* attributes() { return &attributes_; }
75
76 private:
77 // The plain-text string.
78 string16 string_;
79 // The set of attributes that style |string_|.
80 std::vector<FontAttribute> attributes_;
81 };
82
83 // Takes an NSAttributedString, extracts the pertinent attributes, and returns
84 // an object that represents it. Caller owns the result.
85 static const EncodedString* Encode(NSAttributedString* str);
86
87 // Returns an autoreleased NSAttributedString from an encoded representation.
88 static NSAttributedString* Decode(const EncodedString* str);
89
90 private:
91 AttributedStringCoder();
92 };
93
94 } // namespace mac
95
96 // IPC ParamTraits specialization //////////////////////////////////////////////
97
98 namespace IPC {
99
100 template <>
101 struct ParamTraits<mac::AttributedStringCoder::EncodedString> {
102 typedef mac::AttributedStringCoder::EncodedString param_type;
103 static void Write(Message* m, const param_type& p);
104 static bool Read(const Message* m, void** iter, param_type* r);
105 static void Log(const param_type& p, std::string* l);
106 };
107
108 template <>
109 struct ParamTraits<mac::AttributedStringCoder::FontAttribute> {
110 typedef mac::AttributedStringCoder::FontAttribute param_type;
111 static void Write(Message* m, const param_type& p);
112 static bool Read(const Message* m, void** iter, param_type* r);
113 static void Log(const param_type& p, std::string* l);
114 };
115
116 } // namespace IPC
117
118 #endif // CHROME_COMMON_ATTRIBUTED_STRING_CODER_MAC_H_
OLDNEW
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/attributed_string_coder_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698