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

Side by Side Diff: ios/chrome/browser/web/mailto_url_rewriter_unittest.mm

Issue 2852003002: Adds mailto: URL support to app launching. (Closed)
Patch Set: clean up convertLegacyOptions logic some more 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/browser/web/mailto_url_rewriter.h"
6
7 #import "ios/chrome/browser/web/mailto_handler.h"
8 #import "ios/chrome/browser/web/mailto_handler_gmail.h"
9 #import "ios/chrome/browser/web/mailto_handler_system_mail.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "testing/gtest_mac.h"
12 #include "testing/platform_test.h"
13
14 #if !defined(__has_feature) || !__has_feature(objc_arc)
15 #error "This file requires ARC support."
16 #endif
17
18 namespace {
19
20 // Defines the 3 valid states for ShouldAutoOpenLinks_422689480.
21 enum {
22 kAutoOpenLinksNotSet = 0,
23 kAutoOpenLinksNo = 1,
24 kAutoOpenLinksYes = 2,
25 };
26 NSString* const kLegacyShouldAutoOpenKey = @"ShouldAutoOpenLinks_422689480";
27 NSString* const kGmailAppStoreID = @"422689480";
28
29 } // namespace
30
31 #pragma mark - Gmail not installed
32
33 @interface FakeMailtoHandlerGmailNotInstalled : MailtoHandlerGmail
34 @end
35
36 @implementation FakeMailtoHandlerGmailNotInstalled
37 - (BOOL)isAvailable {
38 return NO;
39 }
40 @end
41
42 #pragma mark - Gmail is installed
43
44 @interface FakeMailtoHandlerGmailInstalled : MailtoHandlerGmail
45 @end
46
47 @implementation FakeMailtoHandlerGmailInstalled
48 - (BOOL)isAvailable {
49 return YES;
50 }
51 @end
52
53 #pragma mark - MailtoURLRewriter private interfaces for TEST_Fing.
54
55 @interface MailtoURLRewriter ()
56 + (void)resetDefaultHandlerID;
57 - (void)addMailtoApp:(MailtoHandler*)handlerApp;
58 - (void)convertLegacyOptions;
59 @end
60
61 #pragma mark - Unit Test Cases
62
63 class MailtoURLRewriterTest : public PlatformTest {
64 protected:
65 void SetUp() override { [MailtoURLRewriter resetDefaultHandlerID]; }
66 };
67
68 // Tests that a standard instance has the expected values.
69 TEST_F(MailtoURLRewriterTest, TestStandardInstance) {
70 MailtoURLRewriter* rewriter =
71 [[MailtoURLRewriter alloc] initWithStandardHandlers];
72 EXPECT_TRUE(rewriter);
73 // ID for system Mail client app must not be an empty string.
74 EXPECT_GT([[MailtoURLRewriter systemMailApp] length], 0U);
75
76 NSArray<MailtoHandler*>* handlers = [rewriter defaultHandlers];
77 EXPECT_GE([handlers count], 1U);
78 for (MailtoHandler* handler : handlers) {
79 ASSERT_TRUE(handler);
80 NSString* appStoreID = [handler appStoreID];
81 [rewriter setDefaultHandlerID:appStoreID];
82 EXPECT_NSEQ(appStoreID, [rewriter defaultHandlerID]);
83 }
84 }
85
86 TEST_F(MailtoURLRewriterTest, TestUserPreferencePersistence) {
87 MailtoURLRewriter* rewriter =
88 [[MailtoURLRewriter alloc] initWithStandardHandlers];
89 EXPECT_TRUE(rewriter);
90 NSArray<MailtoHandler*>* handlers = [rewriter defaultHandlers];
91 ASSERT_GE([handlers count], 2U);
92 NSString* initialHandlerID = [rewriter defaultHandlerID];
93 NSString* otherHandlerID = nil;
94 for (MailtoHandler* handler : handlers) {
95 if ([initialHandlerID isEqualToString:[handler appStoreID]])
96 continue;
97 otherHandlerID = [handler appStoreID];
98 }
99 ASSERT_TRUE([otherHandlerID length]);
100 [rewriter setDefaultHandlerID:otherHandlerID];
101
102 MailtoURLRewriter* rewriter2 =
103 [[MailtoURLRewriter alloc] initWithStandardHandlers];
104 EXPECT_NSEQ(otherHandlerID, [rewriter2 defaultHandlerID]);
105 }
106
107 // Tests that a new user without Gmail app installed launches system Mail app.
108 TEST_F(MailtoURLRewriterTest, TestNewUserNoGmail) {
109 // Sets pre-condition for a user who did not have Chrome installed.
110 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
111 [defaults removeObjectForKey:kLegacyShouldAutoOpenKey];
112 // A faked MailtoHandler for Gmail.
113 MailtoHandler* fakeGmailHandler =
114 [[FakeMailtoHandlerGmailNotInstalled alloc] init];
115
116 // Sets up a MailtoURLRewriter for testing.
117 MailtoURLRewriter* rewriter = [[MailtoURLRewriter alloc] init];
118 MailtoHandler* systemMailHandler = [[MailtoHandlerSystemMail alloc] init];
119 [rewriter addMailtoApp:systemMailHandler];
120 [rewriter addMailtoApp:fakeGmailHandler];
121 [rewriter convertLegacyOptions];
122
123 // Verify that MailtoURLRewriter will use the system Mail app.
124 EXPECT_NSEQ([MailtoURLRewriter systemMailApp], [rewriter defaultHandlerID]);
125 }
126
127 // Tests that a new user with Gmail app installed launches Gmail app.
128 TEST_F(MailtoURLRewriterTest, TestNewUserWithGmail) {
129 // Sets pre-condition for a user who did not have Chrome installed.
130 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
131 [defaults removeObjectForKey:kLegacyShouldAutoOpenKey];
132 // A faked MailtoHandler for Gmail.
133 MailtoHandler* fakeGmailHandler =
134 [[FakeMailtoHandlerGmailInstalled alloc] init];
135
136 // Sets up a MailtoURLRewriter for testing.
137 MailtoURLRewriter* rewriter = [[MailtoURLRewriter alloc] init];
138 MailtoHandler* systemMailHandler = [[MailtoHandlerSystemMail alloc] init];
139 [rewriter addMailtoApp:systemMailHandler];
140 [rewriter addMailtoApp:fakeGmailHandler];
141 [rewriter convertLegacyOptions];
142
143 // Verify that MailtoURLRewriter will use Gmail app.
144 EXPECT_NSEQ(kGmailAppStoreID, [rewriter defaultHandlerID]);
145 }
146
147 // Tests that a user who has Gmail installed but has chosen not to use Gmail
148 // as the app to handle mailto: links retains the same behavior when upgrading
149 // Chrome.
150 TEST_F(MailtoURLRewriterTest, TestUpgradeUserWithGmailDisabled) {
151 // Sets pre-condition for a user who had Chrome installed.
152 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
153 [defaults setObject:@(kAutoOpenLinksNo) forKey:kLegacyShouldAutoOpenKey];
154 // A faked MailtoHandler for Gmail.
155 MailtoHandler* fakeGmailHandler =
156 [[FakeMailtoHandlerGmailInstalled alloc] init];
157
158 // Sets up a MailtoURLRewriter for testing.
159 MailtoURLRewriter* rewriter = [[MailtoURLRewriter alloc] init];
160 MailtoHandler* systemMailHandler = [[MailtoHandlerSystemMail alloc] init];
161 [rewriter addMailtoApp:systemMailHandler];
162 [rewriter addMailtoApp:fakeGmailHandler];
163 [rewriter convertLegacyOptions];
164
165 // Verify that MailtoURLRewriter will use the system Mail app. As part of the
166 // "upgrade", the legacy key should be removed as well.
167 EXPECT_NSEQ([MailtoURLRewriter systemMailApp], [rewriter defaultHandlerID]);
168 EXPECT_FALSE([defaults objectForKey:kLegacyShouldAutoOpenKey]);
169 }
170
171 // Tests that a user who has Gmail installed and has chosen to use Gmail as the
172 // app to handle mailto: links retains the same behavior.
173 TEST_F(MailtoURLRewriterTest, TestUpgradeUserWithGmailEnabled) {
174 // Sets pre-condition for a user who did not have Chrome installed.
175 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
176 [defaults setObject:@(kAutoOpenLinksYes) forKey:kLegacyShouldAutoOpenKey];
177 // A faked MailtoHandler for Gmail.
178 MailtoHandler* fakeGmailHandler =
179 [[FakeMailtoHandlerGmailInstalled alloc] init];
180
181 // Sets up a MailtoURLRewriter for testing.
182 MailtoURLRewriter* rewriter = [[MailtoURLRewriter alloc] init];
183 MailtoHandler* systemMailHandler = [[MailtoHandlerSystemMail alloc] init];
184 [rewriter addMailtoApp:systemMailHandler];
185 [rewriter addMailtoApp:fakeGmailHandler];
186 [rewriter convertLegacyOptions];
187
188 // Verify that MailtoURLRewriter will use Gmail app. As part of the upgrade,
189 // the legacy key should be removed as well.
190 EXPECT_NSEQ(kGmailAppStoreID, [rewriter defaultHandlerID]);
191 EXPECT_FALSE([defaults objectForKey:kLegacyShouldAutoOpenKey]);
192 }
193
194 // Tests that a user who installed Gmail after started using Chrome gets Gmail
195 // as the handler of mailto: links.
196 TEST_F(MailtoURLRewriterTest, TestInstalledGmailAfterChrome) {
197 // Pre-condition for a user who did not have Chrome installed.
198 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
199 [defaults removeObjectForKey:kLegacyShouldAutoOpenKey];
200 // A faked MailtoHandler for Gmail.
201 MailtoHandler* fakeGmailHandler =
202 [[FakeMailtoHandlerGmailInstalled alloc] init];
203
204 // Sets up a MailtoURLRewriter for testing.
205 MailtoURLRewriter* rewriter = [[MailtoURLRewriter alloc] init];
206 MailtoHandler* systemMailHandler = [[MailtoHandlerSystemMail alloc] init];
207 [rewriter addMailtoApp:systemMailHandler];
208 [rewriter addMailtoApp:fakeGmailHandler];
209 [rewriter convertLegacyOptions];
210
211 // Verify that MailtoURLRewriter will use Gmail app.
212 EXPECT_NSEQ(kGmailAppStoreID, [rewriter defaultHandlerID]);
213 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698