| Index: webkit/glue/plugins/test/plugin_get_javascript_url_test.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/test/plugin_get_javascript_url_test.cc (revision 22024)
|
| +++ webkit/glue/plugins/test/plugin_get_javascript_url_test.cc (working copy)
|
| @@ -17,11 +17,19 @@
|
| // The maximum chunk size of stream data.
|
| #define STREAM_CHUNK 197
|
|
|
| +const int kNPNEvaluateTimerID = 100;
|
| +const int kNPNEvaluateTimerElapse = 50;
|
| +
|
| +
|
| namespace NPAPIClient {
|
|
|
| ExecuteGetJavascriptUrlTest::ExecuteGetJavascriptUrlTest(NPP id, NPNetscapeFuncs *host_functions)
|
| : PluginTest(id, host_functions),
|
| - test_started_(false) {
|
| + test_started_(false),
|
| +#ifdef OS_WIN
|
| + window_(NULL),
|
| +#endif
|
| + npn_evaluate_context_(false) {
|
| }
|
|
|
| NPError ExecuteGetJavascriptUrlTest::SetWindow(NPWindow* pNPWindow) {
|
| @@ -30,15 +38,64 @@
|
| HostFunctions()->geturlnotify(id(), url.c_str(), "_top",
|
| reinterpret_cast<void*>(SELF_URL_STREAM_ID));
|
| test_started_ = true;
|
| +
|
| +#ifdef OS_WIN
|
| + HWND window_handle = reinterpret_cast<HWND>(pNPWindow->window);
|
| + if (!::GetProp(window_handle, L"Plugin_Instance")) {
|
| + ::SetProp(window_handle, L"Plugin_Instance", this);
|
| + // We attempt to retreive the NPObject for the plugin instance identified
|
| + // by the NPObjectLifetimeTestInstance2 class as it may not have been
|
| + // instantiated yet.
|
| + SetTimer(window_handle, kNPNEvaluateTimerID, kNPNEvaluateTimerElapse,
|
| + TimerProc);
|
| + }
|
| + window_ = window_handle;
|
| +#endif
|
| }
|
| +
|
| return NPERR_NO_ERROR;
|
| }
|
|
|
| +#ifdef OS_WIN
|
| +void CALLBACK ExecuteGetJavascriptUrlTest::TimerProc(
|
| + HWND window, UINT message, UINT timer_id, unsigned long elapsed_time) {
|
| + ExecuteGetJavascriptUrlTest* this_instance =
|
| + reinterpret_cast<ExecuteGetJavascriptUrlTest*>
|
| + (::GetProp(window, L"Plugin_Instance"));
|
| +
|
| + NPObject *window_obj = NULL;
|
| + this_instance->HostFunctions()->getvalue(this_instance->id(),
|
| + NPNVWindowNPObject,
|
| + &window_obj);
|
| + if (!window_obj) {
|
| + this_instance->SetError("Failed to get NPObject for plugin instance2");
|
| + this_instance->SignalTestCompleted();
|
| + return;
|
| + }
|
| +
|
| + std::string script = "javascript:window.location";
|
| + NPString script_string;
|
| + script_string.UTF8Characters = script.c_str();
|
| + script_string.UTF8Length = static_cast<unsigned int>(script.length());
|
| + NPVariant result_var;
|
| +
|
| + this_instance->npn_evaluate_context_ = true;
|
| + NPError result = this_instance->HostFunctions()->evaluate(
|
| + this_instance->id(), window_obj, &script_string, &result_var);
|
| + this_instance->npn_evaluate_context_ = false;
|
| +}
|
| +#endif
|
| +
|
| NPError ExecuteGetJavascriptUrlTest::NewStream(NPMIMEType type, NPStream* stream,
|
| NPBool seekable, uint16* stype) {
|
| if (stream == NULL)
|
| SetError("NewStream got null stream");
|
|
|
| + if (npn_evaluate_context_) {
|
| + SetError("NewStream received in context of NPN_Evaluate");
|
| + return NPERR_NO_ERROR;
|
| + }
|
| +
|
| COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(stream->notifyData),
|
| cast_validity_check);
|
| unsigned long stream_id = reinterpret_cast<unsigned long>(stream->notifyData);
|
| @@ -53,6 +110,10 @@
|
| }
|
|
|
| int32 ExecuteGetJavascriptUrlTest::WriteReady(NPStream *stream) {
|
| + if (npn_evaluate_context_) {
|
| + SetError("WriteReady received in context of NPN_Evaluate");
|
| + return NPERR_NO_ERROR;
|
| + }
|
| return STREAM_CHUNK;
|
| }
|
|
|
| @@ -63,6 +124,11 @@
|
| if (len < 0 || len > STREAM_CHUNK)
|
| SetError("Write got bogus stream chunk size");
|
|
|
| + if (npn_evaluate_context_) {
|
| + SetError("Write received in context of NPN_Evaluate");
|
| + return len;
|
| + }
|
| +
|
| COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(stream->notifyData),
|
| cast_validity_check);
|
| unsigned long stream_id = reinterpret_cast<unsigned long>(stream->notifyData);
|
| @@ -83,6 +149,15 @@
|
| if (stream == NULL)
|
| SetError("NewStream got null stream");
|
|
|
| +#ifdef OS_WIN
|
| + KillTimer(window_, kNPNEvaluateTimerID);
|
| +#endif
|
| +
|
| + if (npn_evaluate_context_) {
|
| + SetError("DestroyStream received in context of NPN_Evaluate");
|
| + return NPERR_NO_ERROR;
|
| + }
|
| +
|
| COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(stream->notifyData),
|
| cast_validity_check);
|
| unsigned long stream_id = reinterpret_cast<unsigned long>(stream->notifyData);
|
| @@ -100,6 +175,12 @@
|
| void ExecuteGetJavascriptUrlTest::URLNotify(const char* url, NPReason reason, void* data) {
|
| COMPILE_ASSERT(sizeof(unsigned long) <= sizeof(data),
|
| cast_validity_check);
|
| +
|
| + if (npn_evaluate_context_) {
|
| + SetError("URLNotify received in context of NPN_Evaluate");
|
| + return;
|
| + }
|
| +
|
| unsigned long stream_id = reinterpret_cast<unsigned long>(data);
|
| switch (stream_id) {
|
| case SELF_URL_STREAM_ID:
|
|
|