| Index: ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
|
| diff --git a/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm b/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
|
| index 187bd7dac613c58c1f901573b5932d50e0e825e9..676bb0e6940452bd8f4f1fe171255717dab2d314 100644
|
| --- a/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
|
| +++ b/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
|
| @@ -6,7 +6,6 @@
|
|
|
| #import <MobileCoreServices/MobileCoreServices.h>
|
|
|
| -#include "base/mac/scoped_nsobject.h"
|
| #import "base/test/ios/wait_util.h"
|
| #include "components/reading_list/core/reading_list_switches.h"
|
| #import "ios/chrome/browser/ui/activity_services/activity_type_util.h"
|
| @@ -20,6 +19,10 @@
|
| #import "third_party/ocmock/OCMock/OCMock.h"
|
| #import "third_party/ocmock/gtest_support.h"
|
|
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| @interface ActivityServiceController (CrVisibleForTesting)
|
| - (NSArray*)activityItemsForData:(ShareToData*)data;
|
| - (NSArray*)applicationActivitiesForData:(ShareToData*)data
|
| @@ -37,18 +40,18 @@ class ActivityServiceControllerTest : public PlatformTest {
|
| protected:
|
| void SetUp() override {
|
| PlatformTest::SetUp();
|
| - parentController_.reset(
|
| - [[UIViewController alloc] initWithNibName:nil bundle:nil]);
|
| + parentController_ =
|
| + [[UIViewController alloc] initWithNibName:nil bundle:nil];
|
| [[UIApplication sharedApplication] keyWindow].rootViewController =
|
| parentController_;
|
| - shareToDelegate_.reset(
|
| - [[OCMockObject mockForProtocol:@protocol(ShareToDelegate)] retain]);
|
| - shareData_.reset([[ShareToData alloc]
|
| - initWithURL:GURL("https://chromium.org")
|
| - title:@""
|
| - isOriginalTitle:YES
|
| - isPagePrintable:YES
|
| - thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
|
| + shareToDelegate_ =
|
| + [OCMockObject mockForProtocol:@protocol(ShareToDelegate)];
|
| + shareData_ =
|
| + [[ShareToData alloc] initWithURL:GURL("https://chromium.org")
|
| + title:@""
|
| + isOriginalTitle:YES
|
| + isPagePrintable:YES
|
| + thumbnailGenerator:DummyThumbnailGeneratorBlock()];
|
| }
|
|
|
| void TearDown() override {
|
| @@ -61,7 +64,7 @@ class ActivityServiceControllerTest : public PlatformTest {
|
| }
|
|
|
| id<ShareToDelegate> GetShareToDelegate() {
|
| - return static_cast<id<ShareToDelegate>>(shareToDelegate_.get());
|
| + return static_cast<id<ShareToDelegate>>(shareToDelegate_);
|
| }
|
|
|
| CGRect AnchorRect() {
|
| @@ -72,7 +75,7 @@ class ActivityServiceControllerTest : public PlatformTest {
|
|
|
| UIView* AnchorView() {
|
| // On iPad, UIPopovers must be anchored to non nil views.
|
| - return [parentController_.get() view];
|
| + return [parentController_ view];
|
| }
|
|
|
| BOOL ArrayContainsImageSource(NSArray* array) {
|
| @@ -142,8 +145,8 @@ class ActivityServiceControllerTest : public PlatformTest {
|
| // |extensionItem| and expects failure.
|
| void ProcessItemsReturnedFromActivityFailure(NSArray* extensionItems,
|
| BOOL expectedResetUI) {
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
|
|
| // Sets up a Mock ShareToDelegate object to check that the ShareToDelegate
|
| // callback function is not called.
|
| @@ -199,9 +202,9 @@ class ActivityServiceControllerTest : public PlatformTest {
|
| }
|
|
|
| web::TestWebThreadBundle thread_bundle_;
|
| - base::scoped_nsobject<UIViewController> parentController_;
|
| - base::scoped_nsobject<OCMockObject> shareToDelegate_;
|
| - base::scoped_nsobject<ShareToData> shareData_;
|
| + UIViewController* parentController_;
|
| + OCMockObject* shareToDelegate_;
|
| + ShareToData* shareData_;
|
| };
|
|
|
| TEST_F(ActivityServiceControllerTest, PresentAndDismissController) {
|
| @@ -209,9 +212,9 @@ TEST_F(ActivityServiceControllerTest, PresentAndDismissController) {
|
| successMessage:[OCMArg isNil]];
|
|
|
| UIViewController* parentController =
|
| - static_cast<UIViewController*>(parentController_.get());
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| + static_cast<UIViewController*>(parentController_);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
| EXPECT_FALSE([activityController isActive]);
|
|
|
| // Test sharing.
|
| @@ -234,17 +237,17 @@ TEST_F(ActivityServiceControllerTest, PresentAndDismissController) {
|
| // Verifies that an UIActivityImageSource is sent to the
|
| // UIActivityViewController if and only if the ShareToData contains an image.
|
| TEST_F(ActivityServiceControllerTest, ActivityItemsForData) {
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
|
|
| // ShareToData does not contain an image, so the result items array will not
|
| // contain an image source.
|
| - base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
|
| - initWithURL:GURL("https://chromium.org")
|
| - title:@"foo"
|
| - isOriginalTitle:YES
|
| - isPagePrintable:YES
|
| - thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
|
| + ShareToData* data =
|
| + [[ShareToData alloc] initWithURL:GURL("https://chromium.org")
|
| + title:@"foo"
|
| + isOriginalTitle:YES
|
| + isPagePrintable:YES
|
| + thumbnailGenerator:DummyThumbnailGeneratorBlock()];
|
| NSArray* items = [activityController activityItemsForData:data];
|
| EXPECT_FALSE(ArrayContainsImageSource(items));
|
|
|
| @@ -258,14 +261,14 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForData) {
|
| // Verifies that when App Extension support is enabled, the URL string is
|
| // passed in a dictionary as part of the Activity Items to the App Extension.
|
| TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) {
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| - base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
|
| - initWithURL:GURL("https://chromium.org/login.html")
|
| - title:@"kung fu fighting"
|
| - isOriginalTitle:YES
|
| - isPagePrintable:YES
|
| - thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
| + ShareToData* data =
|
| + [[ShareToData alloc] initWithURL:GURL("https://chromium.org/login.html")
|
| + title:@"kung fu fighting"
|
| + isOriginalTitle:YES
|
| + isPagePrintable:YES
|
| + thumbnailGenerator:DummyThumbnailGeneratorBlock()];
|
| NSArray* items = [activityController activityItemsForData:data];
|
| NSString* findLoginAction =
|
| (NSString*)activity_services::kUTTypeAppExtensionFindLoginAction;
|
| @@ -279,19 +282,19 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) {
|
| NSItemProvider* itemProvider = item.attachments[0];
|
| // Extracts the dictionary back from the ItemProvider and then check that
|
| // it has the expected version and the page's URL.
|
| - __block base::scoped_nsobject<NSDictionary> result;
|
| + __block NSDictionary* result;
|
| [itemProvider
|
| loadItemForTypeIdentifier:findLoginAction
|
| options:nil
|
| completionHandler:^(id item, NSError* error) {
|
| if (error || ![item isKindOfClass:[NSDictionary class]]) {
|
| - result.reset([[NSDictionary dictionary] retain]);
|
| + result = @{};
|
| } else {
|
| - result.reset([item retain]);
|
| + result = item;
|
| }
|
| }];
|
| base::test::ios::WaitUntilCondition(^{
|
| - return result.get() != nil;
|
| + return result != nil;
|
| });
|
| EXPECT_EQ(2U, [result count]);
|
| // Checks version.
|
| @@ -320,14 +323,14 @@ TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) {
|
| // is enabled.
|
| TEST_F(ActivityServiceControllerTest,
|
| ActivityItemsForDataWithPasswordAppExReturnsURL) {
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| - base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
|
| - initWithURL:GURL("https://chromium.org/login.html")
|
| - title:@"kung fu fighting"
|
| - isOriginalTitle:YES
|
| - isPagePrintable:YES
|
| - thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
| + ShareToData* data =
|
| + [[ShareToData alloc] initWithURL:GURL("https://chromium.org/login.html")
|
| + title:@"kung fu fighting"
|
| + isOriginalTitle:YES
|
| + isPagePrintable:YES
|
| + thumbnailGenerator:DummyThumbnailGeneratorBlock()];
|
| NSArray* items = [activityController activityItemsForData:data];
|
| NSString* shareAction = @"com.apple.UIKit.activity.PostToFacebook";
|
| NSArray* urlItems =
|
| @@ -345,8 +348,8 @@ TEST_F(ActivityServiceControllerTest,
|
| // Verifies that -processItemsReturnedFromActivity:status:item: contains
|
| // the username and password.
|
| TEST_F(ActivityServiceControllerTest, ProcessItemsReturnedSuccessfully) {
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
|
|
| // Sets up a Mock ShareToDelegate object to check that the callback function
|
| // -passwordAppExDidFinish:username:password:successMessage:
|
| @@ -357,8 +360,8 @@ TEST_F(ActivityServiceControllerTest, ProcessItemsReturnedSuccessfully) {
|
| NSString* const kSecretPassword = @"super!secret";
|
| __block bool blockCalled = false;
|
| void (^validationBlock)(NSInvocation*) = ^(NSInvocation* invocation) {
|
| - NSString* username;
|
| - NSString* password;
|
| + __unsafe_unretained NSString* username;
|
| + __unsafe_unretained NSString* password;
|
| // Skips 0 and 1 index because they are |self| and |cmd|.
|
| [invocation getArgument:&username atIndex:3];
|
| [invocation getArgument:&password atIndex:4];
|
| @@ -379,12 +382,11 @@ TEST_F(ActivityServiceControllerTest, ProcessItemsReturnedSuccessfully) {
|
| NSDictionary* dictionaryFromAppEx =
|
| @{ @"username" : kSecretUsername,
|
| @"password" : kSecretPassword };
|
| - base::scoped_nsobject<NSItemProvider> itemProvider([[NSItemProvider alloc]
|
| - initWithItem:dictionaryFromAppEx
|
| - typeIdentifier:(NSString*)kUTTypePropertyList]);
|
| - base::scoped_nsobject<NSExtensionItem> extensionItem(
|
| - [[NSExtensionItem alloc] init]);
|
| - [extensionItem setAttachments:@[ itemProvider.get() ]];
|
| + NSItemProvider* itemProvider =
|
| + [[NSItemProvider alloc] initWithItem:dictionaryFromAppEx
|
| + typeIdentifier:(NSString*)kUTTypePropertyList];
|
| + NSExtensionItem* extensionItem = [[NSExtensionItem alloc] init];
|
| + [extensionItem setAttachments:@[ itemProvider ]];
|
|
|
| BOOL resetUI =
|
| [activityController processItemsReturnedFromActivity:activityType
|
| @@ -405,40 +407,39 @@ TEST_F(ActivityServiceControllerTest, ProcessItemsReturnedFailures) {
|
| ProcessItemsReturnedFromActivityFailure(@[], YES);
|
|
|
| // Extension Item is empty.
|
| - base::scoped_nsobject<NSExtensionItem> extensionItem(
|
| - [[NSExtensionItem alloc] init]);
|
| + NSExtensionItem* extensionItem = [[NSExtensionItem alloc] init];
|
| [extensionItem setAttachments:@[]];
|
| ProcessItemsReturnedFromActivityFailure(@[ extensionItem ], YES);
|
|
|
| // Extension Item does not have a property list provider as the first
|
| // attachment.
|
| - base::scoped_nsobject<NSItemProvider> itemProvider([[NSItemProvider alloc]
|
| - initWithItem:@"some arbitrary garbage"
|
| - typeIdentifier:(NSString*)kUTTypeText]);
|
| - [extensionItem setAttachments:@[ itemProvider.get() ]];
|
| + NSItemProvider* itemProvider =
|
| + [[NSItemProvider alloc] initWithItem:@"some arbitrary garbage"
|
| + typeIdentifier:(NSString*)kUTTypeText];
|
| + [extensionItem setAttachments:@[ itemProvider ]];
|
| ProcessItemsReturnedFromActivityFailure(@[ extensionItem ], YES);
|
|
|
| // Property list provider did not return a dictionary object.
|
| - itemProvider.reset([[NSItemProvider alloc]
|
| - initWithItem:@[ @"foo", @"bar" ]
|
| - typeIdentifier:(NSString*)kUTTypePropertyList]);
|
| - [extensionItem setAttachments:@[ itemProvider.get() ]];
|
| + itemProvider =
|
| + [[NSItemProvider alloc] initWithItem:@[ @"foo", @"bar" ]
|
| + typeIdentifier:(NSString*)kUTTypePropertyList];
|
| + [extensionItem setAttachments:@[ itemProvider ]];
|
| ProcessItemsReturnedFromActivityFailure(@[ extensionItem ], NO);
|
| }
|
|
|
| // Verifies that the PrintActivity is sent to the UIActivityViewController if
|
| // and only if the activity is "printable".
|
| TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
|
| - base::scoped_nsobject<ActivityServiceController> activityController(
|
| - [[ActivityServiceController alloc] init]);
|
| + ActivityServiceController* activityController =
|
| + [[ActivityServiceController alloc] init];
|
|
|
| // Verify printable data.
|
| - base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
|
| - initWithURL:GURL("https://chromium.org/printable")
|
| - title:@"bar"
|
| - isOriginalTitle:YES
|
| - isPagePrintable:YES
|
| - thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
|
| + ShareToData* data =
|
| + [[ShareToData alloc] initWithURL:GURL("https://chromium.org/printable")
|
| + title:@"bar"
|
| + isOriginalTitle:YES
|
| + isPagePrintable:YES
|
| + thumbnailGenerator:DummyThumbnailGeneratorBlock()];
|
|
|
| NSArray* items =
|
| [activityController applicationActivitiesForData:data controller:nil];
|
| @@ -448,12 +449,12 @@ TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
|
| EXPECT_EQ([PrintActivity class], [[items objectAtIndex:0] class]);
|
|
|
| // Verify non-printable data.
|
| - data.reset([[ShareToData alloc]
|
| - initWithURL:GURL("https://chromium.org/unprintable")
|
| - title:@"baz"
|
| - isOriginalTitle:YES
|
| - isPagePrintable:NO
|
| - thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
|
| + data =
|
| + [[ShareToData alloc] initWithURL:GURL("https://chromium.org/unprintable")
|
| + title:@"baz"
|
| + isOriginalTitle:YES
|
| + isPagePrintable:NO
|
| + thumbnailGenerator:DummyThumbnailGeneratorBlock()];
|
| items = [activityController applicationActivitiesForData:data controller:nil];
|
| EXPECT_EQ(expected_items_count - 1, [items count]);
|
| }
|
|
|