class BrowserPluginGuest;
class BrowserPluginGuestManager;
-class BrowserPluginHostFactory;
class RenderWidgetHostImpl;
class WebContentsImpl;
struct NativeWebKeyboardEvent;
class CONTENT_EXPORT BrowserPluginEmbedder : public WebContentsObserver {
public:
- virtual ~BrowserPluginEmbedder();
+ ~BrowserPluginEmbedder() override;
static BrowserPluginEmbedder* Create(WebContentsImpl* web_contents);
- // Returns the RenderViewHost at a point (|x|, |y|) asynchronously via
- // |callback|. We need a roundtrip to renderer process to get this
- // information.
- void GetRenderViewHostAtPosition(
- int x,
- int y,
- const WebContents::GetRenderViewHostCallback& callback);
-
// 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 void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+ 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);
void StartDrag(BrowserPluginGuest* guest);
- void StopDrag(BrowserPluginGuest* guest);
-
// Sends EndSystemDrag message to the guest that initiated the last drag/drop
// operation, if there's any.
void SystemDragEnded();
- private:
- friend class TestBrowserPluginEmbedder;
+ // Used to handle special keyboard events.
+ bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
+
+ // Find the given |search_text| in the page. Returns true if the find request
+ // is handled by this browser plugin embedder.
+ bool Find(int request_id,
+ const base::string16& search_text,
+ const blink::WebFindOptions& options);
- BrowserPluginEmbedder(WebContentsImpl* web_contents);
+ private:
+ explicit BrowserPluginEmbedder(WebContentsImpl* web_contents);
- void CleanUp();
+ BrowserPluginGuestManager* GetBrowserPluginGuestManager() const;
- BrowserPluginGuestManager* GetBrowserPluginGuestManager();
+ void ClearGuestDragStateIfApplicable();
- bool DidSendScreenRectsCallback(BrowserPluginGuest* guest);
+ bool DidSendScreenRectsCallback(WebContents* guest_web_contents);
- bool SetZoomLevelCallback(double level, BrowserPluginGuest* guest);
+ bool UnlockMouseIfNecessaryCallback(bool* mouse_unlocked, WebContents* guest);
- bool UnlockMouseIfNecessaryCallback(const NativeWebKeyboardEvent& event,
- BrowserPluginGuest* guest);
+ bool FindInGuest(int request_id,
+ const base::string16& search_text,
+ const blink::WebFindOptions& options,
+ 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_;
-
- // Map that contains outstanding queries to |GetRenderViewHostAtPosition|.
- // We need a roundtrip to the renderer process to retrieve the answer,
- // so we store these callbacks until we hear back from the renderer.
- typedef std::map<int, WebContents::GetRenderViewHostCallback>
- GetRenderViewHostCallbackMap;
- GetRenderViewHostCallbackMap pending_get_render_view_callbacks_;
- // Next request id for BrowserPluginMsg_PluginAtPositionRequest query.
- int next_get_render_view_request_id_;
-
// 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);
};