blob: dfcc18f70577f1575e89415723ef6f3e847de71e [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/cart/discount_url_loader.h"
#include "chrome/browser/cart/cart_service_factory.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list.h"
DiscountURLLoader::DiscountURLLoader(Browser* browser, Profile* profile) {
if (!browser) {
return;
}
browser->tab_strip_model()->AddObserver(this);
BrowserList::GetInstance()->AddObserver(this);
cart_service_ = CartServiceFactory::GetForProfile(profile);
}
DiscountURLLoader::~DiscountURLLoader() = default;
void DiscountURLLoader::ShutDown() {
BrowserList::GetInstance()->RemoveObserver(this);
}
void DiscountURLLoader::PrepareURLForDiscountLoad(const GURL& url) {
last_interacted_url_ = url;
}
void DiscountURLLoader::TabChangedAt(content::WebContents* contents,
int index,
TabChangeType change_type) {
if (change_type != TabChangeType::kAll) {
return;
}
if (last_interacted_url_) {
if (last_interacted_url_ == contents->GetVisibleURL()) {
cart_service_->GetDiscountURL(
contents->GetVisibleURL(),
base::BindOnce(&DiscountURLLoader::NavigateToDiscountURL,
weak_ptr_factory_.GetWeakPtr(),
contents->GetWeakPtr()));
}
last_interacted_url_.reset();
}
}
void DiscountURLLoader::OnBrowserAdded(Browser* browser) {
browser->tab_strip_model()->AddObserver(this);
}
void DiscountURLLoader::OnBrowserRemoved(Browser* browser) {
browser->tab_strip_model()->RemoveObserver(this);
}
void DiscountURLLoader::NavigateToDiscountURL(
base::WeakPtr<content::WebContents> contents,
const GURL& discount_url) {
if (!contents) {
return;
}
contents->GetController().LoadURL(discount_url, content::Referrer(),
ui::PAGE_TRANSITION_FIRST, std::string());
}