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