Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
8 #ifndef SkOTUtils_DEFINED
9 #define SkOTUtils_DEFINED
11 #include "SkOTTableTypes.h"
12 #include "SkOTTable_name.h"
13 #include "SkTypeface.h"
15 class SkData;
16 class SkStream;
18 struct SkOTUtils {
19 /**
20 * Calculates the OpenType checksum for data.
21 */
22 static uint32_t CalcTableChecksum(SK_OT_ULONG *data, size_t length);
24 /**
25 * Renames an sfnt font. On failure (invalid data or not an sfnt font)
26 * returns NULL.
27 *
28 * Essentially, this removes any existing 'name' table and replaces it
29 * with a new one in which FontFamilyName, FontSubfamilyName,
30 * UniqueFontIdentifier, FullFontName, and PostscriptName are fontName.
31 *
32 * The new 'name' table records will be written with the Windows,
33 * UnicodeBMPUCS2, and English_UnitedStates settings.
34 *
35 * fontName and fontNameLen must be specified in terms of ASCII chars.
36 */
37 static SkData* RenameFont(SkStream* fontData, const char* fontName, int fontNameLen);
39 /** An implementation of LocalizedStrings which obtains it's data from a 'name' table. */
40 class LocalizedStrings_NameTable : public SkTypeface::LocalizedStrings {
41 public:
42 /** Takes ownership of the nameTableData and will free it with SK_DELETE. */
43 LocalizedStrings_NameTable(SkOTTableName* nameTableData,
44 SkOTTableName::Record::NameID::Predefined::Value types[],
45 int typesCount)
46 : fTypes(types), fTypesCount(typesCount), fTypesIndex(0)
47 , fNameTableData(nameTableData), fFamilyNameIter(*nameTableData, fTypes[fTypesIndex])
48 { }
50 /** Creates an iterator over all the family names in the 'name' table of a typeface.
51 * If no valid 'name' table can be found, returns NULL.
52 */
53 static LocalizedStrings_NameTable* CreateForFamilyNames(const SkTypeface& typeface);
55 virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE;
56 private:
57 static SkOTTableName::Record::NameID::Predefined::Value familyNameTypes[3];
59 SkOTTableName::Record::NameID::Predefined::Value* fTypes;
60 int fTypesCount;
61 int fTypesIndex;
62 SkAutoTDeleteArray<SkOTTableName> fNameTableData;
63 SkOTTableName::Iterator fFamilyNameIter;
64 };
66 /** An implementation of LocalizedStrings which has one name. */
67 class LocalizedStrings_SingleName : public SkTypeface::LocalizedStrings {
68 public:
69 LocalizedStrings_SingleName(SkString name, SkString language)
70 : fName(name), fLanguage(language), fHasNext(true)
71 { }
73 virtual bool next(SkTypeface::LocalizedString* localizedString) SK_OVERRIDE {
74 localizedString->fString = fName;
75 localizedString->fLanguage = fLanguage;
77 bool hadNext = fHasNext;
78 fHasNext = false;
79 return hadNext;
80 }
82 private:
83 SkString fName;
84 SkString fLanguage;
85 bool fHasNext;
86 };
87 };
89 #endif