Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / browser / browser_plugin / browser_plugin_embedder.h
index b4bddb8..7ea98f7 100644 (file)
@@ -33,56 +33,28 @@ namespace content {
 
 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);
@@ -91,50 +63,42 @@ class CONTENT_EXPORT BrowserPluginEmbedder : public WebContentsObserver {
 
   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
@@ -146,6 +110,11 @@ class CONTENT_EXPORT BrowserPluginEmbedder : public WebContentsObserver {
   // 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);
 };