Re-subimission of https://codereview.chromium.org/1041213003/
[chromium-blink-merge.git] / content / renderer / external_popup_menu.h
blobccd4fdc3185a68678f53564f14bf563f3eccacbd
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.
5 #ifndef CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
6 #define CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
8 #include <vector>
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/geometry/point_f.h"
15 namespace blink {
16 class WebExternalPopupMenuClient;
19 namespace content {
20 class RenderFrameImpl;
22 class ExternalPopupMenu : public blink::WebExternalPopupMenu {
23 public:
24 ExternalPopupMenu(RenderFrameImpl* render_frame,
25 const blink::WebPopupMenuInfo& popup_menu_info,
26 blink::WebExternalPopupMenuClient* popup_menu_client);
28 virtual ~ExternalPopupMenu() {}
30 void SetOriginScaleAndOffsetForEmulation(
31 float scale, const gfx::PointF& offset);
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
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
44 // blink::WebExternalPopupMenu implementation:
45 virtual void show(const blink::WebRect& bounds);
46 virtual void close();
48 private:
49 RenderFrameImpl* render_frame_;
50 blink::WebPopupMenuInfo popup_menu_info_;
51 blink::WebExternalPopupMenuClient* popup_menu_client_;
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::PointF origin_offset_for_emulation_;
58 DISALLOW_COPY_AND_ASSIGN(ExternalPopupMenu);
61 } // namespace content
63 #endif // CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_