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

Unified 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, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/common/attributed_string_coder_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/attributed_string_coder_mac.h
diff --git a/chrome/common/attributed_string_coder_mac.h b/chrome/common/attributed_string_coder_mac.h
new file mode 100644
index 0000000000000000000000000000000000000000..4ac02eb748fd1db9125f1c4041fbf2eb58c6645d
--- /dev/null
+++ b/chrome/common/attributed_string_coder_mac.h
@@ -0,0 +1,118 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_COMMON_ATTRIBUTED_STRING_CODER_MAC_H_
+#define CHROME_COMMON_ATTRIBUTED_STRING_CODER_MAC_H_
+
+#include <set>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/string16.h"
+#include "content/common/font_descriptor_mac.h"
+#include "ipc/ipc_message_utils.h"
+#include "ui/base/range/range.h"
+
+#if __OBJC__
+@class NSAttributedString;
+@class NSDictionary;
+#else
+class NSAttributedString;
+class NSDictionary;
+#endif
+
+namespace mac {
+
+// This class will serialize the font information of an NSAttributedString so
+// that it can be sent over IPC. This class only stores the information of the
+// NSFontAttributeName. The motive is that of security: using NSArchiver and
+// friends to send objects from the renderer to the browser could lead to
+// deserialization of arbitrary objects. This class restricts serialization to
+// a specific object class and specific attributes of that object.
+class AttributedStringCoder {
+ public:
+ // A C++ IPC-friendly representation of the NSFontAttributeName attribute
+ // set.
+ class FontAttribute {
+ public:
+ FontAttribute(NSDictionary* ns_attributes, ui::Range effective_range);
+ FontAttribute(FontDescriptor font, ui::Range range);
+ FontAttribute();
+ ~FontAttribute();
+
+ // Creates an autoreleased NSDictionary that can be attached to an
+ // NSAttributedString.
+ NSDictionary* ToAttributesDictionary() const;
+
+ // Whether or not the attribute should be placed in the EncodedString. This
+ // can return false, e.g. if the Cocoa-based constructor can't find any
+ // information to encode.
+ bool ShouldEncode() const;
+
+ // Accessors:
+ FontDescriptor font_descriptor() const { return font_descriptor_; }
+ ui::Range effective_range() const { return effective_range_; }
+
+ private:
+ FontDescriptor font_descriptor_;
+ ui::Range effective_range_;
+ };
+
+ // A class that contains the pertinent information from an NSAttributedString,
+ // which can be serialized over IPC.
+ class EncodedString {
+ public:
+ explicit EncodedString(string16 string);
+ EncodedString();
+ ~EncodedString();
+
+ // Accessors:
+ string16 string() const { return string_; }
+ const std::vector<FontAttribute>& attributes() const {
+ return attributes_;
+ }
+ std::vector<FontAttribute>* attributes() { return &attributes_; }
+
+ private:
+ // The plain-text string.
+ string16 string_;
+ // The set of attributes that style |string_|.
+ std::vector<FontAttribute> attributes_;
+ };
+
+ // Takes an NSAttributedString, extracts the pertinent attributes, and returns
+ // an object that represents it. Caller owns the result.
+ static const EncodedString* Encode(NSAttributedString* str);
+
+ // Returns an autoreleased NSAttributedString from an encoded representation.
+ static NSAttributedString* Decode(const EncodedString* str);
+
+ private:
+ AttributedStringCoder();
+};
+
+} // namespace mac
+
+// IPC ParamTraits specialization //////////////////////////////////////////////
+
+namespace IPC {
+
+template <>
+struct ParamTraits<mac::AttributedStringCoder::EncodedString> {
+ typedef mac::AttributedStringCoder::EncodedString param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+template <>
+struct ParamTraits<mac::AttributedStringCoder::FontAttribute> {
+ typedef mac::AttributedStringCoder::FontAttribute param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+} // namespace IPC
+
+#endif // CHROME_COMMON_ATTRIBUTED_STRING_CODER_MAC_H_
« 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