Index: ios/chrome/browser/device_sharing/handoff_manager_egtest.mm |
diff --git a/ios/chrome/browser/device_sharing/handoff_manager_egtest.mm b/ios/chrome/browser/device_sharing/handoff_manager_egtest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..749fef968d5ea1fa7f13339d438761c543af772b |
--- /dev/null |
+++ b/ios/chrome/browser/device_sharing/handoff_manager_egtest.mm |
@@ -0,0 +1,145 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import <EarlGrey/EarlGrey.h> |
+#import <XCTest/XCTest.h> |
+ |
+#import "components/handoff/handoff_manager.h" |
+#import "ios/chrome/browser/device_sharing/device_sharing_manager.h" |
+#include "ios/chrome/browser/ui/ui_util.h" |
+#import "ios/chrome/test/app/chrome_test_util.h" |
+#import "ios/chrome/test/app/tab_test_util.h" |
+#import "ios/chrome/test/earl_grey/chrome_earl_grey.h" |
+#import "ios/chrome/test/earl_grey/chrome_test_case.h" |
+#include "ios/web/public/test/http_server.h" |
+#include "ios/web/public/test/http_server_util.h" |
+#import "net/base/mac/url_conversions.h" |
+#include "url/gurl.h" |
+ |
+namespace { |
+ |
+// Checks that Handoff will report the specified |gurl|. |
+void AssertHandoffURL(const GURL& gurl) { |
+ HandoffManager* manager = |
+ [chrome_test_util::GetDeviceSharingManager() handoffManager]; |
+ GREYAssertTrue(manager != nil, @"Handoff Manager should not be nil"); |
+ if (gurl.is_valid()) { |
+ NSURL* URL = net::NSURLWithGURL(gurl); |
+ GREYAssertTrue([manager.userActivityWebpageURL isEqual:URL], |
+ @"Incorrect Handoff URL."); |
+ } else { |
+ GREYAssertTrue(manager.userActivityWebpageURL == nil, |
+ @"Handoff URL is not nil."); |
+ } |
+} |
+ |
+} // namespace |
+ |
+// Tests that HandoffManager reports the correct active URL based on the |
+// active tab. |
+@interface HandoffManagerTestCase : ChromeTestCase |
+@end |
+ |
+@implementation HandoffManagerTestCase |
+ |
+#pragma mark - Overrides base class |
+ |
+- (void)setUp { |
+ [super setUp]; |
+ web::test::SetUpFileBasedHttpServer(); |
+} |
+ |
+#pragma mark - Tests |
+ |
+// Tests that an empty new tab page should result in no Handoff URL. |
+- (void)testNewTabPageEmptyURL { |
+ AssertHandoffURL(GURL()); |
+} |
+ |
+// Tests that the simple case of Handoff URL for a single page. |
+- (void)testTypicalURL { |
+ const GURL destinationUrl = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/destination.html"); |
+ [ChromeEarlGrey loadURL:destinationUrl]; |
+ AssertHandoffURL(destinationUrl); |
+} |
+ |
+// Tests Handoff URL for a new tab. |
+- (void)testTypicalURLInNewTab { |
+ chrome_test_util::OpenNewTab(); |
+ const GURL destinationUrl = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/pony.html"); |
+ [ChromeEarlGrey loadURL:destinationUrl]; |
+ AssertHandoffURL(destinationUrl); |
+} |
+ |
+// Tests that Handoff URL should never be set for an incognito tab. |
+- (void)testTypicalURLInNewIncognitoTab { |
+ // Opens an incognito tab and loads a web page. Check that Handoff URL is nil. |
+ chrome_test_util::OpenNewIncognitoTab(); |
+ const GURL destinationUrl = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/destination.html"); |
+ [ChromeEarlGrey loadURL:destinationUrl]; |
+ AssertHandoffURL(GURL()); |
+ |
+ // Loads a second URL on the same incognito tab. Handoff URL should still be |
+ // nil. |
+ const GURL destinationUrl2 = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/pony.html"); |
+ [ChromeEarlGrey loadURL:destinationUrl2]; |
+ AssertHandoffURL(GURL()); |
+} |
+ |
+// Tests the state for Handoff URL when creating, closing tab, and switching |
+// tab. |
+- (void)testMultipleSwitchingTabs { |
+ const GURL tab1URL = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/destination.html"); |
+ const GURL tab2URL = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/pony.html"); |
+ const GURL tab3URL = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/chromium_logo_page.html"); |
+ |
+ // Sets up the state for 3 tabs. |
+ [ChromeEarlGrey loadURL:tab1URL]; |
+ chrome_test_util::OpenNewTab(); |
+ [ChromeEarlGrey loadURL:tab2URL]; |
+ chrome_test_util::OpenNewTab(); |
+ [ChromeEarlGrey loadURL:tab3URL]; |
+ |
+ // When tab 3 is closed, tab 2 is front and Handoff URL should be the URL for |
+ // tab 2. |
+ chrome_test_util::CloseCurrentTab(); |
+ AssertHandoffURL(tab2URL); |
+ |
+ // Switches back to the first tab. |
+ chrome_test_util::SelectTabAtIndexInCurrentMode(0); |
+ AssertHandoffURL(tab1URL); |
+} |
+ |
+// Tests the state for Handoff URL when switching between normal tabs and |
+// incognito tabs. |
+- (void)testSwitchBetweenNormalAndIncognitoTabs { |
+ const GURL tab1URL = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/destination.html"); |
+ const GURL tab2URL = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/pony.html"); |
+ const GURL tab3URL = web::test::HttpServer::MakeUrl( |
+ "http://ios/testing/data/http_server_files/chromium_logo_page.html"); |
+ |
+ // Loads one page. |
+ [ChromeEarlGrey loadURL:tab1URL]; |
+ // Loads page two in incognito and verifies that Handoff URL is nil. |
+ chrome_test_util::OpenNewIncognitoTab(); |
+ [ChromeEarlGrey loadURL:tab2URL]; |
+ AssertHandoffURL(GURL()); |
+ |
+ // Loads page three in a new normal tab and verify that Handoff URL is not |
+ // nil. |
+ chrome_test_util::OpenNewTab(); |
+ [ChromeEarlGrey loadURL:tab3URL]; |
+ AssertHandoffURL(tab3URL); |
+} |
+ |
+@end |