browser_plugin_guest.h revision a02191e04bc25c4935f804f2c080ae28663d096d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A BrowserPluginGuest is the browser side of a browser <--> embedder 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// renderer channel. A BrowserPlugin (a WebPlugin) is on the embedder 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// renderer side of browser <--> embedder renderer communication. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// BrowserPluginGuest lives on the UI thread of the browser process. Any 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// messages about the guest render process that the embedder might be interested 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// in receiving should be listened for here. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// BrowserPluginGuest is a WebContentsDelegate and WebContentsObserver for the 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// guest WebContents. BrowserPluginGuest operates under the assumption that the 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// guest will be accessible through only one RenderViewHost for the lifetime of 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the guest WebContents. Thus, cross-process navigation is not supported. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include <queue> 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/id_map.h" 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/shared_memory.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/values.h" 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/common/edit_command.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/port/common/input_event_ack_state.h" 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/browser/browser_plugin_guest_delegate.h" 32a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/browser/javascript_dialog_manager.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 35c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "content/public/common/browser_plugin_permission_type.h" 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCompositionUnderline.h" 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDragOperation.h" 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDragStatus.h" 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ime/text_input_mode.h" 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ime/text_input_type.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/surface/transport_dib.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginHostMsg_AutoSize_Params; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct BrowserPluginHostMsg_Attach_Params; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginHostMsg_ResizeGuest_Params; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct FrameHostMsg_BuffersSwappedACK_Params; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct FrameHostMsg_CompositorFrameSwappedACK_Params; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct FrameHostMsg_ReclaimCompositorResources_Params; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ViewHostMsg_CreateWindow_Params; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ViewHostMsg_ShowPopup_Params; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_UpdateRect_Params; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace cc { 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CompositorFrameAck; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebInputEvent; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gfx { 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Range; 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gpu { 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct Mailbox; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPluginHostFactory; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPluginEmbedder; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserPluginGuestManager; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderProcessHost; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RenderWidgetHostView; 800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class SiteInstance; 8123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class WebCursor; 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct DropData; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MediaStreamRequest; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A browser plugin guest provides functionality for WebContents to operate in 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the guest role and implements guest-specific overrides for ViewHostMsg_* 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// messages. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// When a guest is initially created, it is in an unattached state. That is, 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// it is not visible anywhere and has no embedder WebContents assigned. 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A BrowserPluginGuest is said to be "attached" if it has an embedder. 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A BrowserPluginGuest can also create a new unattached guest via 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CreateNewWindow. The newly created guest will live in the same partition, 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// which means it can share storage and can script this guest. 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CONTENT_EXPORT BrowserPluginGuest 96a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch : public JavaScriptDialogManager, 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public WebContentsDelegate, 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public WebContentsObserver { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BrowserPluginGuest(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // The WebContents passed into the factory method here has not been 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // initialized yet and so it does not yet hold a SiteInstance. 1040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // BrowserPluginGuest must be constructed and installed into a WebContents 1050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // prior to its initialization because WebContents needs to determine what 1060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // type of WebContentsView to construct on initialization. The content 1070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // embedder needs to be aware of |guest_site_instance| on the guest's 1080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // construction and so we pass it in here. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static BrowserPluginGuest* Create( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int instance_id, 1110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SiteInstance* guest_site_instance, 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebContentsImpl* web_contents, 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> extra_params); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static BrowserPluginGuest* CreateWithOpener( 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int instance_id, 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool has_render_view, 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebContentsImpl* web_contents, 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserPluginGuest* opener); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns a WeakPtr to this BrowserPluginGuest. 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::WeakPtr<BrowserPluginGuest> AsWeakPtr(); 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Called when the embedder WebContents is destroyed to give the 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // BrowserPluginGuest an opportunity to clean up after itself. 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void EmbedderDestroyed(); 127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Called when the embedder WebContents changes visibility. 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void EmbedderVisibilityChanged(bool visible); 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Destroys the guest WebContents and all its associated state, including 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // this BrowserPluginGuest, and its new unattached windows. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Destroy(); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the identifier that uniquely identifies a browser plugin guest 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // within an embedder. 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int instance_id() const { return instance_id_; } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OnMessageReceivedFromEmbedder(const IPC::Message& message); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Initialize(const BrowserPluginHostMsg_Attach_Params& params, 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContentsImpl* embedder_web_contents); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsImpl* embedder_web_contents() const { 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return embedder_web_contents_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the embedder's RenderWidgetHostView if it is available. 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns NULL otherwise. 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidgetHostView* GetEmbedderRenderWidgetHostView(); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool focused() const { return focused_; } 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool visible() const { return guest_visible_; } 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void clear_damage_buffer() { damage_buffer_.reset(); } 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool is_in_destruction() { return is_in_destruction_; } 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) BrowserPluginGuest* opener() const { return opener_.get(); } 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Returns whether the mouse pointer was unlocked. 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool UnlockMouseIfNecessary(const NativeWebKeyboardEvent& event); 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateVisibility(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CopyFromCompositingSurface( 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Rect src_subrect, 166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Size dst_size, 167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::Callback<void(bool, const SkBitmap&)>& callback); 168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebContentsObserver implementation. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidCommitProvisionalLoadForFrame( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_unique_name, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageTransition transition_type, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host) OVERRIDE; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStopLoading(RenderViewHost* render_view_host) OVERRIDE; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RenderViewReady() OVERRIDE; 1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebContentsDelegate implementation. 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool AddMessageToConsole(WebContents* source, 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32 level, 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32 line_no, 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& source_id) OVERRIDE; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If a new window is created with target="_blank" and rel="noreferrer", then 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // this method is called, indicating that the new WebContents is ready to be 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // attached. 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddNewContents(WebContents* source, 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_contents, 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WindowOpenDisposition disposition, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& initial_pos, 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool user_gesture, 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* was_blocked) OVERRIDE; 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CanDownload(RenderViewHost* render_view_host, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int request_id, 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& request_method, 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Callback<void(bool)>& callback) OVERRIDE; 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void LoadProgressChanged(WebContents* source, 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) double progress) OVERRIDE; 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CloseContents(WebContents* source) OVERRIDE; 205a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual JavaScriptDialogManager* GetJavaScriptDialogManager() OVERRIDE; 206e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual ColorChooser* OpenColorChooser( 207e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch WebContents* web_contents, 208e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SkColor color, 209e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::vector<ColorSuggestion>& suggestions) OVERRIDE; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleContextMenu(const ContextMenuParams& params) OVERRIDE; 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void HandleKeyboardEvent( 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebContents* source, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const NativeWebKeyboardEvent& event) OVERRIDE; 214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void FindReply(WebContents* contents, 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int request_id, 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int number_of_matches, 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::Rect& selection_rect, 218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int active_match_ordinal, 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool final_update) OVERRIDE; 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebContents* OpenURLFromTab(WebContents* source, 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const OpenURLParams& params) OVERRIDE; 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void WebContentsCreated(WebContents* source_contents, 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int opener_render_frame_id, 224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_name, 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& target_url, 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* new_contents) OVERRIDE; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RendererUnresponsive(WebContents* source) OVERRIDE; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RendererResponsive(WebContents* source) OVERRIDE; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RunFileChooser(WebContents* web_contents, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChooserParams& params) OVERRIDE; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldFocusPageAfterCrash() OVERRIDE; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RequestMediaAccessPermission( 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents, 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MediaStreamRequest& request, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MediaResponseCallback& callback) OVERRIDE; 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool PreHandleGestureEvent( 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* source, 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebGestureEvent& event) OVERRIDE; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 240a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // JavaScriptDialogManager implementation. 241a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual void RunJavaScriptDialog( 242a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch WebContents* web_contents, 243a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const GURL& origin_url, 244a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const std::string& accept_lang, 245a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch JavaScriptMessageType javascript_message_type, 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message_text, 247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& default_prompt_text, 248a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const DialogClosedCallback& callback, 249a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool* did_suppress_message) OVERRIDE; 250a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual void RunBeforeUnloadDialog( 251a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch WebContents* web_contents, 252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message_text, 253a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch bool is_reload, 254a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch const DialogClosedCallback& callback) OVERRIDE; 255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual bool HandleJavaScriptDialog( 256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) WebContents* web_contents, 257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool accept, 258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16* prompt_override) OVERRIDE; 259a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void CancelActiveAndPendingDialogs( 260a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WebContents* web_contents) OVERRIDE; 261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE; 262a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exposes the protected web_contents() from WebContentsObserver. 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsImpl* GetWebContents(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden in tests. 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetDamageBuffer( 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginHostMsg_ResizeGuest_Params& params); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point GetScreenCoordinates(const gfx::Point& relative_position) const; 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper to send messages to embedder. This methods fills the message with 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the correct routing id. 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden in test implementation since we want to intercept certain 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // messages for testing. 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SendMessageToEmbedder(IPC::Message* msg); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether the guest is attached to an embedder. 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool attached() const { return embedder_web_contents_ != NULL; } 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Attaches this BrowserPluginGuest to the provided |embedder_web_contents| 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and initializes the guest with the provided |params|. Attaching a guest 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to an embedder implies that this guest's lifetime is no longer managed 284d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // by its opener, and it can begin loading resources. |extra_params| are 285d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // parameters passed into BrowserPlugin from JavaScript to be forwarded to 286d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // the content embedder. 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Attach(WebContentsImpl* embedder_web_contents, 288d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) BrowserPluginHostMsg_Attach_Params params, 289d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::DictionaryValue& extra_params); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether BrowserPluginGuest is interested in receiving the given 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |message|. 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool ShouldForwardToBrowserPluginGuest(const IPC::Message& message); 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Rect ToGuestRect(const gfx::Rect& rect); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DragSourceEndedAt(int client_x, int client_y, int screen_x, 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int screen_y, blink::WebDragOperation operation); 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called when the drag started by this guest ends at an OS-level. 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void EndSystemDrag(); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // |this| takes ownership of |delegate|. 3037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void SetDelegate(BrowserPluginGuestDelegate* delegate); 3047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 305c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch void RespondToPermissionRequest(int request_id, 306c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool should_allow, 307c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const std::string& user_input); 308c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Overrides factory for testing. Default (NULL) value indicates regular 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // (non-test) environment. 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static void set_factory_for_testing(BrowserPluginHostFactory* factory) { 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserPluginGuest::factory_ = factory; 313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetZoom(double zoom_factor); 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) class EmbedderWebContentsObserver; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class TestBrowserPluginGuest; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class DownloadRequest; 322a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch class JavaScriptDialogRequest; 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // MediaRequest because of naming conflicts with MediaStreamRequest. 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class MediaRequest; 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class NewWindowRequest; 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class PermissionRequest; 327ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch class PointerLockRequest; 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Tracks the name, and target URL of the new window and whether or not it has 330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // changed since the WebContents has been created and before the new window 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // has been attached to a BrowserPlugin. Once the first navigation commits, we 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // no longer track this information. 333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct NewWindowInfo { 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool changed; 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL url; 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string name; 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NewWindowInfo(const GURL& url, const std::string& name) : 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) changed(false), 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) url(url), 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) name(name) {} 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // BrowserPluginGuest is a WebContentsObserver of |web_contents| and 344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // |web_contents| has to stay valid for the lifetime of BrowserPluginGuest. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPluginGuest(int instance_id, 346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool has_render_view, 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebContentsImpl* web_contents, 348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserPluginGuest* opener); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Destroy unattached new windows that have been opened by this 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BrowserPluginGuest. 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DestroyUnattachedWindows(); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void LoadURLWithParams(const GURL& url, 35568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Referrer& referrer, 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PageTransition transition_type, 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContents* web_contents); 35868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 359558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Returns the |request_id| generated for the |request| provided. 360a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void RequestPermission( 361558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch BrowserPluginPermissionType permission_type, 362558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_refptr<BrowserPluginGuest::PermissionRequest> request, 363558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const base::DictionaryValue& request_info); 364558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 365d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Creates a new guest window, and BrowserPluginGuest that is owned by this 366d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // BrowserPluginGuest. 367d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) BrowserPluginGuest* CreateNewGuestWindow(const OpenURLParams& params); 368d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SharedMemory* damage_buffer() const { return damage_buffer_.get(); } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& damage_view_size() const { return damage_view_size_; } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float damage_buffer_scale_factor() const { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return damage_buffer_scale_factor_; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the damage buffer corresponding to the handle in resize |params|. 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SharedMemory* GetDamageBufferFromEmbedder( 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BrowserPluginHostMsg_ResizeGuest_Params& params); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool InAutoSizeBounds(const gfx::Size& size) const; 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RequestNewWindowPermission(WindowOpenDisposition disposition, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& initial_bounds, 382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool user_gesture, 383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContentsImpl* new_contents); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Message handlers for messages from embedder. 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnCompositorFrameSwappedACK( 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int instance_id, 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameHostMsg_CompositorFrameSwappedACK_Params& params); 390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnCopyFromCompositingSurfaceAck(int instance_id, 391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int request_id, 392a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SkBitmap& bitmap); 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Handles drag events from the embedder. 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When dragging, the drag events go to the embedder first, and if the drag 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // happens on the browser plugin, then the plugin sends a corresponding 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // drag-message to the guest. This routes the drag-message to the guest 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // renderer. 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDragStatusUpdate(int instance_id, 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDragStatus drag_status, 400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const DropData& drop_data, 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDragOperationsMask drag_mask, 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Point& location); 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instructs the guest to execute an edit command decoded in the embedder. 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnExecuteEditCommand(int instance_id, 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& command); 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns compositor resources reclaimed in the embedder to the guest. 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnReclaimCompositorResources( 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int instance_id, 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameHostMsg_ReclaimCompositorResources_Params& params); 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overriden in tests. 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnHandleInputEvent(int instance_id, 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& guest_window_rect, 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebInputEvent* event); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnLockMouse(bool user_gesture, 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool last_unlocked_by_target, 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool privileged); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnLockMouseAck(int instance_id, bool succeeded); 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnNavigateGuest(int instance_id, const std::string& src); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnPluginDestroyed(int instance_id); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Grab the new damage buffer from the embedder, and resize the guest's 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // web contents. 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnResizeGuest(int instance_id, 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginHostMsg_ResizeGuest_Params& params); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overriden in tests. 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnSetFocus(int instance_id, bool focused); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the name of the guest so that other guests in the same partition can 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // access it. 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetName(int instance_id, const std::string& name); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the size state of the guest. 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetSize( 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int instance_id, 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginHostMsg_AutoSize_Params& auto_size_params, 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params); 436868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void OnSetEditCommandsForNextKeyEvent( 437868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int instance_id, 438868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::vector<EditCommand>& edit_commands); 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSetContentsOpaque(int instance_id, bool opaque); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The guest WebContents is visible if both its embedder is visible and 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the browser plugin element is visible. If either one is not then the 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // WebContents is marked as hidden. A hidden WebContents will consume 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // fewer GPU and CPU resources. 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When every WebContents in a RenderProcessHost is hidden, it will lower 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the priority of the process (see RenderProcessHostImpl::WidgetHidden). 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It will also send a message to the guest renderer process to cleanup 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // resources such as dropping back buffers and adjusting memory limits (if in 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // compositing mode, see CCLayerTreeHost::setVisible). 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Additionally, it will slow down Javascript execution and garbage 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // collection. See RenderThreadImpl::IdleHandler (executed when hidden) and 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // RenderThreadImpl::IdleHandlerInForegroundTab (executed when visible). 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetVisibility(int instance_id, bool visible); 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUnlockMouse(); 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUnlockMouseAck(int instance_id); 45890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnUpdateGeometry(int instance_id, const gfx::Rect& view_rect); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateRectACK( 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int instance_id, 461a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool needs_ack, 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginHostMsg_AutoSize_Params& auto_size_params, 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params); 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnTextInputTypeChanged(ui::TextInputType type, 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::TextInputMode input_mode, 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool can_compose_inline); 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnImeSetComposition( 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int instance_id, 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& text, 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<blink::WebCompositionUnderline>& underlines, 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int selection_start, 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int selection_end); 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnImeConfirmComposition( 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int instance_id, 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& text, 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool keep_selection); 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnExtendSelectionAndDelete(int instance_id, int before, int after); 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Overridden in tests. 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnImeCancelComposition(); 481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_MACOSX) || defined(USE_AURA) 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnImeCompositionRangeChanged( 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Range& range, 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<gfx::Rect>& character_bounds); 4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Message handlers for messages from guest. 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnDragStopped(); 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnHandleInputEventAck( 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebInputEvent::Type event_type, 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputEventAckState ack_result); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnHasTouchEventHandlers(bool accept); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetCursor(const WebCursor& cursor); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // On MacOSX popups are painted by the browser process. We handle them here 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // so that they are positioned correctly. 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params); 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowWidget(int route_id, const gfx::Rect& initial_pos); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overriden in tests. 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnTakeFocus(bool reverse); 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateFrameName(int frame_id, 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_top_level, 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name); 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateRect(const ViewHostMsg_UpdateRect_Params& params); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Requests download permission through embedder JavaScript API after 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // retrieving url information from IO thread. 510558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void DidRetrieveDownloadURLFromRequestId( 511558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const std::string& request_method, 512558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const base::Callback<void(bool)>& callback, 513558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const std::string& url); 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 515b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Forwards all messages from the |pending_messages_| queue to the embedder. 516b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void SendQueuedMessages(); 517b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Static factory instance (always NULL for non-test). 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static BrowserPluginHostFactory* factory_; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<EmbedderWebContentsObserver> embedder_web_contents_observer_; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsImpl* embedder_web_contents_; 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An identifier that uniquely identifies a browser plugin guest within an 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // embedder. 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int instance_id_; 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::SharedMemory> damage_buffer_; 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // An identifier that uniquely identifies a damage buffer. 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 damage_buffer_sequence_id_; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t damage_buffer_size_; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size damage_view_size_; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float damage_buffer_scale_factor_; 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float guest_device_scale_factor_; 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect guest_window_rect_; 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect guest_screen_rect_; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta guest_hang_timeout_; 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool focused_; 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool mouse_locked_; 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool pending_lock_request_; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool guest_visible_; 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool guest_opaque_; 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool embedder_visible_; 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string name_; 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool auto_size_enabled_; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size max_auto_size_; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size min_auto_size_; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 548a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Each copy-request is identified by a unique number. The unique number is 549a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // used to keep track of the right callback. 550a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int copy_request_id_; 551a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef base::Callback<void(bool, const SkBitmap&)> CopyRequestCallback; 552a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef std::map<int, const CopyRequestCallback> CopyRequestMap; 553a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) CopyRequestMap copy_request_callbacks_; 554a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 555b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) typedef std::map<BrowserPluginGuest*, NewWindowInfo> PendingWindowMap; 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PendingWindowMap pending_new_windows_; 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::WeakPtr<BrowserPluginGuest> opener_; 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A counter to generate a unique request id for a permission request. 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We only need the ids to be unique for a given BrowserPluginGuest. 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int next_permission_request_id_; 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A map to store relevant info for a request keyed by the request's id. 563558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch typedef std::map<int, scoped_refptr<PermissionRequest> > RequestMap; 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RequestMap permission_request_map_; 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Indicates that this BrowserPluginGuest has associated renderer-side state. 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is used to determine whether or not to create a new RenderView when 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // this guest is attached. 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool has_render_view_; 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Last seen size of guest contents (by OnUpdateRect). 5723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::Size last_seen_view_size_; 5733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Last seen autosize attribute state (by OnUpdateRect). 5743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool last_seen_auto_size_enabled_; 5753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool is_in_destruction_; 5773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Text input type states. 5795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::TextInputType last_text_input_type_; 5805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::TextInputMode last_input_mode_; 5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool last_can_compose_inline_; 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 583b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // This is a queue of messages that are destined to be sent to the embedder 584b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // once the guest is attached to a particular embedder. 585b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) std::queue<IPC::Message*> pending_messages_; 586b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 5877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<BrowserPluginGuestDelegate> delegate_; 5887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 589d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // These are parameters passed from JavaScript on attachment to the content 590d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // embedder. 591d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<base::DictionaryValue> extra_attach_params_; 592d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Weak pointer used to ask GeolocationPermissionContext about geolocation 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // permission. 5955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::WeakPtrFactory<BrowserPluginGuest> weak_ptr_factory_; 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuest); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ 603