Home | History | Annotate | Download | only in pepper
      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 #ifndef PPAPI_CONTENT_RENDERER_PEPPER_HOST_RESOURCE_VAR_H_
      6 #define PPAPI_CONTENT_RENDERER_PEPPER_HOST_RESOURCE_VAR_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "ipc/ipc_message.h"
     10 #include "ppapi/c/pp_resource.h"
     11 #include "ppapi/shared_impl/resource_var.h"
     12 #include "ppapi/shared_impl/var.h"
     13 
     14 namespace content {
     15 
     16 // Represents a resource var, usable on the host side. Can either have a
     17 // plugin-side resource or a pending resource host.
     18 class HostResourceVar : public ppapi::ResourceVar {
     19  public:
     20   // Makes a null resource var.
     21   HostResourceVar();
     22 
     23   // Makes a resource var with an existing plugin-side resource.
     24   explicit HostResourceVar(PP_Resource pp_resource);
     25 
     26   // Makes a resource var with a pending resource host.
     27   // The |pending_renderer_host_id| is a pending resource host ID in the
     28   // renderer to attach from the plugin. Depending on the type of resource, this
     29   // may be 0. The |creation_message| contains additional data needed to create
     30   // the plugin-side resource. Its type depends on the type of resource.
     31   HostResourceVar(int pending_renderer_host_id,
     32                   const IPC::Message& creation_message);
     33 
     34   // ResourceVar override.
     35   virtual PP_Resource GetPPResource() const OVERRIDE;
     36   virtual int GetPendingRendererHostId() const OVERRIDE;
     37   virtual int GetPendingBrowserHostId() const OVERRIDE;
     38   virtual const IPC::Message* GetCreationMessage() const OVERRIDE;
     39   virtual bool IsPending() const OVERRIDE;
     40 
     41   void set_pending_browser_host_id(int id) { pending_browser_host_id_ = id; }
     42 
     43  protected:
     44   virtual ~HostResourceVar();
     45 
     46  private:
     47   // Real resource ID in the plugin. 0 if one has not yet been created
     48   // (indicating that there is a pending resource host).
     49   PP_Resource pp_resource_;
     50 
     51   // Pending resource host ID in the renderer.
     52   int pending_renderer_host_id_;
     53 
     54   // Pending resource host ID in the browser.
     55   int pending_browser_host_id_;
     56 
     57   // If the plugin-side resource has not yet been created, carries a message to
     58   // create a resource of the specific type on the plugin side. Otherwise, NULL.
     59   scoped_ptr<IPC::Message> creation_message_;
     60 
     61   DISALLOW_COPY_AND_ASSIGN(HostResourceVar);
     62 };
     63 
     64 }  // namespace content
     65 
     66 #endif
     67