// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/login/account_creation_view.h"
#include "base/string_util.h"
#include "chrome/common/autofill_messages.h"
#include "webkit/glue/form_data.h"
using webkit_glue::FormData;
namespace chromeos {
const char kCreateAccountFormName[] = "createaccount";
const char kEmailFieldName[] = "Email";
const char kDomainFieldName[] = "edk";
class AccountCreationTabContents : public WizardWebPageViewTabContents {
public:
AccountCreationTabContents(Profile* profile,
SiteInstance* site_instance,
AccountCreationViewDelegate* delegate,
WebPageDelegate* page_delegate)
: WizardWebPageViewTabContents(profile, site_instance, page_delegate),
delegate_(delegate) {
}
// Overriden from TabContents.
virtual bool OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(AccountCreationTabContents, message)
IPC_MESSAGE_HANDLER(AutofillHostMsg_FormSubmitted, OnFormSubmitted)
IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_FormsSeen, )
IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_QueryFormFieldAutofill, )
IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_ShowAutofillDialog, )
IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_FillAutofillFormData, )
IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_DidFillAutofillFormData, )
IPC_MESSAGE_HANDLER_GENERIC(AutofillHostMsg_DidShowAutofillSuggestions, )
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
if (handled)
return true;
return TabContents::OnMessageReceived(message);
}
private:
void OnFormSubmitted(const FormData& form) {
if (UTF16ToASCII(form.name) == kCreateAccountFormName) {
std::string user_name;
std::string domain;
for (size_t i = 0; i < form.fields.size(); i++) {
std::string name = UTF16ToASCII(form.fields[i].name);
if (name == kEmailFieldName) {
user_name = UTF16ToASCII(form.fields[i].value);
} else if (name == kDomainFieldName) {
domain = UTF16ToASCII(form.fields[i].value);
}
}
if (!user_name.empty()) {
// We don't have password here because all password fields were
// stripped. Overriding TabContents::PasswordFormsFound also makes no
// sense because password value is always empty for account create page.
delegate_->OnUserCreated(user_name + "@" + domain, "");
}
}
}
AccountCreationViewDelegate* delegate_;
DISALLOW_COPY_AND_ASSIGN(AccountCreationTabContents);
};
///////////////////////////////////////////////////////////////////////////////
// AccountCreationDomView, public:
AccountCreationDomView::AccountCreationDomView() : delegate_(NULL) {
}
AccountCreationDomView::~AccountCreationDomView() {
}
void AccountCreationDomView::SetAccountCreationViewDelegate(
AccountCreationViewDelegate* delegate) {
delegate_ = delegate;
}
///////////////////////////////////////////////////////////////////////////////
// AccountCreationDomView, DOMView implementation:
TabContents* AccountCreationDomView::CreateTabContents(Profile* profile,
SiteInstance* instance) {
return new AccountCreationTabContents(profile,
instance,
delegate_,
page_delegate_);
}
///////////////////////////////////////////////////////////////////////////////
// AccountCreationView, public:
AccountCreationView::AccountCreationView()
: dom_view_(new AccountCreationDomView()) {
}
AccountCreationView::~AccountCreationView() {
}
void AccountCreationView::SetAccountCreationViewDelegate(
AccountCreationViewDelegate* delegate) {
dom_view_->SetAccountCreationViewDelegate(delegate);
}
} // namespace chromeos