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