From 9cf41fa23c60a44e15b7dd1cab83a3a74de38925 Mon Sep 17 00:00:00 2001 From: Simon Hong Date: Thu, 12 Dec 2019 15:09:25 +0900 Subject: [PATCH] Make brave_wayback_machine component module and brave_wayback_machine communicates with brave layer with BraveWaybackMachineDelegate. --- .github/CODEOWNERS | 2 +- browser/BUILD.gn | 6 +- browser/brave_profile_prefs.cc | 2 +- browser/brave_profile_prefs_browsertest.cc | 2 +- browser/brave_tab_helpers.cc | 23 ++++- .../brave_wayback_machine_infobar_delegate.cc | 36 ------- .../brave_wayback_machine_tab_helper.cc | 64 ------------ .../brave_wayback_machine_util.cc | 28 ------ .../brave_wayback_machine_util.h | 19 ---- .../api/brave_wallet_api_browsertest.cc | 11 +-- browser/infobars/BUILD.gn | 13 ++- .../brave_confirm_p3a_infobar_delegate.cc | 2 +- .../brave_confirm_p3a_infobar_delegate.h | 2 - browser/infobars/brave_infobar_delegate.h | 17 ---- .../brave_wayback_machine_delegate_impl.cc | 21 ++++ .../brave_wayback_machine_delegate_impl.h | 36 +++++++ .../crypto_wallets_infobar_delegate.cc | 2 +- .../crypto_wallets_infobar_delegate.h | 2 - browser/resources/settings/BUILD.gn | 2 +- browser/ui/BUILD.gn | 6 +- browser/ui/views/infobars/BUILD.gn | 2 +- ...e_wayback_machine_infobar_contents_view.cc | 2 +- ...ve_wayback_machine_infobar_contents_view.h | 2 +- .../brave_wayback_machine_infobar_view.cc | 5 +- chromium_src/chrome/browser/ui/tab_helpers.cc | 8 ++ .../infobars/core/infobar_delegate.h | 18 ++++ .../brave_wayback_machine/BUILD.gn | 6 +- .../brave_wayback_machine_browsertest.cc | 25 ++--- .../brave_wayback_machine_delegate.h | 31 ++++++ .../brave_wayback_machine_infobar_delegate.cc | 23 +++++ .../brave_wayback_machine_infobar_delegate.h | 21 +--- .../brave_wayback_machine_tab_helper.cc | 99 +++++++++++++++++++ .../brave_wayback_machine_tab_helper.h | 30 ++++-- .../buildflags/buildflags.gni | 2 - .../wayback_machine_url_fetcher.cc | 5 +- .../wayback_machine_url_fetcher.h | 6 +- .../chrome-browser-ui-tab_helpers.cc.patch | 22 ++--- ...nts-infobars-core-infobar_delegate.h.patch | 12 +++ test/BUILD.gn | 4 +- 39 files changed, 356 insertions(+), 263 deletions(-) delete mode 100644 browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc delete mode 100644 browser/brave_wayback_machine/brave_wayback_machine_tab_helper.cc delete mode 100644 browser/brave_wayback_machine/brave_wayback_machine_util.cc delete mode 100644 browser/brave_wayback_machine/brave_wayback_machine_util.h delete mode 100644 browser/infobars/brave_infobar_delegate.h create mode 100644 browser/infobars/brave_wayback_machine_delegate_impl.cc create mode 100644 browser/infobars/brave_wayback_machine_delegate_impl.h create mode 100644 chromium_src/chrome/browser/ui/tab_helpers.cc create mode 100644 chromium_src/components/infobars/core/infobar_delegate.h rename {browser => components}/brave_wayback_machine/BUILD.gn (88%) rename {browser => components}/brave_wayback_machine/brave_wayback_machine_browsertest.cc (58%) create mode 100644 components/brave_wayback_machine/brave_wayback_machine_delegate.h create mode 100644 components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc rename {browser => components}/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h (58%) create mode 100644 components/brave_wayback_machine/brave_wayback_machine_tab_helper.cc rename {browser => components}/brave_wayback_machine/brave_wayback_machine_tab_helper.h (58%) rename {browser => components}/brave_wayback_machine/buildflags/buildflags.gni (64%) rename {browser => components}/brave_wayback_machine/wayback_machine_url_fetcher.cc (94%) rename {browser => components}/brave_wayback_machine/wayback_machine_url_fetcher.h (86%) create mode 100644 patches/components-infobars-core-infobar_delegate.h.patch diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a89fa282a33..32a2c041a73 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -35,8 +35,8 @@ browser/net/ @iefremov browser/widevine @simonhong # Wayback machine -browser/brave_wayback_machine @simonhong browser/ui/views/infobars @simonhong +components/brave_wayback_machine @simonhong # Licensing of third-party components common/licenses/ @fmarier diff --git a/browser/BUILD.gn b/browser/BUILD.gn index 9509b204336..e8bc52b4f6e 100644 --- a/browser/BUILD.gn +++ b/browser/BUILD.gn @@ -1,9 +1,9 @@ import("//brave/build/config.gni") import("//brave/browser/tor/buildflags/buildflags.gni") -import("//brave/browser/brave_wayback_machine/buildflags/buildflags.gni") import("//brave/components/brave_ads/browser/buildflags/buildflags.gni") import("//brave/components/brave_sync/buildflags/buildflags.gni") import("//brave/components/brave_wallet/browser/buildflags/buildflags.gni") +import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni") import("//brave/components/brave_webtorrent/browser/buildflags/buildflags.gni") import("//brave/components/greaselion/browser/buildflags/buildflags.gni") import("//build/buildflag_header.gni") @@ -122,7 +122,6 @@ source_set("browser_process") { "//brave/browser/notifications", "//brave/browser/tor:buildflags", "//brave/browser/translate/buildflags", - "//brave/browser/brave_wayback_machine:buildflags", "//brave/common", "//brave/common:pref_names", "//brave/components/brave_ads/browser", @@ -132,6 +131,7 @@ source_set("browser_process") { "//brave/components/brave_rewards/browser", "//brave/components/brave_shields/browser", "//brave/components/brave_wallet/browser", + "//brave/components/brave_wayback_machine:buildflags", "//brave/components/brave_webtorrent/browser/buildflags", "//brave/components/content_settings/core/browser", "//brave/components/greaselion/browser/buildflags", @@ -267,7 +267,7 @@ source_set("browser_process") { if (enable_brave_wayback_machine) { deps += [ - "//brave/browser/brave_wayback_machine", + "//brave/components/brave_wayback_machine", ] } diff --git a/browser/brave_profile_prefs.cc b/browser/brave_profile_prefs.cc index ac807441509..16b9d85ba89 100644 --- a/browser/brave_profile_prefs.cc +++ b/browser/brave_profile_prefs.cc @@ -5,10 +5,10 @@ #include "brave/browser/brave_profile_prefs.h" -#include "brave/browser/brave_wayback_machine/buildflags.h" #include "brave/common/pref_names.h" #include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h" #include "brave/components/brave_sync/brave_sync_prefs.h" +#include "brave/components/brave_wayback_machine/buildflags.h" #include "brave/components/brave_webtorrent/browser/buildflags/buildflags.h" #include "chrome/browser/net/prediction_options.h" #include "chrome/browser/prefs/session_startup_pref.h" diff --git a/browser/brave_profile_prefs_browsertest.cc b/browser/brave_profile_prefs_browsertest.cc index 31027a4b6b9..6839bfe16fe 100644 --- a/browser/brave_profile_prefs_browsertest.cc +++ b/browser/brave_profile_prefs_browsertest.cc @@ -3,8 +3,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "brave/browser/brave_wayback_machine/buildflags.h" #include "brave/common/pref_names.h" +#include "brave/components/brave_wayback_machine/buildflags.h" #include "chrome/browser/net/prediction_options.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" diff --git a/browser/brave_tab_helpers.cc b/browser/brave_tab_helpers.cc index 8e8e8f1c5c3..2d5474f54e7 100644 --- a/browser/brave_tab_helpers.cc +++ b/browser/brave_tab_helpers.cc @@ -5,13 +5,18 @@ #include "brave/browser/brave_tab_helpers.h" +#include + #include "brave/browser/ui/bookmark/brave_bookmark_tab_helper.h" -#include "brave/browser/brave_wayback_machine/buildflags.h" +#include "brave/browser/profiles/profile_util.h" +#include "brave/common/brave_switches.h" #include "brave/components/brave_ads/browser/ads_tab_helper.h" #include "brave/components/brave_rewards/browser/buildflags/buildflags.h" #include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h" #include "brave/components/brave_shields/browser/buildflags/buildflags.h" // For STP +#include "brave/components/brave_wayback_machine/buildflags.h" #include "brave/components/greaselion/browser/buildflags/buildflags.h" +#include "chrome/browser/infobars/infobar_service.h" #include "content/public/browser/web_contents.h" #include "third_party/widevine/cdm/buildflags.h" @@ -38,7 +43,8 @@ #endif #if BUILDFLAG(ENABLE_BRAVE_WAYBACK_MACHINE) -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.h" +#include "brave/browser/infobars/brave_wayback_machine_delegate_impl.h" +#include "brave/components/brave_wayback_machine/brave_wayback_machine_tab_helper.h" #endif namespace brave { @@ -73,7 +79,18 @@ void AttachTabHelpers(content::WebContents* web_contents) { #endif #if BUILDFLAG(ENABLE_BRAVE_WAYBACK_MACHINE) - BraveWaybackMachineTabHelper::AttachTabHelperIfNeeded(web_contents); + auto* context = web_contents->GetBrowserContext(); + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableBraveWaybackMachineExtension) && + !brave::IsTorProfile(context)) { + BraveWaybackMachineTabHelper::CreateForWebContents(web_contents); + auto* tab_helper = + BraveWaybackMachineTabHelper::FromWebContents(web_contents); + tab_helper->SetInfoBarManager( + InfoBarService::FromWebContents(web_contents)); + tab_helper->SetDelegate(std::make_unique( + Profile::FromBrowserContext(context))); + } #endif brave_ads::AdsTabHelper::CreateForWebContents(web_contents); diff --git a/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc b/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc deleted file mode 100644 index 470acaaae58..00000000000 --- a/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h" - -#include "base/memory/ptr_util.h" -#include "brave/browser/infobars/brave_infobar_delegate.h" -#include "chrome/browser/infobars/infobar_service.h" -#include "components/infobars/core/infobar.h" - -using InfoBarIdentifier = infobars::InfoBarDelegate::InfoBarIdentifier; - -// static -void BraveWaybackMachineInfoBarDelegate::Create( - content::WebContents* contents) { - InfoBarService* infobar_service = InfoBarService::FromWebContents(contents); - infobar_service->AddInfoBar( - BraveWaybackMachineInfoBarDelegate::CreateInfoBar( - base::WrapUnique(new BraveWaybackMachineInfoBarDelegate), - contents), - true); -} - -BraveWaybackMachineInfoBarDelegate::BraveWaybackMachineInfoBarDelegate() { -} - -InfoBarIdentifier BraveWaybackMachineInfoBarDelegate::GetIdentifier() const { - return static_cast(WAYBACK_MACHINE_INFOBAR_DELEGATE); -} - -bool BraveWaybackMachineInfoBarDelegate::EqualsDelegate( - infobars::InfoBarDelegate* delegate) const { - return delegate->GetIdentifier() == GetIdentifier(); -} diff --git a/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.cc b/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.cc deleted file mode 100644 index 5bd06d65cff..00000000000 --- a/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.cc +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.h" - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/task/post_task.h" -#include "base/task/task_traits.h" -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_util.h" -#include "brave/browser/profiles/profile_util.h" -#include "brave/common/brave_switches.h" -#include "content/public/browser/navigation_handle.h" -#include "content/public/browser/web_contents.h" -#include "net/http/http_response_headers.h" - -// static -void BraveWaybackMachineTabHelper::AttachTabHelperIfNeeded( - content::WebContents* contents) { - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableBraveWaybackMachineExtension)) - return; - - if (brave::IsTorProfile(contents->GetBrowserContext())) - return; - - BraveWaybackMachineTabHelper::CreateForWebContents(contents); -} - -BraveWaybackMachineTabHelper::BraveWaybackMachineTabHelper( - content::WebContents* contents) - : WebContentsObserver(contents), - weak_factory_(this) { -} - -BraveWaybackMachineTabHelper::~BraveWaybackMachineTabHelper() { -} - -void BraveWaybackMachineTabHelper::DidFinishNavigation( - content::NavigationHandle* navigation_handle) { - if (!IsWaybackMachineEnabled(web_contents()->GetBrowserContext()) || - !navigation_handle->IsInMainFrame() || - navigation_handle->IsSameDocument()) { - return; - } - - if (const net::HttpResponseHeaders* header = - navigation_handle->GetResponseHeaders()) { - // Create infobar in the next loop for not blocking navigation. - PostTask(FROM_HERE, - { base::CurrentThread(), base::TaskPriority::BEST_EFFORT }, - base::BindOnce(&BraveWaybackMachineTabHelper::CreateInfoBar, - weak_factory_.GetWeakPtr(), - header->response_code())); - } -} - -void BraveWaybackMachineTabHelper::CreateInfoBar(int response_code) { - CheckWaybackMachineIfNeeded(web_contents(), response_code); -} - -WEB_CONTENTS_USER_DATA_KEY_IMPL(BraveWaybackMachineTabHelper) diff --git a/browser/brave_wayback_machine/brave_wayback_machine_util.cc b/browser/brave_wayback_machine/brave_wayback_machine_util.cc deleted file mode 100644 index 37faae120ee..00000000000 --- a/browser/brave_wayback_machine/brave_wayback_machine_util.cc +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_util.h" - -#include "base/containers/flat_set.h" -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h" -#include "brave/common/pref_names.h" -#include "chrome/browser/profiles/profile.h" -#include "components/prefs/pref_service.h" -#include "content/public/browser/web_contents.h" - -void CheckWaybackMachineIfNeeded(content::WebContents* contents, - int response_code) { - static base::flat_set responses = - { 404, 408, 410, 451, 500, 502, 503, 504, - 509, 520, 521, 523, 524, 525, 526 }; - - if (responses.find(response_code) != responses.end()) - BraveWaybackMachineInfoBarDelegate::Create(contents); -} - -bool IsWaybackMachineEnabled(content::BrowserContext* context) { - Profile* profile = Profile::FromBrowserContext(context); - return profile->GetPrefs()->GetBoolean(kBraveWaybackMachineEnabled); -} diff --git a/browser/brave_wayback_machine/brave_wayback_machine_util.h b/browser/brave_wayback_machine/brave_wayback_machine_util.h deleted file mode 100644 index 2f52837e033..00000000000 --- a/browser/brave_wayback_machine/brave_wayback_machine_util.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_UTIL_H_ -#define BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_UTIL_H_ - -namespace content { -class BrowserContext; -class WebContents; -} // namespace content - -void CheckWaybackMachineIfNeeded(content::WebContents* contents, - int response_code); - -bool IsWaybackMachineEnabled(content::BrowserContext* context); - -#endif // BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_UTIL_H_ diff --git a/browser/extensions/api/brave_wallet_api_browsertest.cc b/browser/extensions/api/brave_wallet_api_browsertest.cc index f8df5e3b883..bb4b2d1bfd9 100644 --- a/browser/extensions/api/brave_wallet_api_browsertest.cc +++ b/browser/extensions/api/brave_wallet_api_browsertest.cc @@ -101,8 +101,8 @@ class BraveWalletAPIBrowserTest : public InProcessBrowserTest, for (size_t i = 0; i < infobar_service->infobar_count(); i++) { InfoBarDelegate* delegate = infobar_service->infobar_at(i)->delegate(); - if (delegate->GetIdentifier() == (InfoBarDelegate::InfoBarIdentifier) - CRYPTO_WALLETS_INFOBAR_DELEGATE) { + if (delegate->GetIdentifier() == + InfoBarDelegate::CRYPTO_WALLETS_INFOBAR_DELEGATE) { ConfirmInfoBarDelegate* confirm_delegate = delegate->AsConfirmInfoBarDelegate(); // Only the OK button should be present @@ -118,8 +118,8 @@ class BraveWalletAPIBrowserTest : public InProcessBrowserTest, for (size_t i = 0; i < infobar_service->infobar_count(); i++) { InfoBarDelegate* delegate = infobar_service->infobar_at(i)->delegate(); - if (delegate->GetIdentifier() == (InfoBarDelegate::InfoBarIdentifier) - CRYPTO_WALLETS_INFOBAR_DELEGATE) { + if (delegate->GetIdentifier() == + InfoBarDelegate::CRYPTO_WALLETS_INFOBAR_DELEGATE) { ConfirmInfoBarDelegate* confirm_delegate = delegate->AsConfirmInfoBarDelegate(); // Only the OK button should be present @@ -148,8 +148,7 @@ class BraveWalletAPIBrowserTest : public InProcessBrowserTest, void OnInfoBarAdded(InfoBar* infobar) override { if (infobar_added_run_loop_ && infobar->delegate()->GetIdentifier() == - (InfoBarDelegate::InfoBarIdentifier) - CRYPTO_WALLETS_INFOBAR_DELEGATE) { + InfoBarDelegate::CRYPTO_WALLETS_INFOBAR_DELEGATE) { infobar_added_ = true; infobar_added_run_loop_->Quit(); } diff --git a/browser/infobars/BUILD.gn b/browser/infobars/BUILD.gn index 7f5225f69af..3d31e8aa8b8 100644 --- a/browser/infobars/BUILD.gn +++ b/browser/infobars/BUILD.gn @@ -1,10 +1,10 @@ import("//build/config/features.gni") +import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni") source_set("infobars") { sources = [ "brave_confirm_p3a_infobar_delegate.cc", "brave_confirm_p3a_infobar_delegate.h", - "brave_infobar_delegate.h", "crypto_wallets_infobar_delegate.cc", "crypto_wallets_infobar_delegate.h", ] @@ -23,4 +23,15 @@ source_set("infobars") { "//ui/views", "//url", ] + + if (enable_brave_wayback_machine) { + sources += [ + "brave_wayback_machine_delegate_impl.cc", + "brave_wayback_machine_delegate_impl.h", + ] + + deps += [ + "//brave/components/brave_wayback_machine", + ] + } } diff --git a/browser/infobars/brave_confirm_p3a_infobar_delegate.cc b/browser/infobars/brave_confirm_p3a_infobar_delegate.cc index fc283a19796..9e469a3b581 100644 --- a/browser/infobars/brave_confirm_p3a_infobar_delegate.cc +++ b/browser/infobars/brave_confirm_p3a_infobar_delegate.cc @@ -47,7 +47,7 @@ BraveConfirmP3AInfoBarDelegate::~BraveConfirmP3AInfoBarDelegate() {} infobars::InfoBarDelegate::InfoBarIdentifier BraveConfirmP3AInfoBarDelegate::GetIdentifier() const { - return (InfoBarIdentifier)BRAVE_CONFIRM_P3A_INFOBAR_DELEGATE; + return BRAVE_CONFIRM_P3A_INFOBAR_DELEGATE; } const gfx::VectorIcon& BraveConfirmP3AInfoBarDelegate::GetVectorIcon() const { diff --git a/browser/infobars/brave_confirm_p3a_infobar_delegate.h b/browser/infobars/brave_confirm_p3a_infobar_delegate.h index bef966ec616..218a57d3b79 100644 --- a/browser/infobars/brave_confirm_p3a_infobar_delegate.h +++ b/browser/infobars/brave_confirm_p3a_infobar_delegate.h @@ -12,8 +12,6 @@ #include "components/infobars/core/confirm_infobar_delegate.h" #include "url/gurl.h" -#include "brave/browser/infobars/brave_infobar_delegate.h" - class InfoBarService; class PrefService; diff --git a/browser/infobars/brave_infobar_delegate.h b/browser/infobars/brave_infobar_delegate.h deleted file mode 100644 index a9dd57f82c6..00000000000 --- a/browser/infobars/brave_infobar_delegate.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef BRAVE_BROWSER_INFOBARS_BRAVE_INFOBAR_DELEGATE_H_ -#define BRAVE_BROWSER_INFOBARS_BRAVE_INFOBAR_DELEGATE_H_ - -#include "components/infobars/core/infobar_delegate.h" - -enum BraveInfoBarIdentifier { - BRAVE_CONFIRM_P3A_INFOBAR_DELEGATE = 500, - CRYPTO_WALLETS_INFOBAR_DELEGATE = 501, - WAYBACK_MACHINE_INFOBAR_DELEGATE = 502, -}; - -#endif // BRAVE_BROWSER_INFOBARS_BRAVE_INFOBAR_DELEGATE_H_ diff --git a/browser/infobars/brave_wayback_machine_delegate_impl.cc b/browser/infobars/brave_wayback_machine_delegate_impl.cc new file mode 100644 index 00000000000..e5631d296b7 --- /dev/null +++ b/browser/infobars/brave_wayback_machine_delegate_impl.cc @@ -0,0 +1,21 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/browser/infobars/brave_wayback_machine_delegate_impl.h" + +#include "brave/common/pref_names.h" +#include "chrome/browser/profiles/profile.h" +#include "components/prefs/pref_service.h" + +BraveWaybackMachineDelegateImpl::BraveWaybackMachineDelegateImpl( + Profile* profile) + : profile_(profile) { +} + +BraveWaybackMachineDelegateImpl::~BraveWaybackMachineDelegateImpl() = default; + +bool BraveWaybackMachineDelegateImpl::IsWaybackMachineEnabled() const { + return profile_->GetPrefs()->GetBoolean(kBraveWaybackMachineEnabled); +} diff --git a/browser/infobars/brave_wayback_machine_delegate_impl.h b/browser/infobars/brave_wayback_machine_delegate_impl.h new file mode 100644 index 00000000000..54f1ef36eb3 --- /dev/null +++ b/browser/infobars/brave_wayback_machine_delegate_impl.h @@ -0,0 +1,36 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_BROWSER_INFOBARS_BRAVE_WAYBACK_MACHINE_DELEGATE_IMPL_H_ +#define BRAVE_BROWSER_INFOBARS_BRAVE_WAYBACK_MACHINE_DELEGATE_IMPL_H_ + +#include + +#include "brave/components/brave_wayback_machine/brave_wayback_machine_delegate.h" + +class Profile; + +class BraveWaybackMachineDelegateImpl : public BraveWaybackMachineDelegate { + public: + explicit BraveWaybackMachineDelegateImpl(Profile* profile); + ~BraveWaybackMachineDelegateImpl() override; + + BraveWaybackMachineDelegateImpl( + const BraveWaybackMachineDelegateImpl&) = delete; + BraveWaybackMachineDelegateImpl& operator=( + const BraveWaybackMachineDelegateImpl&) = delete; + + private: + // BraveWaybackMachineDelegate overrides: + bool IsWaybackMachineEnabled() const override; + + std::unique_ptr CreateInfoBar( + std::unique_ptr delegate, + content::WebContents* contents) override; + + Profile* profile_; +}; + +#endif // BRAVE_BROWSER_INFOBARS_BRAVE_WAYBACK_MACHINE_DELEGATE_IMPL_H_ diff --git a/browser/infobars/crypto_wallets_infobar_delegate.cc b/browser/infobars/crypto_wallets_infobar_delegate.cc index c22af3c821e..a7f98a21109 100644 --- a/browser/infobars/crypto_wallets_infobar_delegate.cc +++ b/browser/infobars/crypto_wallets_infobar_delegate.cc @@ -40,7 +40,7 @@ CryptoWalletsInfoBarDelegate::~CryptoWalletsInfoBarDelegate() {} infobars::InfoBarDelegate::InfoBarIdentifier CryptoWalletsInfoBarDelegate::GetIdentifier() const { - return (InfoBarIdentifier)CRYPTO_WALLETS_INFOBAR_DELEGATE; + return CRYPTO_WALLETS_INFOBAR_DELEGATE; } const gfx::VectorIcon& CryptoWalletsInfoBarDelegate::GetVectorIcon() const { diff --git a/browser/infobars/crypto_wallets_infobar_delegate.h b/browser/infobars/crypto_wallets_infobar_delegate.h index db1b20e3ae5..db79e053a6c 100644 --- a/browser/infobars/crypto_wallets_infobar_delegate.h +++ b/browser/infobars/crypto_wallets_infobar_delegate.h @@ -12,8 +12,6 @@ #include "components/infobars/core/confirm_infobar_delegate.h" #include "url/gurl.h" -#include "brave/browser/infobars/brave_infobar_delegate.h" - class InfoBarService; class PrefService; diff --git a/browser/resources/settings/BUILD.gn b/browser/resources/settings/BUILD.gn index c19e403ba39..3cda4e79901 100644 --- a/browser/resources/settings/BUILD.gn +++ b/browser/resources/settings/BUILD.gn @@ -1,6 +1,6 @@ -import("//brave/browser/brave_wayback_machine/buildflags/buildflags.gni") import("//brave/browser/tor/buildflags/buildflags.gni") import("//brave/build/config.gni") +import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni") import("//chrome/browser/resources/optimize_webui.gni") import("//chrome/common/features.gni") import("//tools/grit/grit_rule.gni") diff --git a/browser/ui/BUILD.gn b/browser/ui/BUILD.gn index 24d7328eaa5..1b2dd737afb 100644 --- a/browser/ui/BUILD.gn +++ b/browser/ui/BUILD.gn @@ -1,9 +1,9 @@ -import("//brave/browser/brave_wayback_machine/buildflags/buildflags.gni") import("//brave/browser/translate/buildflags/buildflags.gni") import("//brave/build/config.gni") import("//brave/components/brave_rewards/browser/buildflags/buildflags.gni") import("//brave/components/brave_sync/buildflags/buildflags.gni") import("//brave/components/brave_wallet/browser/buildflags/buildflags.gni") +import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni") import("//build/config/features.gni") import("//components/gcm_driver/config.gni") import("//chrome/common/features.gni") @@ -164,12 +164,12 @@ source_set("ui") { "//brave/app/theme:brave_unscaled_resources", "//brave/app/vector_icons:vector_icons", "//brave/browser:sparkle_buildflags", - "//brave/browser/brave_wayback_machine:buildflags", "//brave/browser/devtools", "//brave/browser/gcm_driver", "//brave/browser/profiles", "//brave/browser/resources/settings:resources", "//brave/browser/tor", + "//brave/components/brave_wayback_machine:buildflags", "//brave/components/webcompat_reporter/browser", "//brave/common", "//brave/common:pref_names", @@ -210,7 +210,7 @@ source_set("ui") { } if (enable_brave_wayback_machine) { - deps += [ "//brave/browser/brave_wayback_machine" ] + deps += [ "//brave/components/brave_wayback_machine" ] if (toolkit_views) { deps += [ "//brave/browser/ui/views/infobars:brave_wayback_machine" ] diff --git a/browser/ui/views/infobars/BUILD.gn b/browser/ui/views/infobars/BUILD.gn index 16d0d301569..4ec2665404e 100644 --- a/browser/ui/views/infobars/BUILD.gn +++ b/browser/ui/views/infobars/BUILD.gn @@ -13,7 +13,7 @@ source_set("brave_wayback_machine") { deps = [ "//brave/app:brave_generated_resources_grit", "//brave/app/vector_icons", - "//brave/browser/brave_wayback_machine", + "//brave/components/brave_wayback_machine", "//components/resources", "//content/public/browser", "//ui/base", diff --git a/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.cc b/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.cc index d4f221a89cb..d382604e0cb 100644 --- a/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.cc +++ b/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.cc @@ -10,9 +10,9 @@ #include #include "brave/app/vector_icons/vector_icons.h" -#include "brave/browser/brave_wayback_machine/wayback_machine_url_fetcher.h" #include "brave/browser/themes/theme_properties.h" #include "brave/browser/ui/views/infobars/brave_wayback_machine_infobar_button_container.h" +#include "brave/components/brave_wayback_machine/wayback_machine_url_fetcher.h" #include "brave/grit/brave_generated_resources.h" #include "brave/grit/brave_theme_resources.h" #include "chrome/browser/infobars/infobar_service.h" diff --git a/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.h b/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.h index df420d13354..24c0f4fec04 100644 --- a/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.h +++ b/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.h @@ -8,7 +8,7 @@ #include -#include "brave/browser/brave_wayback_machine/wayback_machine_url_fetcher.h" +#include "brave/components/brave_wayback_machine/wayback_machine_url_fetcher.h" #include "ui/views/controls/button/button.h" namespace content { diff --git a/browser/ui/views/infobars/brave_wayback_machine_infobar_view.cc b/browser/ui/views/infobars/brave_wayback_machine_infobar_view.cc index 5fea28c3683..5050cfe101e 100644 --- a/browser/ui/views/infobars/brave_wayback_machine_infobar_view.cc +++ b/browser/ui/views/infobars/brave_wayback_machine_infobar_view.cc @@ -8,12 +8,13 @@ #include #include -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h" +#include "brave/browser/infobars/brave_wayback_machine_delegate_impl.h" #include "brave/browser/ui/views/infobars/brave_wayback_machine_infobar_contents_view.h" +#include "brave/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h" // static std::unique_ptr -BraveWaybackMachineInfoBarDelegate::CreateInfoBar( +BraveWaybackMachineDelegateImpl::CreateInfoBar( std::unique_ptr delegate, content::WebContents* contents) { return std::make_unique(std::move(delegate), diff --git a/chromium_src/chrome/browser/ui/tab_helpers.cc b/chromium_src/chrome/browser/ui/tab_helpers.cc new file mode 100644 index 00000000000..276c3abc494 --- /dev/null +++ b/chromium_src/chrome/browser/ui/tab_helpers.cc @@ -0,0 +1,8 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/browser/brave_tab_helpers.h" + +#include "../../../../../chrome/browser/ui/tab_helpers.cc" // NOLINT diff --git a/chromium_src/components/infobars/core/infobar_delegate.h b/chromium_src/components/infobars/core/infobar_delegate.h new file mode 100644 index 00000000000..ae0126b8fae --- /dev/null +++ b/chromium_src/components/infobars/core/infobar_delegate.h @@ -0,0 +1,18 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_CHROMIUM_SRC_COMPONENTS_INFOBARS_CORE_INFOBAR_DELEGATE_H_ +#define BRAVE_CHROMIUM_SRC_COMPONENTS_INFOBARS_CORE_INFOBAR_DELEGATE_H_ + +#define BRAVE_INFOBAR_DELEGATE_IDENTIFIERS \ + BRAVE_CONFIRM_P3A_INFOBAR_DELEGATE = 500, \ + CRYPTO_WALLETS_INFOBAR_DELEGATE = 501, \ + WAYBACK_MACHINE_INFOBAR_DELEGATE = 502, + +#include "../../../../../components/infobars/core/infobar_delegate.h" + +#undef BRAVE_INFOBAR_DELEGATE_IDENTIFIERS + +#endif // BRAVE_CHROMIUM_SRC_COMPONENTS_INFOBARS_CORE_INFOBAR_DELEGATE_H_ diff --git a/browser/brave_wayback_machine/BUILD.gn b/components/brave_wayback_machine/BUILD.gn similarity index 88% rename from browser/brave_wayback_machine/BUILD.gn rename to components/brave_wayback_machine/BUILD.gn index 65e18aea32a..ad1be1f5944 100644 --- a/browser/brave_wayback_machine/BUILD.gn +++ b/components/brave_wayback_machine/BUILD.gn @@ -7,20 +7,20 @@ buildflag_header("buildflags") { } source_set("brave_wayback_machine") { + assert_no_deps = [ "//chrome/*" ] + sources = [ + "brave_wayback_machine_delegate.h", "brave_wayback_machine_infobar_delegate.cc", "brave_wayback_machine_infobar_delegate.h", "brave_wayback_machine_tab_helper.cc", "brave_wayback_machine_tab_helper.h", - "brave_wayback_machine_util.cc", - "brave_wayback_machine_util.h", "wayback_machine_url_fetcher.cc", "wayback_machine_url_fetcher.h", ] deps = [ "//base", - "//brave/common", "//components/infobars/core", "//components/prefs", "//content/public/browser", diff --git a/browser/brave_wayback_machine/brave_wayback_machine_browsertest.cc b/components/brave_wayback_machine/brave_wayback_machine_browsertest.cc similarity index 58% rename from browser/brave_wayback_machine/brave_wayback_machine_browsertest.cc rename to components/brave_wayback_machine/brave_wayback_machine_browsertest.cc index 961867c56b4..4a569000155 100644 --- a/browser/brave_wayback_machine/brave_wayback_machine_browsertest.cc +++ b/components/brave_wayback_machine/brave_wayback_machine_browsertest.cc @@ -3,7 +3,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "brave/browser/brave_wayback_machine/brave_wayback_machine_util.h" +#include "brave/components/brave_wayback_machine/brave_wayback_machine_tab_helper.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -28,23 +28,14 @@ class TestObserver : public infobars::InfoBarManager::Observer { } // namespace IN_PROC_BROWSER_TEST_F(BraveWaybackMachineTest, InfobarAddTest) { - EXPECT_TRUE(IsWaybackMachineEnabled(browser()->profile())); - auto* model = browser()->tab_strip_model(); auto* contents = model->GetActiveWebContents(); - InfoBarService* infobar_service = InfoBarService::FromWebContents(contents); + auto* tab_helper = BraveWaybackMachineTabHelper::FromWebContents(contents); + auto* infobar_service = InfoBarService::FromWebContents(contents); - // For 200 response code, wayback inforbar isn't added. - TestObserver observer_for_200; - EXPECT_CALL(observer_for_200, OnInfoBarAdded(_)).Times(0); - infobar_service->AddObserver(&observer_for_200); - CheckWaybackMachineIfNeeded(contents, 200); - infobar_service->RemoveObserver(&observer_for_200); - - // For 404 response code, wayback inforbar is added. - TestObserver observer_for_404; - EXPECT_CALL(observer_for_404, OnInfoBarAdded(_)).Times(1); - infobar_service->AddObserver(&observer_for_404); - CheckWaybackMachineIfNeeded(contents, 404); - infobar_service->RemoveObserver(&observer_for_404); + TestObserver observer; + EXPECT_CALL(observer, OnInfoBarAdded(_)).Times(1); + infobar_service->AddObserver(&observer); + tab_helper->CreateInfoBar(); + infobar_service->RemoveObserver(&observer); } diff --git a/components/brave_wayback_machine/brave_wayback_machine_delegate.h b/components/brave_wayback_machine/brave_wayback_machine_delegate.h new file mode 100644 index 00000000000..55b14daa55e --- /dev/null +++ b/components/brave_wayback_machine/brave_wayback_machine_delegate.h @@ -0,0 +1,31 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_DELEGATE_H_ +#define BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_DELEGATE_H_ + +#include + +namespace content { +class WebContents; +} // namespace content + +namespace infobars { +class InfoBar; +} // namespace infobars + +class BraveWaybackMachineInfoBarDelegate; + +class BraveWaybackMachineDelegate { + public: + virtual ~BraveWaybackMachineDelegate() = default; + + virtual bool IsWaybackMachineEnabled() const = 0; + virtual std::unique_ptr CreateInfoBar( + std::unique_ptr delegate, + content::WebContents* contents) = 0; +}; + +#endif // BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_DELEGATE_H_ diff --git a/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc b/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc new file mode 100644 index 00000000000..0294643e2cf --- /dev/null +++ b/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.cc @@ -0,0 +1,23 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h" + +using InfoBarIdentifier = infobars::InfoBarDelegate::InfoBarIdentifier; + +BraveWaybackMachineInfoBarDelegate:: +BraveWaybackMachineInfoBarDelegate() = default; + +BraveWaybackMachineInfoBarDelegate:: +~BraveWaybackMachineInfoBarDelegate() = default; + +InfoBarIdentifier BraveWaybackMachineInfoBarDelegate::GetIdentifier() const { + return WAYBACK_MACHINE_INFOBAR_DELEGATE; +} + +bool BraveWaybackMachineInfoBarDelegate::EqualsDelegate( + infobars::InfoBarDelegate* delegate) const { + return delegate->GetIdentifier() == GetIdentifier(); +} diff --git a/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h b/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h similarity index 58% rename from browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h rename to components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h index 88db02586b4..2e2d1846769 100644 --- a/browser/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h +++ b/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h @@ -3,21 +3,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_INFOBAR_DELEGATE_H_ -#define BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_INFOBAR_DELEGATE_H_ +#ifndef BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_INFOBAR_DELEGATE_H_ +#define BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_INFOBAR_DELEGATE_H_ #include #include "components/infobars/core/infobar_delegate.h" -namespace content { -class WebContents; -} // namespace content - class BraveWaybackMachineInfoBarDelegate : public infobars::InfoBarDelegate { public: - static void Create(content::WebContents* contents); - ~BraveWaybackMachineInfoBarDelegate() override = default; + BraveWaybackMachineInfoBarDelegate(); + ~BraveWaybackMachineInfoBarDelegate() override; BraveWaybackMachineInfoBarDelegate( const BraveWaybackMachineInfoBarDelegate&) = delete; @@ -25,17 +21,10 @@ class BraveWaybackMachineInfoBarDelegate : public infobars::InfoBarDelegate { const BraveWaybackMachineInfoBarDelegate&) = delete; private: - BraveWaybackMachineInfoBarDelegate(); - - // Returns an infobar that owns |delegate|. - static std::unique_ptr CreateInfoBar( - std::unique_ptr delegate, - content::WebContents* contents); - // infobars::InfoBarDelegate overrides: InfoBarIdentifier GetIdentifier() const override; bool EqualsDelegate( infobars::InfoBarDelegate* delegate) const override; }; -#endif // BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_INFOBAR_DELEGATE_H_ +#endif // BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_INFOBAR_DELEGATE_H_ diff --git a/components/brave_wayback_machine/brave_wayback_machine_tab_helper.cc b/components/brave_wayback_machine/brave_wayback_machine_tab_helper.cc new file mode 100644 index 00000000000..63f496915be --- /dev/null +++ b/components/brave_wayback_machine/brave_wayback_machine_tab_helper.cc @@ -0,0 +1,99 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/components/brave_wayback_machine/brave_wayback_machine_tab_helper.h" + +#include + +#include "base/bind.h" +#include "base/command_line.h" +#include "base/containers/flat_set.h" +#include "base/task/post_task.h" +#include "base/task/task_traits.h" +#include "brave/components/brave_wayback_machine/brave_wayback_machine_delegate.h" +#include "brave/components/brave_wayback_machine/brave_wayback_machine_infobar_delegate.h" +#include "components/infobars/core/infobar.h" +#include "components/infobars/core/infobar_manager.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/web_contents.h" +#include "net/http/http_response_headers.h" +#include "net/http/http_status_code.h" + +BraveWaybackMachineTabHelper::BraveWaybackMachineTabHelper( + content::WebContents* contents) + : WebContentsObserver(contents), + weak_factory_(this) { +} + +BraveWaybackMachineTabHelper::~BraveWaybackMachineTabHelper() = default; + +void BraveWaybackMachineTabHelper::SetInfoBarManager( + infobars::InfoBarManager* manager) { + DCHECK(manager); + infobar_manager_ = manager; +} +void BraveWaybackMachineTabHelper::SetDelegate( + std::unique_ptr delegate) { + DCHECK(delegate); + delegate_ = std::move(delegate); +} + +void BraveWaybackMachineTabHelper::DidFinishNavigation( + content::NavigationHandle* navigation_handle) { + DCHECK(delegate_); + if (!delegate_->IsWaybackMachineEnabled()) + return; + + if (!navigation_handle->IsInMainFrame() || + navigation_handle->IsSameDocument()) { + return; + } + + if (const net::HttpResponseHeaders* header = + navigation_handle->GetResponseHeaders()) { + if (!ShouldAttachWaybackMachineInfoBar(header->response_code())) + return; + + // Create infobar in the next loop for not blocking navigation. + PostTask(FROM_HERE, + { base::CurrentThread(), base::TaskPriority::BEST_EFFORT }, + base::BindOnce(&BraveWaybackMachineTabHelper::CreateInfoBar, + weak_factory_.GetWeakPtr())); + } +} + +void BraveWaybackMachineTabHelper::CreateInfoBar() { + DCHECK(infobar_manager_); + infobar_manager_->AddInfoBar( + delegate_->CreateInfoBar( + std::make_unique(), + web_contents()), + true); +} + +bool BraveWaybackMachineTabHelper::ShouldAttachWaybackMachineInfoBar( + int response_code) const { + static base::flat_set responses = { + net::HTTP_NOT_FOUND, // 404 + net::HTTP_REQUEST_TIMEOUT, // 408 + net::HTTP_GONE, // 410 + 451, // Unavailable For Legal Reasons + net::HTTP_INTERNAL_SERVER_ERROR, // 500 + net::HTTP_BAD_GATEWAY, // 502, + net::HTTP_SERVICE_UNAVAILABLE, // 503, + net::HTTP_GATEWAY_TIMEOUT, // 504, + 509, // Bandwidth Limit Exceeded + 520, // Web Server Returned an Unknown Error + 521, // Web Server Is Down + 523, // Origin Is Unreachable + 524, // A Timeout Occurred + 525, // SSL Handshake Failed + 526 // Invalid SSL Certificate + }; + + return responses.find(response_code) != responses.end(); +} + +WEB_CONTENTS_USER_DATA_KEY_IMPL(BraveWaybackMachineTabHelper) diff --git a/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.h b/components/brave_wayback_machine/brave_wayback_machine_tab_helper.h similarity index 58% rename from browser/brave_wayback_machine/brave_wayback_machine_tab_helper.h rename to components/brave_wayback_machine/brave_wayback_machine_tab_helper.h index 32c371a9f69..cddbe5ecf5c 100644 --- a/browser/brave_wayback_machine/brave_wayback_machine_tab_helper.h +++ b/components/brave_wayback_machine/brave_wayback_machine_tab_helper.h @@ -3,20 +3,25 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_TAB_HELPER_H_ -#define BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_TAB_HELPER_H_ +#ifndef BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_TAB_HELPER_H_ +#define BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_TAB_HELPER_H_ + +#include #include "base/memory/weak_ptr.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" +namespace infobars { +class InfoBarManager; +} // namespace infobars + +class BraveWaybackMachineDelegate; + class BraveWaybackMachineTabHelper : public content::WebContentsObserver, public content::WebContentsUserData { public: - // Don't attach to tabs in tor profile. - static void AttachTabHelperIfNeeded(content::WebContents* contents); - explicit BraveWaybackMachineTabHelper(content::WebContents* contents); ~BraveWaybackMachineTabHelper() override; @@ -24,15 +29,26 @@ class BraveWaybackMachineTabHelper BraveWaybackMachineTabHelper& operator=( const BraveWaybackMachineTabHelper&) = delete; + void SetInfoBarManager(infobars::InfoBarManager* manager); + void SetDelegate(std::unique_ptr delegate); + WEB_CONTENTS_USER_DATA_KEY_DECL(); private: + FRIEND_TEST_ALL_PREFIXES(BraveWaybackMachineTest, InfobarAddTest); + // content::WebContentsObserver overrides: void DidFinishNavigation( content::NavigationHandle* navigation_handle) override; - void CreateInfoBar(int response_code); + void CreateInfoBar(); + + // virtual for test. + virtual bool ShouldAttachWaybackMachineInfoBar(int response_code) const; + + infobars::InfoBarManager* infobar_manager_ = nullptr; + std::unique_ptr delegate_; base::WeakPtrFactory weak_factory_; }; -#endif // BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_TAB_HELPER_H_ +#endif // BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_BRAVE_WAYBACK_MACHINE_TAB_HELPER_H_ diff --git a/browser/brave_wayback_machine/buildflags/buildflags.gni b/components/brave_wayback_machine/buildflags/buildflags.gni similarity index 64% rename from browser/brave_wayback_machine/buildflags/buildflags.gni rename to components/brave_wayback_machine/buildflags/buildflags.gni index af237134f8a..ff51d251755 100644 --- a/browser/brave_wayback_machine/buildflags/buildflags.gni +++ b/components/brave_wayback_machine/buildflags/buildflags.gni @@ -1,5 +1,3 @@ -import("//extensions/buildflags/buildflags.gni") - declare_args() { enable_brave_wayback_machine = is_win || is_mac || is_desktop_linux } diff --git a/browser/brave_wayback_machine/wayback_machine_url_fetcher.cc b/components/brave_wayback_machine/wayback_machine_url_fetcher.cc similarity index 94% rename from browser/brave_wayback_machine/wayback_machine_url_fetcher.cc rename to components/brave_wayback_machine/wayback_machine_url_fetcher.cc index c970cf4453d..7d83bce3da7 100644 --- a/browser/brave_wayback_machine/wayback_machine_url_fetcher.cc +++ b/components/brave_wayback_machine/wayback_machine_url_fetcher.cc @@ -3,13 +3,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "brave/browser/brave_wayback_machine/wayback_machine_url_fetcher.h" +#include "brave/components/brave_wayback_machine/wayback_machine_url_fetcher.h" #include #include "base/bind.h" #include "base/json/json_reader.h" -#include "brave/common/url_constants.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -19,6 +18,8 @@ namespace { constexpr int kMaxBodySize = 1024 * 1024; +constexpr char kWaybackQueryURL[] = + "https://archive.org/wayback/available?url="; const net::NetworkTrafficAnnotationTag& GetNetworkTrafficAnnotationTag() { static const net::NetworkTrafficAnnotationTag network_traffic_annotation_tag = diff --git a/browser/brave_wayback_machine/wayback_machine_url_fetcher.h b/components/brave_wayback_machine/wayback_machine_url_fetcher.h similarity index 86% rename from browser/brave_wayback_machine/wayback_machine_url_fetcher.h rename to components/brave_wayback_machine/wayback_machine_url_fetcher.h index 46ae6ea5483..88750b1ae9e 100644 --- a/browser/brave_wayback_machine/wayback_machine_url_fetcher.h +++ b/components/brave_wayback_machine/wayback_machine_url_fetcher.h @@ -3,8 +3,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_WAYBACK_MACHINE_URL_FETCHER_H_ -#define BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_WAYBACK_MACHINE_URL_FETCHER_H_ +#ifndef BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_WAYBACK_MACHINE_URL_FETCHER_H_ +#define BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_WAYBACK_MACHINE_URL_FETCHER_H_ #include #include @@ -49,4 +49,4 @@ class WaybackMachineURLFetcher final { std::unique_ptr wayback_url_loader_; }; -#endif // BRAVE_BROWSER_BRAVE_WAYBACK_MACHINE_WAYBACK_MACHINE_URL_FETCHER_H_ +#endif // BRAVE_COMPONENTS_BRAVE_WAYBACK_MACHINE_WAYBACK_MACHINE_URL_FETCHER_H_ diff --git a/patches/chrome-browser-ui-tab_helpers.cc.patch b/patches/chrome-browser-ui-tab_helpers.cc.patch index efefc874f53..a9dac86dc84 100644 --- a/patches/chrome-browser-ui-tab_helpers.cc.patch +++ b/patches/chrome-browser-ui-tab_helpers.cc.patch @@ -1,20 +1,10 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc -index 12af72905098faf0c10b9deafd41017f874035df..614d803ecf1df897bf07fc203eedcedae52a7e51 100644 +index 12af72905098faf0c10b9deafd41017f874035df..d3787db96587353e7bd151a97f5407dd2d17e487 100644 --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -11,6 +11,7 @@ - #include "base/feature_list.h" - #include "base/time/default_tick_clock.h" - #include "base/trace_event/trace_event.h" -+#include "brave/browser/brave_tab_helpers.h" - #include "build/build_config.h" - #include "chrome/browser/bookmarks/bookmark_model_factory.h" - #include "chrome/browser/browser_process.h" -@@ -199,6 +200,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { - autofill::ChromeAutofillClient::FromWebContents(web_contents), - g_browser_process->GetApplicationLocale(), - autofill::AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER); +@@ -378,4 +378,5 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { + // See https://crbug.com/910288. + resource_coordinator::ResourceCoordinatorTabHelper::CreateForWebContents( + web_contents); + brave::AttachTabHelpers(web_contents); - chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents); - ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient( - web_contents, + } diff --git a/patches/components-infobars-core-infobar_delegate.h.patch b/patches/components-infobars-core-infobar_delegate.h.patch new file mode 100644 index 00000000000..7e99fcbfa1a --- /dev/null +++ b/patches/components-infobars-core-infobar_delegate.h.patch @@ -0,0 +1,12 @@ +diff --git a/components/infobars/core/infobar_delegate.h b/components/infobars/core/infobar_delegate.h +index aeb127a573768ea92c5687e649c3a61c9e731fce..3b29bdc60ab77cede7a88ac2f6db42392dc328e1 100644 +--- a/components/infobars/core/infobar_delegate.h ++++ b/components/infobars/core/infobar_delegate.h +@@ -159,6 +159,7 @@ class InfoBarDelegate { + TAB_SHARING_INFOBAR_DELEGATE = 93, + SAFETY_TIP_INFOBAR_DELEGATE = 94, + SMS_RECEIVER_INFOBAR_DELEGATE = 95, ++ BRAVE_INFOBAR_DELEGATE_IDENTIFIERS + }; + + // Describes navigation events, used to decide whether infobars should be diff --git a/test/BUILD.gn b/test/BUILD.gn index b5cc04548d7..495f759fd0d 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -1,5 +1,4 @@ import("//brave/build/config.gni") -import("//brave/browser/brave_wayback_machine/buildflags/buildflags.gni") import("//brave/browser/tor/buildflags/buildflags.gni") import("//brave/browser/translate/buildflags/buildflags.gni") import("//brave/components/brave_ads/browser/buildflags/buildflags.gni") @@ -7,6 +6,7 @@ import("//brave/components/brave_referrals/buildflags/buildflags.gni") import("//brave/components/brave_rewards/browser/buildflags/buildflags.gni") import("//brave/components/brave_sync/buildflags/buildflags.gni") import("//brave/components/brave_wallet/browser/buildflags/buildflags.gni") +import("//brave/components/brave_wayback_machine/buildflags/buildflags.gni") import("//brave/components/brave_webtorrent/browser/buildflags/buildflags.gni") import("//brave/components/greaselion/browser/buildflags/buildflags.gni") import("//components/gcm_driver/config.gni") @@ -624,7 +624,7 @@ test("brave_browser_tests") { if (enable_brave_wayback_machine) { sources += [ - "//brave/browser/brave_wayback_machine/brave_wayback_machine_browsertest.cc", + "//brave/components/brave_wayback_machine/brave_wayback_machine_browsertest.cc", ] }