| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // A class that receives IPC messages from an NPObjectProxy and calls the real |
| // NPObject. |
| |
| #ifndef CONTENT_CHILD_NPAPI_NPOBJECT_STUB_H_ |
| #define CONTENT_CHILD_NPAPI_NPOBJECT_STUB_H_ |
| |
| #include <vector> |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/weak_ptr.h" |
| #include "content/child/npapi/npobject_base.h" |
| #include "ipc/ipc_listener.h" |
| #include "ipc/ipc_sender.h" |
| #include "url/gurl.h" |
| |
| struct NPObject; |
| |
| namespace content { |
| class NPChannelBase; |
| struct NPIdentifier_Param; |
| struct NPVariant_Param; |
| |
| // This wraps an NPObject and converts IPC messages from NPObjectProxy to calls |
| // to the object. The results are marshalled back. See npobject_proxy.h for |
| // more information. |
| class NPObjectStub : public IPC::Listener, |
| public IPC::Sender, |
| public base::SupportsWeakPtr<NPObjectStub>, |
| public NPObjectBase { |
| public: |
| NPObjectStub(NPObject* npobject, |
| NPChannelBase* channel, |
| int route_id, |
| int render_view_id, |
| const GURL& page_url); |
| virtual ~NPObjectStub(); |
| |
| // Schedules tear-down of this stub. The underlying NPObject reference is |
| // released, and further invokations from the IPC channel will fail once this |
| // call has returned. Deletion of the stub is deferred to the main loop, in |
| // case it is touched as the stack unwinds. DeleteSoon() is safe to call |
| // more than once, until control returns to the main loop. |
| void DeleteSoon(); |
| |
| // IPC::Sender implementation: |
| virtual bool Send(IPC::Message* msg) OVERRIDE; |
| |
| // NPObjectBase implementation. |
| virtual NPObject* GetUnderlyingNPObject() OVERRIDE; |
| virtual IPC::Listener* GetChannelListener() OVERRIDE; |
| |
| private: |
| // IPC::Listener implementation: |
| virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| virtual void OnChannelError() OVERRIDE; |
| |
| // message handlers |
| void OnRelease(IPC::Message* reply_msg); |
| void OnHasMethod(const NPIdentifier_Param& name, |
| bool* result); |
| void OnInvoke(bool is_default, |
| const NPIdentifier_Param& method, |
| const std::vector<NPVariant_Param>& args, |
| IPC::Message* reply_msg); |
| void OnHasProperty(const NPIdentifier_Param& name, |
| bool* result); |
| void OnGetProperty(const NPIdentifier_Param& name, |
| NPVariant_Param* property, |
| bool* result); |
| void OnSetProperty(const NPIdentifier_Param& name, |
| const NPVariant_Param& property, |
| IPC::Message* reply_msg); |
| void OnRemoveProperty(const NPIdentifier_Param& name, |
| bool* result); |
| void OnInvalidate(); |
| void OnEnumeration(std::vector<NPIdentifier_Param>* value, |
| bool* result); |
| void OnConstruct(const std::vector<NPVariant_Param>& args, |
| IPC::Message* reply_msg); |
| void OnEvaluate(const std::string& script, bool popups_allowed, |
| IPC::Message* reply_msg); |
| |
| private: |
| NPObject* npobject_; |
| scoped_refptr<NPChannelBase> channel_; |
| int route_id_; |
| int render_view_id_; |
| |
| // The url of the main frame hosting the plugin. |
| GURL page_url_; |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_CHILD_NPAPI_NPOBJECT_STUB_H_ |