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

Side by Side Diff: chrome/browser/webshare/share_service_impl_unittest.cc

Issue 2703333002: Web Share: Refactor Mojo interface to now return an enum error. (Closed)
Patch Set: Fix assignment statement. #oops Created 3 years, 9 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/callback.h" 8 #include "base/callback.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 16 matching lines...) Expand all
27 27
28 constexpr char kTargetName[] = "Share Target"; 28 constexpr char kTargetName[] = "Share Target";
29 constexpr char kUrlTemplate[] = "share?title={title}&text={text}&url={url}"; 29 constexpr char kUrlTemplate[] = "share?title={title}&text={text}&url={url}";
30 constexpr char kManifestUrlHigh[] = 30 constexpr char kManifestUrlHigh[] =
31 "https://www.example-high.com/target/manifest.json"; 31 "https://www.example-high.com/target/manifest.json";
32 constexpr char kManifestUrlLow[] = 32 constexpr char kManifestUrlLow[] =
33 "https://www.example-low.com/target/manifest.json"; 33 "https://www.example-low.com/target/manifest.json";
34 constexpr char kManifestUrlMin[] = 34 constexpr char kManifestUrlMin[] =
35 "https://www.example-min.com/target/manifest.json"; 35 "https://www.example-min.com/target/manifest.json";
36 36
37 void DidShare(const base::Optional<std::string>& expected_error, 37 void DidShare(blink::mojom::ShareError expected_error,
38 const base::Optional<std::string>& error) { 38 blink::mojom::ShareError error) {
39 EXPECT_EQ(expected_error, error); 39 EXPECT_EQ(expected_error, error);
40 } 40 }
41 41
42 class ShareServiceTestImpl : public ShareServiceImpl { 42 class ShareServiceTestImpl : public ShareServiceImpl {
43 public: 43 public:
44 explicit ShareServiceTestImpl(blink::mojom::ShareServiceRequest request) 44 explicit ShareServiceTestImpl(blink::mojom::ShareServiceRequest request)
45 : binding_(this) { 45 : binding_(this) {
46 binding_.Bind(std::move(request)); 46 binding_.Bind(std::move(request));
47 47
48 pref_service_.reset(new TestingPrefServiceSimple()); 48 pref_service_.reset(new TestingPrefServiceSimple());
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 } // namespace 168 } // namespace
169 169
170 // Basic test to check the Share method calls the callback with the expected 170 // Basic test to check the Share method calls the callback with the expected
171 // parameters. 171 // parameters.
172 TEST_F(ShareServiceImplUnittest, ShareCallbackParams) { 172 TEST_F(ShareServiceImplUnittest, ShareCallbackParams) {
173 share_service_helper()->AddShareTargetToPrefs(kManifestUrlLow, kTargetName, 173 share_service_helper()->AddShareTargetToPrefs(kManifestUrlLow, kTargetName,
174 kUrlTemplate); 174 kUrlTemplate);
175 share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName, 175 share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName,
176 kUrlTemplate); 176 kUrlTemplate);
177 177
178 base::Callback<void(const base::Optional<std::string>&)> callback = 178 base::Callback<void(blink::mojom::ShareError)> callback =
179 base::Bind(&DidShare, base::Optional<std::string>()); 179 base::Bind(&DidShare, blink::mojom::ShareError::OK);
180 180
181 base::RunLoop run_loop; 181 base::RunLoop run_loop;
182 share_service_helper()->set_run_loop(&run_loop); 182 share_service_helper()->set_run_loop(&run_loop);
183 183
184 const GURL url(kUrlSpec); 184 const GURL url(kUrlSpec);
185 share_service()->Share(kTitle, kText, url, callback); 185 share_service()->Share(kTitle, kText, url, callback);
186 186
187 run_loop.Run(); 187 run_loop.Run();
188 188
189 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{ 189 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{
190 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh)), 190 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh)),
191 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))}; 191 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))};
192 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker()); 192 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker());
193 193
194 // Pick example-low.com. 194 // Pick example-low.com.
195 share_service_helper()->picker_callback().Run( 195 share_service_helper()->picker_callback().Run(
196 base::Optional<std::string>(kManifestUrlLow)); 196 base::Optional<std::string>(kManifestUrlLow));
197 197
198 const char kExpectedURL[] = 198 const char kExpectedURL[] =
199 "https://www.example-low.com/target/" 199 "https://www.example-low.com/target/"
200 "share?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww." 200 "share?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww."
201 "google.com%2F"; 201 "google.com%2F";
202 EXPECT_EQ(kExpectedURL, share_service_helper()->GetLastUsedTargetURL()); 202 EXPECT_EQ(kExpectedURL, share_service_helper()->GetLastUsedTargetURL());
203 } 203 }
204 204
205 // Tests the result of cancelling the share in the picker UI, that doesn't have 205 // Tests the result of cancelling the share in the picker UI, that doesn't have
206 // any targets. 206 // any targets.
207 TEST_F(ShareServiceImplUnittest, ShareCancelNoTargets) { 207 TEST_F(ShareServiceImplUnittest, ShareCancelNoTargets) {
208 // Expect an error message in response. 208 // Expect an error message in response.
209 base::Callback<void(const base::Optional<std::string>&)> callback = 209 base::Callback<void(blink::mojom::ShareError)> callback =
210 base::Bind(&DidShare, base::Optional<std::string>("Share was cancelled")); 210 base::Bind(&DidShare, blink::mojom::ShareError::CANCELED);
211 211
212 base::RunLoop run_loop; 212 base::RunLoop run_loop;
213 share_service_helper()->set_run_loop(&run_loop); 213 share_service_helper()->set_run_loop(&run_loop);
214 214
215 const GURL url(kUrlSpec); 215 const GURL url(kUrlSpec);
216 share_service()->Share(kTitle, kText, url, callback); 216 share_service()->Share(kTitle, kText, url, callback);
217 217
218 run_loop.Run(); 218 run_loop.Run();
219 219
220 EXPECT_TRUE(share_service_helper()->GetTargetsInPicker().empty()); 220 EXPECT_TRUE(share_service_helper()->GetTargetsInPicker().empty());
221 221
222 // Cancel the dialog. 222 // Cancel the dialog.
223 share_service_helper()->picker_callback().Run(base::nullopt); 223 share_service_helper()->picker_callback().Run(base::nullopt);
224 224
225 EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty()); 225 EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty());
226 } 226 }
227 227
228 // Tests the result of cancelling the share in the picker UI, that has targets. 228 // Tests the result of cancelling the share in the picker UI, that has targets.
229 TEST_F(ShareServiceImplUnittest, ShareCancelWithTargets) { 229 TEST_F(ShareServiceImplUnittest, ShareCancelWithTargets) {
230 share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName, 230 share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName,
231 kUrlTemplate); 231 kUrlTemplate);
232 share_service_helper()->AddShareTargetToPrefs(kManifestUrlLow, kTargetName, 232 share_service_helper()->AddShareTargetToPrefs(kManifestUrlLow, kTargetName,
233 kUrlTemplate); 233 kUrlTemplate);
234 234
235 // Expect an error message in response. 235 // Expect an error message in response.
236 base::Callback<void(const base::Optional<std::string>&)> callback = 236 base::Callback<void(blink::mojom::ShareError)> callback =
237 base::Bind(&DidShare, base::Optional<std::string>("Share was cancelled")); 237 base::Bind(&DidShare, blink::mojom::ShareError::CANCELED);
238 238
239 base::RunLoop run_loop; 239 base::RunLoop run_loop;
240 share_service_helper()->set_run_loop(&run_loop); 240 share_service_helper()->set_run_loop(&run_loop);
241 241
242 const GURL url(kUrlSpec); 242 const GURL url(kUrlSpec);
243 share_service()->Share(kTitle, kText, url, callback); 243 share_service()->Share(kTitle, kText, url, callback);
244 244
245 run_loop.Run(); 245 run_loop.Run();
246 246
247 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{ 247 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{
248 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh)), 248 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh)),
249 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))}; 249 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))};
250 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker()); 250 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker());
251 251
252 // Cancel the dialog. 252 // Cancel the dialog.
253 share_service_helper()->picker_callback().Run(base::nullopt); 253 share_service_helper()->picker_callback().Run(base::nullopt);
254 254
255 EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty()); 255 EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty());
256 } 256 }
257 257
258 // Tests a target with a broken URL template (ReplacePlaceholders failure). 258 // Tests a target with a broken URL template (ReplacePlaceholders failure).
259 TEST_F(ShareServiceImplUnittest, ShareBrokenUrl) { 259 TEST_F(ShareServiceImplUnittest, ShareBrokenUrl) {
260 // Invalid placeholders. Detailed tests for broken templates are in the 260 // Invalid placeholders. Detailed tests for broken templates are in the
261 // ReplacePlaceholders test; this just tests the share response. 261 // ReplacePlaceholders test; this just tests the share response.
262 constexpr char kBrokenUrlTemplate[] = "share?title={title"; 262 constexpr char kBrokenUrlTemplate[] = "share?title={title";
263 share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName, 263 share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName,
264 kBrokenUrlTemplate); 264 kBrokenUrlTemplate);
265 265
266 // Expect an error message in response. 266 // Expect an error message in response.
267 base::Callback<void(const base::Optional<std::string>&)> callback = 267 base::Callback<void(blink::mojom::ShareError)> callback =
268 base::Bind(&DidShare, 268 base::Bind(&DidShare, blink::mojom::ShareError::INTERNAL_ERROR);
269 base::Optional<std::string>(
270 "Error: unable to replace placeholders in url template"));
271 269
272 base::RunLoop run_loop; 270 base::RunLoop run_loop;
273 share_service_helper()->set_run_loop(&run_loop); 271 share_service_helper()->set_run_loop(&run_loop);
274 272
275 const GURL url(kUrlSpec); 273 const GURL url(kUrlSpec);
276 share_service()->Share(kTitle, kText, url, callback); 274 share_service()->Share(kTitle, kText, url, callback);
277 275
278 run_loop.Run(); 276 run_loop.Run();
279 277
280 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{ 278 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{
281 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh))}; 279 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh))};
282 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker()); 280 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker());
283 281
284 // Pick example-high.com. 282 // Pick example-high.com.
285 share_service_helper()->picker_callback().Run( 283 share_service_helper()->picker_callback().Run(
286 base::Optional<std::string>(kManifestUrlHigh)); 284 base::Optional<std::string>(kManifestUrlHigh));
287 285
288 EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty()); 286 EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty());
289 } 287 }
290 288
291 // Test to check that only targets with enough engagement were in picker. 289 // Test to check that only targets with enough engagement were in picker.
292 TEST_F(ShareServiceImplUnittest, ShareWithSomeInsufficientlyEngagedTargets) { 290 TEST_F(ShareServiceImplUnittest, ShareWithSomeInsufficientlyEngagedTargets) {
293 share_service_helper()->AddShareTargetToPrefs(kManifestUrlMin, kTargetName, 291 share_service_helper()->AddShareTargetToPrefs(kManifestUrlMin, kTargetName,
294 kUrlTemplate); 292 kUrlTemplate);
295 share_service_helper()->AddShareTargetToPrefs(kManifestUrlLow, kTargetName, 293 share_service_helper()->AddShareTargetToPrefs(kManifestUrlLow, kTargetName,
296 kUrlTemplate); 294 kUrlTemplate);
297 295
298 base::Callback<void(const base::Optional<std::string>&)> callback = 296 base::Callback<void(blink::mojom::ShareError)> callback =
299 base::Bind(&DidShare, base::Optional<std::string>()); 297 base::Bind(&DidShare, blink::mojom::ShareError::OK);
300 298
301 base::RunLoop run_loop; 299 base::RunLoop run_loop;
302 share_service_helper()->set_run_loop(&run_loop); 300 share_service_helper()->set_run_loop(&run_loop);
303 301
304 const GURL url(kUrlSpec); 302 const GURL url(kUrlSpec);
305 share_service()->Share(kTitle, kText, url, callback); 303 share_service()->Share(kTitle, kText, url, callback);
306 304
307 run_loop.Run(); 305 run_loop.Run();
308 306
309 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{ 307 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{
(...skipping 18 matching lines...) Expand all
328 kUrlTemplate); 326 kUrlTemplate);
329 327
330 base::RunLoop run_loop; 328 base::RunLoop run_loop;
331 share_service_helper()->set_run_loop(&run_loop); 329 share_service_helper()->set_run_loop(&run_loop);
332 330
333 const GURL url(kUrlSpec); 331 const GURL url(kUrlSpec);
334 // Expect the callback to never be called (since the share service is 332 // Expect the callback to never be called (since the share service is
335 // destroyed before the picker is closed). 333 // destroyed before the picker is closed).
336 // TODO(mgiuca): This probably should still complete the share, if not 334 // TODO(mgiuca): This probably should still complete the share, if not
337 // cancelled, even if the underlying tab is closed. 335 // cancelled, even if the underlying tab is closed.
338 base::Callback<void(const base::Optional<std::string>&)> callback = 336 base::Callback<void(blink::mojom::ShareError)> callback =
339 base::Bind([](const base::Optional<std::string>& error) { FAIL(); }); 337 base::Bind([](blink::mojom::ShareError error) { FAIL(); });
340 share_service()->Share(kTitle, kText, url, callback); 338 share_service()->Share(kTitle, kText, url, callback);
341 339
342 run_loop.Run(); 340 run_loop.Run();
343 341
344 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{ 342 const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{
345 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))}; 343 make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))};
346 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker()); 344 EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker());
347 345
348 const base::Callback<void(base::Optional<std::string>)> picker_callback = 346 const base::Callback<void(base::Optional<std::string>)> picker_callback =
349 share_service_helper()->picker_callback(); 347 share_service_helper()->picker_callback();
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 EXPECT_TRUE(succeeded); 548 EXPECT_TRUE(succeeded);
551 EXPECT_EQ("%C3%A9", url_template_filled); 549 EXPECT_EQ("%C3%A9", url_template_filled);
552 550
553 // U+1F4A9 551 // U+1F4A9
554 url_template = "{title}"; 552 url_template = "{title}";
555 succeeded = ShareServiceImpl::ReplacePlaceholders( 553 succeeded = ShareServiceImpl::ReplacePlaceholders(
556 url_template, "\xf0\x9f\x92\xa9", kText, url, &url_template_filled); 554 url_template, "\xf0\x9f\x92\xa9", kText, url, &url_template_filled);
557 EXPECT_TRUE(succeeded); 555 EXPECT_TRUE(succeeded);
558 EXPECT_EQ("%F0%9F%92%A9", url_template_filled); 556 EXPECT_EQ("%F0%9F%92%A9", url_template_filled);
559 } 557 }
OLDNEW
« no previous file with comments | « chrome/browser/webshare/share_service_impl.cc ('k') | third_party/WebKit/LayoutTests/webshare/resources/mock-share-service.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698