Home | History | Annotate | Download | only in plugin
      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 
     14 ExecuteStreamJavaScript::ExecuteStreamJavaScript(
     15     NPP id, NPNetscapeFuncs *host_functions)
     16     : PluginTest(id, host_functions) {
     17 }
     18 
     19 NPError ExecuteStreamJavaScript::NewStream(NPMIMEType type, NPStream* stream,
     20                                            NPBool seekable, uint16* stype) {
     21   return NPERR_NO_ERROR;
     22 }
     23 
     24 int32 ExecuteStreamJavaScript::WriteReady(NPStream *stream) {
     25   return kMaxLength;
     26 }
     27 
     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 
     60 NPError ExecuteStreamJavaScript::DestroyStream(NPStream *stream,
     61                                                NPError reason) {
     62   return NPERR_NO_ERROR;
     63 }
     64 
     65 } // namespace NPAPIClient
     66