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