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

Unified Diff: chrome/browser/webshare/share_service_impl_unittest.cc

Issue 2664033002: Read share targets from prefstore, and filter by engagement. (Closed)
Patch Set: Don't build tests on Android 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/webshare/share_service_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/webshare/share_service_impl_unittest.cc
diff --git a/chrome/browser/webshare/share_service_impl_unittest.cc b/chrome/browser/webshare/share_service_impl_unittest.cc
index ad9140ab773eeb4fd1b2667935742ae80075a934..c47c10635bc730fc447e04ab47a244847efe32c4 100644
--- a/chrome/browser/webshare/share_service_impl_unittest.cc
+++ b/chrome/browser/webshare/share_service_impl_unittest.cc
@@ -9,7 +9,11 @@
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/webshare/share_service_impl.h"
+#include "chrome/common/pref_names.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/scoped_user_pref_update.h"
+#include "components/prefs/testing_pref_service.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -21,38 +25,87 @@ constexpr char kTitle[] = "My title";
constexpr char kText[] = "My text";
constexpr char kUrlSpec[] = "https://www.google.com/";
+constexpr char kTargetName[] = "Share Target";
+constexpr char kUrlTemplate[] = "share?title={title}&text={text}&url={url}";
+constexpr char kManifestUrlHigh[] =
+ "https://www.example-high.com/target/manifest.json";
+constexpr char kManifestUrlLow[] =
+ "https://www.example-low.com/target/manifest.json";
+constexpr char kManifestUrlMin[] =
+ "https://www.example-min.com/target/manifest.json";
+
class ShareServiceTestImpl : public ShareServiceImpl {
public:
- static ShareServiceTestImpl* Create(
- blink::mojom::ShareServiceRequest request) {
- std::unique_ptr<ShareServiceTestImpl> share_service_helper =
- base::MakeUnique<ShareServiceTestImpl>();
- ShareServiceTestImpl* share_service_helper_raw = share_service_helper.get();
- mojo::MakeStrongBinding(std::move(share_service_helper),
- std::move(request));
- return share_service_helper_raw;
+ explicit ShareServiceTestImpl(blink::mojom::ShareServiceRequest request)
+ : binding_(this) {
+ binding_.Bind(std::move(request));
+
+ pref_service_.reset(new TestingPrefServiceSimple());
+ pref_service_->registry()->RegisterDictionaryPref(
+ prefs::kWebShareVisitedTargets);
}
void set_picker_result(base::Optional<std::string> result) {
picker_result_ = result;
}
+ void AddShareTargetToPrefs(const std::string& manifest_url,
+ const std::string& name,
+ const std::string& url_template) {
+ constexpr char kUrlTemplateKey[] = "url_template";
+ constexpr char kNameKey[] = "name";
+
+ DictionaryPrefUpdate update(GetPrefService(),
+ prefs::kWebShareVisitedTargets);
+ base::DictionaryValue* share_target_dict = update.Get();
+
+ std::unique_ptr<base::DictionaryValue> origin_dict(
+ new base::DictionaryValue);
+
+ origin_dict->SetStringWithoutPathExpansion(kUrlTemplateKey, url_template);
+ origin_dict->SetStringWithoutPathExpansion(kNameKey, name);
+
+ share_target_dict->SetWithoutPathExpansion(manifest_url,
+ std::move(origin_dict));
+ }
+
+ void SetEngagementForTarget(const std::string& manifest_url,
+ blink::mojom::EngagementLevel level) {
+ engagement_map_[manifest_url] = level;
+ }
+
const std::string& GetLastUsedTargetURL() { return last_used_target_url_; }
- private:
- base::Optional<std::string> picker_result_;
- std::string last_used_target_url_;
+ const std::vector<std::pair<base::string16, GURL>>& GetTargetsInPicker() {
+ return targets_in_picker_;
+ }
+ private:
void ShowPickerDialog(
const std::vector<std::pair<base::string16, GURL>>& targets,
const base::Callback<void(base::Optional<std::string>)>& callback)
override {
+ targets_in_picker_ = targets;
callback.Run(picker_result_);
}
void OpenTargetURL(const GURL& target_url) override {
last_used_target_url_ = target_url.spec();
}
+
+ PrefService* GetPrefService() override { return pref_service_.get(); }
+
+ blink::mojom::EngagementLevel GetEngagementLevel(const GURL& url) override {
+ return engagement_map_[url.spec()];
+ }
+
+ mojo::Binding<blink::mojom::ShareService> binding_;
+
+ base::Optional<std::string> picker_result_;
+ std::string last_used_target_url_;
+ std::unique_ptr<TestingPrefServiceSimple> pref_service_;
+ std::map<std::string, blink::mojom::EngagementLevel> engagement_map_;
+ std::vector<std::pair<base::string16, GURL>> targets_in_picker_;
};
class ShareServiceImplUnittest : public ChromeRenderViewHostTestHarness {
@@ -63,61 +116,114 @@ class ShareServiceImplUnittest : public ChromeRenderViewHostTestHarness {
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
- share_service_helper_ =
- ShareServiceTestImpl::Create(mojo::MakeRequest(&share_service_));
+ share_service_helper_ = base::MakeUnique<ShareServiceTestImpl>(
+ mojo::MakeRequest(&share_service_));
+
+ share_service_helper_->SetEngagementForTarget(
+ kManifestUrlHigh, blink::mojom::EngagementLevel::HIGH);
+ share_service_helper_->SetEngagementForTarget(
+ kManifestUrlMin, blink::mojom::EngagementLevel::MINIMAL);
+ share_service_helper_->SetEngagementForTarget(
+ kManifestUrlLow, blink::mojom::EngagementLevel::LOW);
}
void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); }
- void DidShare(const std::string& expected_target_url,
- const base::Optional<std::string>& expected_param,
- const base::Optional<std::string>& param) {
- EXPECT_EQ(expected_param, param);
+ void DidShare(const std::vector<std::pair<base::string16, GURL>>&
+ expected_targets_in_picker,
+ const std::string& expected_target_url,
+ const base::Optional<std::string>& expected_error,
+ const base::Optional<std::string>& error) {
+ std::vector<std::pair<base::string16, GURL>> targets_in_picker =
+ share_service_helper_->GetTargetsInPicker();
+ EXPECT_EQ(expected_targets_in_picker, targets_in_picker);
+
std::string target_url = share_service_helper_->GetLastUsedTargetURL();
EXPECT_EQ(expected_target_url, target_url);
+ EXPECT_EQ(expected_error, error);
+
if (!on_callback_.is_null())
on_callback_.Run();
}
blink::mojom::ShareServicePtr share_service_;
- ShareServiceTestImpl* share_service_helper_;
+ std::unique_ptr<ShareServiceTestImpl> share_service_helper_;
base::Closure on_callback_;
};
} // namespace
+#if defined(OS_LINUX) || defined(OS_WIN)
+
// Basic test to check the Share method calls the callback with the expected
// parameters.
TEST_F(ShareServiceImplUnittest, ShareCallbackParams) {
+ share_service_helper_->set_picker_result(
+ base::Optional<std::string>(kManifestUrlLow));
+
+ share_service_helper_->AddShareTargetToPrefs(kManifestUrlLow, kTargetName,
+ kUrlTemplate);
+ share_service_helper_->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName,
+ kUrlTemplate);
+
std::string expected_url =
- "https://wicg.github.io/web-share-target/demos/"
- "sharetarget.html?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww."
+ "https://www.example-low.com/target/"
+ "share?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww."
"google.com%2F";
- share_service_helper_->set_picker_result(base::Optional<std::string>(
- "https://wicg.github.io/web-share-target/demos/"));
+
+ std::vector<std::pair<base::string16, GURL>> expected_targets{
+ make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh)),
+ make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))};
+ base::Callback<void(const base::Optional<std::string>&)> callback =
+ base::Bind(&ShareServiceImplUnittest::DidShare, base::Unretained(this),
+ expected_targets, expected_url, base::Optional<std::string>());
+
+ base::RunLoop run_loop;
+ on_callback_ = run_loop.QuitClosure();
const GURL url(kUrlSpec);
+ share_service_->Share(kTitle, kText, url, callback);
+
+ run_loop.Run();
+}
+
+// Tests the result of cancelling the share in the picker UI, that doesn't have
+// any targets.
+TEST_F(ShareServiceImplUnittest, ShareCancelNoTargets) {
+ // picker_result_ is set to nullopt by default, so this imitates the user
+ // cancelling a share.
+ // Expect an error message in response.
base::Callback<void(const base::Optional<std::string>&)> callback =
base::Bind(&ShareServiceImplUnittest::DidShare, base::Unretained(this),
- expected_url, base::Optional<std::string>());
+ std::vector<std::pair<base::string16, GURL>>(), std::string(),
+ base::Optional<std::string>("Share was cancelled"));
base::RunLoop run_loop;
on_callback_ = run_loop.QuitClosure();
+ const GURL url(kUrlSpec);
share_service_->Share(kTitle, kText, url, callback);
run_loop.Run();
}
-// Tests the result of cancelling the share in the picker UI.
-TEST_F(ShareServiceImplUnittest, ShareCancel) {
+// Tests the result of cancelling the share in the picker UI, that has targets.
+TEST_F(ShareServiceImplUnittest, ShareCancelWithTargets) {
// picker_result_ is set to nullopt by default, so this imitates the user
// cancelling a share.
+ share_service_helper_->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName,
+ kUrlTemplate);
+ share_service_helper_->AddShareTargetToPrefs(kManifestUrlLow, kTargetName,
+ kUrlTemplate);
+
+ std::vector<std::pair<base::string16, GURL>> expected_targets{
+ make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh)),
+ make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))};
// Expect an error message in response.
base::Callback<void(const base::Optional<std::string>&)> callback =
base::Bind(&ShareServiceImplUnittest::DidShare, base::Unretained(this),
- std::string(),
+ expected_targets, std::string(),
base::Optional<std::string>("Share was cancelled"));
base::RunLoop run_loop;
@@ -129,6 +235,38 @@ TEST_F(ShareServiceImplUnittest, ShareCancel) {
run_loop.Run();
}
+// Test to check that only targets with enough engagement were in picker.
+TEST_F(ShareServiceImplUnittest, ShareWithSomeInsufficientlyEngagedTargets) {
+ std::string expected_url =
+ "https://www.example-low.com/target/"
+ "share?title=My%20title&text=My%20text&url=https%3A%2F%2Fwww."
+ "google.com%2F";
+
+ share_service_helper_->set_picker_result(
+ base::Optional<std::string>(kManifestUrlLow));
+
+ share_service_helper_->AddShareTargetToPrefs(kManifestUrlMin, kTargetName,
+ kUrlTemplate);
+ share_service_helper_->AddShareTargetToPrefs(kManifestUrlLow, kTargetName,
+ kUrlTemplate);
+
+ std::vector<std::pair<base::string16, GURL>> expected_targets{
+ make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlLow))};
+ base::Callback<void(const base::Optional<std::string>&)> callback =
+ base::Bind(&ShareServiceImplUnittest::DidShare, base::Unretained(this),
+ expected_targets, expected_url, base::Optional<std::string>());
+
+ base::RunLoop run_loop;
+ on_callback_ = run_loop.QuitClosure();
+
+ const GURL url(kUrlSpec);
+ share_service_->Share(kTitle, kText, url, callback);
+
+ run_loop.Run();
+}
+
+#endif // defined(OS_LINUX) || defined(OS_WIN)
+
// Replace various numbers of placeholders in various orders. Placeholders are
// adjacent to eachother; there are no padding characters.
TEST_F(ShareServiceImplUnittest, ReplacePlaceholders) {
« no previous file with comments | « chrome/browser/webshare/share_service_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698