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

Unified Diff: components/password_manager/core/browser/site_affiliation/asset_link_retriever_unittest.cc

Issue 2944533003: Implement AssetLinkRetriever for Asset Links in Chrome. (Closed)
Patch Set: comments Created 3 years, 6 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 | « components/password_manager/core/browser/site_affiliation/asset_link_retriever.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/password_manager/core/browser/site_affiliation/asset_link_retriever_unittest.cc
diff --git a/components/password_manager/core/browser/site_affiliation/asset_link_retriever_unittest.cc b/components/password_manager/core/browser/site_affiliation/asset_link_retriever_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..700dbec5b77333c8291c38c41c867625b9481f10
--- /dev/null
+++ b/components/password_manager/core/browser/site_affiliation/asset_link_retriever_unittest.cc
@@ -0,0 +1,108 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/password_manager/core/browser/site_affiliation/asset_link_retriever.h"
+
+#include <memory>
+
+#include "base/test/scoped_task_environment.h"
+#include "net/url_request/test_url_fetcher_factory.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace password_manager {
+namespace {
+
+constexpr char kAssetLinkFile[] =
+ "https://example.com/.well-known/assetlinks.json";
+
+// A test URL fecther which is very cautious about not following the redirects.
+class AssetLinksTestFetcher : public net::FakeURLFetcher {
+ public:
+ using FakeURLFetcher::FakeURLFetcher;
+
+ ~AssetLinksTestFetcher() override { EXPECT_TRUE(stop_on_redirect_); }
+
+ // FakeURLFetcher:
+ void SetStopOnRedirect(bool stop_on_redirect) override {
+ FakeURLFetcher::SetStopOnRedirect(stop_on_redirect);
+ stop_on_redirect_ = stop_on_redirect;
+ }
+
+ private:
+ bool stop_on_redirect_ = false;
+
+ DISALLOW_COPY_AND_ASSIGN(AssetLinksTestFetcher);
+};
+
+std::unique_ptr<net::FakeURLFetcher> AssetLinksFetcherCreator(
+ const GURL& url,
+ net::URLFetcherDelegate* delegate,
+ const std::string& response_data,
+ net::HttpStatusCode response_code,
+ net::URLRequestStatus::Status status) {
+ return base::MakeUnique<AssetLinksTestFetcher>(url, delegate, response_data,
+ response_code, status);
+}
+
+class AssetLinkRetrieverTest : public testing::Test {
+ public:
+ AssetLinkRetrieverTest();
+
+ net::TestURLRequestContextGetter* request_context() const {
+ return request_context_.get();
+ }
+
+ net::FakeURLFetcherFactory& factory() { return factory_; }
+
+ void RunUntilIdle() { scoped_task_environment_.RunUntilIdle(); }
+
+ private:
+ base::test::ScopedTaskEnvironment scoped_task_environment_;
+ scoped_refptr<net::TestURLRequestContextGetter> request_context_;
+ net::FakeURLFetcherFactory factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(AssetLinkRetrieverTest);
+};
+
+AssetLinkRetrieverTest::AssetLinkRetrieverTest()
+ : request_context_(new net::TestURLRequestContextGetter(
+ base::ThreadTaskRunnerHandle::Get())),
+ factory_(nullptr, base::Bind(&AssetLinksFetcherCreator)) {}
+
+// Load the asset links resource that isn't available.
+TEST_F(AssetLinkRetrieverTest, LoadNonExistent) {
+ scoped_refptr<AssetLinkRetriever> asset_link_retriever =
+ base::MakeRefCounted<AssetLinkRetriever>(GURL(kAssetLinkFile));
+ EXPECT_EQ(AssetLinkRetriever::State::INACTIVE, asset_link_retriever->state());
+
+ factory().SetFakeResponse(GURL(kAssetLinkFile), std::string(),
+ net::HTTP_NOT_FOUND, net::URLRequestStatus::FAILED);
+ asset_link_retriever->Start(request_context());
+ EXPECT_EQ(AssetLinkRetriever::State::NETWORK_REQUEST,
+ asset_link_retriever->state());
+
+ RunUntilIdle();
+ EXPECT_EQ(AssetLinkRetriever::State::FINISHED, asset_link_retriever->state());
+ EXPECT_TRUE(asset_link_retriever->error());
+}
+
+// Load the asset links resource that replies with redirect. It should be
+// treated as an error.
+TEST_F(AssetLinkRetrieverTest, LoadRedirect) {
+ scoped_refptr<AssetLinkRetriever> asset_link_retriever =
+ base::MakeRefCounted<AssetLinkRetriever>(GURL(kAssetLinkFile));
+ EXPECT_EQ(AssetLinkRetriever::State::INACTIVE, asset_link_retriever->state());
+
+ factory().SetFakeResponse(GURL(kAssetLinkFile), std::string(),
+ net::HTTP_FOUND, net::URLRequestStatus::CANCELED);
+ asset_link_retriever->Start(request_context());
+
+ RunUntilIdle();
+ EXPECT_EQ(AssetLinkRetriever::State::FINISHED, asset_link_retriever->state());
+ EXPECT_TRUE(asset_link_retriever->error());
+}
+
+} // namespace
+} // namespace password_manager
« no previous file with comments | « components/password_manager/core/browser/site_affiliation/asset_link_retriever.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698