Home | History | Annotate | Download | only in renderer
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
      6 #define CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/basictypes.h"
     11 #include "third_party/WebKit/public/web/WebExternalPopupMenu.h"
     12 #include "third_party/WebKit/public/web/WebPopupMenuInfo.h"
     13 #include "ui/gfx/point.h"
     14 
     15 namespace blink {
     16 class WebExternalPopupMenuClient;
     17 }
     18 
     19 namespace content {
     20 class RenderViewImpl;
     21 
     22 class ExternalPopupMenu : public blink::WebExternalPopupMenu {
     23  public:
     24   ExternalPopupMenu(RenderViewImpl* render_view,
     25                     const blink::WebPopupMenuInfo& popup_menu_info,
     26                     blink::WebExternalPopupMenuClient* popup_menu_client);
     27 
     28   virtual ~ExternalPopupMenu() {}
     29 
     30   void SetOriginScaleAndOffsetForEmulation(
     31       float scale, const gfx::Point& offset);
     32 
     33 #if defined(OS_MACOSX)
     34   // Called when the user has selected an item. |selected_item| is -1 if the
     35   // user canceled the popup.
     36   void DidSelectItem(int selected_index);
     37 #endif
     38 
     39 #if defined(OS_ANDROID)
     40   // Called when the user has selected items or canceled the popup.
     41   void DidSelectItems(bool canceled, const std::vector<int>& selected_indices);
     42 #endif
     43 
     44   // blink::WebExternalPopupMenu implementation:
     45   virtual void show(const blink::WebRect& bounds);
     46   virtual void close();
     47 
     48  private:
     49   RenderViewImpl* render_view_;
     50   blink::WebPopupMenuInfo popup_menu_info_;
     51   blink::WebExternalPopupMenuClient* popup_menu_client_;
     52 
     53   // Popups may be displaced when screen metrics emulation is enabled.
     54   // These scale and offset are used to properly adjust popup position.
     55   float origin_scale_for_emulation_;
     56   gfx::Point origin_offset_for_emulation_;
     57 
     58   DISALLOW_COPY_AND_ASSIGN(ExternalPopupMenu);
     59 };
     60 
     61 }  // namespace content
     62 
     63 #endif  // CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
     64