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

Side by Side Diff: ios/chrome/browser/native_app_launcher/native_app_navigation_controller_unittest.mm

Issue 2891133002: [ObjC ARC] Converts ios/chrome/browser/native_app_launcher:unit_tests_internal to ARC. (Closed)
Patch Set: Created 3 years, 7 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 #include <memory> 5 #include <memory>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/mac/scoped_nsobject.h"
9 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
10 #include "base/metrics/user_metrics.h" 9 #include "base/metrics/user_metrics.h"
11 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
12 #include "ios/chrome/browser/infobars/infobar_manager_impl.h" 11 #include "ios/chrome/browser/infobars/infobar_manager_impl.h"
13 #import "ios/chrome/browser/installation_notifier.h" 12 #import "ios/chrome/browser/installation_notifier.h"
14 #include "ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h" 13 #include "ios/chrome/browser/native_app_launcher/native_app_infobar_delegate.h"
15 #import "ios/chrome/browser/native_app_launcher/native_app_navigation_controller .h" 14 #import "ios/chrome/browser/native_app_launcher/native_app_navigation_controller .h"
16 #import "ios/chrome/browser/web/chrome_web_test.h" 15 #import "ios/chrome/browser/web/chrome_web_test.h"
17 #include "ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h" 16 #include "ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h"
18 #import "ios/public/provider/chrome/browser/native_app_launcher/fake_native_app_ metadata.h" 17 #import "ios/public/provider/chrome/browser/native_app_launcher/fake_native_app_ metadata.h"
19 #import "ios/public/provider/chrome/browser/native_app_launcher/fake_native_app_ whitelist_manager.h" 18 #import "ios/public/provider/chrome/browser/native_app_launcher/fake_native_app_ whitelist_manager.h"
20 #include "ios/public/provider/chrome/browser/test_chrome_browser_provider.h" 19 #include "ios/public/provider/chrome/browser/test_chrome_browser_provider.h"
21 #import "testing/gtest_mac.h" 20 #import "testing/gtest_mac.h"
22 21
22 #if !defined(__has_feature) || !__has_feature(objc_arc)
23 #error "This file requires ARC support."
24 #endif
25
23 @interface NativeAppNavigationController (Testing) 26 @interface NativeAppNavigationController (Testing)
24 - (void)recordInfobarDisplayedOfType:(NativeAppControllerType)type 27 - (void)recordInfobarDisplayedOfType:(NativeAppControllerType)type
25 onLinkNavigation:(BOOL)isLinkNavigation; 28 onLinkNavigation:(BOOL)isLinkNavigation;
26 - (NSMutableSet*)appsPossiblyBeingInstalled; 29 - (NSMutableSet*)appsPossiblyBeingInstalled;
27 - (void)removeAppFromNotification:(NSNotification*)notification; 30 - (void)removeAppFromNotification:(NSNotification*)notification;
28 @end 31 @end
29 32
30 namespace { 33 namespace {
31 34
32 class FakeChromeBrowserProvider : public ios::TestChromeBrowserProvider { 35 class FakeChromeBrowserProvider : public ios::TestChromeBrowserProvider {
33 public: 36 public:
34 FakeChromeBrowserProvider(FakeNativeAppWhitelistManager* fake_manager) { 37 FakeChromeBrowserProvider(FakeNativeAppWhitelistManager* fake_manager) {
35 manager_.reset([fake_manager retain]); 38 manager_ = fake_manager;
36 } 39 }
37 ~FakeChromeBrowserProvider() override {} 40 ~FakeChromeBrowserProvider() override {}
38 41
39 id<NativeAppWhitelistManager> GetNativeAppWhitelistManager() const override { 42 id<NativeAppWhitelistManager> GetNativeAppWhitelistManager() const override {
40 return manager_; 43 return manager_;
41 } 44 }
42 45
43 private: 46 private:
44 base::scoped_nsprotocol<id<NativeAppWhitelistManager>> manager_; 47 id<NativeAppWhitelistManager> manager_;
45 }; 48 };
46 49
47 class NativeAppNavigationControllerTest : public ChromeWebTest { 50 class NativeAppNavigationControllerTest : public ChromeWebTest {
48 protected: 51 protected:
49 void SetUp() override { 52 void SetUp() override {
50 ChromeWebTest::SetUp(); 53 ChromeWebTest::SetUp();
51 controller_.reset( 54 controller_ =
52 [[NativeAppNavigationController alloc] initWithWebState:web_state()]); 55 [[NativeAppNavigationController alloc] initWithWebState:web_state()];
53 56
54 action_callback_ = 57 action_callback_ =
55 base::Bind(&NativeAppNavigationControllerTest::OnUserAction, 58 base::Bind(&NativeAppNavigationControllerTest::OnUserAction,
56 base::Unretained(this)); 59 base::Unretained(this));
57 base::AddActionCallback(action_callback_); 60 base::AddActionCallback(action_callback_);
58 61
59 handler_called_counter_ = 0; 62 handler_called_counter_ = 0;
60 } 63 }
61 64
62 void TearDown() override { 65 void TearDown() override {
63 base::RemoveActionCallback(action_callback_); 66 base::RemoveActionCallback(action_callback_);
64 ChromeWebTest::TearDown(); 67 ChromeWebTest::TearDown();
65 } 68 }
66 69
67 void SetExpectedActionName(const std::string& action_name) { 70 void SetExpectedActionName(const std::string& action_name) {
68 expected_action_name_.reset(new std::string(action_name)); 71 expected_action_name_.reset(new std::string(action_name));
69 } 72 }
70 73
71 void OnUserAction(const std::string& action_name) { 74 void OnUserAction(const std::string& action_name) {
72 EXPECT_EQ(*expected_action_name_, action_name); 75 EXPECT_EQ(*expected_action_name_, action_name);
73 handler_called_counter_++; 76 handler_called_counter_++;
74 } 77 }
75 78
76 void ExpectHandlerCalledAndReset(int number_of_calls) { 79 void ExpectHandlerCalledAndReset(int number_of_calls) {
77 EXPECT_EQ(number_of_calls, handler_called_counter_); 80 EXPECT_EQ(number_of_calls, handler_called_counter_);
78 handler_called_counter_ = 0; 81 handler_called_counter_ = 0;
79 } 82 }
80 83
81 base::scoped_nsobject<NativeAppNavigationController> controller_; 84 NativeAppNavigationController* controller_;
82 85
83 // The callback to invoke when an action is recorded. 86 // The callback to invoke when an action is recorded.
84 base::ActionCallback action_callback_; 87 base::ActionCallback action_callback_;
85 std::unique_ptr<std::string> expected_action_name_; 88 std::unique_ptr<std::string> expected_action_name_;
86 int handler_called_counter_; 89 int handler_called_counter_;
87 }; 90 };
88 91
89 TEST_F(NativeAppNavigationControllerTest, TestConstructor) { 92 TEST_F(NativeAppNavigationControllerTest, TestConstructor) {
90 EXPECT_TRUE(controller_); 93 EXPECT_TRUE(controller_);
91 } 94 }
(...skipping 26 matching lines...) Expand all
118 ExpectHandlerCalledAndReset(1); 121 ExpectHandlerCalledAndReset(1);
119 } 122 }
120 123
121 // Tests presenting NativeAppInfoBar after page is loaded. 124 // Tests presenting NativeAppInfoBar after page is loaded.
122 TEST_F(NativeAppNavigationControllerTest, NativeAppInfoBar) { 125 TEST_F(NativeAppNavigationControllerTest, NativeAppInfoBar) {
123 SetExpectedActionName("MobileGALInstallInfoBarDirectNavigation"); 126 SetExpectedActionName("MobileGALInstallInfoBarDirectNavigation");
124 InfoBarManagerImpl::CreateForWebState(web_state()); 127 InfoBarManagerImpl::CreateForWebState(web_state());
125 128
126 // Set up fake metadata. 129 // Set up fake metadata.
127 FakeNativeAppWhitelistManager* fakeManager = 130 FakeNativeAppWhitelistManager* fakeManager =
128 [[[FakeNativeAppWhitelistManager alloc] init] autorelease]; 131 [[FakeNativeAppWhitelistManager alloc] init];
129 IOSChromeScopedTestingChromeBrowserProvider provider( 132 IOSChromeScopedTestingChromeBrowserProvider provider(
130 base::MakeUnique<FakeChromeBrowserProvider>(fakeManager)); 133 base::MakeUnique<FakeChromeBrowserProvider>(fakeManager));
131 FakeNativeAppMetadata* metadata = 134 FakeNativeAppMetadata* metadata = [[FakeNativeAppMetadata alloc] init];
132 [[[FakeNativeAppMetadata alloc] init] autorelease];
133 fakeManager.metadata = metadata; 135 fakeManager.metadata = metadata;
134 metadata.appName = @"App"; 136 metadata.appName = @"App";
135 metadata.appId = @"App-ID"; 137 metadata.appId = @"App-ID";
136 138
137 // Load the page to trigger infobar presentation. 139 // Load the page to trigger infobar presentation.
138 LoadHtml(@"<html><body></body></html>", GURL("http://test.com")); 140 LoadHtml(@"<html><body></body></html>", GURL("http://test.com"));
139 141
140 // Verify that infobar was presented 142 // Verify that infobar was presented
141 auto* infobar_manager = InfoBarManagerImpl::FromWebState(web_state()); 143 auto* infobar_manager = InfoBarManagerImpl::FromWebState(web_state());
142 ASSERT_EQ(1U, infobar_manager->infobar_count()); 144 ASSERT_EQ(1U, infobar_manager->infobar_count());
(...skipping 12 matching lines...) Expand all
155 EXPECT_NSEQ(@"App-ID", delegate->GetAppId()); 157 EXPECT_NSEQ(@"App-ID", delegate->GetAppId());
156 } 158 }
157 159
158 TEST_F(NativeAppNavigationControllerTest, 160 TEST_F(NativeAppNavigationControllerTest,
159 TestRemovingAppFromListAfterInstallation) { 161 TestRemovingAppFromListAfterInstallation) {
160 NSString* const kMapsAppName = @"Maps"; 162 NSString* const kMapsAppName = @"Maps";
161 NSString* const kMapsAppId = @"1"; 163 NSString* const kMapsAppId = @"1";
162 NSString* const kYoutubeAppName = @"Youtube"; 164 NSString* const kYoutubeAppName = @"Youtube";
163 NSString* const kYoutubeAppId = @"2"; 165 NSString* const kYoutubeAppId = @"2";
164 166
165 base::scoped_nsobject<InstallationNotifier> installationNotifier( 167 InstallationNotifier* installationNotifier =
166 [[InstallationNotifier alloc] init]); 168 [[InstallationNotifier alloc] init];
167 169
168 FakeNativeAppWhitelistManager* fakeManager = 170 FakeNativeAppWhitelistManager* fakeManager =
169 [[[FakeNativeAppWhitelistManager alloc] init] autorelease]; 171 [[FakeNativeAppWhitelistManager alloc] init];
170 IOSChromeScopedTestingChromeBrowserProvider provider( 172 IOSChromeScopedTestingChromeBrowserProvider provider(
171 base::MakeUnique<FakeChromeBrowserProvider>(fakeManager)); 173 base::MakeUnique<FakeChromeBrowserProvider>(fakeManager));
172 174
173 base::scoped_nsobject<FakeNativeAppMetadata> metadataMaps( 175 FakeNativeAppMetadata* metadataMaps = [[FakeNativeAppMetadata alloc] init];
174 [[FakeNativeAppMetadata alloc] init]);
175 [metadataMaps setAppName:kMapsAppName]; 176 [metadataMaps setAppName:kMapsAppName];
176 [metadataMaps setAppId:kMapsAppId]; 177 [metadataMaps setAppId:kMapsAppId];
177 ASSERT_TRUE(metadataMaps.get()); 178 ASSERT_TRUE(metadataMaps);
178 NSString* appIdMaps = [metadataMaps appId]; 179 NSString* appIdMaps = [metadataMaps appId];
179 NSNotification* notificationMaps = 180 NSNotification* notificationMaps =
180 [NSNotification notificationWithName:kMapsAppName 181 [NSNotification notificationWithName:kMapsAppName
181 object:installationNotifier]; 182 object:installationNotifier];
182 183
183 base::scoped_nsobject<FakeNativeAppMetadata> metadataYouTube( 184 FakeNativeAppMetadata* metadataYouTube = [[FakeNativeAppMetadata alloc] init];
184 [[FakeNativeAppMetadata alloc] init]);
185 [metadataYouTube setAppName:kYoutubeAppName]; 185 [metadataYouTube setAppName:kYoutubeAppName];
186 [metadataYouTube setAppId:kYoutubeAppId]; 186 [metadataYouTube setAppId:kYoutubeAppId];
187 187
188 ASSERT_TRUE(metadataYouTube.get()); 188 ASSERT_TRUE(metadataYouTube);
189 NSString* appIdYouTube = [metadataYouTube appId]; 189 NSString* appIdYouTube = [metadataYouTube appId];
190 NSNotification* notificationYouTube = 190 NSNotification* notificationYouTube =
191 [NSNotification notificationWithName:kYoutubeAppName 191 [NSNotification notificationWithName:kYoutubeAppName
192 object:installationNotifier]; 192 object:installationNotifier];
193 193
194 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 0); 194 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 0);
195 [[controller_ appsPossiblyBeingInstalled] addObject:appIdMaps]; 195 [[controller_ appsPossiblyBeingInstalled] addObject:appIdMaps];
196 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 1); 196 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 1);
197 [[controller_ appsPossiblyBeingInstalled] addObject:appIdYouTube]; 197 [[controller_ appsPossiblyBeingInstalled] addObject:appIdYouTube];
198 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 2); 198 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 2);
199 [fakeManager setAppScheme:kMapsAppName]; 199 [fakeManager setAppScheme:kMapsAppName];
200 [controller_ removeAppFromNotification:notificationMaps]; 200 [controller_ removeAppFromNotification:notificationMaps];
201 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 1); 201 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 1);
202 [fakeManager setAppScheme:kYoutubeAppName]; 202 [fakeManager setAppScheme:kYoutubeAppName];
203 [controller_ removeAppFromNotification:notificationYouTube]; 203 [controller_ removeAppFromNotification:notificationYouTube];
204 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 0); 204 DCHECK([[controller_ appsPossiblyBeingInstalled] count] == 0);
205 } 205 }
206 206
207 } // namespace 207 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698