Home | History | Annotate | Download | only in npapi
      1 // Copyright 2013 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 // A class that receives IPC messages from an NPObjectProxy and calls the real
      6 // NPObject.
      7 
      8 #ifndef CONTENT_CHILD_NPAPI_NPOBJECT_STUB_H_
      9 #define CONTENT_CHILD_NPAPI_NPOBJECT_STUB_H_
     10 
     11 #include <vector>
     12 
     13 #include "base/memory/ref_counted.h"
     14 #include "base/memory/weak_ptr.h"
     15 #include "content/child/npapi/npobject_base.h"
     16 #include "ipc/ipc_listener.h"
     17 #include "ipc/ipc_sender.h"
     18 #include "url/gurl.h"
     19 
     20 struct NPObject;
     21 
     22 namespace content {
     23 class NPChannelBase;
     24 struct NPIdentifier_Param;
     25 struct NPVariant_Param;
     26 
     27 // This wraps an NPObject and converts IPC messages from NPObjectProxy to calls
     28 // to the object.  The results are marshalled back.  See npobject_proxy.h for
     29 // more information.
     30 class NPObjectStub : public IPC::Listener,
     31                      public IPC::Sender,
     32                      public base::SupportsWeakPtr<NPObjectStub>,
     33                      public NPObjectBase {
     34  public:
     35   NPObjectStub(NPObject* npobject,
     36                NPChannelBase* channel,
     37                int route_id,
     38                int render_view_id,
     39                const GURL& page_url);
     40   virtual ~NPObjectStub();
     41 
     42   // Schedules tear-down of this stub.  The underlying NPObject reference is
     43   // released, and further invokations from the IPC channel will fail once this
     44   // call has returned.  Deletion of the stub is deferred to the main loop, in
     45   // case it is touched as the stack unwinds.  DeleteSoon() is safe to call
     46   // more than once, until control returns to the main loop.
     47   void DeleteSoon();
     48 
     49   // IPC::Sender implementation:
     50   virtual bool Send(IPC::Message* msg) OVERRIDE;
     51 
     52   // NPObjectBase implementation.
     53   virtual NPObject* GetUnderlyingNPObject() OVERRIDE;
     54   virtual IPC::Listener* GetChannelListener() OVERRIDE;
     55 
     56  private:
     57   // IPC::Listener implementation:
     58   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     59   virtual void OnChannelError() OVERRIDE;
     60 
     61   // message handlers
     62   void OnRelease(IPC::Message* reply_msg);
     63   void OnHasMethod(const NPIdentifier_Param& name,
     64                    bool* result);
     65   void OnInvoke(bool is_default,
     66                 const NPIdentifier_Param& method,
     67                 const std::vector<NPVariant_Param>& args,
     68                 IPC::Message* reply_msg);
     69   void OnHasProperty(const NPIdentifier_Param& name,
     70                      bool* result);
     71   void OnGetProperty(const NPIdentifier_Param& name,
     72                      NPVariant_Param* property,
     73                      bool* result);
     74   void OnSetProperty(const NPIdentifier_Param& name,
     75                      const NPVariant_Param& property,
     76                      IPC::Message* reply_msg);
     77   void OnRemoveProperty(const NPIdentifier_Param& name,
     78                         bool* result);
     79   void OnInvalidate();
     80   void OnEnumeration(std::vector<NPIdentifier_Param>* value,
     81                      bool* result);
     82   void OnConstruct(const std::vector<NPVariant_Param>& args,
     83                    IPC::Message* reply_msg);
     84   void OnEvaluate(const std::string& script, bool popups_allowed,
     85                   IPC::Message* reply_msg);
     86 
     87  private:
     88   NPObject* npobject_;
     89   scoped_refptr<NPChannelBase> channel_;
     90   int route_id_;
     91   int render_view_id_;
     92 
     93   // The url of the main frame hosting the plugin.
     94   GURL page_url_;
     95 };
     96 
     97 }  // namespace content
     98 
     99 #endif  // CONTENT_CHILD_NPAPI_NPOBJECT_STUB_H_
    100