Home | History | Annotate | Download | only in login
      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:
     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.
     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:
     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 
     78 AccountCreationDomView::AccountCreationDomView() : delegate_(NULL) {
     79 }
     80 
     81 AccountCreationDomView::~AccountCreationDomView() {
     82 }
     83 
     84 void AccountCreationDomView::SetAccountCreationViewDelegate(
     85     AccountCreationViewDelegate* delegate) {
     86   delegate_ = delegate;
     87 }
     88 
     89 ///////////////////////////////////////////////////////////////////////////////
     90 // AccountCreationDomView, DOMView implementation:
     91 
     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 
    103 AccountCreationView::AccountCreationView()
    104     : dom_view_(new AccountCreationDomView()) {
    105 }
    106 
    107 AccountCreationView::~AccountCreationView() {
    108 }
    109 
    110 void AccountCreationView::SetAccountCreationViewDelegate(
    111     AccountCreationViewDelegate* delegate) {
    112   dom_view_->SetAccountCreationViewDelegate(delegate);
    113 }
    114 
    115 }  // namespace chromeos
    116