#ifndef CHROME_BROWSER_UI_AUTOFILL_PASSWORD_GENERATION_POPUP_CONTROLLER_IMPL_H_
#define CHROME_BROWSER_UI_AUTOFILL_PASSWORD_GENERATION_POPUP_CONTROLLER_IMPL_H_
#include <string>
#include "base/basictypes.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/ui/autofill/password_generation_popup_controller.h"
#include "chrome/browser/ui/autofill/popup_controller_common.h"
#include "components/autofill/core/common/password_form.h"
#include "ui/gfx/font_list.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/range/range.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/rect_f.h"
namespace content {
struct NativeWebKeyboardEvent;
class WebContents;
}
class PasswordManager;
namespace autofill {
class PasswordGenerator;
class PasswordGenerationPopupObserver;
class PasswordGenerationPopupView;
class PasswordGenerationPopupControllerImpl
: public PasswordGenerationPopupController {
public:
static base::WeakPtr<PasswordGenerationPopupControllerImpl> GetOrCreate(
base::WeakPtr<PasswordGenerationPopupControllerImpl> previous,
const gfx::RectF& bounds,
const PasswordForm& form,
int max_length,
PasswordManager* password_manager,
PasswordGenerationPopupObserver* observer,
content::WebContents* web_contents,
gfx::NativeView container_view);
virtual ~PasswordGenerationPopupControllerImpl();
void Show(bool display_password);
void HideAndDestroy();
content::WebContents* web_contents() {
return controller_common_.web_contents();
}
const gfx::RectF& element_bounds() {
return controller_common_.element_bounds();
}
private:
PasswordGenerationPopupControllerImpl(
const gfx::RectF& bounds,
const PasswordForm& form,
int max_length,
PasswordManager* password_manager,
PasswordGenerationPopupObserver* observer,
content::WebContents* web_contents,
gfx::NativeView container_view);
virtual void Hide() OVERRIDE;
virtual void ViewDestroyed() OVERRIDE;
virtual void SetSelectionAtPoint(const gfx::Point& point) OVERRIDE;
virtual bool AcceptSelectedLine() OVERRIDE;
virtual void SelectionCleared() OVERRIDE;
virtual bool ShouldRepostEvent(const ui::MouseEvent& event) OVERRIDE;
virtual bool ShouldHideOnOutsideClick() const OVERRIDE;
virtual void OnSavedPasswordsLinkClicked() OVERRIDE;
virtual gfx::NativeView container_view() OVERRIDE;
virtual const gfx::FontList& font_list() const OVERRIDE;
virtual const gfx::Rect& popup_bounds() const OVERRIDE;
virtual const gfx::Rect& password_bounds() const OVERRIDE;
virtual const gfx::Rect& divider_bounds() const OVERRIDE;
virtual const gfx::Rect& help_bounds() const OVERRIDE;
virtual bool display_password() const OVERRIDE;
virtual bool password_selected() const OVERRIDE;
virtual base::string16 password() const OVERRIDE;
virtual base::string16 SuggestedText() OVERRIDE;
virtual const base::string16& HelpText() OVERRIDE;
virtual const gfx::Range& HelpTextLinkRange() OVERRIDE;
base::WeakPtr<PasswordGenerationPopupControllerImpl> GetWeakPtr();
bool HandleKeyPressEvent(const content::NativeWebKeyboardEvent& event);
void PasswordSelected(bool selected);
void PasswordAccepted();
bool PossiblyAcceptPassword();
int GetDesiredWidth();
int GetDesiredHeight(int width);
void CalculateBounds();
PasswordForm form_;
PasswordManager* password_manager_;
PasswordGenerationPopupObserver* observer_;
scoped_ptr<PasswordGenerator> generator_;
PopupControllerCommon controller_common_;
PasswordGenerationPopupView* view_;
const gfx::FontList& font_list_;
base::string16 help_text_;
gfx::Range link_range_;
base::string16 current_password_;
bool password_selected_;
bool display_password_;
gfx::Rect popup_bounds_;
gfx::Rect password_bounds_;
gfx::Rect divider_bounds_;
gfx::Rect help_bounds_;
base::WeakPtrFactory<PasswordGenerationPopupControllerImpl> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(PasswordGenerationPopupControllerImpl);
};
}
#endif