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") {
"//ios/chrome/browser",
"//ios/chrome/browser/bookmarks",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/find_in_page",
"//ios/chrome/browser/passwords",
"//ios/chrome/browser/snapshots",
"//ios/chrome/browser/tabs",
......
......@@ -268,9 +268,12 @@ NSString* const kActivityServicesSnackbarCategory =
dispatcher:dispatcher];
[applicationActivities addObject:bookmarkActivity];
}
FindInPageActivity* findInPageActivity =
[[FindInPageActivity alloc] initWithDispatcher:dispatcher];
[applicationActivities addObject:findInPageActivity];
if (data.isPageSearchable) {
FindInPageActivity* findInPageActivity =
[[FindInPageActivity alloc] initWithDispatcher:dispatcher];
[applicationActivities addObject:findInPageActivity];
}
if (data.userAgent != web::UserAgentType::NONE) {
RequestDesktopOrMobileSiteActivity* requestActivity =
......
......@@ -16,6 +16,7 @@
#include "ios/chrome/browser/browser_state/test_chrome_browser_state.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/find_in_page_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/activity_type_util.h"
......@@ -210,6 +211,7 @@ class ActivityServiceControllerTest : public PlatformTest {
title:@""
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
}
......@@ -366,6 +368,7 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForData) {
title:@"foo"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items = [activityController activityItemsForData:data];
......@@ -389,6 +392,7 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) {
title:@"kung fu fighting"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items = [activityController activityItemsForData:data];
......@@ -452,6 +456,7 @@ TEST_F(ActivityServiceControllerTest,
title:@"kung fu fighting"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
NSArray* items = [activityController activityItemsForData:data];
......@@ -555,6 +560,7 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
title:@"bar"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
......@@ -579,6 +585,7 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
title:@"baz"
isOriginalTitle:YES
isPagePrintable:NO
isPageSearchable:YES
userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data
......@@ -611,6 +618,7 @@ TEST_F(ActivityServiceControllerTest, HTTPActivities) {
title:@"bar"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
......@@ -626,6 +634,7 @@ TEST_F(ActivityServiceControllerTest, HTTPActivities) {
title:@"baz"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data
......@@ -649,6 +658,7 @@ TEST_F(ActivityServiceControllerTest, BookmarkActivities) {
title:@"bar"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
......@@ -675,6 +685,7 @@ TEST_F(ActivityServiceControllerTest, BookmarkActivities) {
title:@"baz"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::NONE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
items = [activityController applicationActivitiesForData:data
......@@ -706,6 +717,7 @@ TEST_F(ActivityServiceControllerTest, RequestMobileDesktopSite) {
title:@"bar"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::MOBILE
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
id mockDispatcher = OCMProtocolMock(@protocol(BrowserCommands));
......@@ -730,6 +742,7 @@ TEST_F(ActivityServiceControllerTest, RequestMobileDesktopSite) {
title:@"bar"
isOriginalTitle:YES
isPagePrintable:YES
isPageSearchable:YES
userAgent:web::UserAgentType::DESKTOP
thumbnailGenerator:DummyThumbnailGeneratorBlock()];
mockDispatcher = OCMProtocolMock(@protocol(BrowserCommands));
......@@ -833,4 +846,59 @@ TEST_F(ActivityServiceControllerTest, TestShareDidCompleteWithError) {
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
......@@ -19,6 +19,7 @@
title:(NSString*)title
isOriginalTitle:(BOOL)isOriginalTitle
isPagePrintable:(BOOL)isPagePrintable
isPageSearchable:(BOOL)isPageSearchable
userAgent:(web::UserAgentType)userAgent
thumbnailGenerator:(ThumbnailGeneratorBlock)thumbnailGenerator;
......@@ -36,6 +37,8 @@
@property(nonatomic, readonly, copy) NSString* title;
@property(nonatomic, readonly, assign) BOOL isOriginalTitle;
@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, strong) UIImage* image;
@property(nonatomic, copy) ThumbnailGeneratorBlock thumbnailGenerator;
......
......@@ -44,6 +44,7 @@
@synthesize thumbnailGenerator = thumbnailGenerator_;
@synthesize isOriginalTitle = isOriginalTitle_;
@synthesize isPagePrintable = isPagePrintable_;
@synthesize isPageSearchable = isPageSearchable_;
@synthesize userAgent = userAgent_;
- (id)initWithShareURL:(const GURL&)shareURL
......@@ -51,6 +52,7 @@
title:(NSString*)title
isOriginalTitle:(BOOL)isOriginalTitle
isPagePrintable:(BOOL)isPagePrintable
isPageSearchable:(BOOL)isPageSearchable
userAgent:(web::UserAgentType)userAgent
thumbnailGenerator:(ThumbnailGeneratorBlock)thumbnailGenerator {
DCHECK(shareURL.is_valid());
......@@ -63,6 +65,7 @@
title_ = [title copy];
isOriginalTitle_ = isOriginalTitle;
isPagePrintable_ = isPagePrintable;
isPageSearchable_ = isPageSearchable;
userAgent_ = userAgent;
thumbnailGenerator_ = thumbnailGenerator;
}
......
......@@ -6,6 +6,7 @@
#include "base/logging.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/ui/activity_services/chrome_activity_item_thumbnail_generator.h"
#include "ios/chrome/browser/ui/activity_services/share_to_data.h"
......@@ -54,19 +55,23 @@ ShareToData* ShareToDataForTab(Tab* tab, const GURL& shareURL) {
const GURL& finalURLToShare =
!shareURL.is_empty() ? shareURL : tab.webState->GetVisibleURL();
web::NavigationItem* visibleItem =
tab.webState->GetNavigationManager()->GetVisibleItem();
web::UserAgentType userAgent = web::UserAgentType::NONE;
if (tab.webState) {
web::NavigationItem* visibleItem =
tab.webState->GetNavigationManager()->GetVisibleItem();
if (visibleItem)
userAgent = visibleItem->GetUserAgentType();
}
if (visibleItem)
userAgent = visibleItem->GetUserAgentType();
auto* helper = FindTabHelper::FromWebState(tab.webState);
BOOL is_page_searchable =
(helper && helper->CurrentPageSupportsFindInPage() &&
!helper->IsFindUIActive());
return [[ShareToData alloc] initWithShareURL:finalURLToShare
visibleURL:tab.webState->GetVisibleURL()
title:tab.title
isOriginalTitle:is_original_title
isPagePrintable:is_page_printable
isPageSearchable:is_page_searchable
userAgent:userAgent
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