Commit 3cc1c6fe authored by Caroline Rising's avatar Caroline Rising Committed by Chromium LUCI CQ

Read later: show bookmark bar on user's first save to reading list.

Add a reading list profile pref for whether the first use experience has
been shown.

Bug: 1109316
Change-Id: I62495a0804910e25c2b3498ed6923362b6b8447d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2611445Reviewed-by: default avatarMichael Wasserman <msw@chromium.org>
Reviewed-by: default avatarOlivier Robin <olivierrobin@chromium.org>
Commit-Queue: Caroline Rising <corising@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841570}
parent fae44482
......@@ -90,6 +90,7 @@
#include "components/prefs/pref_service.h"
#include "components/reading_list/core/reading_list_entry.h"
#include "components/reading_list/core/reading_list_model.h"
#include "components/reading_list/core/reading_list_pref_names.h"
#include "components/services/app_service/public/mojom/types.mojom.h"
#include "components/sessions/core/live_tab_context.h"
#include "components/sessions/core/tab_restore_service.h"
......@@ -1055,6 +1056,7 @@ bool MoveCurrentTabToReadLater(Browser* browser) {
return false;
model->AddEntry(url, base::UTF16ToUTF8(title),
reading_list::EntrySource::ADDED_VIA_CURRENT_APP);
MaybeShowBookmarkBarForReadLater(browser);
return true;
}
......@@ -1081,6 +1083,20 @@ bool IsCurrentTabUnreadInReadLater(Browser* browser) {
return entry && !entry->IsRead();
}
void MaybeShowBookmarkBarForReadLater(Browser* browser) {
#if !defined(OS_ANDROID)
PrefService* pref_service = browser->profile()->GetPrefs();
if (pref_service &&
!pref_service->GetBoolean(
reading_list::prefs::kReadingListDesktopFirstUseExperienceShown)) {
pref_service->SetBoolean(
reading_list::prefs::kReadingListDesktopFirstUseExperienceShown, true);
if (browser->bookmark_bar_state() == BookmarkBar::HIDDEN)
ToggleBookmarkBar(browser);
}
#endif // defined(OS_ANDROID)
}
void SaveCreditCard(Browser* browser) {
WebContents* web_contents =
browser->tab_strip_model()->GetActiveWebContents();
......
......@@ -145,6 +145,7 @@ bool CanMoveActiveTabToReadLater(Browser* browser);
bool MoveCurrentTabToReadLater(Browser* browser);
bool MarkCurrentTabAsReadInReadLater(Browser* browser);
bool IsCurrentTabUnreadInReadLater(Browser* browser);
void MaybeShowBookmarkBarForReadLater(Browser* browser);
void SaveCreditCard(Browser* browser);
void MigrateLocalCards(Browser* browser);
void MaybeShowSaveLocalCardSignInPromo(Browser* browser);
......
......@@ -4,12 +4,14 @@
#include "chrome/browser/ui/browser_commands.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/reading_list/features/reading_list_switches.h"
#include "content/public/test/browser_test.h"
namespace chrome {
......@@ -165,4 +167,46 @@ IN_PROC_BROWSER_TEST_F(BrowserCommandsTest, MoveActiveTabToNewWindow) {
url2);
}
class ReadLaterBrowserCommandsTest : public BrowserCommandsTest {
public:
ReadLaterBrowserCommandsTest() {
feature_list_.InitAndEnableFeature(reading_list::switches::kReadLater);
}
~ReadLaterBrowserCommandsTest() override = default;
private:
base::test::ScopedFeatureList feature_list_;
};
// Verify that the bookmark bar is shown the first time someone saves to read
// later.
IN_PROC_BROWSER_TEST_F(ReadLaterBrowserCommandsTest,
PRE_ReadLaterOpensBookmarksBarOnFirstUse) {
GURL url("https://www.google.com");
ui_test_utils::NavigateToURL(browser(), url);
EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
// Verify the bookmark bar is shown after saving to the reading list.
MoveCurrentTabToReadLater(browser());
EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state());
ToggleBookmarkBar(browser());
EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
// Verify the bookmark bar isn't reshown on subsequent saves to the reading
// list.
MoveCurrentTabToReadLater(browser());
EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
}
// Verify that the bookmark bar is not reshown after Chrome restarts.
IN_PROC_BROWSER_TEST_F(ReadLaterBrowserCommandsTest,
ReadLaterOpensBookmarksBarOnFirstUse) {
GURL url("https://www.google.com");
ui_test_utils::NavigateToURL(browser(), url);
EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
// Verify the bookmark bar is still hidden after saving to the reading list.
MoveCurrentTabToReadLater(browser());
EXPECT_EQ(BookmarkBar::HIDDEN, browser()->bookmark_bar_state());
}
} // namespace chrome
......@@ -89,6 +89,11 @@ void ReadingListModelFactory::RegisterProfilePrefs(
registry->RegisterBooleanPref(
reading_list::prefs::kReadingListHasUnseenEntries, false,
PrefRegistry::NO_REGISTRATION_FLAGS);
#if !defined(OS_ANDROID)
registry->RegisterBooleanPref(
reading_list::prefs::kReadingListDesktopFirstUseExperienceShown, false,
PrefRegistry::NO_REGISTRATION_FLAGS);
#endif // !defined(OS_ANDROID)
}
content::BrowserContext* ReadingListModelFactory::GetBrowserContextToUse(
......
......@@ -30,6 +30,7 @@
#include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
#include "chrome/browser/ui/bookmarks/bookmark_utils.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/read_later/reading_list_model_factory.h"
#include "chrome/browser/ui/tab_ui_helper.h"
......@@ -2154,6 +2155,11 @@ void TabStripModel::AddToReadLaterImpl(const std::vector<int>& indices) {
reading_list::EntrySource::ADDED_VIA_CURRENT_APP);
}
}
// Maybe show the bookmark bar if an item exists in read later.
if (model->size()) {
chrome::MaybeShowBookmarkBarForReadLater(
chrome::FindBrowserWithWebContents(GetWebContentsAt(indices[0])));
}
}
base::Optional<tab_groups::TabGroupId> TabStripModel::UngroupTab(int index) {
......
......@@ -11,5 +11,11 @@ namespace prefs {
// device. Not synced.
const char kReadingListHasUnseenEntries[] = "reading_list.has_unseen_entries";
#if !defined(OS_ANDROID) && !defined(OS_IOS)
// Boolean to track if the first-use experience has been shown on desktop.
const char kReadingListDesktopFirstUseExperienceShown[] =
"reading_list.desktop_first_use_experience_shown";
#endif // !defined(OS_ANDROID) && !defined(OS_IOS)
} // namespace prefs
} // namespace reading_list
......@@ -7,11 +7,17 @@
#ifndef COMPONENTS_READING_LIST_CORE_READING_LIST_PREF_NAMES_H_
#define COMPONENTS_READING_LIST_CORE_READING_LIST_PREF_NAMES_H_
#include "build/build_config.h"
namespace reading_list {
namespace prefs {
extern const char kReadingListHasUnseenEntries[];
#if !defined(OS_ANDROID) && !defined(OS_IOS)
extern const char kReadingListDesktopFirstUseExperienceShown[];
#endif // !defined(OS_ANDROID) && !defined(OS_IOS)
} // namespace prefs
} // namespace reading_list
......
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