browser_plugin.h revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 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_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPlugin.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/process_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner_helpers.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/shared_memory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/browser_plugin/browser_plugin_message_enums.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_backing_store.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_bindings.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/mouse_lock_dispatcher.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_impl.h" 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDragStatus.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginHostMsg_AutoSize_Params; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginHostMsg_ResizeGuest_Params; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct BrowserPluginMsg_Attach_ACK_Params; 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct BrowserPluginMsg_BuffersSwapped_Params; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginMsg_UpdateRect_Params; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserPluginCompositingHelper; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPluginManager; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockBrowserPlugin; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT BrowserPlugin : 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NON_EXPORTED_BASE(public WebKit::WebPlugin), 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public MouseLockDispatcher::LockTarget { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewImpl* render_view() const { return render_view_.get(); } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int render_view_routing_id() const { return render_view_routing_id_; } 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int guest_instance_id() const { return guest_instance_id_; } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int instance_id() const { return instance_id_; } 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static BrowserPlugin* FromContainer(WebKit::WebPluginContainer* container); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OnMessageReceived(const IPC::Message& msg); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Update Browser Plugin's DOM Node attribute |attribute_name| with the value 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |attribute_value|. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateDOMAttribute(const std::string& attribute_name, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& attribute_value); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the DOM Node attribute with the name |attribute_name|. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveDOMAttribute(const std::string& attribute_name); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get Browser Plugin's DOM Node attribute |attribute_name|'s value. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetDOMAttributeValue(const std::string& attribute_name) const; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Checks if the attribute |attribute_name| exists in the DOM. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasDOMAttribute(const std::string& attribute_name) const; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the name attribute value. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetNameAttribute() const; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Parse the name attribute value. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ParseNameAttribute(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the src attribute value of the BrowserPlugin instance. 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetSrcAttribute() const; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Parse the src attribute value of the BrowserPlugin instance. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ParseSrcAttribute(std::string* error_message); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the autosize attribute value. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetAutoSizeAttribute() const; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Parses the autosize attribute value. 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ParseAutoSizeAttribute(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the maxheight attribute value. 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetMaxHeightAttribute() const; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the maxwidth attribute value. 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetMaxWidthAttribute() const; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the minheight attribute value. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetMinHeightAttribute() const; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the minwidth attribute value. 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetMinWidthAttribute() const; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Parse the minwidth, maxwidth, minheight, and maxheight attribute values. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ParseSizeContraintsChanged(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The partition identifier string is stored as UTF-8. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetPartitionAttribute() const; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This method can be successfully called only before the first navigation for 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // this instance of BrowserPlugin. If an error occurs, the |error_message| is 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // set appropriately to indicate the failure reason. 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ParsePartitionAttribute(std::string* error_message); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if the partition attribute can be removed. 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool CanRemovePartitionAttribute(std::string* error_message); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool InAutoSizeBounds(const gfx::Size& size) const; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the guest's DOMWindow proxy. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NPObject* GetContentWindow() const; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether the guest process has crashed. 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool guest_crashed() const { return guest_crashed_; } 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Returns whether this BrowserPlugin has requested an instance ID. 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool HasNavigated() const; 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Returns whether this BrowserPlugin has allocated an instance ID. 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool HasGuestInstanceID() const; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Attaches the window identified by |window_id| to the the given node 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // encapsulating a BrowserPlugin. 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool AttachWindowTo(const WebKit::WebNode& node, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int window_id); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Informs the guest of an updated focus state. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateGuestFocusState(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates whether the guest should be focused. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ShouldGuestBeFocused() const; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Embedder's device scale factor changed, we need to update the guest 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // renderer. 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateDeviceScaleFactor(float device_scale_factor); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A request to enable hardware compositing. 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void EnableCompositing(bool enable); 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // A request from content client to track lifetime of a JavaScript object. 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This is used to track permission request objects, and new window API 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // window objects. 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void TrackObjectLifetime(const NPVariant* request, int id); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if |point| lies within the bounds of the plugin rectangle. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Not OK to use this function for making security-sensitive decision since it 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // can return false positives when the plugin has rotation transformation 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // applied. 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool InBounds(const gfx::Point& point) const; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point ToLocalCoordinates(const gfx::Point& point) const; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called by browser plugin binding. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnEmbedderDecidedPermission(int request_id, bool allow); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Called when a guest instance ID has been allocated by the browser process. 1369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void OnInstanceIDAllocated(int guest_instance_id); 1379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Provided that a guest instance ID has been allocated, this method attaches 1389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // this BrowserPlugin instance to that guest. |extra_params| are parameters 1399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // passed in by the content embedder to the browser process. 1409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void Attach(scoped_ptr<base::DictionaryValue> extra_params); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Notify the plugin about a compositor commit so that frame ACKs could be 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // sent, if needed. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DidCommitCompositorFrame(); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether a message should be forwarded to BrowserPlugin. 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool ShouldForwardToBrowserPlugin(const IPC::Message& message); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit::WebPlugin implementation. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebKit::WebPluginContainer* container() const OVERRIDE; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool initialize(WebKit::WebPluginContainer* container) OVERRIDE; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void destroy() OVERRIDE; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NPObject* scriptableObject() OVERRIDE; 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual struct _NPP* pluginNPP() OVERRIDE; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool supportsKeyboardFocus() const OVERRIDE; 156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool supportsEditCommands() const OVERRIDE; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool canProcessDrag() const OVERRIDE; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void paint( 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebCanvas* canvas, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebRect& rect) OVERRIDE; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void updateGeometry( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebRect& frame_rect, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebRect& clip_rect, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebVector<WebKit::WebRect>& cut_outs_rects, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_visible) OVERRIDE; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void updateFocus(bool focused) OVERRIDE; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void updateVisibility(bool visible) OVERRIDE; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool acceptsInputEvents() OVERRIDE; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool handleInputEvent( 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebInputEvent& event, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebCursorInfo& cursor_info) OVERRIDE; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool handleDragStatusUpdate(WebKit::WebDragStatus drag_status, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebDragData& drag_data, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebDragOperationsMask mask, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebPoint& position, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebPoint& screen) OVERRIDE; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didReceiveResponse( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURLResponse& response) OVERRIDE; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didReceiveData(const char* data, int data_length) OVERRIDE; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didFinishLoading() OVERRIDE; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didFailLoading(const WebKit::WebURLError& error) OVERRIDE; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didFinishLoadingFrameRequest( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURL& url, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* notify_data) OVERRIDE; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void didFailLoadingFrameRequest( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURL& url, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* notify_data, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebURLError& error) OVERRIDE; 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool executeEditCommand(const WebKit::WebString& name) OVERRIDE; 190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool executeEditCommand(const WebKit::WebString& name, 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const WebKit::WebString& value) OVERRIDE; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // MouseLockDispatcher::LockTarget implementation. 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnLockMouseACK(bool succeeded) OVERRIDE; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMouseLockLost() OVERRIDE; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool HandleMouseLockedInputEvent( 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WebMouseEvent& event) OVERRIDE; 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::DeleteHelper<BrowserPlugin>; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only the manager is allowed to create a BrowserPlugin. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class BrowserPluginManagerImpl; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class MockBrowserPluginManager; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For unit/integration tests. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class MockBrowserPlugin; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A BrowserPlugin object is a controller that represents an instance of a 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser plugin within the embedder renderer process. Each BrowserPlugin 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // within a RenderView has a unique instance_id that is used to track per- 211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // BrowserPlugin state in the browser process. Once a BrowserPlugin does 212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // an initial navigation or is attached to a newly created guest, it acquires 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // a guest_instance_id as well. The guest instance ID uniquely identifies a 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // guest WebContents that's hosted by this BrowserPlugin. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPlugin( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewImpl* render_view, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebFrame* frame, 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const WebKit::WebPluginParams& params, 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int instance_id); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BrowserPlugin(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int width() const { return plugin_rect_.width(); } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int height() const { return plugin_rect_.height(); } 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Rect plugin_rect() { return plugin_rect_; } 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the Max Height value used for auto size. 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetAdjustedMaxHeight() const; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the Max Width value used for auto size. 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetAdjustedMaxWidth() const; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the Min Height value used for auto size. 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetAdjustedMinHeight() const; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the Min Width value used for auto size. 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetAdjustedMinWidth() const; 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPluginManager* browser_plugin_manager() const { 235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return browser_plugin_manager_.get(); 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Virtual to allow for mocking in tests. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual float GetDeviceScaleFactor() const; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void ShowSadGraphic(); 2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses the attributes of the browser plugin from the element's attributes 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and sets them appropriately. 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ParseAttributes(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Triggers the event-listeners for |event_name|. Note that the function 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // frees all the values in |props|. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TriggerEvent(const std::string& event_name, 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<std::string, base::Value*>* props); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates and maps a shared damage buffer. 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::SharedMemory* CreateDamageBuffer( 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const size_t size, 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SharedMemoryHandle* shared_memory_handle); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Swaps out the |current_damage_buffer_| with the |pending_damage_buffer_|. 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SwapDamageBuffers(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Populates BrowserPluginHostMsg_ResizeGuest_Params with resize state and 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // allocates a new |pending_damage_buffer_| if in software rendering mode. 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PopulateResizeGuestParameters( 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPluginHostMsg_ResizeGuest_Params* params, 26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const gfx::Rect& view_size); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Populates BrowserPluginHostMsg_AutoSize_Params object with autosize state. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PopulateAutoSizeParameters( 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPluginHostMsg_AutoSize_Params* params, bool current_auto_size); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populates both AutoSize and ResizeGuest parameters based on the current 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // autosize state. 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetDamageBufferWithSizeParams( 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPluginHostMsg_AutoSize_Params* auto_size_params, 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPluginHostMsg_ResizeGuest_Params* resize_guest_params); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Informs the guest of an updated autosize state. 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateGuestAutoSizeState(bool current_auto_size); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Informs the BrowserPlugin that guest has changed its size in autosize mode. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SizeChangedDueToAutoSize(const gfx::Size& old_view_size); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates whether a damage buffer was used by the guest process for the 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // provided |params|. 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool UsesDamageBuffer( 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginMsg_UpdateRect_Params& params); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates whether the |pending_damage_buffer_| was used to copy over pixels 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // given the provided |params|. 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool UsesPendingDamageBuffer( 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginMsg_UpdateRect_Params& params); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddPermissionRequestToMap(int request_id, 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPluginPermissionType type); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Informs the BrowserPlugin that the guest's permission request has been 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // allowed or denied by the embedder. 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RespondPermission(BrowserPluginPermissionType permission_type, 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int request_id, 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Handles the response to the pointerLock permission request. 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RespondPermissionPointerLock(bool allow); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the request with id |request_id| is pending then informs the 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BrowserPlugin that the guest's permission request has been allowed or 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // denied by the embedder. 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RespondPermissionIfRequestIsPending(int request_id, bool allow); 3077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Called when the tracked object of |id| ID becomes unreachable in 3097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // JavaScript. 3107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void OnTrackedObjectGarbageCollected(int id); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // V8 garbage collection callback for |object|. 3127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void WeakCallbackForTrackedObject(v8::Isolate* isolate, 313868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) v8::Persistent<v8::Value>* object, 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void* param); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // IPC message handlers. 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Please keep in alphabetical order. 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnAdvanceFocus(int instance_id, bool reverse); 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnAttachACK(int instance_id, 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BrowserPluginMsg_Attach_ACK_Params& ack_params); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnBuffersSwapped(int instance_id, 322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const BrowserPluginMsg_BuffersSwapped_Params& params); 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnCompositorFrameSwapped(const IPC::Message& message); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnGuestContentWindowReady(int instance_id, 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int content_window_routing_id); 3267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void OnGuestGone(int instance_id); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnGuestResponsive(int instance_id, int process_id); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnGuestUnresponsive(int instance_id, int process_id); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Requests permission from the embedder. 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRequestPermission(int instance_id, 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPluginPermissionType permission_type, 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int request_id, 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& request_info); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetCursor(int instance_id, const WebCursor& cursor); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShouldAcceptTouchEvents(int instance_id, bool accept); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUnlockMouse(int instance_id); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdatedName(int instance_id, const std::string& name); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateRect(int instance_id, 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginMsg_UpdateRect_Params& params); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // This is the browser-process-allocated instance ID that uniquely identifies 342868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // a guest WebContents. 343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int guest_instance_id_; 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // This is a render-process-allocated instance ID that uniquely identifies a 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // BrowserPlugin. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int instance_id_; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<RenderViewImpl> render_view_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We cache the |render_view_|'s routing ID because we need it on destruction. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the |render_view_| is destroyed before the BrowserPlugin is destroyed 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then we will attempt to access a NULL pointer. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_routing_id_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebPluginContainer* container_; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserPluginBindings> bindings_; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserPluginBackingStore> backing_store_; 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::SharedMemory> current_damage_buffer_; 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::SharedMemory> pending_damage_buffer_; 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 damage_buffer_sequence_id_; 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool resize_ack_received_; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect plugin_rect_; 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float last_device_scale_factor_; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bitmap for crashed plugin. Lazily initialized, non-owning pointer. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap* sad_guest_; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool guest_crashed_; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserPluginHostMsg_ResizeGuest_Params> pending_resize_params_; 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool auto_size_ack_pending_; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string storage_partition_id_; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool persist_storage_; 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool valid_partition_id_; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int content_window_routing_id_; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool plugin_focused_; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks the visibility of the browser plugin regardless of the whole 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // embedder RenderView's visibility. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool visible_; 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebCursor cursor_; 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size last_view_size_; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool size_changed_in_flight_; 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool before_first_navigation_; 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Each permission request item in the map is a pair of request id and 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // permission type. 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::map<int, BrowserPluginPermissionType> PendingPermissionRequests; 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PendingPermissionRequests pending_permission_requests_; 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef std::pair<int, base::WeakPtr<BrowserPlugin> > TrackedV8ObjectID; 3877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::map<int, TrackedV8ObjectID*> tracked_v8_objects_; 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BrowserPlugin outlives RenderViewImpl in Chrome Apps and so we need to 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // store the BrowserPlugin's BrowserPluginManager in a member variable to 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // avoid accessing the RenderViewImpl. 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<BrowserPluginManager> browser_plugin_manager_; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used for HW compositing. 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool compositing_enabled_; 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<BrowserPluginCompositingHelper> compositing_helper_; 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 39890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Used to identify the plugin to WebBindings. 39990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<struct _NPP> npp_; 40090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Weak factory used in v8 |MakeWeak| callback, since the v8 callback might 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // get called after BrowserPlugin has been destroyed. 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<BrowserPlugin> weak_ptr_factory_; 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::vector<EditCommand> edit_commands_; 406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserPlugin); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_ 413