// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
#define CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_

#include <vector>

#include "base/basictypes.h"
#include "third_party/WebKit/public/web/WebExternalPopupMenu.h"
#include "third_party/WebKit/public/web/WebPopupMenuInfo.h"
#include "ui/gfx/geometry/point_f.h"

namespace blink {
class WebExternalPopupMenuClient;
}

namespace content {
class RenderFrameImpl;

class ExternalPopupMenu : public blink::WebExternalPopupMenu {
 public:
  ExternalPopupMenu(RenderFrameImpl* render_frame,
                    const blink::WebPopupMenuInfo& popup_menu_info,
                    blink::WebExternalPopupMenuClient* popup_menu_client);

  virtual ~ExternalPopupMenu() {}

  void SetOriginScaleAndOffsetForEmulation(
      float scale, const gfx::PointF& offset);

#if defined(OS_MACOSX)
  // Called when the user has selected an item. |selected_item| is -1 if the
  // user canceled the popup.
  void DidSelectItem(int selected_index);
#endif

#if defined(OS_ANDROID)
  // Called when the user has selected items or canceled the popup.
  void DidSelectItems(bool canceled, const std::vector<int>& selected_indices);
#endif

  // blink::WebExternalPopupMenu implementation:
  virtual void show(const blink::WebRect& bounds);
  virtual void close();

 private:
  RenderFrameImpl* render_frame_;
  blink::WebPopupMenuInfo popup_menu_info_;
  blink::WebExternalPopupMenuClient* popup_menu_client_;

  // Popups may be displaced when screen metrics emulation is enabled.
  // These scale and offset are used to properly adjust popup position.
  float origin_scale_for_emulation_;
  gfx::PointF origin_offset_for_emulation_;

  DISALLOW_COPY_AND_ASSIGN(ExternalPopupMenu);
};

}  // namespace content

#endif  // CONTENT_RENDERER_EXTERNAL_POPUP_MENU_H_
