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

Side by Side Diff: tests/fake_browser_ppapi/fake_window.cc

Issue 7292002: Remove plugin connection to PPAPI scriptable objects (var deprecated). Also (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 9 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « tests/fake_browser_ppapi/fake_window.h ('k') | tests/fake_browser_ppapi/main.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 /*
2 * Copyright (c) 2011 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7 #include "native_client/tests/fake_browser_ppapi/fake_window.h"
8
9 #include <stdio.h>
10 #include <string.h>
11
12 #include <map>
13 #include <string>
14
15 #include "native_client/src/include/checked_cast.h"
16 #include "native_client/src/include/portability.h"
17 #include "native_client/src/shared/ppapi_proxy/plugin_ppb_var_deprecated.h"
18 #include "native_client/tests/fake_browser_ppapi/fake_object.h"
19 #include "native_client/tests/fake_browser_ppapi/utility.h"
20 #include "ppapi/c/dev/ppb_var_deprecated.h"
21 #include "ppapi/c/pp_var.h"
22
23 using fake_browser_ppapi::Object;
24 using ppapi_proxy::PluginVarDeprecated;
25
26 namespace {
27
28 PP_Module g_browser_module;
29 PP_Instance g_browser_instance;
30
31 PP_Var* NewStringVar(PP_Module browser_module, const char* str) {
32 static const PPB_Var_Deprecated* ppb_var = NULL;
33 if (ppb_var == NULL) {
34 ppb_var = reinterpret_cast<const PPB_Var_Deprecated*>(
35 PluginVarDeprecated::GetInterface());
36 if (ppb_var == NULL) {
37 return NULL;
38 }
39 }
40
41 PP_Var* var = reinterpret_cast<PP_Var*>(malloc(sizeof(*var)));
42 *var = ppb_var->VarFromUtf8(browser_module,
43 str,
44 nacl::assert_cast<uint32_t>(strlen(str)));
45 return var;
46 }
47
48 // Returns a PP_Var that mocks the window.location object.
49 PP_Var* LocationObject(PP_Module browser_module,
50 PP_Instance browser_instance,
51 const char* page_url) {
52 // Populate the properties map.
53 PP_Var* href = NewStringVar(browser_module, page_url);
54 Object::PropertyMap properties;
55 properties["href"] = href;
56
57 // Populate the methods map.
58 Object::MethodMap methods;
59
60 // Create and return a PP_Var for location.
61 PP_Var* location = reinterpret_cast<PP_Var*>(malloc(sizeof(*location)));
62 *location = Object::New(browser_module, browser_instance,
63 properties, methods);
64 return location;
65 }
66
67 // Emulates the window.console.log method.
68 PP_Var ConsoleLog(Object* object,
69 uint32_t argc,
70 PP_Var* argv,
71 PP_Var* exception) {
72 UNREFERENCED_PARAMETER(object);
73 UNREFERENCED_PARAMETER(exception);
74 printf("console.log(");
75 for (uint32_t i = 0; i < argc; ++i) {
76 // NB: currently we are not doing the printf-style formatting.
77 // TODO(sehr): implement the formatting.
78 printf("'%s'", PluginVarDeprecated::DebugString(argv[i]).c_str());
79 if (i < argc - 1) {
80 printf(", ");
81 }
82 }
83 printf(")\n");
84 return PP_MakeUndefined();
85 }
86
87 // Returns a PP_Var that mocks the window.console object.
88 PP_Var* ConsoleObject(PP_Module browser_module, PP_Instance browser_instance) {
89 // Populate the properties map.
90 Object::PropertyMap properties;
91
92 // Populate the methods map.
93 Object::MethodMap methods;
94 methods["log"] = ConsoleLog;
95
96 PP_Var* console = reinterpret_cast<PP_Var*>(malloc(sizeof(*console)));
97 *console = Object::New(browser_module, browser_instance, properties, methods);
98 return console;
99 }
100
101 // Emulates the window.alert method.
102 PP_Var Alert(Object* object,
103 uint32_t argc,
104 PP_Var* argv,
105 PP_Var* exception) {
106 UNREFERENCED_PARAMETER(object);
107 UNREFERENCED_PARAMETER(exception);
108 printf("window.alert(");
109 if (argc == 1) {
110 printf("'%s'", PluginVarDeprecated::DebugString(argv[0]).c_str());
111 } else {
112 printf("<BAD PARAMETER COUNT: %d>", argc);
113 }
114 printf(")\n");
115 return PP_MakeUndefined();
116 }
117
118 std::string GetNexeURL(const char* nexes, const char* isa) {
119 const char* match = strstr(nexes, isa);
120 if (match == NULL) {
121 return std::string("");
122 }
123 const char* start = match + strlen(isa);
124 const char* end = strchr(start, '"');
125 return std::string(start, end - start);
126 }
127
128 // Returns a PP_Var that mocks the nexes dictionary.
129 PP_Var* NexesObject(PP_Module browser_module,
130 PP_Instance browser_instance,
131 const char* nexes) {
132 // Populate the properties map.
133 Object::PropertyMap properties;
134 properties["x86-32"] =
135 NewStringVar(browser_module, GetNexeURL(nexes, "\"x86-32\": \"").c_str());
136 properties["x86-64"] =
137 NewStringVar(browser_module, GetNexeURL(nexes, "\"x86-64\": \"").c_str());
138 properties["arm"] =
139 NewStringVar(browser_module, GetNexeURL(nexes, "\"arm\": \"").c_str());
140
141
142 // Populate the methods map.
143 Object::MethodMap methods;
144
145 PP_Var* nexes_object =
146 reinterpret_cast<PP_Var*>(malloc(sizeof(*nexes_object)));
147 *nexes_object =
148 Object::New(browser_module, browser_instance, properties, methods);
149 return nexes_object;
150 }
151
152 // Emulates the window.JSON.parse method.
153 PP_Var Parse(Object* object,
154 uint32_t argc,
155 PP_Var* argv,
156 PP_Var* exception) {
157 UNREFERENCED_PARAMETER(object);
158 UNREFERENCED_PARAMETER(exception);
159 printf("window.JSON.parse(");
160 if (argc == 1) {
161 printf("'%s')\n", PluginVarDeprecated::DebugString(argv[0]).c_str());
162 } else {
163 printf("<BAD PARAMETER COUNT: %d>)\n", argc);
164 return PP_MakeUndefined();
165 }
166 // Build the nexes object from the json string.
167 // Populate the properties map.
168 Object::PropertyMap properties;
169 properties["nexes"] =
170 NexesObject(g_browser_module,
171 g_browser_instance,
172 PluginVarDeprecated::DebugString(argv[0]).c_str());
173
174 // Populate the methods map.
175 Object::MethodMap methods;
176
177 return Object::New(g_browser_module, g_browser_instance, properties, methods);
178 }
179
180 // Returns a PP_Var that mocks the window.JSON object.
181 PP_Var* JsonParserObject(PP_Module browser_module,
182 PP_Instance browser_instance) {
183 // Populate the properties map.
184 Object::PropertyMap properties;
185
186 // Populate the methods map.
187 Object::MethodMap methods;
188 methods["parse"] = Parse;
189
190 PP_Var* console = reinterpret_cast<PP_Var*>(malloc(sizeof(*console)));
191 *console = Object::New(browser_module, browser_instance, properties, methods);
192 return console;
193 }
194
195 } // namespace
196
197 namespace fake_browser_ppapi {
198
199 FakeWindow::FakeWindow(PP_Module browser_module,
200 PP_Instance browser_instance,
201 Host* host,
202 const char* page_url) : host_(host) {
203 // Populate the properties map.
204 Object::PropertyMap properties;
205 properties["console"] = ConsoleObject(browser_module, browser_instance);
206 properties["location"] = LocationObject(browser_module, browser_instance,
207 page_url);
208 properties["JSON"] = JsonParserObject(browser_module, browser_instance);
209 // Populate the methods map.
210 Object::MethodMap methods;
211 methods["alert"] = Alert;
212 Object* window_object = new Object(browser_module, browser_instance,
213 properties, methods);
214 window_var_ =
215 host_->var_deprecated_interface()->CreateObject(
216 browser_instance,
217 &ppapi_proxy::Object::object_class,
218 window_object);
219 g_browser_module = browser_module;
220 g_browser_instance = browser_instance;
221 }
222
223 FakeWindow::~FakeWindow() {
224 host_->var_deprecated_interface()->Release(window_var_);
225 }
226
227 PP_Var FakeWindow::FakeWindowObject() {
228 host_->var_deprecated_interface()->AddRef(window_var_);
229 return window_var_;
230 }
231
232 } // namespace fake_browser_ppapi
OLDNEW
« no previous file with comments | « tests/fake_browser_ppapi/fake_window.h ('k') | tests/fake_browser_ppapi/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698