Chromium Code Reviews| 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_ |