Revert "Reland c91b178b07b0d - Delete dead signin code (SigninGlobalError)"
[chromium-blink-merge.git] / chrome / browser / banners / app_banner_manager.cc
blobecbdac5a06e75ce0d16e4d404c051f1ac95447fd
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 #include "chrome/browser/banners/app_banner_manager.h"
7 #include "chrome/browser/banners/app_banner_data_fetcher.h"
8 #include "chrome/browser/banners/app_banner_debug_log.h"
9 #include "chrome/browser/banners/app_banner_settings_helper.h"
10 #include "content/public/browser/navigation_details.h"
11 #include "content/public/browser/render_frame_host.h"
12 #include "content/public/browser/web_contents.h"
13 #include "content/public/common/frame_navigate_params.h"
14 #include "content/public/common/origin_util.h"
15 #include "net/base/load_flags.h"
16 #include "ui/gfx/screen.h"
18 namespace {
19 bool gDisableSecureCheckForTesting = false;
20 } // anonymous namespace
22 namespace banners {
24 bool AppBannerManager::URLsAreForTheSamePage(const GURL& first,
25 const GURL& second) {
26 return first.GetWithEmptyPath() == second.GetWithEmptyPath() &&
27 first.path() == second.path() && first.query() == second.query();
30 AppBannerManager::AppBannerManager(int icon_size)
31 : ideal_icon_size_(icon_size),
32 data_fetcher_(nullptr),
33 weak_factory_(this) {
36 AppBannerManager::AppBannerManager(content::WebContents* web_contents,
37 int icon_size)
38 : content::WebContentsObserver(web_contents),
39 ideal_icon_size_(icon_size),
40 data_fetcher_(nullptr),
41 weak_factory_(this) {
44 AppBannerManager::~AppBannerManager() {
45 CancelActiveFetcher();
48 void AppBannerManager::DidCommitProvisionalLoadForFrame(
49 content::RenderFrameHost* render_frame_host,
50 const GURL& url,
51 ui::PageTransition transition_type) {
52 last_transition_type_ = transition_type;
55 void AppBannerManager::DidFinishLoad(
56 content::RenderFrameHost* render_frame_host,
57 const GURL& validated_url) {
58 if (render_frame_host->GetParent())
59 return;
61 if (data_fetcher_.get() && data_fetcher_->is_active() &&
62 URLsAreForTheSamePage(data_fetcher_->validated_url(), validated_url)) {
63 return;
66 // A secure origin is required to show banners, so exit early if we see the
67 // URL is invalid.
68 if (!content::IsOriginSecure(validated_url) &&
69 !gDisableSecureCheckForTesting) {
70 OutputDeveloperNotShownMessage(web_contents(), kNotServedFromSecureOrigin);
71 return;
74 // Kick off the data retrieval pipeline.
75 data_fetcher_ = CreateAppBannerDataFetcher(weak_factory_.GetWeakPtr(),
76 ideal_icon_size_);
77 data_fetcher_->Start(validated_url, last_transition_type_);
80 bool AppBannerManager::HandleNonWebApp(const std::string& platform,
81 const GURL& url,
82 const std::string& id) {
83 return false;
86 void AppBannerManager::ReplaceWebContents(content::WebContents* web_contents) {
87 Observe(web_contents);
88 if (data_fetcher_.get())
89 data_fetcher_.get()->ReplaceWebContents(web_contents);
92 void AppBannerManager::CancelActiveFetcher() {
93 if (data_fetcher_ != nullptr) {
94 data_fetcher_->Cancel();
95 data_fetcher_ = nullptr;
99 bool AppBannerManager::IsFetcherActive() {
100 return data_fetcher_ != nullptr && data_fetcher_->is_active();
103 void AppBannerManager::DisableSecureSchemeCheckForTesting() {
104 gDisableSecureCheckForTesting = true;
107 void AppBannerManager::ForceEngagementWeightsForTesting(
108 double direct_engagement,
109 double indirect_engagement) {
110 AppBannerSettingsHelper::SetEngagementWeights(direct_engagement,
111 indirect_engagement);
114 } // namespace banners