diff options
Diffstat (limited to 'chrome/browser/password_manager_delegate_impl.cc')
| -rw-r--r-- | chrome/browser/password_manager_delegate_impl.cc | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/chrome/browser/password_manager_delegate_impl.cc b/chrome/browser/password_manager_delegate_impl.cc new file mode 100644 index 0000000..466ee34 --- /dev/null +++ b/chrome/browser/password_manager_delegate_impl.cc @@ -0,0 +1,120 @@ +// Copyright (c) 2010 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/password_manager_delegate_impl.h" + +#include "app/l10n_util.h" +#include "app/resource_bundle.h" +#include "base/metrics/histogram.h" +#include "base/singleton.h" +#include "chrome/browser/password_manager/password_form_manager.h" +#include "chrome/browser/password_manager/password_manager.h" +#include "chrome/browser/renderer_host/render_view_host.h" +#include "chrome/browser/tab_contents/infobar_delegate.h" +#include "chrome/browser/tab_contents/tab_contents.h" +#include "grit/chromium_strings.h" +#include "grit/generated_resources.h" +#include "grit/theme_resources.h" +#include "webkit/glue/password_form.h" + +// After a successful *new* login attempt, we take the PasswordFormManager in +// provisional_save_manager_ and move it to a SavePasswordInfoBarDelegate while +// the user makes up their mind with the "save password" infobar. Note if the +// login is one we already know about, the end of the line is +// provisional_save_manager_ because we just update it on success and so such +// forms never end up in an infobar. +class SavePasswordInfoBarDelegate : public ConfirmInfoBarDelegate { + public: + SavePasswordInfoBarDelegate(TabContents* tab_contents, + PasswordFormManager* form_to_save) + : ConfirmInfoBarDelegate(tab_contents), + form_to_save_(form_to_save), + infobar_response_(NO_RESPONSE) {} + + virtual ~SavePasswordInfoBarDelegate() {} + + // Begin ConfirmInfoBarDelegate implementation. + virtual void InfoBarClosed() { + UMA_HISTOGRAM_ENUMERATION("PasswordManager.InfoBarResponse", + infobar_response_, NUM_RESPONSE_TYPES); + delete this; + } + + virtual Type GetInfoBarType() { return PAGE_ACTION_TYPE; } + + virtual string16 GetMessageText() const { + return l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_PASSWORD_PROMPT); + } + + virtual SkBitmap* GetIcon() const { + return ResourceBundle::GetSharedInstance().GetBitmapNamed( + IDR_INFOBAR_SAVE_PASSWORD); + } + + virtual int GetButtons() const { + return BUTTON_OK | BUTTON_CANCEL; + } + + virtual string16 GetButtonLabel(InfoBarButton button) const { + if (button == BUTTON_OK) + return l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON); + if (button == BUTTON_CANCEL) + return l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BLACKLIST_BUTTON); + NOTREACHED(); + return string16(); + } + + virtual bool Accept() { + DCHECK(form_to_save_.get()); + form_to_save_->Save(); + infobar_response_ = REMEMBER_PASSWORD; + return true; + } + + virtual bool Cancel() { + DCHECK(form_to_save_.get()); + form_to_save_->PermanentlyBlacklist(); + infobar_response_ = DONT_REMEMBER_PASSWORD; + return true; + } + // End ConfirmInfoBarDelegate implementation. + + private: + // The PasswordFormManager managing the form we're asking the user about, + // and should update as per her decision. + scoped_ptr<PasswordFormManager> form_to_save_; + + // Used to track the results we get from the info bar. + enum ResponseType { + NO_RESPONSE = 0, + REMEMBER_PASSWORD, + DONT_REMEMBER_PASSWORD, + NUM_RESPONSE_TYPES, + }; + ResponseType infobar_response_; + + DISALLOW_COPY_AND_ASSIGN(SavePasswordInfoBarDelegate); +}; + +//---------------------------------------------------------------------------- + +void PasswordManagerDelegateImpl::FillPasswordForm( + const webkit_glue::PasswordFormFillData& form_data) { + tab_contents_->render_view_host()->FillPasswordForm(form_data); +} + +void PasswordManagerDelegateImpl::AddSavePasswordInfoBar( + PasswordFormManager* form_to_save) { + tab_contents_->AddInfoBar( + new SavePasswordInfoBarDelegate(tab_contents_, form_to_save)); +} + +Profile* PasswordManagerDelegateImpl::GetProfileForPasswordManager() { + return tab_contents_->profile(); +} + +bool PasswordManagerDelegateImpl::DidLastPageLoadEncounterSSLErrors() { + return tab_contents_->controller().ssl_manager()-> + ProcessedSSLErrorFromRequest(); +} |
