| Index: chrome/browser/ui/views/keyboard_overlay_delegate.cc
|
| diff --git a/chrome/browser/ui/views/keyboard_overlay_delegate.cc b/chrome/browser/ui/views/keyboard_overlay_delegate.cc
|
| index 56bcd6dab69a0441ad3b9b42ebc8e7d2fabf94a9..78445374feaeb16f0440d5c1622cdbfbefcf2364 100644
|
| --- a/chrome/browser/ui/views/keyboard_overlay_delegate.cc
|
| +++ b/chrome/browser/ui/views/keyboard_overlay_delegate.cc
|
| @@ -6,9 +6,14 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "base/values.h"
|
| #include "chrome/browser/ui/views/web_dialog_view.h"
|
| #include "chrome/common/url_constants.h"
|
| +#include "content/public/browser/web_ui.h"
|
| +#include "content/public/browser/web_ui_message_handler.h"
|
| #include "googleurl/src/gurl.h"
|
| #include "grit/generated_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| @@ -24,6 +29,36 @@ const int kBaseWidth = 1252;
|
| const int kBaseHeight = 516;
|
| const int kHorizontalMargin = 28;
|
|
|
| +// A message handler for detecting the timing when the web contents is painted.
|
| +class PaintMessageHandler
|
| + : public WebUIMessageHandler,
|
| + public base::SupportsWeakPtr<PaintMessageHandler> {
|
| + public:
|
| + explicit PaintMessageHandler(views::Widget* widget) : widget_(widget) {}
|
| + virtual ~PaintMessageHandler() {}
|
| +
|
| + // WebUIMessageHandler implementation.
|
| + virtual void RegisterMessages() OVERRIDE;
|
| +
|
| + private:
|
| + void DidPaint(const ListValue* args);
|
| +
|
| + views::Widget* widget_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PaintMessageHandler);
|
| +};
|
| +
|
| +void PaintMessageHandler::RegisterMessages() {
|
| + web_ui()->RegisterMessageCallback(
|
| + "didPaint",
|
| + base::Bind(&PaintMessageHandler::DidPaint, base::Unretained(this)));
|
| +}
|
| +
|
| +void PaintMessageHandler::DidPaint(const ListValue* args) {
|
| + // Show the widget after the web content has been painted.
|
| + widget_->Show();
|
| +}
|
| +
|
| } // namespace
|
|
|
| KeyboardOverlayDelegate::KeyboardOverlayDelegate(const string16& title)
|
| @@ -34,6 +69,29 @@ KeyboardOverlayDelegate::KeyboardOverlayDelegate(const string16& title)
|
| KeyboardOverlayDelegate::~KeyboardOverlayDelegate() {
|
| }
|
|
|
| +void KeyboardOverlayDelegate::Show(WebDialogView* view) {
|
| + view_ = view;
|
| +
|
| + views::Widget* widget = new views::Widget;
|
| + views::Widget::InitParams params(
|
| + views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
|
| + params.delegate = view;
|
| + widget->Init(params);
|
| +
|
| + // Show the widget at the bottom of the work area.
|
| + gfx::Size size;
|
| + GetDialogSize(&size);
|
| + const gfx::Rect& rect = gfx::Screen::GetMonitorNearestWindow(
|
| + widget->GetNativeView()).work_area();
|
| + gfx::Rect bounds((rect.width() - size.width()) / 2,
|
| + rect.height() - size.height(),
|
| + size.width(),
|
| + size.height());
|
| + widget->SetBounds(bounds);
|
| +
|
| + // The widget will be shown when the web contents gets ready to display.
|
| +}
|
| +
|
| ui::ModalType KeyboardOverlayDelegate::GetDialogModalType() const {
|
| return ui::MODAL_TYPE_SYSTEM;
|
| }
|
| @@ -49,6 +107,7 @@ GURL KeyboardOverlayDelegate::GetDialogContentURL() const {
|
|
|
| void KeyboardOverlayDelegate::GetWebUIMessageHandlers(
|
| std::vector<WebUIMessageHandler*>* handlers) const {
|
| + handlers->push_back(new PaintMessageHandler(view_->GetWidget()));
|
| }
|
|
|
| void KeyboardOverlayDelegate::GetDialogSize(
|
|
|