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_handle.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/memory/shared_memory.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/child/npapi/webplugin.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.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)#if defined(USE_X11) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/x/x11_util.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gpu_preference.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/surface/transport_dib.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginChannel; 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass WebPluginDelegateImpl; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPluginAcceleratedSurfaceProxy; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is an implementation of WebPlugin that proxies all calls to the 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// renderer. 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass WebPluginProxy : public WebPlugin { 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) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether input events should be sent to the delegate. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetAcceptsInputEvents(bool accepts) OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WillDestroyWindow(gfx::PluginWindowHandle window) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetWindowlessData(HANDLE pump_messages_event, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeViewId dummy_activation_window); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelResource(unsigned long id) OVERRIDE; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Invalidate() OVERRIDE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InvalidateRect(const gfx::Rect& rect) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NPObject* GetWindowScriptNPObject() OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NPObject* GetPluginElement() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool FindProxyForUrl(const GURL& url, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* proxy_list) OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCookie(const GURL& url, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie) OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetCookies(const GURL& url, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class-specific methods 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a WebPluginResourceClient object given its id, or NULL if no 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // object with that id exists. 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebPluginResourceClient* GetResourceClient(int id); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the id of the renderer that contains this plugin. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetRendererId(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the id of the associated render view. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int host_render_view_routing_id() const { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_render_view_routing_id_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For windowless plugins, paints the given rectangle into the local buffer. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Paint(const gfx::Rect& rect); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback from the renderer to let us know that a paint occurred. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidPaint(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notification received on a plugin issued resource request creation. 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void OnResourceCreated(int resource_id, WebPluginResourceClient* client); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HandleURLRequest(const char* url, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* method, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* target, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* buf, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int len, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int notify_id, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool popups_allowed, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool notify_redirects) OVERRIDE; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateGeometry(const gfx::Rect& window_rect, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& clip_rect, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TransportDIB::Handle& windowless_buffer0, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TransportDIB::Handle& windowless_buffer1, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int windowless_buffer_index); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelDocumentLoad() OVERRIDE; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitiateHTTPRangeRequest( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* url, const char* range_info, int range_request_id) OVERRIDE; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetDeferResourceLoading(unsigned long resource_id, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool defer) OVERRIDE; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsOffTheRecord() OVERRIDE; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ResourceClientDeleted( 121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebPluginResourceClient* resource_client) OVERRIDE; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void FocusChanged(bool focused) OVERRIDE; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartIme() OVERRIDE; 126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual WebPluginAcceleratedSurface* 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAcceleratedSurface(gfx::GpuPreference gpu_preference) OVERRIDE; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //---------------------------------------------------------------------- 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accelerated plugin implementation which renders via the compositor. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer, and from there the GPU process, that the plugin 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is using accelerated rather than software rendering. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedPluginEnabledRendering() OVERRIDE; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer, and from there the GPU process, that the plugin 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // allocated the given IOSurface to be used as its backing store. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedPluginAllocatedIOSurface(int32 width, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 height, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 surface_id) OVERRIDE; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedPluginSwappedIOSurface() OVERRIDE; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void URLRedirectResponse(bool allow, int resource_id) OVERRIDE; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the IME status from a windowless plug-in and sends it to a 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer process. A renderer process will convert the coordinates from 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // local to the window coordinates and send the converted coordinates to a 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser process. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateIMEStatus(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class SharedTransportDIB : public base::RefCounted<SharedTransportDIB> { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SharedTransportDIB(TransportDIB* dib); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TransportDIB* dib() { return dib_.get(); } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCounted<SharedTransportDIB>; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~SharedTransportDIB(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TransportDIB> dib_; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Send(IPC::Message* msg); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handler for sending over the paint event to the plugin. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnPaint(const gfx::Rect& damaged_rect); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateCanvasFromHandle(const TransportDIB::Handle& dib_handle, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& window_rect, 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::RefPtr<SkCanvas>* canvas); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateDIBAndCGContextFromHandle( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TransportDIB::Handle& dib_handle, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& window_rect, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TransportDIB>* dib_out, 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ScopedCFTypeRef<CGContextRef>* cg_context_out); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateDIBAndCanvasFromHandle( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TransportDIB::Handle& dib_handle, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& window_rect, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SharedTransportDIB>* dib_out, 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::RefPtr<SkCanvas>* canvas); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateShmPixmapFromDIB( 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TransportDIB* dib, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& window_rect, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XID* pixmap_out); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the shared memory sections where windowless plugins paint. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetWindowlessBuffers(const TransportDIB::Handle& windowless_buffer0, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TransportDIB::Handle& windowless_buffer1, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& window_rect); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CGContextRef windowless_context() const { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return windowless_contexts_[windowless_buffer_index_].get(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::RefPtr<SkCanvas> windowless_canvas() const { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return windowless_canvases_[windowless_buffer_index_]; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XID windowless_shm_pixmap() const { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return windowless_shm_pixmaps_[windowless_buffer_index_]; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 216ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch typedef base::hash_map<int, WebPluginResourceClient*> ResourceClientMap; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceClientMap resource_clients_; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<PluginChannel> channel_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int route_id_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NPObject* window_npobject_; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NPObject* plugin_element_; 223ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch WebPluginDelegateImpl* delegate_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect damaged_rect_; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool waiting_for_paint_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The url of the main frame hosting the plugin. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL page_url_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Variables used for desynchronized windowless plugin painting. See note in 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // webplugin_delegate_proxy.h for how this works. The two sets of windowless_* 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fields are for the front-buffer and back-buffer of a buffer flipping system 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and windowless_buffer_index_ identifies which set we are using as the 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // back-buffer at any given time. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int windowless_buffer_index_; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TransportDIB> windowless_dibs_[2]; 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ScopedCFTypeRef<CGContextRef> windowless_contexts_[2]; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WebPluginAcceleratedSurfaceProxy> accelerated_surface_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::RefPtr<SkCanvas> windowless_canvases_[2]; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SharedTransportDIB> windowless_dibs_[2]; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we can use SHM pixmaps for windowless plugin painting or not. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_shm_pixmap_; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SHM pixmaps for windowless plugin painting. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XID windowless_shm_pixmaps_[2]; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains the routing id of the host render view. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int host_render_view_routing_id_; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<WebPluginProxy> weak_factory_; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PLUGIN_WEBPLUGIN_PROXY_H_ 261