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