| Index: chrome/browser/ui/autofill/generated_credit_card_bubble_controller.h
|
| diff --git a/chrome/browser/ui/autofill/generated_credit_card_bubble_controller.h b/chrome/browser/ui/autofill/generated_credit_card_bubble_controller.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0f6f6386f9b886b41179756b3c38c030244cae95
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/autofill/generated_credit_card_bubble_controller.h
|
| @@ -0,0 +1,169 @@
|
| +// Copyright 2013 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_GENERATED_CREDIT_CARD_BUBBLE_CONTROLLER_H_
|
| +#define CHROME_BROWSER_UI_AUTOFILL_GENERATED_CREDIT_CARD_BUBBLE_CONTROLLER_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/strings/string16.h"
|
| +#include "content/public/browser/web_contents_observer.h"
|
| +#include "content/public/browser/web_contents_user_data.h"
|
| +#include "ui/base/range/range.h"
|
| +#include "ui/gfx/image/image.h"
|
| +
|
| +namespace content {
|
| +class WebContents;
|
| +}
|
| +
|
| +namespace user_prefs {
|
| +class PrefRegistrySyncable;
|
| +}
|
| +
|
| +namespace autofill {
|
| +
|
| +class GeneratedCreditCardBubbleView;
|
| +
|
| +// A simple struct of text highlighting range information. If |is_link| is true
|
| +// this portion of the text should be clickable (and trigger |OnLinkClicked()|).
|
| +// If |is_link| is false, the text denoted by |range| should be bolded.
|
| +struct TextRange {
|
| + // The range of text this TextRange applies to (start and end).
|
| + ui::Range range;
|
| + // Whether this text range should be styled like a link (e.g. clickable).
|
| + bool is_link;
|
| + // An equality operator for testing.
|
| + bool operator==(const TextRange& other) const;
|
| +};
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +//
|
| +// GeneratedCreditCardBubbleController
|
| +//
|
| +// A class to control showing and hiding a bubble after a credit card is
|
| +// generated.
|
| +//
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +class GeneratedCreditCardBubbleController
|
| + : public content::WebContentsObserver,
|
| + public content::WebContentsUserData<GeneratedCreditCardBubbleController> {
|
| + public:
|
| + virtual ~GeneratedCreditCardBubbleController();
|
| +
|
| + // Registers preferences this class cares about.
|
| + static void RegisterUserPrefs(user_prefs::PrefRegistrySyncable* registry);
|
| +
|
| + // Show a bubble to educate the user about generated (fronting) cards and how
|
| + // they are used to bill their original (backing) card.
|
| + static void Show(content::WebContents* contents,
|
| + const base::string16& backing_card_name,
|
| + const base::string16& fronting_card_name);
|
| +
|
| + // content::WebContentsObserver:
|
| + virtual void DidNavigateMainFrame(
|
| + const content::LoadCommittedDetails& details,
|
| + const content::FrameNavigateParams& params) OVERRIDE;
|
| +
|
| + // Returns whether |bubble_| is currently in the process of hiding.
|
| + bool IsHiding() const;
|
| +
|
| + // Returns the image that should be shown as an icon in the omnibox.
|
| + gfx::Image AnchorIcon() const;
|
| +
|
| + // The title of the bubble.
|
| + const base::string16& TitleText() const;
|
| +
|
| + // Text in the contents of the bubble.
|
| + const base::string16& ContentsText() const;
|
| +
|
| + // Ranges of text styles in the bubble's main content.
|
| + const std::vector<TextRange>& ContentsTextRanges() const;
|
| +
|
| + // Called when the anchor for this bubble is clicked. Shows a new bubble.
|
| + void OnAnchorClicked();
|
| +
|
| + // Called when the link at the bottom of the bubble is clicked. Opens and
|
| + // navigates a new tab to an informational page and hides the bubble.
|
| + void OnLinkClicked();
|
| +
|
| + // The web contents that successfully submitted the Autofill dialog (causing
|
| + // this bubble to show).
|
| + content::WebContents* web_contents() { return web_contents_; }
|
| + const content::WebContents* web_contents() const { return web_contents_; }
|
| +
|
| + protected:
|
| + // Creates a bubble connected to |web_contents|.
|
| + explicit GeneratedCreditCardBubbleController(content::WebContents* contents);
|
| +
|
| + // Returns a base::WeakPtr that references |this|. Exposed for testing.
|
| + base::WeakPtr<GeneratedCreditCardBubbleController> GetWeakPtr();
|
| +
|
| + // Creates and returns an Autofill credit card bubble. Exposed for testing.
|
| + virtual base::WeakPtr<GeneratedCreditCardBubbleView> CreateBubble();
|
| +
|
| + // Returns a weak reference to |bubble_|. May be invalid/NULL.
|
| + virtual base::WeakPtr<GeneratedCreditCardBubbleView> bubble();
|
| +
|
| + // Returns whether the bubble can currently show itself.
|
| + virtual bool CanShow() const;
|
| +
|
| + // Whether the generated card bubble should be shown initially when showing
|
| + // the anchor icon. This does not affect whether the generated card's icon
|
| + // will show in the omnibox.
|
| + bool ShouldDisplayBubbleInitially() const;
|
| +
|
| + // Generates the correct bubble text and text highlighting ranges and shows a
|
| + // bubble to educate the user about generated (fronting) cards and how they
|
| + // are used to bill their original (backing) card. Exposed for testing.
|
| + virtual void SetupAndShow(const base::string16& backing_card_name,
|
| + const base::string16& fronting_card_name);
|
| +
|
| + private:
|
| + friend class
|
| + content::WebContentsUserData<GeneratedCreditCardBubbleController>;
|
| +
|
| + // An internal helper to show the bubble.
|
| + void Show(bool was_anchor_click);
|
| +
|
| + // Updates the omnibox icon that |bubble_| is anchored to.
|
| + void UpdateAnchor();
|
| +
|
| + // Hides |bubble_| (if it exists and isn't already hiding).
|
| + void Hide();
|
| +
|
| + // The web contents associated with this bubble.
|
| + content::WebContents* const web_contents_;
|
| +
|
| + // The generated credit card number and associated backing card.
|
| + base::string16 fronting_card_name_;
|
| + base::string16 backing_card_name_;
|
| +
|
| + // The title text of the bubble.
|
| + const base::string16 title_text_;
|
| +
|
| + // Strings and ranges generated based on |backing_card_name_| and
|
| + // |fronting_card_name_|.
|
| + base::string16 contents_text_;
|
| + std::vector<TextRange> contents_text_ranges_;
|
| +
|
| + // A bubble view that's created by calling either |Show*()| method; owned by
|
| + // the native widget/hierarchy, not this class (though this class must outlive
|
| + // |bubble_|). NULL in many cases.
|
| + base::WeakPtr<GeneratedCreditCardBubbleView> bubble_;
|
| +
|
| + // Whether the anchor should currently be showing.
|
| + bool should_show_anchor_;
|
| +
|
| + // A weak pointer factory for |Create()|.
|
| + base::WeakPtrFactory<GeneratedCreditCardBubbleController> weak_ptr_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GeneratedCreditCardBubbleController);
|
| +};
|
| +
|
| +} // namespace autofill
|
| +
|
| +#endif // CHROME_BROWSER_UI_AUTOFILL_GENERATED_CREDIT_CARD_BUBBLE_CONTROLLER_H_
|
|
|