Index: ios/chrome/browser/native_app_launcher/native_app_navigation_controller_unittest.mm |
diff --git a/ios/chrome/browser/native_app_launcher/native_app_navigation_controller_unittest.mm b/ios/chrome/browser/native_app_launcher/native_app_navigation_controller_unittest.mm |
deleted file mode 100644 |
index 0607c78083f9b212766da3401b2041ebe71e6c4f..0000000000000000000000000000000000000000 |
--- a/ios/chrome/browser/native_app_launcher/native_app_navigation_controller_unittest.mm |
+++ /dev/null |
@@ -1,207 +0,0 @@ |
-// Copyright 2012 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. |
- |
-#include <memory> |
- |
-#include "base/bind.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/metrics/user_metrics.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "ios/chrome/browser/infobars/infobar_manager_impl.h" |
-#import "ios/chrome/browser/installation_notifier.h" |
-#include "ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h" |
-#import "ios/chrome/browser/native_app_launcher/native_app_navigation_controller.h" |
-#import "ios/chrome/browser/web/chrome_web_test.h" |
-#include "ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h" |
-#import "ios/public/provider/chrome/browser/native_app_launcher/fake_native_app_metadata.h" |
-#import "ios/public/provider/chrome/browser/native_app_launcher/fake_native_app_whitelist_manager.h" |
-#include "ios/public/provider/chrome/browser/test_chrome_browser_provider.h" |
-#import "testing/gtest_mac.h" |
- |
-#if !defined(__has_feature) || !__has_feature(objc_arc) |
-#error "This file requires ARC support." |
-#endif |
- |
-@interface NativeAppNavigationController (Testing) |
-- (void)recordInfobarDisplayedOfType:(NativeAppControllerType)type |
- onLinkNavigation:(BOOL)isLinkNavigation; |
-- (NSMutableSet*)appsPossiblyBeingInstalled; |
-- (void)removeAppFromNotification:(NSNotification*)notification; |
-@end |
- |
-namespace { |
- |
-class FakeChromeBrowserProvider : public ios::TestChromeBrowserProvider { |
- public: |
- FakeChromeBrowserProvider(FakeNativeAppWhitelistManager* fake_manager) { |
- manager_ = fake_manager; |
- } |
- ~FakeChromeBrowserProvider() override {} |
- |
- id<NativeAppWhitelistManager> GetNativeAppWhitelistManager() const override { |
- return manager_; |
- } |
- |
- private: |
- id<NativeAppWhitelistManager> manager_; |
-}; |
- |
-class NativeAppNavigationControllerTest : public ChromeWebTest { |
- protected: |
- void SetUp() override { |
- ChromeWebTest::SetUp(); |
- controller_ = |
- [[NativeAppNavigationController alloc] initWithWebState:web_state()]; |
- |
- action_callback_ = |
- base::Bind(&NativeAppNavigationControllerTest::OnUserAction, |
- base::Unretained(this)); |
- base::AddActionCallback(action_callback_); |
- |
- handler_called_counter_ = 0; |
- } |
- |
- void TearDown() override { |
- base::RemoveActionCallback(action_callback_); |
- ChromeWebTest::TearDown(); |
- } |
- |
- void SetExpectedActionName(const std::string& action_name) { |
- expected_action_name_.reset(new std::string(action_name)); |
- } |
- |
- void OnUserAction(const std::string& action_name) { |
- EXPECT_EQ(*expected_action_name_, action_name); |
- handler_called_counter_++; |
- } |
- |
- void ExpectHandlerCalledAndReset(int number_of_calls) { |
- EXPECT_EQ(number_of_calls, handler_called_counter_); |
- handler_called_counter_ = 0; |
- } |
- |
- NativeAppNavigationController* controller_; |
- |
- // The callback to invoke when an action is recorded. |
- base::ActionCallback action_callback_; |
- std::unique_ptr<std::string> expected_action_name_; |
- int handler_called_counter_; |
-}; |
- |
-TEST_F(NativeAppNavigationControllerTest, TestConstructor) { |
- EXPECT_TRUE(controller_); |
-} |
- |
-TEST_F(NativeAppNavigationControllerTest, TestUMA) { |
- SetExpectedActionName("MobileGALInstallInfoBarLinkNavigation"); |
- [controller_ recordInfobarDisplayedOfType:NATIVE_APP_INSTALLER_CONTROLLER |
- onLinkNavigation:YES]; |
- ExpectHandlerCalledAndReset(1); |
- |
- SetExpectedActionName("MobileGALInstallInfoBarDirectNavigation"); |
- [controller_ recordInfobarDisplayedOfType:NATIVE_APP_INSTALLER_CONTROLLER |
- onLinkNavigation:NO]; |
- ExpectHandlerCalledAndReset(1); |
- |
- SetExpectedActionName("MobileGALLaunchInfoBar"); |
- [controller_ recordInfobarDisplayedOfType:NATIVE_APP_LAUNCHER_CONTROLLER |
- onLinkNavigation:YES]; |
- ExpectHandlerCalledAndReset(1); |
- [controller_ recordInfobarDisplayedOfType:NATIVE_APP_LAUNCHER_CONTROLLER |
- onLinkNavigation:NO]; |
- ExpectHandlerCalledAndReset(1); |
- |
- SetExpectedActionName("MobileGALOpenPolicyInfoBar"); |
- [controller_ recordInfobarDisplayedOfType:NATIVE_APP_OPEN_POLICY_CONTROLLER |
- onLinkNavigation:YES]; |
- ExpectHandlerCalledAndReset(1); |
- [controller_ recordInfobarDisplayedOfType:NATIVE_APP_OPEN_POLICY_CONTROLLER |
- onLinkNavigation:NO]; |
- ExpectHandlerCalledAndReset(1); |
-} |
- |
-// Tests presenting NativeAppInfoBar after page is loaded. |
-TEST_F(NativeAppNavigationControllerTest, NativeAppInfoBar) { |
- SetExpectedActionName("MobileGALInstallInfoBarDirectNavigation"); |
- InfoBarManagerImpl::CreateForWebState(web_state()); |
- |
- // Set up fake metadata. |
- FakeNativeAppWhitelistManager* fakeManager = |
- [[FakeNativeAppWhitelistManager alloc] init]; |
- IOSChromeScopedTestingChromeBrowserProvider provider( |
- base::MakeUnique<FakeChromeBrowserProvider>(fakeManager)); |
- FakeNativeAppMetadata* metadata = [[FakeNativeAppMetadata alloc] init]; |
- fakeManager.metadata = metadata; |
- metadata.appName = @"App"; |
- metadata.appId = @"App-ID"; |
- |
- // Load the page to trigger infobar presentation. |
- LoadHtml(@"<html><body></body></html>", GURL("http://test.com")); |
- |
- // Verify that infobar was presented |
- auto* infobar_manager = InfoBarManagerImpl::FromWebState(web_state()); |
- ASSERT_EQ(1U, infobar_manager->infobar_count()); |
- infobars::InfoBar* infobar = infobar_manager->infobar_at(0); |
- auto* delegate = infobar->delegate()->AsNativeAppInfoBarDelegate(); |
- ASSERT_TRUE(delegate); |
- |
- // Verify infobar appearance. |
- EXPECT_EQ("Open this page in the App app?", |
- base::UTF16ToUTF8(delegate->GetInstallText())); |
- EXPECT_EQ("Open this page in the App app?", |
- base::UTF16ToUTF8(delegate->GetLaunchText())); |
- EXPECT_EQ("Open in App", base::UTF16ToUTF8(delegate->GetOpenPolicyText())); |
- EXPECT_EQ("Just once", base::UTF16ToUTF8(delegate->GetOpenOnceText())); |
- EXPECT_EQ("Always", base::UTF16ToUTF8(delegate->GetOpenAlwaysText())); |
- EXPECT_NSEQ(@"App-ID", delegate->GetAppId()); |
-} |
- |
-TEST_F(NativeAppNavigationControllerTest, |
- TestRemovingAppFromListAfterInstallation) { |
- NSString* const kMapsAppName = @"Maps"; |
- NSString* const kMapsAppId = @"1"; |
- NSString* const kYoutubeAppName = @"Youtube"; |
- NSString* const kYoutubeAppId = @"2"; |
- |
- InstallationNotifier* installationNotifier = |
- [[InstallationNotifier alloc] init]; |
- |
- FakeNativeAppWhitelistManager* fakeManager = |
- [[FakeNativeAppWhitelistManager alloc] init]; |
- IOSChromeScopedTestingChromeBrowserProvider provider( |
- base::MakeUnique<FakeChromeBrowserProvider>(fakeManager)); |
- |
- FakeNativeAppMetadata* metadataMaps = [[FakeNativeAppMetadata alloc] init]; |
- [metadataMaps setAppName:kMapsAppName]; |
- [metadataMaps setAppId:kMapsAppId]; |
- ASSERT_TRUE(metadataMaps); |
- NSString* appIdMaps = [metadataMaps appId]; |
- NSNotification* notificationMaps = |
- [NSNotification notificationWithName:kMapsAppName |
- object:installationNotifier]; |
- |
- FakeNativeAppMetadata* metadataYouTube = [[FakeNativeAppMetadata alloc] init]; |
- [metadataYouTube setAppName:kYoutubeAppName]; |
- [metadataYouTube setAppId:kYoutubeAppId]; |
- |
- ASSERT_TRUE(metadataYouTube); |
- NSString* appIdYouTube = [metadataYouTube appId]; |
- NSNotification* notificationYouTube = |
- [NSNotification notificationWithName:kYoutubeAppName |
- object:installationNotifier]; |
- |
- DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 0); |
- [[controller_ appsPossiblyBeingInstalled] addObject:appIdMaps]; |
- DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 1); |
- [[controller_ appsPossiblyBeingInstalled] addObject:appIdYouTube]; |
- DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 2); |
- [fakeManager setAppScheme:kMapsAppName]; |
- [controller_ removeAppFromNotification:notificationMaps]; |
- DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 1); |
- [fakeManager setAppScheme:kYoutubeAppName]; |
- [controller_ removeAppFromNotification:notificationYouTube]; |
- DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 0); |
-} |
- |
-} // namespace |