1// Copyright 2013 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_UI_AUTOFILL_AUTOFILL_DIALOG_SIGN_IN_DELEGATE_H_
6#define CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_SIGN_IN_DELEGATE_H_
7
8#include "base/basictypes.h"
9#include "content/public/browser/web_contents_delegate.h"
10#include "content/public/browser/web_contents_observer.h"
11#include "ui/gfx/size.h"
12
13namespace autofill {
14
15class AutofillDialogView;
16
17// AutofillDialogSignInDelegate provides a WebContentsDelegate and
18// WebContentsObserver for the sign-in page in the autofill dialog. Allows the
19// dialog to resize based on the size of the hosted web page.
20// TODO(abodenha) It probably makes sense to move the NotificationObserver
21// for detecting completed sign-in to this class instead of
22// AutofillDialogControllerImpl.
23class AutofillDialogSignInDelegate: public content::WebContentsDelegate,
24                                    public content::WebContentsObserver {
25 public:
26  AutofillDialogSignInDelegate(AutofillDialogView* dialog_view,
27                               content::WebContents* dialog_web_contents,
28                               content::WebContents* originating_web_contents,
29                               const gfx::Size& minimum_size,
30                               const gfx::Size& maximum_size);
31
32  // WebContentsDelegate implementation.
33  virtual void ResizeDueToAutoResize(content::WebContents* source,
34                                     const gfx::Size& preferred_size) OVERRIDE;
35  virtual content::WebContents* OpenURLFromTab(
36      content::WebContents* source,
37      const content::OpenURLParams& params) OVERRIDE;
38  virtual void AddNewContents(content::WebContents* source,
39                              content::WebContents* new_contents,
40                              WindowOpenDisposition disposition,
41                              const gfx::Rect& initial_pos,
42                              bool user_gesture,
43                              bool* was_blocked) OVERRIDE;
44  virtual bool PreHandleGestureEvent(
45      content::WebContents* source,
46      const blink::WebGestureEvent& event) OVERRIDE;
47
48  // WebContentsObserver implementation.
49  virtual void RenderViewCreated(
50      content::RenderViewHost* render_view_host) OVERRIDE;
51
52  // Updates the size limits and enables auto-resize for this view.
53  void UpdateLimitsAndEnableAutoResize(const gfx::Size& minimum_size,
54                                       const gfx::Size& maximum_size);
55
56 private:
57  // Enables auto-resizing for this view, if possible, constrained to the latest
58  // minimum and maximum size allowed by the delegate.
59  void EnableAutoResize();
60
61  // The dialog view hosting this sign in page.
62  AutofillDialogView* const dialog_view_;
63
64  // The WebContents of the page that originated the dialog. Weak ptr, but
65  // guaranteed to outlive the dialog, since the dialog is tab-modal to those
66  // contents.
67  content::WebContents* const originating_web_contents_;
68
69  // The minimum and maximum sizes that the sign-in view may have.
70  gfx::Size minimum_size_;
71  gfx::Size maximum_size_;
72
73  DISALLOW_COPY_AND_ASSIGN(AutofillDialogSignInDelegate);
74};
75
76}  // namespace autofill
77
78#endif  // CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_SIGN_IN_DELEGATE_H_
79