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

Side by Side Diff: webkit/glue/plugins/test/plugin_get_javascript_url_test.cc

Issue 6012002: Move the NPAPI files from webkit/glue/plugins to webkit/plugins/npapi and put... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years 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
OLDNEW
(Empty)
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "webkit/glue/plugins/test/plugin_get_javascript_url_test.h"
6
7 #include "base/basictypes.h"
8
9 // url for "self".
10 #define SELF_URL "javascript:window.location+\"\""
11 // The identifier for the self url stream.
12 #define SELF_URL_STREAM_ID 1
13
14 // The identifier for the fetched url stream.
15 #define FETCHED_URL_STREAM_ID 2
16
17 // The maximum chunk size of stream data.
18 #define STREAM_CHUNK 197
19
20 const int kNPNEvaluateTimerID = 100;
21 const int kNPNEvaluateTimerElapse = 50;
22
23
24 namespace NPAPIClient {
25
26 ExecuteGetJavascriptUrlTest::ExecuteGetJavascriptUrlTest(
27 NPP id, NPNetscapeFuncs *host_functions)
28 : PluginTest(id, host_functions),
29 test_started_(false),
30 #ifdef OS_WIN
31 window_(NULL),
32 #endif
33 npn_evaluate_context_(false) {
34 }
35
36 NPError ExecuteGetJavascriptUrlTest::SetWindow(NPWindow* pNPWindow) {
37 if (pNPWindow->window == NULL)
38 return NPERR_NO_ERROR;
39
40 if (!test_started_) {
41 std::string url = SELF_URL;
42 HostFunctions()->geturlnotify(id(), url.c_str(), "_top",
43 reinterpret_cast<void*>(SELF_URL_STREAM_ID));
44 test_started_ = true;
45
46 #ifdef OS_WIN
47 HWND window_handle = reinterpret_cast<HWND>(pNPWindow->window);
48 if (!::GetProp(window_handle, L"Plugin_Instance")) {
49 // TODO: this propery leaks.
50 ::SetProp(window_handle, L"Plugin_Instance", this);
51 // We attempt to retreive the NPObject for the plugin instance identified
52 // by the NPObjectLifetimeTestInstance2 class as it may not have been
53 // instantiated yet.
54 SetTimer(window_handle, kNPNEvaluateTimerID, kNPNEvaluateTimerElapse,
55 TimerProc);
56 }
57 window_ = window_handle;
58 #endif
59 }
60
61 return NPERR_NO_ERROR;
62 }
63
64 #ifdef OS_WIN
65 void CALLBACK ExecuteGetJavascriptUrlTest::TimerProc(
66 HWND window, UINT message, UINT timer_id, unsigned long elapsed_time) {
67 ExecuteGetJavascriptUrlTest* this_instance =
68 reinterpret_cast<ExecuteGetJavascriptUrlTest*>
69 (::GetProp(window, L"Plugin_Instance"));
70
71 ::RemoveProp(window, L"Plugin_Instance");
72
73 NPObject *window_obj = NULL;
74 this_instance->HostFunctions()->getvalue(this_instance->id(),
75 NPNVWindowNPObject,
76 &window_obj);
77 if (!window_obj) {
78 this_instance->SetError("Failed to get NPObject for plugin instance2");
79 this_instance->SignalTestCompleted();
80 return;
81 }
82
83 std::string script = "javascript:window.location";
84 NPString script_string;
85 script_string.UTF8Characters = script.c_str();
86 script_string.UTF8Length = static_cast<unsigned int>(script.length());
87 NPVariant result_var;
88
89 this_instance->npn_evaluate_context_ = true;
90 NPError result = this_instance->HostFunctions()->evaluate(
91 this_instance->id(), window_obj, &script_string, &result_var);
92 this_instance->npn_evaluate_context_ = false;
93 }
94 #endif
95
96 NPError ExecuteGetJavascriptUrlTest::NewStream(NPMIMEType type,
97 NPStream* stream,
98 NPBool seekable,
99 uint16* stype) {
100 if (stream == NULL) {
101 SetError("NewStream got null stream");
102 return NPERR_INVALID_PARAM;
103 }
104
105 if (npn_evaluate_context_) {
106 SetError("NewStream received in context of NPN_Evaluate");
107 return NPERR_NO_ERROR;
108 }
109
110 COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(stream->notifyData),
111 cast_validity_check);
112 unsigned long stream_id = reinterpret_cast<unsigned long>(stream->notifyData);
113 switch (stream_id) {
114 case SELF_URL_STREAM_ID:
115 break;
116 default:
117 SetError("Unexpected NewStream callback");
118 break;
119 }
120 return NPERR_NO_ERROR;
121 }
122
123 int32 ExecuteGetJavascriptUrlTest::WriteReady(NPStream *stream) {
124 if (npn_evaluate_context_) {
125 SetError("WriteReady received in context of NPN_Evaluate");
126 return NPERR_NO_ERROR;
127 }
128 return STREAM_CHUNK;
129 }
130
131 int32 ExecuteGetJavascriptUrlTest::Write(NPStream *stream, int32 offset,
132 int32 len, void *buffer) {
133 if (stream == NULL) {
134 SetError("Write got null stream");
135 return -1;
136 }
137 if (len < 0 || len > STREAM_CHUNK) {
138 SetError("Write got bogus stream chunk size");
139 return -1;
140 }
141
142 if (npn_evaluate_context_) {
143 SetError("Write received in context of NPN_Evaluate");
144 return len;
145 }
146
147 COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(stream->notifyData),
148 cast_validity_check);
149 unsigned long stream_id = reinterpret_cast<unsigned long>(stream->notifyData);
150 switch (stream_id) {
151 case SELF_URL_STREAM_ID:
152 self_url_.append(static_cast<char*>(buffer), len);
153 break;
154 default:
155 SetError("Unexpected write callback");
156 break;
157 }
158 // Pretend that we took all the data.
159 return len;
160 }
161
162
163 NPError ExecuteGetJavascriptUrlTest::DestroyStream(NPStream *stream,
164 NPError reason) {
165 if (stream == NULL) {
166 SetError("NewStream got null stream");
167 return NPERR_INVALID_PARAM;
168 }
169
170 #ifdef OS_WIN
171 KillTimer(window_, kNPNEvaluateTimerID);
172 #endif
173
174 if (npn_evaluate_context_) {
175 SetError("DestroyStream received in context of NPN_Evaluate");
176 return NPERR_NO_ERROR;
177 }
178
179 COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(stream->notifyData),
180 cast_validity_check);
181 unsigned long stream_id = reinterpret_cast<unsigned long>(stream->notifyData);
182 switch (stream_id) {
183 case SELF_URL_STREAM_ID:
184 // don't care
185 break;
186 default:
187 SetError("Unexpected NewStream callback");
188 break;
189 }
190 return NPERR_NO_ERROR;
191 }
192
193 void ExecuteGetJavascriptUrlTest::URLNotify(const char* url, NPReason reason,
194 void* data) {
195 COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(data),
196 cast_validity_check);
197
198 if (npn_evaluate_context_) {
199 SetError("URLNotify received in context of NPN_Evaluate");
200 return;
201 }
202
203 unsigned long stream_id = reinterpret_cast<unsigned long>(data);
204 switch (stream_id) {
205 case SELF_URL_STREAM_ID:
206 if (strcmp(url, SELF_URL) != 0)
207 SetError("URLNotify reported incorrect url for SELF_URL");
208 if (self_url_.empty())
209 SetError("Failed to obtain window location.");
210 SignalTestCompleted();
211 break;
212 default:
213 SetError("Unexpected NewStream callback");
214 break;
215 }
216 }
217
218 } // namespace NPAPIClient
OLDNEW
« no previous file with comments | « webkit/glue/plugins/test/plugin_get_javascript_url_test.h ('k') | webkit/glue/plugins/test/plugin_geturl_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698