class BrowserPluginGuest;
class BrowserPluginGuestManager;
-class BrowserPluginHostFactory;
class RenderWidgetHostImpl;
class WebContentsImpl;
struct NativeWebKeyboardEvent;
static BrowserPluginEmbedder* Create(WebContentsImpl* web_contents);
// Returns this embedder's WebContentsImpl.
- WebContentsImpl* GetWebContents();
+ WebContentsImpl* GetWebContents() const;
// Called when embedder's |rwh| has sent screen rects to renderer.
void DidSendScreenRects();
- // Called when embedder's WebContentsImpl has unhandled keyboard input.
- // Returns whether the BrowserPlugin has handled the keyboard event.
- // Currently we are only interested in checking for the escape key to
- // unlock hte guest's pointer lock.
- bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
-
- // Overrides factory for testing. Default (NULL) value indicates regular
- // (non-test) environment.
- static void set_factory_for_testing(BrowserPluginHostFactory* factory) {
- factory_ = factory;
- }
-
- // Sets the zoom level for all guests within this embedder.
- void SetZoomLevel(double level);
-
// WebContentsObserver implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void DragSourceEndedAt(int client_x, int client_y, int screen_x,
int screen_y, blink::WebDragOperation operation);
- void DragSourceMovedTo(int client_x, int client_y,
- int screen_x, int screen_y);
-
void OnUpdateDragCursor(bool* handled);
void DragEnteredGuest(BrowserPluginGuest* guest);
// operation, if there's any.
void SystemDragEnded();
+ // Used to handle special keyboard events.
+ bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
+
private:
- friend class TestBrowserPluginEmbedder;
+ explicit BrowserPluginEmbedder(WebContentsImpl* web_contents);
- BrowserPluginEmbedder(WebContentsImpl* web_contents);
+ BrowserPluginGuestManager* GetBrowserPluginGuestManager() const;
- BrowserPluginGuestManager* GetBrowserPluginGuestManager();
+ void ClearGuestDragStateIfApplicable();
- bool DidSendScreenRectsCallback(BrowserPluginGuest* guest);
+ bool DidSendScreenRectsCallback(WebContents* guest_web_contents);
- bool SetZoomLevelCallback(double level, BrowserPluginGuest* guest);
+ bool SetZoomLevelCallback(double level, WebContents* guest_web_contents);
- bool UnlockMouseIfNecessaryCallback(const NativeWebKeyboardEvent& event,
- BrowserPluginGuest* guest);
+ bool UnlockMouseIfNecessaryCallback(bool* mouse_unlocked, WebContents* guest);
// Message handlers.
-
- void OnAllocateInstanceID(int request_id);
void OnAttach(int instance_id,
- const BrowserPluginHostMsg_Attach_Params& params,
- const base::DictionaryValue& extra_params);
+ const BrowserPluginHostMsg_Attach_Params& params);
void OnPluginAtPositionResponse(int instance_id,
int request_id,
const gfx::Point& position);
- // Static factory instance (always NULL for non-test).
- static BrowserPluginHostFactory* factory_;
-
// Used to correctly update the cursor when dragging over a guest, and to
// handle a race condition when dropping onto the guest that started the drag
// (the race is that the dragend message arrives before the drop message so
// status messages to the correct guest.
base::WeakPtr<BrowserPluginGuest> guest_started_drag_;
+ // Keeps track of "dragend" state.
+ bool guest_drag_ending_;
+
+ base::WeakPtrFactory<BrowserPluginEmbedder> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(BrowserPluginEmbedder);
};