captcha_view.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2010 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 CHROME_BROWSER_CHROMEOS_LOGIN_CAPTCHA_VIEW_H_ 6#define CHROME_BROWSER_CHROMEOS_LOGIN_CAPTCHA_VIEW_H_ 7 8#include <string> 9 10#include "chrome/browser/chromeos/login/image_decoder.h" 11#include "googleurl/src/gurl.h" 12#include "views/controls/textfield/textfield.h" 13#include "views/window/dialog_delegate.h" 14 15namespace views { 16class ImageView; 17class View; 18class Window; 19} // namespace views 20 21namespace chromeos { 22 23// A dialog box that shows a CAPTCHA image and allows user to input response. 24class CaptchaView : public views::View, 25 public views::DialogDelegate, 26 public views::Textfield::Controller, 27 public ImageDecoder::Delegate { 28 public: 29 class Delegate { 30 public: 31 // Called when CAPTCHA answer has been entered. 32 virtual void OnCaptchaEntered(const std::string& captcha) = 0; 33 34 protected: 35 virtual ~Delegate() {} 36 }; 37 38 // |captcha_url| represents CAPTCHA image URL. 39 explicit CaptchaView(const GURL& captcha_url); 40 virtual ~CaptchaView() {} 41 42 // views::DialogDelegate overrides: 43 virtual bool Accept(); 44 45 // views::WindowDelegate overrides: 46 virtual bool IsModal() const { return true; } 47 virtual views::View* GetContentsView() { return this; } 48 49 // views::View overrides: 50 virtual std::wstring GetWindowTitle() const; 51 52 // views::Textfield::Controller implementation: 53 virtual void ContentsChanged(views::Textfield* sender, 54 const string16& new_contents) {} 55 virtual bool HandleKeystroke(views::Textfield* sender, 56 const views::Textfield::Keystroke& keystroke); 57 58 // Overriden from ImageDownloader::Delegate: 59 virtual void OnImageDecoded(const SkBitmap& decoded_image); 60 61 void set_delegate(Delegate* delegate) { 62 delegate_ = delegate; 63 } 64 65 protected: 66 // views::View overrides: 67 virtual gfx::Size GetPreferredSize(); 68 virtual void ViewHierarchyChanged(bool is_add, 69 views::View* parent, 70 views::View* child); 71 72 private: 73 // Initializes UI. 74 void Init(); 75 76 Delegate* delegate_; 77 GURL captcha_url_; 78 views::ImageView* captcha_image_; 79 views::Textfield* captcha_textfield_; 80 81 DISALLOW_COPY_AND_ASSIGN(CaptchaView); 82}; 83 84} // namespace chromeos 85 86#endif // CHROME_BROWSER_CHROMEOS_LOGIN_CAPTCHA_VIEW_H_ 87