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

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

Issue 2664033002: Read share targets from prefstore, and filter by engagement. (Closed)
Patch Set: Remove duplicate function Created 3 years, 10 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"
11 #include "chrome/browser/webshare/share_service_impl.h" 11 #include "chrome/browser/webshare/share_service_impl.h"
12 #include "chrome/common/pref_names.h"
12 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 13 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
14 #include "components/prefs/pref_registry_simple.h"
15 #include "components/prefs/scoped_user_pref_update.h"
16 #include "components/prefs/testing_pref_service.h"
13 #include "mojo/public/cpp/bindings/interface_request.h" 17 #include "mojo/public/cpp/bindings/interface_request.h"
14 #include "mojo/public/cpp/bindings/strong_binding.h" 18 #include "mojo/public/cpp/bindings/strong_binding.h"
15 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/gurl.h" 20 #include "url/gurl.h"
17 21
18 namespace { 22 namespace {
19 23
20 constexpr char kTitle[] = "My title"; 24 constexpr char kTitle[] = "My title";
21 constexpr char kText[] = "My text"; 25 constexpr char kText[] = "My text";
22 constexpr char kUrlSpec[] = "https://www.google.com/"; 26 constexpr char kUrlSpec[] = "https://www.google.com/";
23 27
24 class ShareServiceTestImpl : public ShareServiceImpl { 28 class ShareServiceTestImpl : public ShareServiceImpl {
25 public: 29 public:
26 static ShareServiceTestImpl* Create( 30 static ShareServiceTestImpl* Create(
27 blink::mojom::ShareServiceRequest request) { 31 blink::mojom::ShareServiceRequest request) {
28 std::unique_ptr<ShareServiceTestImpl> share_service_helper = 32 std::unique_ptr<ShareServiceTestImpl> share_service_helper =
29 base::MakeUnique<ShareServiceTestImpl>(); 33 base::MakeUnique<ShareServiceTestImpl>();
30 ShareServiceTestImpl* share_service_helper_raw = share_service_helper.get(); 34 ShareServiceTestImpl* share_service_helper_raw = share_service_helper.get();
31 mojo::MakeStrongBinding(std::move(share_service_helper), 35 mojo::MakeStrongBinding(std::move(share_service_helper),
32 std::move(request)); 36 std::move(request));
33 return share_service_helper_raw; 37 return share_service_helper_raw;
34 } 38 }
35 39
36 void set_picker_result(base::Optional<base::string16> result) { 40 void set_picker_result(base::Optional<base::string16> result) {
37 picker_result_ = result; 41 picker_result_ = result;
38 } 42 }
39 43
44 void SetUpPrefs() {
45 pref_service_.reset(new TestingPrefServiceSimple());
46 pref_service_->registry()->RegisterDictionaryPref(
47 prefs::kWebShareVisitedTargets);
48 }
49
50 void AddShareTarget(std::string manifest_url, std::string url_template) {
51 DictionaryPrefUpdate update(GetPrefService(),
52 prefs::kWebShareVisitedTargets);
53 base::DictionaryValue* share_target_dict = update.Get();
54
55 std::unique_ptr<base::DictionaryValue> origin_dict(
56 new base::DictionaryValue);
57
58 constexpr char kUrlTemplateKey[] = "url_template";
59 origin_dict->SetStringWithoutPathExpansion(kUrlTemplateKey, url_template);
60
61 share_target_dict->SetWithoutPathExpansion(manifest_url,
62 std::move(origin_dict));
63 }
64
65 void AddEngagementForTarget(std::string manifest_url,
66 blink::mojom::EngagementLevel level) {
67 engagement_map[manifest_url] = level;
68 }
69
70 void ClearEngagements() { engagement_map.clear(); }
71
40 const std::string& GetLastUsedTargetURL() { return last_used_target_url_; } 72 const std::string& GetLastUsedTargetURL() { return last_used_target_url_; }
41 73
42 private: 74 private:
43 base::Optional<base::string16> picker_result_ = base::nullopt; 75 base::Optional<base::string16> picker_result_ = base::nullopt;
44 std::string last_used_target_url_; 76 std::string last_used_target_url_;
77 std::unique_ptr<TestingPrefServiceSimple> pref_service_;
78 std::map<std::string, blink::mojom::EngagementLevel> engagement_map;
45 79
46 void ShowPickerDialog( 80 void ShowPickerDialog(
47 const std::vector<base::string16>& targets, 81 const std::vector<base::string16>& targets,
48 const base::Callback<void(base::Optional<base::string16>)>& callback) 82 const base::Callback<void(base::Optional<base::string16>)>& callback)
49 override { 83 override {
84 // TODO check targets were what was expected.
Matt Giuca 2017/02/01 07:30:20 Should this be done?
constantina 2017/02/02 00:43:48 Yep, will do in next patch.
50 callback.Run(picker_result_); 85 callback.Run(picker_result_);
51 } 86 }
52 87
53 void OpenTargetURL(const GURL& target_url) override { 88 void OpenTargetURL(const GURL& target_url) override {
54 last_used_target_url_ = target_url.spec(); 89 last_used_target_url_ = target_url.spec();
55 } 90 }
91
92 PrefService* GetPrefService() override { return pref_service_.get(); }
93
94 blink::mojom::EngagementLevel GetEngagementLevel(GURL url) override {
95 return engagement_map[url.spec()];
96 }
56 }; 97 };
57 98
58 class ShareServiceImplUnittest : public ChromeRenderViewHostTestHarness { 99 class ShareServiceImplUnittest : public ChromeRenderViewHostTestHarness {
59 public: 100 public:
60 ShareServiceImplUnittest() = default; 101 ShareServiceImplUnittest() = default;
61 ~ShareServiceImplUnittest() override = default; 102 ~ShareServiceImplUnittest() override = default;
62 103
63 void SetUp() override { 104 void SetUp() override {
64 ChromeRenderViewHostTestHarness::SetUp(); 105 ChromeRenderViewHostTestHarness::SetUp();
65 106
66 share_service_helper_ = 107 share_service_helper_ =
67 ShareServiceTestImpl::Create(mojo::MakeRequest(&share_service_)); 108 ShareServiceTestImpl::Create(mojo::MakeRequest(&share_service_));
109 share_service_helper_->SetUpPrefs();
68 } 110 }
69 111
70 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } 112 void TearDown() override {
113 ChromeRenderViewHostTestHarness::TearDown();
114 share_service_helper_->ClearEngagements();
115 }
71 116
72 void DidShare(const std::string& expected_target_url, 117 void DidShare(const std::string& expected_target_url,
73 const base::Optional<std::string>& expected_param, 118 const base::Optional<std::string>& expected_param,
74 const base::Optional<std::string>& param) { 119 const base::Optional<std::string>& param) {
75 EXPECT_EQ(expected_param, param); 120 EXPECT_EQ(expected_param, param);
76 std::string target_url = share_service_helper_->GetLastUsedTargetURL(); 121 std::string target_url = share_service_helper_->GetLastUsedTargetURL();
77 EXPECT_EQ(expected_target_url, target_url); 122 EXPECT_EQ(expected_target_url, target_url);
78 123
79 if (!on_callback_.is_null()) 124 if (!on_callback_.is_null())
80 on_callback_.Run(); 125 on_callback_.Run();
81 } 126 }
82 127
83 blink::mojom::ShareServicePtr share_service_; 128 blink::mojom::ShareServicePtr share_service_;
84 ShareServiceTestImpl* share_service_helper_; 129 ShareServiceTestImpl* share_service_helper_;
85 base::Closure on_callback_; 130 base::Closure on_callback_;
86 }; 131 };
87 132
88 } // namespace 133 } // namespace
89 134
90 // Basic test to check the Share method calls the callback with the expected 135 // Basic test to check the Share method calls the callback with the expected
91 // parameters. 136 // parameters.
92 TEST_F(ShareServiceImplUnittest, ShareCallbackParams) { 137 TEST_F(ShareServiceImplUnittest, ShareCallbackParams) {
138 std::string base_url = "https://wicg.github.io/web-share-target/demos/";
139 std::string url_template =
140 "sharetarget.html?title={title}&text={text}&url={url}";
93 std::string expected_url = 141 std::string expected_url =
94 "https://wicg.github.io/web-share-target/demos/" 142 "https://wicg.github.io/web-share-target/demos/"
95 "sharetarget.html?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww." 143 "sharetarget.html?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww."
96 "google.com%2F"; 144 "google.com%2F";
97 share_service_helper_->set_picker_result( 145 share_service_helper_->set_picker_result(base::ASCIIToUTF16(base_url));
98 base::ASCIIToUTF16("https://wicg.github.io/web-share-target/demos/")); 146 share_service_helper_->AddShareTarget(base_url, url_template);
147 share_service_helper_->AddEngagementForTarget(
148 base_url, blink::mojom::EngagementLevel::LOW);
99 149
100 const GURL url(kUrlSpec);
101 base::Callback<void(const base::Optional<std::string>&)> callback = 150 base::Callback<void(const base::Optional<std::string>&)> callback =
102 base::Bind(&ShareServiceImplUnittest::DidShare, base::Unretained(this), 151 base::Bind(&ShareServiceImplUnittest::DidShare, base::Unretained(this),
103 expected_url, base::Optional<std::string>()); 152 expected_url, base::Optional<std::string>());
104 153
105 base::RunLoop run_loop; 154 base::RunLoop run_loop;
106 on_callback_ = run_loop.QuitClosure(); 155 on_callback_ = run_loop.QuitClosure();
107 156
157 const GURL url(kUrlSpec);
108 share_service_->Share(kTitle, kText, url, callback); 158 share_service_->Share(kTitle, kText, url, callback);
109 159
110 run_loop.Run(); 160 run_loop.Run();
111 } 161 }
112 162
113 // Tests the result of cancelling the share in the picker UI. 163 // Tests the result of cancelling the share in the picker UI.
114 TEST_F(ShareServiceImplUnittest, ShareCancel) { 164 TEST_F(ShareServiceImplUnittest, ShareCancel) {
115 // Ask that the dialog be cancelled. 165 // Ask that the dialog be cancelled.
116 share_service_helper_->set_picker_result(base::nullopt); 166 share_service_helper_->set_picker_result(base::nullopt);
117 167
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 EXPECT_TRUE(succeeded); 376 EXPECT_TRUE(succeeded);
327 EXPECT_EQ("%C3%A9", url_template_filled); 377 EXPECT_EQ("%C3%A9", url_template_filled);
328 378
329 // U+1F4A9 379 // U+1F4A9
330 url_template = "{title}"; 380 url_template = "{title}";
331 succeeded = ShareServiceImpl::ReplacePlaceholders( 381 succeeded = ShareServiceImpl::ReplacePlaceholders(
332 url_template, "\xf0\x9f\x92\xa9", kText, url, &url_template_filled); 382 url_template, "\xf0\x9f\x92\xa9", kText, url, &url_template_filled);
333 EXPECT_TRUE(succeeded); 383 EXPECT_TRUE(succeeded);
334 EXPECT_EQ("%F0%9F%92%A9", url_template_filled); 384 EXPECT_EQ("%F0%9F%92%A9", url_template_filled);
335 } 385 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698