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

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

Issue 2362033002: Showing previews UI for Offline Previews (Closed)
Patch Set: Adding Dep Created 4 years, 3 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 35f8e56db2e4e6c326a11b313988088a30819a65..1eba69a0557cd0f6f4feeab853bd13cd98b87845 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
@@ -267,20 +267,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_;
}
@@ -296,20 +298,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_;
net::TestNetworkDelegate network_delegate_;
@@ -495,20 +498,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) {
@@ -520,227 +544,242 @@ 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);
ScopedEnableProbihibitivelySlowNetwork scoped(url_request_context());
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_F(OfflinePageRequestJobTest, PageNotFoundOnProhibitivelySlowNetwork) {
SimulateHasNetworkConnectivity(true);
ScopedEnableProbihibitivelySlowNetwork scoped(url_request_context());
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_F(OfflinePageRequestJobTest, LoadOfflinePageOnFlakyNetwork) {
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(
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
@@ -749,17 +788,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