1// Copyright (c) 2011 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_REGISTRATION_SCREEN_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_REGISTRATION_SCREEN_H_
7#pragma once
8
9#include <string>
10
11#include "base/memory/scoped_ptr.h"
12#include "chrome/browser/chromeos/login/screen_observer.h"
13#include "chrome/browser/chromeos/login/view_screen.h"
14#include "chrome/browser/chromeos/login/web_page_screen.h"
15#include "chrome/browser/chromeos/login/web_page_view.h"
16
17namespace net {
18class URLRequest;
19class URLRequestJob;
20}  // namespace net
21
22class GURL;
23class Profile;
24class SiteContents;
25class WizardScreenDelegate;
26
27namespace chromeos {
28
29// Class that renders host registration page.
30class RegistrationDomView : public WebPageDomView {
31 public:
32  RegistrationDomView() {}
33
34 protected:
35  // Overriden from DOMView:
36  virtual TabContents* CreateTabContents(Profile* profile,
37                                         SiteInstance* instance) {
38    return new WizardWebPageViewTabContents(profile,
39                                            instance,
40                                            page_delegate_);
41  }
42
43  DISALLOW_COPY_AND_ASSIGN(RegistrationDomView);
44};
45
46// Class that displays screen contents: page and throbber while waiting.
47class RegistrationView : public WebPageView {
48 public:
49  RegistrationView() : dom_view_(new RegistrationDomView()) {}
50
51 protected:
52  virtual WebPageDomView* dom_view() { return dom_view_; }
53
54 private:
55  // View that renders page.
56  RegistrationDomView* dom_view_;
57
58  DISALLOW_COPY_AND_ASSIGN(RegistrationView);
59};
60
61// RegistrationScreen represents screen that is shown during OOBE.
62// It renders host page served from resources that includes iframe with
63// registration page specified in the startup customization manifest.
64// Partner registration page notifies host page on registration result.
65// Host page notifies that back to RegistrationScreen.
66class RegistrationScreen : public ViewScreen<RegistrationView>,
67                           public WebPageScreen,
68                           public WebPageDelegate {
69 public:
70  explicit RegistrationScreen(WizardScreenDelegate* delegate);
71
72  // WebPageDelegate implementation:
73  virtual void OnPageLoaded();
74  virtual void OnPageLoadFailed(const std::string& url);
75
76  // Sets the url for registration host page. Used in tests.
77  static void set_registration_host_page_url(const GURL& url);
78
79  // Handler factory for net::URLRequestFilter::AddHostnameHandler.
80  static net::URLRequestJob* Factory(net::URLRequest* request,
81                                     const std::string& scheme);
82
83 private:
84  // ViewScreen implementation:
85  virtual void CreateView();
86  virtual void Refresh();
87  virtual RegistrationView* AllocateView();
88
89  // TabContentsDelegate implementation:
90  virtual void LoadingStateChanged(TabContents* source) {}
91  virtual void NavigationStateChanged(const TabContents* source,
92                                      unsigned changed_flags) {}
93  virtual void OpenURLFromTab(TabContents* source,
94                              const GURL& url,
95                              const GURL& referrer,
96                              WindowOpenDisposition disposition,
97                              PageTransition::Type transition);
98  virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
99
100  // WebPageScreen implementation:
101  virtual void CloseScreen(ScreenObserver::ExitCodes code);
102
103  // Url of account creation page. Overriden by tests.
104  static scoped_ptr<GURL> host_page_url_;
105
106  DISALLOW_COPY_AND_ASSIGN(RegistrationScreen);
107};
108
109}  // namespace chromeos
110
111#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_REGISTRATION_SCREEN_H_
112