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/sequenced_task_runner_helpers.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/mouse_lock_dispatcher.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_impl.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCompositionUnderline.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDragStatus.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebNode.h"
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebWidget.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginHostMsg_ResizeGuest_Params;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct FrameMsg_BuffersSwapped_Params;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass BrowserPluginDelegate;
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ChildFrameCompositingHelper;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPluginManager;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockBrowserPlugin;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT BrowserPlugin :
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    NON_EXPORTED_BASE(public blink::WebPlugin),
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public MouseLockDispatcher::LockTarget {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static BrowserPlugin* GetFromNode(blink::WebNode& node);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderViewImpl* render_view() const { return render_view_.get(); }
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int render_view_routing_id() const { return render_view_routing_id_; }
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  int browser_plugin_instance_id() const { return browser_plugin_instance_id_; }
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool attached() const { return attached_; }
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool ready() const { return attached_ || attach_pending_; }
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  BrowserPluginManager* browser_plugin_manager() const {
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return browser_plugin_manager_.get();
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool OnMessageReceived(const IPC::Message& msg);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Update Browser Plugin's DOM Node attribute |attribute_name| with the value
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |attribute_value|.
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateDOMAttribute(const std::string& attribute_name,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          const std::string& attribute_value);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns whether the guest process has crashed.
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool guest_crashed() const { return guest_crashed_; }
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Informs the guest of an updated focus state.
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateGuestFocusState();
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates whether the guest should be focused.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ShouldGuestBeFocused() const;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Embedder's device scale factor changed, we need to update the guest
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // renderer.
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void UpdateDeviceScaleFactor();
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // A request to enable hardware compositing.
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void EnableCompositing(bool enable);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Provided that a guest instance ID has been allocated, this method attaches
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // this BrowserPlugin instance to that guest.
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void Attach();
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Notify the plugin about a compositor commit so that frame ACKs could be
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // sent, if needed.
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void DidCommitCompositorFrame();
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns whether a message should be forwarded to BrowserPlugin.
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool ShouldForwardToBrowserPlugin(const IPC::Message& message);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // blink::WebPlugin implementation.
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebPluginContainer* container() const OVERRIDE;
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool initialize(blink::WebPluginContainer* container) OVERRIDE;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void destroy() OVERRIDE;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool supportsKeyboardFocus() const OVERRIDE;
84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual bool supportsEditCommands() const OVERRIDE;
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool supportsInputMethod() const OVERRIDE;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool canProcessDrag() const OVERRIDE;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void paint(
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebCanvas* canvas,
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebRect& rect) OVERRIDE;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void updateGeometry(
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebRect& frame_rect,
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebRect& clip_rect,
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebVector<blink::WebRect>& cut_outs_rects,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool is_visible) OVERRIDE;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void updateFocus(bool focused) OVERRIDE;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void updateVisibility(bool visible) OVERRIDE;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool acceptsInputEvents() OVERRIDE;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool handleInputEvent(
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebInputEvent& event,
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebCursorInfo& cursor_info) OVERRIDE;
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool handleDragStatusUpdate(blink::WebDragStatus drag_status,
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                      const blink::WebDragData& drag_data,
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                      blink::WebDragOperationsMask mask,
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                      const blink::WebPoint& position,
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                      const blink::WebPoint& screen) OVERRIDE;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void didReceiveResponse(
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLResponse& response) OVERRIDE;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void didReceiveData(const char* data, int data_length) OVERRIDE;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void didFinishLoading() OVERRIDE;
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void didFailLoading(const blink::WebURLError& error) OVERRIDE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void didFinishLoadingFrameRequest(
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURL& url,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* notify_data) OVERRIDE;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void didFailLoadingFrameRequest(
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURL& url,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* notify_data,
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLError& error) OVERRIDE;
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool executeEditCommand(const blink::WebString& name) OVERRIDE;
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool executeEditCommand(const blink::WebString& name,
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  const blink::WebString& value) OVERRIDE;
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool setComposition(
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebString& text,
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebVector<blink::WebCompositionUnderline>& underlines,
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int selectionStart,
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int selectionEnd) OVERRIDE;
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool confirmComposition(
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebString& text,
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      blink::WebWidget::ConfirmCompositionBehavior selectionBehavior) OVERRIDE;
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void extendSelectionAndDelete(int before, int after) OVERRIDE;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // MouseLockDispatcher::LockTarget implementation.
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnLockMouseACK(bool succeeded) OVERRIDE;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnMouseLockLost() OVERRIDE;
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HandleMouseLockedInputEvent(
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          const blink::WebMouseEvent& event) OVERRIDE;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class base::DeleteHelper<BrowserPlugin>;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only the manager is allowed to create a BrowserPlugin.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class BrowserPluginManagerImpl;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class MockBrowserPluginManager;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For unit/integration tests.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class MockBrowserPlugin;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A BrowserPlugin object is a controller that represents an instance of a
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // browser plugin within the embedder renderer process. Once a BrowserPlugin
148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // does an initial navigation or is attached to a newly created guest, it
14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // acquires a browser_plugin_instance_id as well. The guest instance ID
15003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // uniquely identifies a guest WebContents that's hosted by this
15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // BrowserPlugin.
152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  BrowserPlugin(RenderViewImpl* render_view,
153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                blink::WebFrame* frame,
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                scoped_ptr<BrowserPluginDelegate> delegate);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowserPlugin();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int width() const { return plugin_rect_.width(); }
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int height() const { return plugin_rect_.height(); }
160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Size plugin_size() const { return plugin_rect_.size(); }
161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect plugin_rect() const { return plugin_rect_; }
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float GetDeviceScaleFactor() const;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void ShowSadGraphic();
1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Populates BrowserPluginHostMsg_ResizeGuest_Params with resize state.
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void PopulateResizeGuestParameters(
169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const gfx::Size& view_size,
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      BrowserPluginHostMsg_ResizeGuest_Params* params);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // IPC message handlers.
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Please keep in alphabetical order.
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnAdvanceFocus(int instance_id, bool reverse);
17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void OnAttachACK(int browser_plugin_instance_id);
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnCompositorFrameSwapped(const IPC::Message& message);
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnCopyFromCompositingSurface(int instance_id,
178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    int request_id,
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    gfx::Rect source_rect,
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    gfx::Size dest_size);
1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void OnGuestGone(int instance_id);
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnSetContentsOpaque(int instance_id, bool opaque);
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSetCursor(int instance_id, const WebCursor& cursor);
184ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void OnSetMouseLock(int instance_id, bool enable);
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnShouldAcceptTouchEvents(int instance_id, bool accept);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // This indicates whether this BrowserPlugin has been attached to a
1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // WebContents.
1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool attached_;
19003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool attach_pending_;
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const base::WeakPtr<RenderViewImpl> render_view_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We cache the |render_view_|'s routing ID because we need it on destruction.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the |render_view_| is destroyed before the BrowserPlugin is destroyed
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // then we will attempt to access a NULL pointer.
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int render_view_routing_id_;
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebPluginContainer* container_;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect plugin_rect_;
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  float last_device_scale_factor_;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Bitmap for crashed plugin. Lazily initialized, non-owning pointer.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkBitmap* sad_guest_;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool guest_crashed_;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool plugin_focused_;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tracks the visibility of the browser plugin regardless of the whole
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // embedder RenderView's visibility.
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool visible_;
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebCursor cursor_;
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
209ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool mouse_locked_;
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // BrowserPlugin outlives RenderViewImpl in Chrome Apps and so we need to
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // store the BrowserPlugin's BrowserPluginManager in a member variable to
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // avoid accessing the RenderViewImpl.
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const scoped_refptr<BrowserPluginManager> browser_plugin_manager_;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Used for HW compositing.
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<ChildFrameCompositingHelper> compositing_helper_;
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // URL for the embedder frame.
22003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  int browser_plugin_instance_id_;
22103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Indicates whether the guest content is opaque.
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool contents_opaque_;
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<EditCommand> edit_commands_;
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<BrowserPluginDelegate> delegate_;
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Weak factory used in v8 |MakeWeak| callback, since the v8 callback might
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // get called after BrowserPlugin has been destroyed.
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::WeakPtrFactory<BrowserPlugin> weak_ptr_factory_;
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserPlugin);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_
239