• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "chrome/browser/chromeos/login/account_creation_view.h"
6 
7 #include "base/string_util.h"
8 #include "chrome/common/autofill_messages.h"
9 #include "webkit/glue/form_data.h"
10 
11 using webkit_glue::FormData;
12 
13 namespace chromeos {
14 
15 const char kCreateAccountFormName[] = "createaccount";
16 const char kEmailFieldName[] = "Email";
17 const char kDomainFieldName[] = "edk";
18 
19 class AccountCreationTabContents : public WizardWebPageViewTabContents {
20  public:
AccountCreationTabContents(Profile * profile,SiteInstance * site_instance,AccountCreationViewDelegate * delegate,WebPageDelegate * page_delegate)21   AccountCreationTabContents(Profile* profile,
22                              SiteInstance* site_instance,
23                              AccountCreationViewDelegate* delegate,
24                              WebPageDelegate* page_delegate)
25       : WizardWebPageViewTabContents(profile, site_instance, page_delegate),
26         delegate_(delegate) {
27   }
28 
29   // Overriden from TabContents.
OnMessageReceived(const IPC::Message & message)30   virtual bool OnMessageReceived(const IPC::Message& message) {
31     bool handled = true;
32     IPC_BEGIN_MESSAGE_MAP(AccountCreationTabContents, message)
33       IPC_MESSAGE_HANDLER(AutofillHostMsg_FormSubmitted, OnFormSubmitted)
34       IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_FormsSeen, )
35       IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_QueryFormFieldAutofill, )
36       IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_ShowAutofillDialog, )
37       IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_FillAutofillFormData, )
38       IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_DidFillAutofillFormData, )
39       IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_DidShowAutofillSuggestions, )
40       IPC_MESSAGE_UNHANDLED(handled = false)
41     IPC_END_MESSAGE_MAP()
42 
43     if (handled)
44       return true;
45     return TabContents::OnMessageReceived(message);
46   }
47 
48  private:
OnFormSubmitted(const FormData & form)49   void OnFormSubmitted(const FormData& form) {
50     if (UTF16ToASCII(form.name) == kCreateAccountFormName) {
51       std::string user_name;
52       std::string domain;
53       for (size_t i = 0; i < form.fields.size(); i++) {
54         std::string name = UTF16ToASCII(form.fields[i].name);
55         if (name == kEmailFieldName) {
56           user_name = UTF16ToASCII(form.fields[i].value);
57         } else if (name == kDomainFieldName) {
58           domain = UTF16ToASCII(form.fields[i].value);
59         }
60       }
61       if (!user_name.empty()) {
62         // We don't have password here because all password fields were
63         // stripped. Overriding TabContents::PasswordFormsFound also makes no
64         // sense because password value is always empty for account create page.
65         delegate_->OnUserCreated(user_name + "@" + domain, "");
66       }
67     }
68   }
69 
70   AccountCreationViewDelegate* delegate_;
71 
72   DISALLOW_COPY_AND_ASSIGN(AccountCreationTabContents);
73 };
74 
75 ///////////////////////////////////////////////////////////////////////////////
76 // AccountCreationDomView, public:
77 
AccountCreationDomView()78 AccountCreationDomView::AccountCreationDomView() : delegate_(NULL) {
79 }
80 
~AccountCreationDomView()81 AccountCreationDomView::~AccountCreationDomView() {
82 }
83 
SetAccountCreationViewDelegate(AccountCreationViewDelegate * delegate)84 void AccountCreationDomView::SetAccountCreationViewDelegate(
85     AccountCreationViewDelegate* delegate) {
86   delegate_ = delegate;
87 }
88 
89 ///////////////////////////////////////////////////////////////////////////////
90 // AccountCreationDomView, DOMView implementation:
91 
CreateTabContents(Profile * profile,SiteInstance * instance)92 TabContents* AccountCreationDomView::CreateTabContents(Profile* profile,
93                                                        SiteInstance* instance) {
94   return new AccountCreationTabContents(profile,
95                                         instance,
96                                         delegate_,
97                                         page_delegate_);
98 }
99 
100 ///////////////////////////////////////////////////////////////////////////////
101 // AccountCreationView, public:
102 
AccountCreationView()103 AccountCreationView::AccountCreationView()
104     : dom_view_(new AccountCreationDomView()) {
105 }
106 
~AccountCreationView()107 AccountCreationView::~AccountCreationView() {
108 }
109 
SetAccountCreationViewDelegate(AccountCreationViewDelegate * delegate)110 void AccountCreationView::SetAccountCreationViewDelegate(
111     AccountCreationViewDelegate* delegate) {
112   dom_view_->SetAccountCreationViewDelegate(delegate);
113 }
114 
115 }  // namespace chromeos
116