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

Side by Side Diff: content/browser/service_worker/service_worker_storage_unittest.cc

Issue 657023012: Fix ServiceWorkerResourceStorageDiskTest.CleanupOnRestart flakiness on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string> 5 #include <string>
6 6
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/thread_task_runner_handle.h" 10 #include "base/thread_task_runner_handle.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 *was_called = true; 72 *was_called = true;
73 *all_out = all; 73 *all_out = all;
74 } 74 }
75 75
76 ServiceWorkerStorage::GetAllRegistrationInfosCallback MakeGetAllCallback( 76 ServiceWorkerStorage::GetAllRegistrationInfosCallback MakeGetAllCallback(
77 bool* was_called, 77 bool* was_called,
78 std::vector<ServiceWorkerRegistrationInfo>* all) { 78 std::vector<ServiceWorkerRegistrationInfo>* all) {
79 return base::Bind(&GetAllCallback, was_called, all); 79 return base::Bind(&GetAllCallback, was_called, all);
80 } 80 }
81 81
82 void OnIOComplete(int* rv_out, int rv) {
83 *rv_out = rv;
84 }
85
86 void OnCompareComplete( 82 void OnCompareComplete(
87 ServiceWorkerStatusCode* status_out, bool* are_equal_out, 83 ServiceWorkerStatusCode* status_out, bool* are_equal_out,
88 ServiceWorkerStatusCode status, bool are_equal) { 84 ServiceWorkerStatusCode status, bool are_equal) {
89 *status_out = status; 85 *status_out = status;
90 *are_equal_out = are_equal; 86 *are_equal_out = are_equal;
91 } 87 }
92 88
93 void WriteResponse( 89 void WriteResponse(
94 ServiceWorkerStorage* storage, int64 id, 90 ServiceWorkerStorage* storage, int64 id,
95 const std::string& headers, 91 const std::string& headers,
96 IOBuffer* body, int length) { 92 IOBuffer* body, int length) {
97 scoped_ptr<ServiceWorkerResponseWriter> writer = 93 scoped_ptr<ServiceWorkerResponseWriter> writer =
98 storage->CreateResponseWriter(id); 94 storage->CreateResponseWriter(id);
99 95
100 scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo); 96 scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo);
101 info->request_time = base::Time::Now(); 97 info->request_time = base::Time::Now();
102 info->response_time = base::Time::Now(); 98 info->response_time = base::Time::Now();
103 info->was_cached = false; 99 info->was_cached = false;
104 info->headers = new net::HttpResponseHeaders(headers); 100 info->headers = new net::HttpResponseHeaders(headers);
105 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = 101 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
106 new HttpResponseInfoIOBuffer(info.release()); 102 new HttpResponseInfoIOBuffer(info.release());
107 103 {
108 int rv = -1234; 104 TestCompletionCallback cb;
109 writer->WriteInfo(info_buffer.get(), base::Bind(&OnIOComplete, &rv)); 105 writer->WriteInfo(info_buffer.get(), cb.callback());
110 base::RunLoop().RunUntilIdle(); 106 int rv = cb.WaitForResult();
111 EXPECT_LT(0, rv); 107 EXPECT_LT(0, rv);
112 108 }
113 rv = -1234; 109 {
114 writer->WriteData(body, length, base::Bind(&OnIOComplete, &rv)); 110 TestCompletionCallback cb;
115 base::RunLoop().RunUntilIdle(); 111 writer->WriteData(body, length, cb.callback());
116 EXPECT_EQ(length, rv); 112 int rv = cb.WaitForResult();
113 EXPECT_EQ(length, rv);
114 }
117 } 115 }
118 116
119 void WriteStringResponse( 117 void WriteStringResponse(
120 ServiceWorkerStorage* storage, int64 id, 118 ServiceWorkerStorage* storage, int64 id,
121 const std::string& headers, 119 const std::string& headers,
122 const std::string& body) { 120 const std::string& body) {
123 scoped_refptr<IOBuffer> body_buffer(new WrappedIOBuffer(body.data())); 121 scoped_refptr<IOBuffer> body_buffer(new WrappedIOBuffer(body.data()));
124 WriteResponse(storage, id, headers, body_buffer.get(), body.length()); 122 WriteResponse(storage, id, headers, body_buffer.get(), body.length());
125 } 123 }
126 124
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 base::RunLoop().RunUntilIdle(); 741 base::RunLoop().RunUntilIdle();
744 verify_ids.clear(); 742 verify_ids.clear();
745 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 743 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
746 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 744 storage()->database_->GetPurgeableResourceIds(&verify_ids));
747 EXPECT_TRUE(verify_ids.empty()); 745 EXPECT_TRUE(verify_ids.empty());
748 746
749 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false)); 747 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false));
750 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false)); 748 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false));
751 } 749 }
752 750
753 // Android has flaky IO error: http://crbug.com/387045 751 TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) {
754 #if defined(OS_ANDROID)
755 #define MAYBE_CleanupOnRestart DISABLED_CleanupOnRestart
756 #else
757 #define MAYBE_CleanupOnRestart CleanupOnRestart
758 #endif
759 TEST_F(ServiceWorkerResourceStorageDiskTest, MAYBE_CleanupOnRestart) {
760 // Promote the worker to active and add a controllee. 752 // Promote the worker to active and add a controllee.
761 registration_->SetActiveVersion(registration_->waiting_version()); 753 registration_->SetActiveVersion(registration_->waiting_version());
762 registration_->SetWaitingVersion(NULL); 754 registration_->SetWaitingVersion(NULL);
763 storage()->UpdateToActiveState( 755 storage()->UpdateToActiveState(
764 registration_.get(), base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 756 registration_.get(), base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
765 scoped_ptr<ServiceWorkerProviderHost> host( 757 scoped_ptr<ServiceWorkerProviderHost> host(
766 new ServiceWorkerProviderHost(33 /* dummy render process id */, 758 new ServiceWorkerProviderHost(33 /* dummy render process id */,
767 1 /* dummy provider_id */, 759 1 /* dummy provider_id */,
768 context_->AsWeakPtr(), 760 context_->AsWeakPtr(),
769 NULL)); 761 NULL));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 storage()->StoreUncommittedResponseId(kNewResourceId); 819 storage()->StoreUncommittedResponseId(kNewResourceId);
828 base::RunLoop().RunUntilIdle(); 820 base::RunLoop().RunUntilIdle();
829 821
830 // The stale resources should be purged, but the new resource should persist. 822 // The stale resources should be purged, but the new resource should persist.
831 verify_ids.clear(); 823 verify_ids.clear();
832 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 824 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
833 storage()->database_->GetUncommittedResourceIds(&verify_ids)); 825 storage()->database_->GetUncommittedResourceIds(&verify_ids));
834 ASSERT_EQ(1u, verify_ids.size()); 826 ASSERT_EQ(1u, verify_ids.size());
835 EXPECT_EQ(kNewResourceId, *verify_ids.begin()); 827 EXPECT_EQ(kNewResourceId, *verify_ids.begin());
836 828
829 // Purging resources needs interactions with SimpleCache's worker thread,
830 // so single RunUntilIdle() call may not be sufficient.
831 while (storage()->is_purge_pending_)
832 base::RunLoop().RunUntilIdle();
833
837 verify_ids.clear(); 834 verify_ids.clear();
838 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 835 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
839 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 836 storage()->database_->GetPurgeableResourceIds(&verify_ids));
840 EXPECT_TRUE(verify_ids.empty()); 837 EXPECT_TRUE(verify_ids.empty());
841 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false)); 838 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false));
842 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false)); 839 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false));
843 EXPECT_FALSE( 840 EXPECT_FALSE(
844 VerifyBasicResponse(storage(), kStaleUncommittedResourceId, false)); 841 VerifyBasicResponse(storage(), kStaleUncommittedResourceId, false));
845 EXPECT_TRUE(VerifyBasicResponse(storage(), kNewResourceId, true)); 842 EXPECT_TRUE(VerifyBasicResponse(storage(), kNewResourceId, true));
846 } 843 }
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 are_equal = true; 1035 are_equal = true;
1039 storage()->CompareScriptResources( 1036 storage()->CompareScriptResources(
1040 5, 6, 1037 5, 6,
1041 base::Bind(&OnCompareComplete, &status, &are_equal)); 1038 base::Bind(&OnCompareComplete, &status, &are_equal));
1042 base::RunLoop().RunUntilIdle(); 1039 base::RunLoop().RunUntilIdle();
1043 EXPECT_EQ(SERVICE_WORKER_OK, status); 1040 EXPECT_EQ(SERVICE_WORKER_OK, status);
1044 EXPECT_FALSE(are_equal); 1041 EXPECT_FALSE(are_equal);
1045 } 1042 }
1046 1043
1047 } // namespace content 1044 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698