[sql] Remove _HAS_EXCEPTIONS=0 from build info.
[chromium-blink-merge.git] / chrome / browser / banners / app_banner_manager.h
blobed051fc05c76eafd4c094848bb77b4131beafed8
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_BANNERS_APP_BANNER_MANAGER_H_
6 #define CHROME_BROWSER_BANNERS_APP_BANNER_MANAGER_H_
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/weak_ptr.h"
11 #include "chrome/browser/banners/app_banner_data_fetcher.h"
12 #include "content/public/browser/web_contents_observer.h"
13 #include "third_party/WebKit/public/platform/modules/app_banner/WebAppBannerPromptReply.h"
15 namespace content {
16 struct FrameNavigateParams;
17 struct LoadCommittedDetails;
18 } // namespace content
20 namespace banners {
21 class AppBannerDataFetcher;
23 /**
24 * Creates an app banner.
26 * Hooks the wiring together for getting the data for a particular app.
27 * Monitors at most one app at a time, tracking the info for the most recently
28 * requested app. Any work in progress for other apps is discarded.
30 class AppBannerManager : public content::WebContentsObserver,
31 public AppBannerDataFetcher::Delegate {
32 public:
33 static void DisableSecureSchemeCheckForTesting();
35 static void ForceEngagementWeightsForTesting(double direct_engagement,
36 double indirect_engagement);
38 // Returns whether or not the URLs match for everything except for the ref.
39 static bool URLsAreForTheSamePage(const GURL& first, const GURL& second);
41 explicit AppBannerManager(int icon_size);
42 ~AppBannerManager() override;
44 // WebContentsObserver overrides.
45 void DidCommitProvisionalLoadForFrame(
46 content::RenderFrameHost* render_frame_host,
47 const GURL& url,
48 ui::PageTransition transition_type) override;
50 void DidFinishLoad(content::RenderFrameHost* render_frame_host,
51 const GURL& validated_url) override;
53 protected:
54 AppBannerManager(content::WebContents* web_contents, int icon_size);
56 void ReplaceWebContents(content::WebContents* web_contents);
58 // Creates an AppBannerDataFetcher, which constructs an app banner.
59 virtual AppBannerDataFetcher* CreateAppBannerDataFetcher(
60 base::WeakPtr<AppBannerDataFetcher::Delegate> weak_delegate,
61 const int ideal_icon_size) = 0;
63 // Return whether the AppBannerDataFetcher is active.
64 bool IsFetcherActive();
66 scoped_refptr<AppBannerDataFetcher> data_fetcher() { return data_fetcher_; }
67 int ideal_icon_size() { return ideal_icon_size_; }
69 private:
70 // AppBannerDataFetcher::Delegate overrides.
71 bool HandleNonWebApp(const std::string& platform,
72 const GURL& url,
73 const std::string& id) override;
75 // Called after the manager sends a message to the renderer regarding its
76 // intention to show a prompt. The renderer will send a message back with the
77 // opportunity to cancel.
78 void OnBannerPromptReply(content::RenderFrameHost* render_frame_host,
79 int request_id,
80 blink::WebAppBannerPromptReply reply);
82 // Cancels an active DataFetcher, stopping its banners from appearing.
83 void CancelActiveFetcher();
85 // Ideal icon size to use.
86 const int ideal_icon_size_;
88 // The type of navigation made to the page
89 ui::PageTransition last_transition_type_;
91 // Fetches the data required to display a banner for the current page.
92 scoped_refptr<AppBannerDataFetcher> data_fetcher_;
94 // A weak pointer is used as the lifetime of the ServiceWorkerContext is
95 // longer than the lifetime of this banner manager. The banner manager
96 // might be gone when calls sent to the ServiceWorkerContext are completed.
97 base::WeakPtrFactory<AppBannerManager> weak_factory_;
99 DISALLOW_COPY_AND_ASSIGN(AppBannerManager);
100 }; // class AppBannerManager
102 } // namespace banners
104 #endif // CHROME_BROWSER_BANNERS_APP_BANNER_MANAGER_H_