Commit e4d006b5 authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

Merge Previews UI Trigger code paths

Cleans up the APIs to show the previews UI by abstracting away the
InfoBar and leaving the Previews Tab Helper as the single point of
entry to show a Previews UI.

Also renames and moves the on dismiss callback so that it no longer
has "infobar" in its name.

Bug: 874523
Change-Id: I49735c52882d198cd9f6fe95725168691a88681d
Reviewed-on: https://chromium-review.googlesource.com/1176544Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Reviewed-by: default avatarEvan Stade <estade@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583766}
parent 75f9b72e
...@@ -415,8 +415,7 @@ void InfoBarUiTest::ShowUi(const std::string& name) { ...@@ -415,8 +415,7 @@ void InfoBarUiTest::ShowUi(const std::string& name) {
case IBD::DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE: case IBD::DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE:
PreviewsInfoBarDelegate::Create( PreviewsInfoBarDelegate::Create(
GetWebContents(), previews::PreviewsType::LOFI, base::Time::Now(), GetWebContents(), previews::PreviewsType::LOFI, base::Time::Now(),
true, true, true, true, OnDismissPreviewsUICallback(), nullptr);
PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback(), nullptr);
break; break;
case IBD::AUTOMATION_INFOBAR_DELEGATE: case IBD::AUTOMATION_INFOBAR_DELEGATE:
......
...@@ -61,12 +61,6 @@ void AddPreviewNavigationToBlackListCallback( ...@@ -61,12 +61,6 @@ void AddPreviewNavigationToBlackListCallback(
void OnLoFiResponseReceivedOnUI(content::WebContents* web_contents) { void OnLoFiResponseReceivedOnUI(content::WebContents* web_contents) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
// Retrieve PreviewsUIService* from |web_contents| if available.
PreviewsService* previews_service = PreviewsServiceFactory::GetForProfile(
Profile::FromBrowserContext(web_contents->GetBrowserContext()));
previews::PreviewsUIService* previews_ui_service =
previews_service ? previews_service->previews_ui_service() : nullptr;
PreviewsUITabHelper* ui_tab_helper = PreviewsUITabHelper* ui_tab_helper =
PreviewsUITabHelper::FromWebContents(web_contents); PreviewsUITabHelper::FromWebContents(web_contents);
...@@ -75,17 +69,15 @@ void OnLoFiResponseReceivedOnUI(content::WebContents* web_contents) { ...@@ -75,17 +69,15 @@ void OnLoFiResponseReceivedOnUI(content::WebContents* web_contents) {
page_id = ui_tab_helper->previews_user_data()->page_id(); page_id = ui_tab_helper->previews_user_data()->page_id();
} }
PreviewsInfoBarDelegate::Create( ui_tab_helper->ShowUIElement(
web_contents, previews::PreviewsType::LOFI, previews::PreviewsType::LOFI, base::Time() /* previews_freshness */,
base::Time() /* previews_freshness */, true /* is_data_saver_user */, true /* is_data_saver_user */, false /* is_reload */,
false /* is_reload */,
base::BindOnce(&AddPreviewNavigationToBlackListCallback, base::BindOnce(&AddPreviewNavigationToBlackListCallback,
web_contents->GetBrowserContext(), web_contents->GetBrowserContext(),
web_contents->GetController() web_contents->GetController()
.GetLastCommittedEntry() .GetLastCommittedEntry()
->GetRedirectChain()[0], ->GetRedirectChain()[0],
previews::PreviewsType::LOFI, page_id), previews::PreviewsType::LOFI, page_id));
previews_ui_service);
} }
} // namespace } // namespace
......
...@@ -115,7 +115,7 @@ void PreviewsInfoBarDelegate::Create( ...@@ -115,7 +115,7 @@ void PreviewsInfoBarDelegate::Create(
base::Time previews_freshness, base::Time previews_freshness,
bool is_data_saver_user, bool is_data_saver_user,
bool is_reload, bool is_reload,
OnDismissPreviewsInfobarCallback on_dismiss_callback, OnDismissPreviewsUICallback on_dismiss_callback,
previews::PreviewsUIService* previews_ui_service) { previews::PreviewsUIService* previews_ui_service) {
PreviewsUITabHelper* ui_tab_helper = PreviewsUITabHelper* ui_tab_helper =
PreviewsUITabHelper::FromWebContents(web_contents); PreviewsUITabHelper::FromWebContents(web_contents);
...@@ -167,7 +167,7 @@ PreviewsInfoBarDelegate::PreviewsInfoBarDelegate( ...@@ -167,7 +167,7 @@ PreviewsInfoBarDelegate::PreviewsInfoBarDelegate(
base::Time previews_freshness, base::Time previews_freshness,
bool is_data_saver_user, bool is_data_saver_user,
bool is_reload, bool is_reload,
OnDismissPreviewsInfobarCallback on_dismiss_callback) OnDismissPreviewsUICallback on_dismiss_callback)
: ConfirmInfoBarDelegate(), : ConfirmInfoBarDelegate(),
ui_tab_helper_(ui_tab_helper), ui_tab_helper_(ui_tab_helper),
previews_type_(previews_type), previews_type_(previews_type),
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
#ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_INFOBAR_DELEGATE_H_ #ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_INFOBAR_DELEGATE_H_
#define CHROME_BROWSER_PREVIEWS_PREVIEWS_INFOBAR_DELEGATE_H_ #define CHROME_BROWSER_PREVIEWS_PREVIEWS_INFOBAR_DELEGATE_H_
#include "base/callback.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/previews/previews_ui_tab_helper.h"
#include "components/infobars/core/confirm_infobar_delegate.h" #include "components/infobars/core/confirm_infobar_delegate.h"
#include "components/previews/core/previews_experiments.h" #include "components/previews/core/previews_experiments.h"
...@@ -27,9 +27,6 @@ class PreviewsUIService; ...@@ -27,9 +27,6 @@ class PreviewsUIService;
// infobar. // infobar.
class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate { class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate {
public: public:
typedef base::OnceCallback<void(bool opt_out)>
OnDismissPreviewsInfobarCallback;
// Actions on the previews infobar. This enum must remain synchronized with // Actions on the previews infobar. This enum must remain synchronized with
// the enum of the same name in metrics/histograms/histograms.xml. // the enum of the same name in metrics/histograms/histograms.xml.
enum PreviewsInfoBarAction { enum PreviewsInfoBarAction {
...@@ -59,16 +56,13 @@ class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate { ...@@ -59,16 +56,13 @@ class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate {
// Creates a preview infobar and corresponding delegate and adds the infobar // Creates a preview infobar and corresponding delegate and adds the infobar
// to InfoBarService. |on_dismiss_callback| is called when the InfoBar is // to InfoBarService. |on_dismiss_callback| is called when the InfoBar is
// dismissed. // dismissed.
static void Create( static void Create(content::WebContents* web_contents,
content::WebContents* web_contents, previews::PreviewsType previews_type,
previews::PreviewsType previews_type, base::Time previews_freshness,
base::Time previews_freshness, bool is_data_saver_user,
bool is_data_saver_user, bool is_reload,
bool is_reload, OnDismissPreviewsUICallback on_dismiss_callback,
// TODO(ryansturm): Replace |on_dismiss_callback| with direct call to previews::PreviewsUIService* previews_ui_service);
// |previews_ui_service|.
OnDismissPreviewsInfobarCallback on_dismiss_callback,
previews::PreviewsUIService* previews_ui_service);
// ConfirmInfoBarDelegate overrides: // ConfirmInfoBarDelegate overrides:
int GetIconId() const override; int GetIconId() const override;
...@@ -86,7 +80,7 @@ class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate { ...@@ -86,7 +80,7 @@ class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate {
base::Time previews_freshness, base::Time previews_freshness,
bool is_data_saver_user, bool is_data_saver_user,
bool is_reload, bool is_reload,
OnDismissPreviewsInfobarCallback on_dismiss_callback); OnDismissPreviewsUICallback on_dismiss_callback);
// ConfirmInfoBarDelegate overrides: // ConfirmInfoBarDelegate overrides:
infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override;
...@@ -105,7 +99,7 @@ class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate { ...@@ -105,7 +99,7 @@ class PreviewsInfoBarDelegate : public ConfirmInfoBarDelegate {
const base::string16 message_text_; const base::string16 message_text_;
OnDismissPreviewsInfobarCallback on_dismiss_callback_; OnDismissPreviewsUICallback on_dismiss_callback_;
DISALLOW_COPY_AND_ASSIGN(PreviewsInfoBarDelegate); DISALLOW_COPY_AND_ASSIGN(PreviewsInfoBarDelegate);
}; };
......
...@@ -320,8 +320,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, ...@@ -320,8 +320,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest,
PreviewsInfoBarDelegate::Create( PreviewsInfoBarDelegate::Create(
web_contents(), previews::PreviewsType::LOFI, web_contents(), previews::PreviewsType::LOFI,
base::Time() /* previews_freshness */, true /* is_data_saver_user */, base::Time() /* previews_freshness */, true /* is_data_saver_user */,
false /* is_reload */, false /* is_reload */, OnDismissPreviewsUICallback(),
PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback(),
previews_ui_service_.get()); previews_ui_service_.get());
EXPECT_EQ(1U, infobar_service()->infobar_count()); EXPECT_EQ(1U, infobar_service()->infobar_count());
...@@ -348,8 +347,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, ...@@ -348,8 +347,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest,
PreviewsInfoBarDelegate::Create( PreviewsInfoBarDelegate::Create(
web_contents(), previews::PreviewsType::LOFI, web_contents(), previews::PreviewsType::LOFI,
base::Time() /* previews_freshness */, true /* is_data_saver_user */, base::Time() /* previews_freshness */, true /* is_data_saver_user */,
false /* is_reload */, false /* is_reload */, OnDismissPreviewsUICallback(),
PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback(),
previews_ui_service_.get()); previews_ui_service_.get());
EXPECT_EQ(1U, infobar_service()->infobar_count()); EXPECT_EQ(1U, infobar_service()->infobar_count());
...@@ -478,8 +476,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, ...@@ -478,8 +476,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest,
PreviewsInfoBarDelegate::Create( PreviewsInfoBarDelegate::Create(
web_contents(), previews::PreviewsType::LOFI, web_contents(), previews::PreviewsType::LOFI,
base::Time() /* previews_freshness */, true /* is_data_saver_user */, base::Time() /* previews_freshness */, true /* is_data_saver_user */,
false /* is_reload */, false /* is_reload */, OnDismissPreviewsUICallback(),
PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback(),
previews_ui_service_.get()); previews_ui_service_.get());
// Infobar should not be shown again since a navigation hasn't happened. // Infobar should not be shown again since a navigation hasn't happened.
......
...@@ -53,6 +53,23 @@ void AddPreviewNavigationCallback(content::BrowserContext* browser_context, ...@@ -53,6 +53,23 @@ void AddPreviewNavigationCallback(content::BrowserContext* browser_context,
PreviewsUITabHelper::~PreviewsUITabHelper() {} PreviewsUITabHelper::~PreviewsUITabHelper() {}
void PreviewsUITabHelper::ShowUIElement(
previews::PreviewsType previews_type,
base::Time previews_freshness,
bool is_data_saver_user,
bool is_reload,
OnDismissPreviewsUICallback on_dismiss_callback) {
// Retrieve PreviewsUIService* from |web_contents| if available.
PreviewsService* previews_service = PreviewsServiceFactory::GetForProfile(
Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
previews::PreviewsUIService* previews_ui_service =
previews_service ? previews_service->previews_ui_service() : nullptr;
PreviewsInfoBarDelegate::Create(
web_contents(), previews_type, previews_freshness, is_data_saver_user,
is_reload, std::move(on_dismiss_callback), previews_ui_service);
}
PreviewsUITabHelper::PreviewsUITabHelper(content::WebContents* web_contents) PreviewsUITabHelper::PreviewsUITabHelper(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents), : content::WebContentsObserver(web_contents),
displayed_preview_ui_(false), displayed_preview_ui_(false),
...@@ -86,12 +103,6 @@ void PreviewsUITabHelper::DidFinishNavigation( ...@@ -86,12 +103,6 @@ void PreviewsUITabHelper::DidFinishNavigation(
displayed_preview_ui_ = false; displayed_preview_ui_ = false;
displayed_preview_timestamp_ = false; displayed_preview_timestamp_ = false;
// Retrieve PreviewsUIService* from |web_contents| if available.
PreviewsService* previews_service = PreviewsServiceFactory::GetForProfile(
Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
previews::PreviewsUIService* previews_ui_service =
previews_service ? previews_service->previews_ui_service() : nullptr;
#if BUILDFLAG(ENABLE_OFFLINE_PAGES) #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
offline_pages::OfflinePageTabHelper* tab_helper = offline_pages::OfflinePageTabHelper* tab_helper =
offline_pages::OfflinePageTabHelper::FromWebContents(web_contents()); offline_pages::OfflinePageTabHelper::FromWebContents(web_contents());
...@@ -128,16 +139,15 @@ void PreviewsUITabHelper::DidFinishNavigation( ...@@ -128,16 +139,15 @@ void PreviewsUITabHelper::DidFinishNavigation(
true, true,
data_use_measurement::DataUseUserData::OTHER, 0); data_use_measurement::DataUseUserData::OTHER, 0);
PreviewsInfoBarDelegate::Create( PreviewsUITabHelper::ShowUIElement(
web_contents(), previews::PreviewsType::OFFLINE, previews::PreviewsType::OFFLINE, base::Time() /* previews_freshness */,
base::Time() /* previews_freshness */,
data_reduction_proxy_settings && data_saver_enabled, data_reduction_proxy_settings && data_saver_enabled,
false /* is_reload */, false /* is_reload */,
base::BindOnce(&AddPreviewNavigationCallback, base::BindOnce(&AddPreviewNavigationCallback,
web_contents()->GetBrowserContext(), web_contents()->GetBrowserContext(),
navigation_handle->GetRedirectChain()[0], navigation_handle->GetRedirectChain()[0],
previews::PreviewsType::OFFLINE, page_id), previews::PreviewsType::OFFLINE, page_id));
previews_ui_service);
// Don't try to show other UIs if this is an offline preview. // Don't try to show other UIs if this is an offline preview.
return; return;
} }
...@@ -157,14 +167,13 @@ void PreviewsUITabHelper::DidFinishNavigation( ...@@ -157,14 +167,13 @@ void PreviewsUITabHelper::DidFinishNavigation(
headers->GetDateValue(&previews_freshness); headers->GetDateValue(&previews_freshness);
} }
PreviewsInfoBarDelegate::Create( PreviewsUITabHelper::ShowUIElement(
web_contents(), main_frame_preview, previews_freshness, main_frame_preview, previews_freshness, true /* is_data_saver_user */,
true /* is_data_saver_user */, is_reload, is_reload,
base::BindOnce(&AddPreviewNavigationCallback, base::BindOnce(&AddPreviewNavigationCallback,
web_contents()->GetBrowserContext(), web_contents()->GetBrowserContext(),
navigation_handle->GetRedirectChain()[0], navigation_handle->GetRedirectChain()[0],
main_frame_preview, page_id), main_frame_preview, page_id));
previews_ui_service);
} }
} }
} }
...@@ -5,12 +5,17 @@ ...@@ -5,12 +5,17 @@
#ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_UI_TAB_HELPER_H_ #ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_UI_TAB_HELPER_H_
#define CHROME_BROWSER_PREVIEWS_PREVIEWS_UI_TAB_HELPER_H_ #define CHROME_BROWSER_PREVIEWS_PREVIEWS_UI_TAB_HELPER_H_
#include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/time/time.h"
#include "components/previews/core/previews_experiments.h"
#include "components/previews/core/previews_user_data.h" #include "components/previews/core/previews_user_data.h"
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h" #include "content/public/browser/web_contents_user_data.h"
typedef base::OnceCallback<void(bool opt_out)> OnDismissPreviewsUICallback;
// Tracks whether a previews UI has been shown for a page. Handles showing // Tracks whether a previews UI has been shown for a page. Handles showing
// the UI when the main frame response indicates a Lite Page. // the UI when the main frame response indicates a Lite Page.
class PreviewsUITabHelper class PreviewsUITabHelper
...@@ -19,6 +24,13 @@ class PreviewsUITabHelper ...@@ -19,6 +24,13 @@ class PreviewsUITabHelper
public: public:
~PreviewsUITabHelper() override; ~PreviewsUITabHelper() override;
// Trigger the Previews UI to be shown to the user.
void ShowUIElement(previews::PreviewsType previews_type,
base::Time previews_freshness,
bool is_data_saver_user,
bool is_reload,
OnDismissPreviewsUICallback on_dismiss_callback);
// Indicates whether the UI for a preview has been shown for the page. // Indicates whether the UI for a preview has been shown for the page.
bool displayed_preview_ui() const { return displayed_preview_ui_; } bool displayed_preview_ui() const { return displayed_preview_ui_; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment