Index: chrome/browser/password_manager_delegate_impl.cc |
=================================================================== |
--- chrome/browser/password_manager_delegate_impl.cc (revision 0) |
+++ chrome/browser/password_manager_delegate_impl.cc (revision 0) |
@@ -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(); |
+} |