Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* ***** BEGIN LICENSE BLOCK *****
2 *
3 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * Contributor(s):
27 * Josh Aas <josh@mozilla.com>
28 *
29 * ***** END LICENSE BLOCK ***** */
31 #include "nptest_utils.h"
33 #include <stdlib.h>
34 #include <string.h>
35 #include <assert.h>
36 #include "mozilla/NullPtr.h"
38 NPUTF8*
39 createCStringFromNPVariant(const NPVariant* variant)
40 {
41 size_t length = NPVARIANT_TO_STRING(*variant).UTF8Length;
42 NPUTF8* result = (NPUTF8*)malloc(length + 1);
43 memcpy(result, NPVARIANT_TO_STRING(*variant).UTF8Characters, length);
44 result[length] = '\0';
45 return result;
46 }
48 NPIdentifier
49 variantToIdentifier(NPVariant variant)
50 {
51 if (NPVARIANT_IS_STRING(variant))
52 return stringVariantToIdentifier(variant);
53 else if (NPVARIANT_IS_INT32(variant))
54 return int32VariantToIdentifier(variant);
55 else if (NPVARIANT_IS_DOUBLE(variant))
56 return doubleVariantToIdentifier(variant);
57 return 0;
58 }
60 NPIdentifier
61 stringVariantToIdentifier(NPVariant variant)
62 {
63 assert(NPVARIANT_IS_STRING(variant));
64 NPUTF8* utf8String = createCStringFromNPVariant(&variant);
65 NPIdentifier identifier = NPN_GetStringIdentifier(utf8String);
66 free(utf8String);
67 return identifier;
68 }
70 NPIdentifier
71 int32VariantToIdentifier(NPVariant variant)
72 {
73 assert(NPVARIANT_IS_INT32(variant));
74 int32_t integer = NPVARIANT_TO_INT32(variant);
75 return NPN_GetIntIdentifier(integer);
76 }
78 NPIdentifier
79 doubleVariantToIdentifier(NPVariant variant)
80 {
81 assert(NPVARIANT_IS_DOUBLE(variant));
82 double value = NPVARIANT_TO_DOUBLE(variant);
83 // sadly there is no "getdoubleidentifier"
84 int32_t integer = static_cast<int32_t>(value);
85 return NPN_GetIntIdentifier(integer);
86 }
88 /*
89 * Parse a color in hex format, #AARRGGBB or AARRGGBB.
90 */
91 uint32_t
92 parseHexColor(const char* color, int len)
93 {
94 uint8_t bgra[4] = { 0, 0, 0, 0xFF };
95 int i = 0;
97 // Ignore unsupported formats.
98 if (len != 9 && len != 8)
99 return 0;
101 // start from the right and work to the left
102 while (len >= 2) { // we have at least #AA or AA left.
103 char byte[3];
104 // parse two hex digits
105 byte[0] = color[len - 2];
106 byte[1] = color[len - 1];
107 byte[2] = '\0';
109 bgra[i] = (uint8_t)(strtoul(byte, nullptr, 16) & 0xFF);
110 i++;
111 len -= 2;
112 }
113 return (bgra[3] << 24) | (bgra[2] << 16) | (bgra[1] << 8) | bgra[0];
114 }