| 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_
|
|
|