Commit cdcdc5ea authored by Gauthier Ambard's avatar Gauthier Ambard Committed by Commit Bot

Show FindInPage activity only when it is relevant

The FindInPage activity should only be shown when the FindInPage action
is doing something.
This CL adds a BOOL to know if the page can be searched. It is used to
display the activity or not.

Bug: 871260
Cq-Include-Trybots: luci.chromium.try:ios-simulator-full-configs;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I514b67e4b7e0f00258c0c1a8310975394ac3468c
Reviewed-on: https://chromium-review.googlesource.com/1172287
Commit-Queue: Gauthier Ambard <gambard@chromium.org>
Reviewed-by: default avatarPeter Lee <pkl@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582590}
parent 9347775e
...@@ -31,6 +31,7 @@ source_set("activity_services") { ...@@ -31,6 +31,7 @@ source_set("activity_services") {
"//ios/chrome/browser", "//ios/chrome/browser",
"//ios/chrome/browser/bookmarks", "//ios/chrome/browser/bookmarks",
"//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state",
"//ios/chrome/browser/find_in_page",
"//ios/chrome/browser/passwords", "//ios/chrome/browser/passwords",
"//ios/chrome/browser/snapshots", "//ios/chrome/browser/snapshots",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
......
...@@ -268,9 +268,12 @@ NSString* const kActivityServicesSnackbarCategory = ...@@ -268,9 +268,12 @@ NSString* const kActivityServicesSnackbarCategory =
dispatcher:dispatcher]; dispatcher:dispatcher];
[applicationActivities addObject:bookmarkActivity]; [applicationActivities addObject:bookmarkActivity];
} }
FindInPageActivity* findInPageActivity =
[[FindInPageActivity alloc] initWithDispatcher:dispatcher]; if (data.isPageSearchable) {
[applicationActivities addObject:findInPageActivity]; FindInPageActivity* findInPageActivity =
[[FindInPageActivity alloc] initWithDispatcher:dispatcher];
[applicationActivities addObject:findInPageActivity];
}
if (data.userAgent != web::UserAgentType::NONE) { if (data.userAgent != web::UserAgentType::NONE) {
RequestDesktopOrMobileSiteActivity* requestActivity = RequestDesktopOrMobileSiteActivity* requestActivity =
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
#import "ios/chrome/browser/passwords/password_form_filler.h" #import "ios/chrome/browser/passwords/password_form_filler.h"
#import "ios/chrome/browser/ui/activity_services/activities/bookmark_activity.h" #import "ios/chrome/browser/ui/activity_services/activities/bookmark_activity.h"
#import "ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.h"
#import "ios/chrome/browser/ui/activity_services/activities/print_activity.h" #import "ios/chrome/browser/ui/activity_services/activities/print_activity.h"
#import "ios/chrome/browser/ui/activity_services/activities/request_desktop_or_mobile_site_activity.h" #import "ios/chrome/browser/ui/activity_services/activities/request_desktop_or_mobile_site_activity.h"
#import "ios/chrome/browser/ui/activity_services/activity_type_util.h" #import "ios/chrome/browser/ui/activity_services/activity_type_util.h"
...@@ -210,6 +211,7 @@ class ActivityServiceControllerTest : public PlatformTest { ...@@ -210,6 +211,7 @@ class ActivityServiceControllerTest : public PlatformTest {
title:@"" title:@""
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
} }
...@@ -366,6 +368,7 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForData) { ...@@ -366,6 +368,7 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForData) {
title:@"foo" title:@"foo"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items = [activityController activityItemsForData:data]; NSArray* items = [activityController activityItemsForData:data];
...@@ -389,6 +392,7 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) { ...@@ -389,6 +392,7 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) {
title:@"kung fu fighting" title:@"kung fu fighting"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items = [activityController activityItemsForData:data]; NSArray* items = [activityController activityItemsForData:data];
...@@ -452,6 +456,7 @@ TEST_F(ActivityServiceControllerTest, ...@@ -452,6 +456,7 @@ TEST_F(ActivityServiceControllerTest,
title:@"kung fu fighting" title:@"kung fu fighting"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items = [activityController activityItemsForData:data]; NSArray* items = [activityController activityItemsForData:data];
...@@ -555,6 +560,7 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) { ...@@ -555,6 +560,7 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
title:@"bar" title:@"bar"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
...@@ -579,6 +585,7 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) { ...@@ -579,6 +585,7 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
title:@"baz" title:@"baz"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:NO isPagePrintable:NO
isPageSearchable:YES
userAgent:web::UserAgentType::NONE userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data items = [activityController applicationActivitiesForData:data
...@@ -611,6 +618,7 @@ TEST_F(ActivityServiceControllerTest, HTTPActivities) { ...@@ -611,6 +618,7 @@ TEST_F(ActivityServiceControllerTest, HTTPActivities) {
title:@"bar" title:@"bar"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
...@@ -626,6 +634,7 @@ TEST_F(ActivityServiceControllerTest, HTTPActivities) { ...@@ -626,6 +634,7 @@ TEST_F(ActivityServiceControllerTest, HTTPActivities) {
title:@"baz" title:@"baz"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data items = [activityController applicationActivitiesForData:data
...@@ -649,6 +658,7 @@ TEST_F(ActivityServiceControllerTest, BookmarkActivities) { ...@@ -649,6 +658,7 @@ TEST_F(ActivityServiceControllerTest, BookmarkActivities) {
title:@"bar" title:@"bar"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
...@@ -675,6 +685,7 @@ TEST_F(ActivityServiceControllerTest, BookmarkActivities) { ...@@ -675,6 +685,7 @@ TEST_F(ActivityServiceControllerTest, BookmarkActivities) {
title:@"baz" title:@"baz"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data items = [activityController applicationActivitiesForData:data
...@@ -706,6 +717,7 @@ TEST_F(ActivityServiceControllerTest, RequestMobileDesktopSite) { ...@@ -706,6 +717,7 @@ TEST_F(ActivityServiceControllerTest, RequestMobileDesktopSite) {
title:@"bar" title:@"bar"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
id mockDispatcher = OCMProtocolMock(@protocol(BrowserCommands)); id mockDispatcher = OCMProtocolMock(@protocol(BrowserCommands));
...@@ -730,6 +742,7 @@ TEST_F(ActivityServiceControllerTest, RequestMobileDesktopSite) { ...@@ -730,6 +742,7 @@ TEST_F(ActivityServiceControllerTest, RequestMobileDesktopSite) {
title:@"bar" title:@"bar"
isOriginalTitle:YES isOriginalTitle:YES
isPagePrintable:YES isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()]; thumbnailGenerator:DummyThumbnailGeneratorBlock()];
mockDispatcher = OCMProtocolMock(@protocol(BrowserCommands)); mockDispatcher = OCMProtocolMock(@protocol(BrowserCommands));
...@@ -833,4 +846,59 @@ TEST_F(ActivityServiceControllerTest, TestShareDidCompleteWithError) { ...@@ -833,4 +846,59 @@ TEST_F(ActivityServiceControllerTest, TestShareDidCompleteWithError) {
EXPECT_FALSE(provider.latestSnackbarMessage); EXPECT_FALSE(provider.latestSnackbarMessage);
} }
// Verifies that the FindInPageActivity is sent to the UIActivityViewController
// if and only if the activity is "searchable".
TEST_F(ActivityServiceControllerTest, FindInPageActivity) {
ActivityServiceController* activityController =
[[ActivityServiceController alloc] init];
// Verify searchable data.
ShareToData* data = [[ShareToData alloc]
initWithShareURL:GURL("https://chromium.org/printable")
visibleURL:GURL("https://chromium.org/printable")
title:@"bar"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items =
[activityController applicationActivitiesForData:data
dispatcher:nil
bookmarkModel:bookmark_model_];
ASSERT_EQ(IsUIRefreshPhase1Enabled() ? 4U : 2U, [items count]);
BOOL foundFindInPageActivity = NO;
for (id item in items) {
if ([item class] == [FindInPageActivity class]) {
foundFindInPageActivity = YES;
break;
}
}
EXPECT_TRUE(foundFindInPageActivity);
// Verify non-searchable data.
data = [[ShareToData alloc]
initWithShareURL:GURL("https://chromium.org/unprintable")
visibleURL:GURL("https://chromium.org/unprintable")
title:@"baz"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:NO
userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data
dispatcher:nil
bookmarkModel:bookmark_model_];
EXPECT_EQ(IsUIRefreshPhase1Enabled() ? 3U : 1U, [items count]);
foundFindInPageActivity = NO;
for (id item in items) {
if ([item class] == [FindInPageActivity class]) {
foundFindInPageActivity = YES;
break;
}
}
EXPECT_FALSE(foundFindInPageActivity);
}
} // namespace } // namespace
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
title:(NSString*)title title:(NSString*)title
isOriginalTitle:(BOOL)isOriginalTitle isOriginalTitle:(BOOL)isOriginalTitle
isPagePrintable:(BOOL)isPagePrintable isPagePrintable:(BOOL)isPagePrintable
isPageSearchable:(BOOL)isPageSearchable
userAgent:(web::UserAgentType)userAgent userAgent:(web::UserAgentType)userAgent
thumbnailGenerator:(ThumbnailGeneratorBlock)thumbnailGenerator; thumbnailGenerator:(ThumbnailGeneratorBlock)thumbnailGenerator;
...@@ -36,6 +37,8 @@ ...@@ -36,6 +37,8 @@
@property(nonatomic, readonly, copy) NSString* title; @property(nonatomic, readonly, copy) NSString* title;
@property(nonatomic, readonly, assign) BOOL isOriginalTitle; @property(nonatomic, readonly, assign) BOOL isOriginalTitle;
@property(nonatomic, readonly, assign) BOOL isPagePrintable; @property(nonatomic, readonly, assign) BOOL isPagePrintable;
// Whether FindInPage can be enabled for this page.
@property(nonatomic, readonly, assign) BOOL isPageSearchable;
@property(nonatomic, readonly, assign) web::UserAgentType userAgent; @property(nonatomic, readonly, assign) web::UserAgentType userAgent;
@property(nonatomic, strong) UIImage* image; @property(nonatomic, strong) UIImage* image;
@property(nonatomic, copy) ThumbnailGeneratorBlock thumbnailGenerator; @property(nonatomic, copy) ThumbnailGeneratorBlock thumbnailGenerator;
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
@synthesize thumbnailGenerator = thumbnailGenerator_; @synthesize thumbnailGenerator = thumbnailGenerator_;
@synthesize isOriginalTitle = isOriginalTitle_; @synthesize isOriginalTitle = isOriginalTitle_;
@synthesize isPagePrintable = isPagePrintable_; @synthesize isPagePrintable = isPagePrintable_;
@synthesize isPageSearchable = isPageSearchable_;
@synthesize userAgent = userAgent_; @synthesize userAgent = userAgent_;
- (id)initWithShareURL:(const GURL&)shareURL - (id)initWithShareURL:(const GURL&)shareURL
...@@ -51,6 +52,7 @@ ...@@ -51,6 +52,7 @@
title:(NSString*)title title:(NSString*)title
isOriginalTitle:(BOOL)isOriginalTitle isOriginalTitle:(BOOL)isOriginalTitle
isPagePrintable:(BOOL)isPagePrintable isPagePrintable:(BOOL)isPagePrintable
isPageSearchable:(BOOL)isPageSearchable
userAgent:(web::UserAgentType)userAgent userAgent:(web::UserAgentType)userAgent
thumbnailGenerator:(ThumbnailGeneratorBlock)thumbnailGenerator { thumbnailGenerator:(ThumbnailGeneratorBlock)thumbnailGenerator {
DCHECK(shareURL.is_valid()); DCHECK(shareURL.is_valid());
...@@ -63,6 +65,7 @@ ...@@ -63,6 +65,7 @@
title_ = [title copy]; title_ = [title copy];
isOriginalTitle_ = isOriginalTitle; isOriginalTitle_ = isOriginalTitle;
isPagePrintable_ = isPagePrintable; isPagePrintable_ = isPagePrintable;
isPageSearchable_ = isPageSearchable;
userAgent_ = userAgent; userAgent_ = userAgent;
thumbnailGenerator_ = thumbnailGenerator; thumbnailGenerator_ = thumbnailGenerator;
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/logging.h" #include "base/logging.h"
#import "base/strings/sys_string_conversions.h" #import "base/strings/sys_string_conversions.h"
#import "ios/chrome/browser/find_in_page/find_tab_helper.h"
#include "ios/chrome/browser/tabs/tab.h" #include "ios/chrome/browser/tabs/tab.h"
#include "ios/chrome/browser/ui/activity_services/chrome_activity_item_thumbnail_generator.h" #include "ios/chrome/browser/ui/activity_services/chrome_activity_item_thumbnail_generator.h"
#include "ios/chrome/browser/ui/activity_services/share_to_data.h" #include "ios/chrome/browser/ui/activity_services/share_to_data.h"
...@@ -54,19 +55,23 @@ ShareToData* ShareToDataForTab(Tab* tab, const GURL& shareURL) { ...@@ -54,19 +55,23 @@ ShareToData* ShareToDataForTab(Tab* tab, const GURL& shareURL) {
const GURL& finalURLToShare = const GURL& finalURLToShare =
!shareURL.is_empty() ? shareURL : tab.webState->GetVisibleURL(); !shareURL.is_empty() ? shareURL : tab.webState->GetVisibleURL();
web::NavigationItem* visibleItem =
tab.webState->GetNavigationManager()->GetVisibleItem();
web::UserAgentType userAgent = web::UserAgentType::NONE; web::UserAgentType userAgent = web::UserAgentType::NONE;
if (tab.webState) { if (visibleItem)
web::NavigationItem* visibleItem = userAgent = visibleItem->GetUserAgentType();
tab.webState->GetNavigationManager()->GetVisibleItem();
if (visibleItem) auto* helper = FindTabHelper::FromWebState(tab.webState);
userAgent = visibleItem->GetUserAgentType(); BOOL is_page_searchable =
} (helper && helper->CurrentPageSupportsFindInPage() &&
!helper->IsFindUIActive());
return [[ShareToData alloc] initWithShareURL:finalURLToShare return [[ShareToData alloc] initWithShareURL:finalURLToShare
visibleURL:tab.webState->GetVisibleURL() visibleURL:tab.webState->GetVisibleURL()
title:tab.title title:tab.title
isOriginalTitle:is_original_title isOriginalTitle:is_original_title
isPagePrintable:is_page_printable isPagePrintable:is_page_printable
isPageSearchable:is_page_searchable
userAgent:userAgent userAgent:userAgent
thumbnailGenerator:thumbnail_generator]; thumbnailGenerator:thumbnail_generator];
} }
......
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