| // Copyright 2015 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. |
| |
| #ifndef CHROME_BROWSER_UI_AUTOFILL_SAVE_CARD_BUBBLE_CONTROLLER_IMPL_H_ |
| #define CHROME_BROWSER_UI_AUTOFILL_SAVE_CARD_BUBBLE_CONTROLLER_IMPL_H_ |
| |
| #include "base/macros.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/timer/elapsed_timer.h" |
| #include "chrome/browser/ui/autofill/save_card_bubble_controller.h" |
| #include "components/autofill/core/browser/credit_card.h" |
| #include "content/public/browser/web_contents_observer.h" |
| #include "content/public/browser/web_contents_user_data.h" |
| |
| namespace autofill { |
| |
| // Implementation of per-tab class to control the save credit card bubble and |
| // Omnibox icon. |
| class SaveCardBubbleControllerImpl |
| : public SaveCardBubbleController, |
| public content::WebContentsObserver, |
| public content::WebContentsUserData<SaveCardBubbleControllerImpl> { |
| public: |
| // Sets up the controller for local save and shows the bubble. |
| // |save_card_callback| will be invoked if and when the Save button is |
| // pressed. |
| void ShowBubbleForLocalSave(const CreditCard& card, |
| const base::Closure& save_card_callback); |
| |
| // Sets up the controller for upload and shows the bubble. |
| // |save_card_callback| will be invoked if and when the Save button is |
| // pressed. The contents of |legal_message| will be displayed in the bubble. |
| void ShowBubbleForUpload(const CreditCard& card, |
| scoped_ptr<base::DictionaryValue> legal_message, |
| const base::Closure& save_card_callback); |
| |
| void HideBubble(); |
| void ReshowBubble(); |
| |
| // Returns true if Omnibox save credit card icon should be visible. |
| bool IsIconVisible() const; |
| |
| // Returns nullptr if no bubble is currently shown. |
| SaveCardBubbleView* save_card_bubble_view() const; |
| |
| // SaveCardBubbleController: |
| base::string16 GetWindowTitle() const override; |
| base::string16 GetExplanatoryMessage() const override; |
| const CreditCard GetCard() const override; |
| void OnSaveButton() override; |
| void OnCancelButton() override; |
| void OnLearnMoreClicked() override; |
| void OnLegalMessageLinkClicked(const GURL& url) override; |
| void OnBubbleClosed() override; |
| |
| const LegalMessageLines& GetLegalMessageLines() const override; |
| |
| protected: |
| explicit SaveCardBubbleControllerImpl(content::WebContents* web_contents); |
| ~SaveCardBubbleControllerImpl() override; |
| |
| // Returns the time elapsed since |timer_| was initialized. |
| // Exists for testing. |
| virtual base::TimeDelta Elapsed() const; |
| |
| // content::WebContentsObserver: |
| void DidNavigateMainFrame( |
| const content::LoadCommittedDetails& details, |
| const content::FrameNavigateParams& params) override; |
| |
| private: |
| friend class content::WebContentsUserData<SaveCardBubbleControllerImpl>; |
| |
| void ShowBubble(); |
| |
| // Update the visibility and toggled state of the Omnibox save card icon. |
| void UpdateIcon(); |
| |
| void OpenUrl(const GURL& url); |
| |
| // Weak reference. Will be nullptr if no bubble is currently shown. |
| SaveCardBubbleView* save_card_bubble_view_; |
| |
| // Callback to run if user presses Save button in the bubble. |
| // If save_card_callback_.is_null() is true then no bubble is available to |
| // show and the icon is not visible. |
| base::Closure save_card_callback_; |
| |
| // Governs whether the upload or local save version of the UI should be shown. |
| bool is_uploading_; |
| |
| // Whether ReshowBubble() has been called since ShowBubbleFor*() was called. |
| bool is_reshow_; |
| |
| // Contains the details of the card that will be saved if the user accepts. |
| CreditCard card_; |
| |
| // If no legal message should be shown then this variable is an empty vector. |
| LegalMessageLines legal_message_lines_; |
| |
| // Used to measure the amount of time on a page; if it's less than some |
| // reasonable limit, then don't close the bubble upon navigation. |
| scoped_ptr<base::ElapsedTimer> timer_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SaveCardBubbleControllerImpl); |
| }; |
| |
| } // namespace autofill |
| |
| #endif // CHROME_BROWSER_UI_AUTOFILL_SAVE_CARD_BUBBLE_CONTROLLER_IMPL_H_ |