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

Side by Side Diff: plugins/update/npapi/variant_utils.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « plugins/update/npapi/variant_utils.h ('k') | plugins/update/npapi/variant_utils_unittest.cc » ('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 2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15 //
16 // TODO(omaha): verify that the new operator throws on failure to prevent NULL
17 // pointer exploits.
18
19 #include "omaha/plugins/update/npapi/variant_utils.h"
20 #include <atlstr.h>
21 #include "base/debug.h"
22 #include "base/string.h"
23 #include "omaha/plugins/update/npapi/dispatch_host.h"
24 #include "omaha/plugins/update/npapi/npfunction_host.h"
25
26 namespace omaha {
27
28 void NPVariantToVariant(NPP npp,
29 const NPVariant& source,
30 VARIANT* destination) {
31 ASSERT1(destination);
32 V_VT(destination) = VT_EMPTY;
33
34 switch (source.type) {
35 case NPVariantType_Void:
36 V_VT(destination) = VT_EMPTY;
37 break;
38 case NPVariantType_Null:
39 V_VT(destination) = VT_NULL;
40 break;
41 case NPVariantType_Bool:
42 V_VT(destination) = VT_BOOL;
43 V_BOOL(destination) = source.value.boolValue ? VARIANT_TRUE
44 : VARIANT_FALSE;
45 break;
46 case NPVariantType_Int32:
47 V_VT(destination) = VT_I4;
48 V_I4(destination) = source.value.intValue;
49 break;
50 case NPVariantType_Double:
51 V_VT(destination) = VT_R8;
52 V_R8(destination) = source.value.doubleValue;
53 break;
54 case NPVariantType_String:
55 V_VT(destination) = VT_BSTR;
56 if (source.value.stringValue.UTF8Length) {
57 CString string = Utf8ToWideChar(source.value.stringValue.UTF8Characters,
58 source.value.stringValue.UTF8Length);
59 V_BSTR(destination) = string.AllocSysString();
60 } else {
61 V_BSTR(destination) = CString().AllocSysString();
62 }
63 break;
64 case NPVariantType_Object:
65 V_VT(destination) = VT_DISPATCH;
66 if (source.value.objectValue) {
67 NpFunctionHost::Create(npp, source.value.objectValue,
68 &V_DISPATCH(destination));
69 } else {
70 V_DISPATCH(destination) = NULL;
71 }
72 break;
73 default:
74 ASSERT1(false);
75 break;
76 }
77 }
78
79 void VariantToNPVariant(NPP npp,
80 const VARIANT& source,
81 NPVariant* destination) {
82 ASSERT1(destination);
83 VOID_TO_NPVARIANT(*destination);
84
85 switch (V_VT(&source)) {
86 case VT_EMPTY:
87 VOID_TO_NPVARIANT(*destination);
88 break;
89 case VT_NULL:
90 NULL_TO_NPVARIANT(*destination);
91 break;
92 case VT_BOOL:
93 BOOLEAN_TO_NPVARIANT(V_BOOL(&source), *destination);
94 break;
95 case VT_I4:
96 INT32_TO_NPVARIANT(V_I4(&source), *destination);
97 break;
98 case VT_UI4:
99 INT32_TO_NPVARIANT(V_UI4(&source), *destination);
100 break;
101 case VT_R8:
102 DOUBLE_TO_NPVARIANT(V_R8(&source), *destination);
103 break;
104 case VT_BSTR:
105 if (V_BSTR(&source)) {
106 int source_length = ::SysStringLen(V_BSTR(&source)) + 1;
107 int buffer_length = ::WideCharToMultiByte(CP_UTF8, 0, V_BSTR(&source),
108 source_length, NULL, 0, NULL,
109 NULL);
110 char* buffer = static_cast<char*>(NPN_MemAlloc(buffer_length));
111 VERIFY1(::WideCharToMultiByte(CP_UTF8, 0, V_BSTR(&source),
112 source_length, buffer, buffer_length,
113 NULL, NULL) > 0);
114 STRINGN_TO_NPVARIANT(buffer, buffer_length - 1, *destination);
115 } else {
116 char* buffer = static_cast<char*>(NPN_MemAlloc(1));
117 buffer[0] = '\0';
118 STRINGN_TO_NPVARIANT(buffer, 0, *destination);
119 }
120 break;
121 case VT_DISPATCH:
122 if (V_DISPATCH(&source)) {
123 OBJECT_TO_NPVARIANT(
124 DispatchHost::CreateInstance(npp, V_DISPATCH(&source)),
125 *destination);
126 }
127 break;
128 default:
129 ASSERT(false, (L"Unhandled variant type %d", V_VT(&source)));
130 break;
131 }
132 }
133
134 } // namespace omaha
OLDNEW
« no previous file with comments | « plugins/update/npapi/variant_utils.h ('k') | plugins/update/npapi/variant_utils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698