Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm

Issue 2645653003: Expose thumbnails of pages to iOS share extensions. (Closed)
Patch Set: Addressed comments. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/ui/activity_services/activity_service_controller.h" 5 #import "ios/chrome/browser/ui/activity_services/activity_service_controller.h"
6 6
7 #import <MobileCoreServices/MobileCoreServices.h> 7 #import <MobileCoreServices/MobileCoreServices.h>
8 8
9 #include "base/mac/scoped_nsobject.h" 9 #include "base/mac/scoped_nsobject.h"
10 #import "base/test/ios/wait_util.h" 10 #import "base/test/ios/wait_util.h"
(...skipping 26 matching lines...) Expand all
37 protected: 37 protected:
38 void SetUp() override { 38 void SetUp() override {
39 PlatformTest::SetUp(); 39 PlatformTest::SetUp();
40 parentController_.reset( 40 parentController_.reset(
41 [[UIViewController alloc] initWithNibName:nil bundle:nil]); 41 [[UIViewController alloc] initWithNibName:nil bundle:nil]);
42 [[UIApplication sharedApplication] keyWindow].rootViewController = 42 [[UIApplication sharedApplication] keyWindow].rootViewController =
43 parentController_; 43 parentController_;
44 shareToDelegate_.reset( 44 shareToDelegate_.reset(
45 [[OCMockObject mockForProtocol:@protocol(ShareToDelegate)] retain]); 45 [[OCMockObject mockForProtocol:@protocol(ShareToDelegate)] retain]);
46 shareData_.reset([[ShareToData alloc] 46 shareData_.reset([[ShareToData alloc]
47 initWithURL:GURL("https://chromium.org") 47 initWithURL:GURL("https://chromium.org")
48 title:@"" 48 title:@""
49 isOriginalTitle:YES 49 isOriginalTitle:YES
50 isPagePrintable:YES]); 50 isPagePrintable:YES
51 thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
51 } 52 }
52 53
53 void TearDown() override { 54 void TearDown() override {
54 [[UIApplication sharedApplication] keyWindow].rootViewController = nil; 55 [[UIApplication sharedApplication] keyWindow].rootViewController = nil;
55 PlatformTest::TearDown(); 56 PlatformTest::TearDown();
56 } 57 }
57 58
59 ThumbnailGeneratorBlock DummyThumbnailGeneratorBlock() {
60 return ^UIImage*(CGSize const& size) { return nil; };
61 }
62
58 id<ShareToDelegate> GetShareToDelegate() { 63 id<ShareToDelegate> GetShareToDelegate() {
59 return static_cast<id<ShareToDelegate>>(shareToDelegate_.get()); 64 return static_cast<id<ShareToDelegate>>(shareToDelegate_.get());
60 } 65 }
61 66
62 CGRect AnchorRect() { 67 CGRect AnchorRect() {
63 // On iPad, UIPopovers must be anchored to rectangles that have a non zero 68 // On iPad, UIPopovers must be anchored to rectangles that have a non zero
64 // size. 69 // size.
65 return CGRectMake(0, 0, 1, 1); 70 return CGRectMake(0, 0, 1, 1);
66 } 71 }
67 72
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 233
229 // Verifies that an UIActivityImageSource is sent to the 234 // Verifies that an UIActivityImageSource is sent to the
230 // UIActivityViewController if and only if the ShareToData contains an image. 235 // UIActivityViewController if and only if the ShareToData contains an image.
231 TEST_F(ActivityServiceControllerTest, ActivityItemsForData) { 236 TEST_F(ActivityServiceControllerTest, ActivityItemsForData) {
232 base::scoped_nsobject<ActivityServiceController> activityController( 237 base::scoped_nsobject<ActivityServiceController> activityController(
233 [[ActivityServiceController alloc] init]); 238 [[ActivityServiceController alloc] init]);
234 239
235 // ShareToData does not contain an image, so the result items array will not 240 // ShareToData does not contain an image, so the result items array will not
236 // contain an image source. 241 // contain an image source.
237 base::scoped_nsobject<ShareToData> data([[ShareToData alloc] 242 base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
238 initWithURL:GURL("https://chromium.org") 243 initWithURL:GURL("https://chromium.org")
239 title:@"foo" 244 title:@"foo"
240 isOriginalTitle:YES 245 isOriginalTitle:YES
241 isPagePrintable:YES]); 246 isPagePrintable:YES
247 thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
242 NSArray* items = [activityController activityItemsForData:data]; 248 NSArray* items = [activityController activityItemsForData:data];
243 EXPECT_FALSE(ArrayContainsImageSource(items)); 249 EXPECT_FALSE(ArrayContainsImageSource(items));
244 250
245 // Adds an image to the ShareToData object and call -activityItemsForData: 251 // Adds an image to the ShareToData object and call -activityItemsForData:
246 // again. Verifies that the result items array contains an image source. 252 // again. Verifies that the result items array contains an image source.
247 [data setImage:[UIImage imageNamed:@"activity_services_print"]]; 253 [data setImage:[UIImage imageNamed:@"activity_services_print"]];
248 items = [activityController activityItemsForData:data]; 254 items = [activityController activityItemsForData:data];
249 EXPECT_TRUE(ArrayContainsImageSource(items)); 255 EXPECT_TRUE(ArrayContainsImageSource(items));
250 } 256 }
251 257
252 // Verifies that when App Extension support is enabled, the URL string is 258 // Verifies that when App Extension support is enabled, the URL string is
253 // passed in a dictionary as part of the Activity Items to the App Extension. 259 // passed in a dictionary as part of the Activity Items to the App Extension.
254 TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) { 260 TEST_F(ActivityServiceControllerTest, ActivityItemsForDataWithPasswordAppEx) {
255 base::scoped_nsobject<ActivityServiceController> activityController( 261 base::scoped_nsobject<ActivityServiceController> activityController(
256 [[ActivityServiceController alloc] init]); 262 [[ActivityServiceController alloc] init]);
257 base::scoped_nsobject<ShareToData> data([[ShareToData alloc] 263 base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
258 initWithURL:GURL("https://chromium.org/login.html") 264 initWithURL:GURL("https://chromium.org/login.html")
259 title:@"kung fu fighting" 265 title:@"kung fu fighting"
260 isOriginalTitle:YES 266 isOriginalTitle:YES
261 isPagePrintable:YES]); 267 isPagePrintable:YES
268 thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
262 NSArray* items = [activityController activityItemsForData:data]; 269 NSArray* items = [activityController activityItemsForData:data];
263 NSString* findLoginAction = 270 NSString* findLoginAction =
264 (NSString*)activity_services::kUTTypeAppExtensionFindLoginAction; 271 (NSString*)activity_services::kUTTypeAppExtensionFindLoginAction;
265 // Gets the list of NSExtensionItem objects returned by the array of 272 // Gets the list of NSExtensionItem objects returned by the array of
266 // id<UIActivityItemSource> objects returned by -activityItemsForData:. 273 // id<UIActivityItemSource> objects returned by -activityItemsForData:.
267 NSArray* extensionItems = FindItemsForActivityType( 274 NSArray* extensionItems = FindItemsForActivityType(
268 items, activity_services::kAppExtensionOnePassword); 275 items, activity_services::kAppExtensionOnePassword);
269 ASSERT_EQ(1U, [extensionItems count]); 276 ASSERT_EQ(1U, [extensionItems count]);
270 NSExtensionItem* item = extensionItems[0]; 277 NSExtensionItem* item = extensionItems[0];
271 EXPECT_EQ(1U, item.attachments.count); 278 EXPECT_EQ(1U, item.attachments.count);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 EXPECT_NSEQ(@"kung fu fighting", title); 316 EXPECT_NSEQ(@"kung fu fighting", title);
310 } 317 }
311 318
312 // Verifies that a Share extension can fetch a URL when Password App Extension 319 // Verifies that a Share extension can fetch a URL when Password App Extension
313 // is enabled. 320 // is enabled.
314 TEST_F(ActivityServiceControllerTest, 321 TEST_F(ActivityServiceControllerTest,
315 ActivityItemsForDataWithPasswordAppExReturnsURL) { 322 ActivityItemsForDataWithPasswordAppExReturnsURL) {
316 base::scoped_nsobject<ActivityServiceController> activityController( 323 base::scoped_nsobject<ActivityServiceController> activityController(
317 [[ActivityServiceController alloc] init]); 324 [[ActivityServiceController alloc] init]);
318 base::scoped_nsobject<ShareToData> data([[ShareToData alloc] 325 base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
319 initWithURL:GURL("https://chromium.org/login.html") 326 initWithURL:GURL("https://chromium.org/login.html")
320 title:@"kung fu fighting" 327 title:@"kung fu fighting"
321 isOriginalTitle:YES 328 isOriginalTitle:YES
322 isPagePrintable:YES]); 329 isPagePrintable:YES
330 thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
323 NSArray* items = [activityController activityItemsForData:data]; 331 NSArray* items = [activityController activityItemsForData:data];
324 NSString* shareAction = @"com.apple.UIKit.activity.PostToFacebook"; 332 NSString* shareAction = @"com.apple.UIKit.activity.PostToFacebook";
325 NSArray* urlItems = 333 NSArray* urlItems =
326 FindItemsEqualsToUTType(items, shareAction, @"public.url"); 334 FindItemsEqualsToUTType(items, shareAction, @"public.url");
327 ASSERT_EQ(1U, [urlItems count]); 335 ASSERT_EQ(1U, [urlItems count]);
328 id<UIActivityItemSource> itemSource = urlItems[0]; 336 id<UIActivityItemSource> itemSource = urlItems[0];
329 id mockActivityViewController = 337 id mockActivityViewController =
330 [OCMockObject niceMockForClass:[UIActivityViewController class]]; 338 [OCMockObject niceMockForClass:[UIActivityViewController class]];
331 id item = [itemSource activityViewController:mockActivityViewController 339 id item = [itemSource activityViewController:mockActivityViewController
332 itemForActivityType:shareAction]; 340 itemForActivityType:shareAction];
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 } 427 }
420 428
421 // Verifies that the PrintActivity is sent to the UIActivityViewController if 429 // Verifies that the PrintActivity is sent to the UIActivityViewController if
422 // and only if the activity is "printable". 430 // and only if the activity is "printable".
423 TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) { 431 TEST_F(ActivityServiceControllerTest, ApplicationActivitiesForData) {
424 base::scoped_nsobject<ActivityServiceController> activityController( 432 base::scoped_nsobject<ActivityServiceController> activityController(
425 [[ActivityServiceController alloc] init]); 433 [[ActivityServiceController alloc] init]);
426 434
427 // Verify printable data. 435 // Verify printable data.
428 base::scoped_nsobject<ShareToData> data([[ShareToData alloc] 436 base::scoped_nsobject<ShareToData> data([[ShareToData alloc]
429 initWithURL:GURL("https://chromium.org/printable") 437 initWithURL:GURL("https://chromium.org/printable")
430 title:@"bar" 438 title:@"bar"
431 isOriginalTitle:YES 439 isOriginalTitle:YES
432 isPagePrintable:YES]); 440 isPagePrintable:YES
441 thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
433 442
434 NSArray* items = 443 NSArray* items =
435 [activityController applicationActivitiesForData:data controller:nil]; 444 [activityController applicationActivitiesForData:data controller:nil];
436 NSUInteger expected_items_count = 445 NSUInteger expected_items_count =
437 reading_list::switches::IsReadingListEnabled() ? 2U : 1U; 446 reading_list::switches::IsReadingListEnabled() ? 2U : 1U;
438 ASSERT_EQ(expected_items_count, [items count]); 447 ASSERT_EQ(expected_items_count, [items count]);
439 EXPECT_EQ([PrintActivity class], [[items objectAtIndex:0] class]); 448 EXPECT_EQ([PrintActivity class], [[items objectAtIndex:0] class]);
440 449
441 // Verify non-printable data. 450 // Verify non-printable data.
442 data.reset([[ShareToData alloc] 451 data.reset([[ShareToData alloc]
443 initWithURL:GURL("https://chromium.org/unprintable") 452 initWithURL:GURL("https://chromium.org/unprintable")
444 title:@"baz" 453 title:@"baz"
445 isOriginalTitle:YES 454 isOriginalTitle:YES
446 isPagePrintable:NO]); 455 isPagePrintable:NO
456 thumbnailGenerator:DummyThumbnailGeneratorBlock()]);
447 items = [activityController applicationActivitiesForData:data controller:nil]; 457 items = [activityController applicationActivitiesForData:data controller:nil];
448 EXPECT_EQ(expected_items_count - 1, [items count]); 458 EXPECT_EQ(expected_items_count - 1, [items count]);
449 } 459 }
450 460
451 TEST_F(ActivityServiceControllerTest, FindLoginActionTypeConformsToPublicURL) { 461 TEST_F(ActivityServiceControllerTest, FindLoginActionTypeConformsToPublicURL) {
452 // If this test fails, it is probably due to missing or incorrect 462 // If this test fails, it is probably due to missing or incorrect
453 // UTImportedTypeDeclarations in Info.plist. Note that there are 463 // UTImportedTypeDeclarations in Info.plist. Note that there are
454 // two Info.plist, 464 // two Info.plist,
455 // - ios/chrome/app/resources/Info.plist for Chrome app 465 // - ios/chrome/app/resources/Info.plist for Chrome app
456 // - testing/gtest_ios/unittest-Info.plist for ios_chrome_unittests 466 // - testing/gtest_ios/unittest-Info.plist for ios_chrome_unittests
(...skipping 14 matching lines...) Expand all
471 // public.url UTType in order to allow Share actions (e.g. Facebook, Twitter, 481 // public.url UTType in order to allow Share actions (e.g. Facebook, Twitter,
472 // etc) to appear on UIActivityViewController opened by Chrome). 482 // etc) to appear on UIActivityViewController opened by Chrome).
473 CFStringRef chromeFindLoginAction = reinterpret_cast<CFStringRef>( 483 CFStringRef chromeFindLoginAction = reinterpret_cast<CFStringRef>(
474 activity_services::kUTTypeAppExtensionFindLoginAction); 484 activity_services::kUTTypeAppExtensionFindLoginAction);
475 EXPECT_TRUE(UTTypeConformsTo(chromeFindLoginAction, kUTTypeURL)); 485 EXPECT_TRUE(UTTypeConformsTo(chromeFindLoginAction, kUTTypeURL));
476 EXPECT_TRUE( 486 EXPECT_TRUE(
477 UTTypeConformsTo(chromeFindLoginAction, onePasswordFindLoginAction)); 487 UTTypeConformsTo(chromeFindLoginAction, onePasswordFindLoginAction));
478 } 488 }
479 489
480 } // namespace 490 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698