Index: components/autofill/core/browser/autofill_cc_infobar_delegate.h |
diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate.h b/components/autofill/core/browser/autofill_cc_infobar_delegate.h |
similarity index 59% |
rename from chrome/browser/autofill/autofill_cc_infobar_delegate.h |
rename to components/autofill/core/browser/autofill_cc_infobar_delegate.h |
index 717cd900f5b8f054431e7d15c75e535b5d64b55b..e4d45de29013d91f9af8c5928101b017157c07b4 100644 |
--- a/chrome/browser/autofill/autofill_cc_infobar_delegate.h |
+++ b/components/autofill/core/browser/autofill_cc_infobar_delegate.h |
@@ -2,8 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef CHROME_BROWSER_AUTOFILL_AUTOFILL_CC_INFOBAR_DELEGATE_H_ |
-#define CHROME_BROWSER_AUTOFILL_AUTOFILL_CC_INFOBAR_DELEGATE_H_ |
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_CC_INFOBAR_DELEGATE_H_ |
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_CC_INFOBAR_DELEGATE_H_ |
#include "base/basictypes.h" |
#include "base/callback.h" |
@@ -14,31 +14,36 @@ |
#include "components/infobars/core/confirm_infobar_delegate.h" |
#include "ui/base/window_open_disposition.h" |
-class CreditCard; |
-class PersonalDataManager; |
-class InfoBarService; |
+namespace infobars { |
+class InfoBarManager; |
+} |
namespace autofill { |
+class AutofillDriver; |
+ |
// An InfoBar delegate that enables the user to allow or deny storing credit |
// card information gathered from a form submission. |
class AutofillCCInfoBarDelegate : public ConfirmInfoBarDelegate { |
public: |
- // Creates an autofill credit card infobar and delegate and adds the infobar |
- // to |infobar_service|. |
- static void Create(InfoBarService* infobar_service, |
+ // Creates an autofill credit card infobar and delegate and add the infobar |
Peter Kasting
2014/12/29 22:24:30
The old comment was correct (except for using info
Pritam Nikam
2014/12/30 13:22:14
Done.
|
+ // and associated |autofill_driver| to the |infobar_manager|. |
+ static void Create(infobars::InfoBarManager* infobar_manager, |
+ AutofillDriver* autofill_driver, |
const base::Closure& save_card_callback); |
#if defined(UNIT_TEST) |
static scoped_ptr<ConfirmInfoBarDelegate> Create( |
+ AutofillDriver* autofill_driver, |
const base::Closure& save_card_callback) { |
return scoped_ptr<ConfirmInfoBarDelegate>( |
- new AutofillCCInfoBarDelegate(save_card_callback)); |
+ new AutofillCCInfoBarDelegate(autofill_driver, save_card_callback)); |
} |
#endif |
private: |
- explicit AutofillCCInfoBarDelegate(const base::Closure& save_card_callback); |
+ AutofillCCInfoBarDelegate(AutofillDriver* autofill_driver, |
+ const base::Closure& save_card_callback); |
~AutofillCCInfoBarDelegate() override; |
void LogUserAction(AutofillMetrics::InfoBarMetric user_action); |
@@ -55,6 +60,16 @@ class AutofillCCInfoBarDelegate : public ConfirmInfoBarDelegate { |
base::string16 GetLinkText() const override; |
bool LinkClicked(WindowOpenDisposition disposition) override; |
+ // Performs navigation to handle any link click. |autofill_driver_| is not |
+ // owned and does not garantee to outlive the lifetime of |this| object. So |
+ // care must be taken to avoid any unsafe access. Hence, instaed of using raw |
+ // |autofill_driver_| pointers, it's recommended here to content within |
+ // base::WeakPtr<>. E.g. AutofillDriver object associated to a form inside an |
+ // iframe may get destroy long before the main frame (its tab). Apparantly, |
+ // caching raw |autofill_driver_| pointer instead would be unsafe, performing |
+ // LinkClinked() from infobar would be catastrophic. |
Peter Kasting
2014/12/29 22:24:30
This comment is confusing, in part because of its
Pritam Nikam
2014/12/30 13:22:14
Sorry for confusion! maybe I didn't phrase it corr
Peter Kasting
2014/12/30 18:57:27
You keep speaking in abstract/hypothetical terms.
|
+ base::WeakPtr<AutofillDriver> autofill_driver_; |
+ |
// The callback to save credit card if the user accepts the infobar. |
base::Closure save_card_callback_; |
@@ -68,4 +83,4 @@ class AutofillCCInfoBarDelegate : public ConfirmInfoBarDelegate { |
} // namespace autofill |
-#endif // CHROME_BROWSER_AUTOFILL_AUTOFILL_CC_INFOBAR_DELEGATE_H_ |
+#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_CC_INFOBAR_DELEGATE_H_ |