• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
10 namespace NPAPIClient {
11 
12 static const int kMaxLength = 4096;
13 
ExecuteStreamJavaScript(NPP id,NPNetscapeFuncs * host_functions)14 ExecuteStreamJavaScript::ExecuteStreamJavaScript(
15     NPP id, NPNetscapeFuncs *host_functions)
16     : PluginTest(id, host_functions) {
17 }
18 
NewStream(NPMIMEType type,NPStream * stream,NPBool seekable,uint16 * stype)19 NPError ExecuteStreamJavaScript::NewStream(NPMIMEType type, NPStream* stream,
20                                            NPBool seekable, uint16* stype) {
21   return NPERR_NO_ERROR;
22 }
23 
WriteReady(NPStream * stream)24 int32 ExecuteStreamJavaScript::WriteReady(NPStream *stream) {
25   return kMaxLength;
26 }
27 
Write(NPStream * stream,int32 offset,int32 len,void * buffer)28 int32 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 
DestroyStream(NPStream * stream,NPError reason)60 NPError ExecuteStreamJavaScript::DestroyStream(NPStream *stream,
61                                                NPError reason) {
62   return NPERR_NO_ERROR;
63 }
64 
65 } // namespace NPAPIClient
66