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

Unified Diff: chrome/browser/android/offline_pages/offline_page_request_job_unittest.cc

Issue 2362033002: Showing previews UI for Offline Previews (Closed)
Patch Set: megjablon comments rebase Created 4 years, 2 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
Index: chrome/browser/android/offline_pages/offline_page_request_job_unittest.cc
diff --git a/chrome/browser/android/offline_pages/offline_page_request_job_unittest.cc b/chrome/browser/android/offline_pages/offline_page_request_job_unittest.cc
index 315f72f024268eaf914f9e66724fd64f9752ac44..e929e3924efc0737f7f2cf1dcb704c2b31c6e46b 100644
--- a/chrome/browser/android/offline_pages/offline_page_request_job_unittest.cc
+++ b/chrome/browser/android/offline_pages/offline_page_request_job_unittest.cc
@@ -231,20 +231,22 @@ class OfflinePageRequestJobTest : public testing::Test {
void SimulateHasNetworkConnectivity(bool has_connectivity);
void RunUntilIdle();
void InterceptRequest(const GURL& url,
const std::string& method,
const std::string& extra_header_name,
const std::string& extra_header_value,
content::ResourceType resource_type);
+ void VerifyInfo(bool should_use_offline, int64_t offline_id);
+
void ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult result);
net::TestURLRequestContext* url_request_context() {
return test_url_request_context_.get();
}
Profile* profile() { return profile_; }
OfflinePageTabHelper* offline_page_tab_helper() const {
return offline_page_tab_helper_;
}
@@ -264,20 +266,21 @@ class OfflinePageRequestJobTest : public testing::Test {
content::ResourceType resource_type);
void ReadCompleted(int bytes_read);
// Runs on IO thread.
void InterceptRequestOnIO(const GURL& url,
const std::string& method,
const std::string& extra_header_name,
const std::string& extra_header_value,
content::ResourceType resource_type);
void ReadCompletedOnIO(int bytes_read);
+ void VerifyInfoOnIO(bool should_use_offline, int64_t offline_id);
content::TestBrowserThreadBundle thread_bundle_;
base::SimpleTestClock clock_;
std::unique_ptr<TestNetworkChangeNotifier> network_change_notifier_;
std::unique_ptr<net::TestURLRequestContext> test_url_request_context_;
net::URLRequestJobFactoryImpl url_request_job_factory_;
std::unique_ptr<net::URLRequestInterceptingJobFactory>
intercepting_job_factory_;
std::unique_ptr<TestURLRequestDelegate> url_request_delegate_;
std::unique_ptr<TestPreviewsDecider> test_previews_decider_;
@@ -466,20 +469,41 @@ void OfflinePageRequestJobTest::InterceptRequest(
content::ResourceType resource_type) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::BrowserThread::PostTask(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&OfflinePageRequestJobTest::InterceptRequestOnIO,
base::Unretained(this), url, method, extra_header_name,
extra_header_value, resource_type));
}
+void OfflinePageRequestJobTest::VerifyInfoOnIO(bool should_use_offline,
+ int64_t offline_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ EXPECT_EQ(should_use_offline, !!LoadedOfflinePageInfo::GetInfo(*request_));
+ if (should_use_offline) {
+ EXPECT_EQ(
+ offline_id,
+ LoadedOfflinePageInfo::GetInfo(*request_)->offline_page()->offline_id);
+ }
+}
+
+void OfflinePageRequestJobTest::VerifyInfo(bool should_use_offline,
+ int64_t offline_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&OfflinePageRequestJobTest::VerifyInfoOnIO,
+ base::Unretained(this), should_use_offline, offline_id));
+}
+
void OfflinePageRequestJobTest::ReadCompletedOnIO(int bytes_read) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&OfflinePageRequestJobTest::ReadCompleted,
base::Unretained(this), bytes_read));
}
void OfflinePageRequestJobTest::ReadCompleted(int bytes_read) {
@@ -491,111 +515,121 @@ void OfflinePageRequestJobTest::ReadCompleted(int bytes_read) {
}
TEST_F(OfflinePageRequestJobTest, FailedToCreateRequestJob) {
SimulateHasNetworkConnectivity(false);
// Must be http/https URL.
InterceptRequest(GURL("ftp://host/doc"), "GET", "", "",
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
InterceptRequest(GURL("file:///path/doc"), "GET", "", "",
- content::RESOURCE_TYPE_MAIN_FRAME);
+ content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
// Must be GET method.
InterceptRequest(
kTestUrl, "POST", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
InterceptRequest(
kTestUrl, "HEAD", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
// Must be main resource.
InterceptRequest(
kTestUrl, "POST", "", "", content::RESOURCE_TYPE_SUB_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
InterceptRequest(
kTestUrl, "POST", "", "", content::RESOURCE_TYPE_IMAGE);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
}
TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnDisconnectedNetwork) {
SimulateHasNetworkConnectivity(false);
InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(kTestFileSize2, bytes_read());
- ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest());
- EXPECT_EQ(offline_id2(),
- offline_page_tab_helper()->GetOfflinePageForTest()->offline_id);
+ VerifyInfo(true, offline_id2());
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
SHOW_OFFLINE_ON_DISCONNECTED_NETWORK);
}
TEST_F(OfflinePageRequestJobTest, PageNotFoundOnDisconnectedNetwork) {
SimulateHasNetworkConnectivity(false);
InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
PAGE_NOT_FOUND_ON_DISCONNECTED_NETWORK);
}
TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnProhibitivelySlowNetwork) {
SimulateHasNetworkConnectivity(true);
test_previews_decider()->set_should_allow_preview(true);
InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(kTestFileSize2, bytes_read());
- ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest());
- EXPECT_EQ(offline_id2(),
- offline_page_tab_helper()->GetOfflinePageForTest()->offline_id);
+ VerifyInfo(true, offline_id2());
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
SHOW_OFFLINE_ON_PROHIBITIVELY_SLOW_NETWORK);
test_previews_decider()->set_should_allow_preview(false);
}
TEST_F(OfflinePageRequestJobTest, PageNotFoundOnProhibitivelySlowNetwork) {
SimulateHasNetworkConnectivity(true);
test_previews_decider()->set_should_allow_preview(true);
InterceptRequest(kTestUrl2, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
PAGE_NOT_FOUND_ON_PROHIBITIVELY_SLOW_NETWORK);
test_previews_decider()->set_should_allow_preview(false);
}
TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) {
SimulateHasNetworkConnectivity(true);
// When custom offline header exists and contains "reason=error", it means
@@ -603,117 +637,122 @@ TEST_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) {
InterceptRequest(
kTestUrl,
"GET",
kOfflinePageHeader,
std::string(kOfflinePageHeaderReasonKey) + "=" +
kOfflinePageHeaderReasonValueDueToNetError,
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(kTestFileSize2, bytes_read());
- ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest());
- EXPECT_EQ(offline_id2(),
- offline_page_tab_helper()->GetOfflinePageForTest()->offline_id);
+ VerifyInfo(true, offline_id2());
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
SHOW_OFFLINE_ON_FLAKY_NETWORK);
}
TEST_F(OfflinePageRequestJobTest, PageNotFoundOnFlakyNetwork) {
SimulateHasNetworkConnectivity(true);
// When custom offline header exists and contains "reason=error", it means
// that net error is hit in last request due to flaky network.
InterceptRequest(
kTestUrl2,
"GET",
kOfflinePageHeader,
std::string(kOfflinePageHeaderReasonKey) + "=" +
kOfflinePageHeaderReasonValueDueToNetError,
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
PAGE_NOT_FOUND_ON_FLAKY_NETWORK);
}
TEST_F(OfflinePageRequestJobTest, ForceLoadOfflinePageOnConnectedNetwork) {
SimulateHasNetworkConnectivity(true);
// When custom offline header exists and contains value other than
// "reason=error", it means that offline page is forced to load.
InterceptRequest(
kTestUrl,
"GET",
kOfflinePageHeader,
std::string(kOfflinePageHeaderReasonKey) + "=download",
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(kTestFileSize2, bytes_read());
- ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest());
- EXPECT_EQ(offline_id2(),
- offline_page_tab_helper()->GetOfflinePageForTest()->offline_id);
+ VerifyInfo(true, offline_id2());
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
SHOW_OFFLINE_ON_CONNECTED_NETWORK);
}
TEST_F(OfflinePageRequestJobTest, PageNotFoundOnConnectedNetwork) {
SimulateHasNetworkConnectivity(true);
// When custom offline header exists and contains value other than
// "reason=error", it means that offline page is forced to load.
InterceptRequest(
kTestUrl2,
"GET",
kOfflinePageHeader,
std::string(kOfflinePageHeaderReasonKey) + "=download",
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
PAGE_NOT_FOUND_ON_CONNECTED_NETWORK);
}
TEST_F(OfflinePageRequestJobTest, DoNotLoadOfflinePageOnConnectedNetwork) {
SimulateHasNetworkConnectivity(true);
InterceptRequest(kTestUrl, "GET", "", "", content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
}
TEST_F(OfflinePageRequestJobTest, LoadOfflinePageByOfflineID) {
SimulateHasNetworkConnectivity(true);
InterceptRequest(
kTestUrl,
"GET",
kOfflinePageHeader,
std::string(kOfflinePageHeaderReasonKey) + "=download " +
kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()),
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(kTestFileSize, bytes_read());
- ASSERT_TRUE(offline_page_tab_helper()->GetOfflinePageForTest());
- EXPECT_EQ(offline_id(),
- offline_page_tab_helper()->GetOfflinePageForTest()->offline_id);
+ VerifyInfo(true, offline_id());
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
SHOW_OFFLINE_ON_CONNECTED_NETWORK);
}
TEST_F(OfflinePageRequestJobTest,
LoadOfflinePageByOfflineIDAndFallbackToOnlineURL) {
SimulateHasNetworkConnectivity(true);
// The offline page found with specific offline ID does not match the passed
@@ -722,17 +761,19 @@ TEST_F(OfflinePageRequestJobTest,
InterceptRequest(
kTestUrl2,
"GET",
kOfflinePageHeader,
std::string(kOfflinePageHeaderReasonKey) + "=download " +
kOfflinePageHeaderIDKey + "=" + base::Int64ToString(offline_id()),
content::RESOURCE_TYPE_MAIN_FRAME);
base::RunLoop().Run();
EXPECT_EQ(0, bytes_read());
- EXPECT_FALSE(offline_page_tab_helper()->GetOfflinePageForTest());
+ VerifyInfo(false, 0);
+ base::RunLoop().RunUntilIdle();
+
ExpectAggregatedRequestResultHistogram(
OfflinePageRequestJob::AggregatedRequestResult::
PAGE_NOT_FOUND_ON_CONNECTED_NETWORK);
}
} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698