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