15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PLUGIN_WEBPLUGIN_PROXY_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PLUGIN_WEBPLUGIN_PROXY_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_cftyperef.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/memory/shared_memory.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h"
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/child/npapi/webplugin.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h"
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ipc/ipc_sender.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/refptr.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkCanvas.h"
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gpu_preference.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/surface/transport_dib.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct PluginMsg_FetchURL_Params;
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginChannel;
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass WebPluginDelegateImpl;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPluginAcceleratedSurfaceProxy;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is an implementation of WebPlugin that proxies all calls to the
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// renderer.
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class WebPluginProxy : public WebPlugin,
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       public IPC::Sender {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a new proxy for WebPlugin, using the given sender to send the
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // marshalled WebPlugin calls.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebPluginProxy(PluginChannel* channel,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 int route_id,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const GURL& page_url,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 int host_render_view_routing_id);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebPluginProxy();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void set_delegate(WebPluginDelegateImpl* d) { delegate_ = d; }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebPlugin overrides
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetWindow(gfx::PluginWindowHandle window) OVERRIDE;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetAcceptsInputEvents(bool accepts) OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WillDestroyWindow(gfx::PluginWindowHandle window) OVERRIDE;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CancelResource(unsigned long id) OVERRIDE;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Invalidate() OVERRIDE;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InvalidateRect(const gfx::Rect& rect) OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NPObject* GetWindowScriptNPObject() OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NPObject* GetPluginElement() OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool FindProxyForUrl(const GURL& url,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               std::string* proxy_list) OVERRIDE;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetCookie(const GURL& url,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const GURL& first_party_for_cookies,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& cookie) OVERRIDE;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetCookies(const GURL& url,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const GURL& first_party_for_cookies) OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleURLRequest(const char* url,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const char* method,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const char* target,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const char* buf,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                unsigned int len,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int notify_id,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                bool popups_allowed,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                bool notify_redirects) OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateGeometry(const gfx::Rect& window_rect,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const gfx::Rect& clip_rect,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const TransportDIB::Handle& windowless_buffer0,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const TransportDIB::Handle& windowless_buffer1,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      int windowless_buffer_index);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CancelDocumentLoad() OVERRIDE;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitiateHTTPRangeRequest(
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const char* url, const char* range_info, int range_request_id) OVERRIDE;
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void DidStartLoading() OVERRIDE;
86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void DidStopLoading() OVERRIDE;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetDeferResourceLoading(unsigned long resource_id,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       bool defer) OVERRIDE;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsOffTheRecord() OVERRIDE;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResourceClientDeleted(
91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      WebPluginResourceClient* resource_client) OVERRIDE;
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void URLRedirectResponse(bool allow, int resource_id) OVERRIDE;
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool CheckIfRunInsecureContent(const GURL& url) OVERRIDE;
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN)
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetWindowlessData(HANDLE pump_messages_event,
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                         gfx::NativeViewId dummy_activation_window);
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusChanged(bool focused) OVERRIDE;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void StartIme() OVERRIDE;
101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual WebPluginAcceleratedSurface*
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetAcceleratedSurface(gfx::GpuPreference gpu_preference) OVERRIDE;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AcceleratedPluginEnabledRendering() OVERRIDE;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AcceleratedPluginAllocatedIOSurface(int32 width,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   int32 height,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   uint32 surface_id) OVERRIDE;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AcceleratedPluginSwappedIOSurface() OVERRIDE;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // IPC::Sender implementation.
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool Send(IPC::Message* msg) OVERRIDE;
11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // class-specific methods
11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Returns a WebPluginResourceClient object given its id, or NULL if no
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // object with that id exists.
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  WebPluginResourceClient* GetResourceClient(int id);
11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Returns the id of the renderer that contains this plugin.
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  int GetRendererId();
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Returns the id of the associated render view.
12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  int host_render_view_routing_id() const {
12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return host_render_view_routing_id_;
12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // For windowless plugins, paints the given rectangle into the local buffer.
12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void Paint(const gfx::Rect& rect);
12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Callback from the renderer to let us know that a paint occurred.
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void DidPaint();
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Notification received on a plugin issued resource request creation.
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnResourceCreated(int resource_id, WebPluginResourceClient* client);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieves the IME status from a windowless plug-in and sends it to a
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // renderer process. A renderer process will convert the coordinates from
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // local to the window coordinates and send the converted coordinates to a
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // browser process.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateIMEStatus();
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class SharedTransportDIB : public base::RefCounted<SharedTransportDIB> {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit SharedTransportDIB(TransportDIB* dib);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TransportDIB* dib() { return dib_.get(); }
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class base::RefCounted<SharedTransportDIB>;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~SharedTransportDIB();
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<TransportDIB> dib_;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handler for sending over the paint event to the plugin.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnPaint(const gfx::Rect& damaged_rect);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateCanvasFromHandle(const TransportDIB::Handle& dib_handle,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const gfx::Rect& window_rect,
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              skia::RefPtr<SkCanvas>* canvas);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void CreateDIBAndCGContextFromHandle(
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const TransportDIB::Handle& dib_handle,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& window_rect,
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scoped_ptr<TransportDIB>* dib_out,
168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::ScopedCFTypeRef<CGContextRef>* cg_context_out);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the shared memory sections where windowless plugins paint.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetWindowlessBuffers(const TransportDIB::Handle& windowless_buffer0,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const TransportDIB::Handle& windowless_buffer1,
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const gfx::Rect& window_rect);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGContextRef windowless_context() const {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return windowless_contexts_[windowless_buffer_index_].get();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  skia::RefPtr<SkCanvas> windowless_canvas() const {
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return windowless_canvases_[windowless_buffer_index_];
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  typedef base::hash_map<int, WebPluginResourceClient*> ResourceClientMap;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ResourceClientMap resource_clients_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<PluginChannel> channel_;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int route_id_;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPObject* window_npobject_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPObject* plugin_element_;
193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebPluginDelegateImpl* delegate_;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect damaged_rect_;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool waiting_for_paint_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The url of the main frame hosting the plugin.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL page_url_;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Variables used for desynchronized windowless plugin painting. See note in
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // webplugin_delegate_proxy.h for how this works. The two sets of windowless_*
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // fields are for the front-buffer and back-buffer of a buffer flipping system
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and windowless_buffer_index_ identifies which set we are using as the
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // back-buffer at any given time.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int windowless_buffer_index_;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TransportDIB> windowless_dibs_[2];
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::ScopedCFTypeRef<CGContextRef> windowless_contexts_[2];
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<WebPluginAcceleratedSurfaceProxy> accelerated_surface_;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  skia::RefPtr<SkCanvas> windowless_canvases_[2];
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Contains the routing id of the host render view.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int host_render_view_routing_id_;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<WebPluginProxy> weak_factory_;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PLUGIN_WEBPLUGIN_PROXY_H_
222