1// Copyright (c) 2012 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 "content/test/plugin/plugin_execute_stream_javascript.h" 6 7#include "base/basictypes.h" 8#include "content/test/plugin/plugin_client.h" 9 10namespace NPAPIClient { 11 12static const int kMaxLength = 4096; 13 14ExecuteStreamJavaScript::ExecuteStreamJavaScript( 15 NPP id, NPNetscapeFuncs *host_functions) 16 : PluginTest(id, host_functions) { 17} 18 19NPError ExecuteStreamJavaScript::NewStream(NPMIMEType type, NPStream* stream, 20 NPBool seekable, uint16* stype) { 21 return NPERR_NO_ERROR; 22} 23 24int32 ExecuteStreamJavaScript::WriteReady(NPStream *stream) { 25 return kMaxLength; 26} 27 28int32 ExecuteStreamJavaScript::Write(NPStream *stream, int32 offset, int32 len, 29 void *buffer) { 30 if (stream == NULL) { 31 SetError("Write got null stream"); 32 return -1; 33 } 34 if (len < 0 || len > kMaxLength) { 35 SetError("Write got bogus stream chunk size"); 36 return -1; 37 } 38 39 std::string javascript("javascript:"); 40 javascript.append(static_cast<char*>(buffer), len); 41 size_t js_length = javascript.length(); 42 if (js_length != static_cast<uint32_t>(js_length)) { 43 SetError("Javascript too long."); 44 return -1; 45 } 46 47 NPString script_string = { javascript.c_str(), 48 static_cast<uint32_t>(js_length) }; 49 NPObject *window_obj = NULL; 50 NPAPIClient::PluginClient::HostFunctions()->getvalue( 51 id(), NPNVWindowNPObject, &window_obj); 52 53 NPVariant unused_result; 54 NPAPIClient::PluginClient::HostFunctions()->evaluate( 55 id(), window_obj, &script_string, &unused_result); 56 57 return len; 58} 59 60NPError ExecuteStreamJavaScript::DestroyStream(NPStream *stream, 61 NPError reason) { 62 return NPERR_NO_ERROR; 63} 64 65} // namespace NPAPIClient 66