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

Side by Side Diff: content/browser/background_sync/background_sync_manager_unittest.cc

Issue 950343006: [BackgroundSync] Initial land of the BackgroundSyncManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 9 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/background_sync/background_sync_manager.h"
6
7 #include "base/files/scoped_temp_dir.h"
8 #include "base/logging.h"
9 #include "base/run_loop.h"
10 #include "base/thread_task_runner_handle.h"
11 #include "content/browser/browser_thread_impl.h"
12 #include "content/browser/service_worker/service_worker_context_wrapper.h"
13 #include "content/browser/service_worker/service_worker_storage.h"
14 #include "content/public/test/test_browser_thread_bundle.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace {
18 const char* kOriginUrl = "https://example.com";
19 const int64 kServiceWorkerVersionId = 0;
20 const int64 kServiceWorkerId1 = 1;
21 const int64 kServiceWorkerId2 = 2;
22 }
23
24 namespace content {
25
26 class BackgroundSyncManagerTest : public testing::Test {
27 public:
28 BackgroundSyncManagerTest()
29 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
30 service_worker_context_(new ServiceWorkerContextWrapper(NULL)),
31 origin_(kOriginUrl),
32 callback_error_(BackgroundSyncManager::ErrorTypeOK),
33 callback_sw_status_code_(SERVICE_WORKER_OK) {
34 sync_reg_1_.id = "1";
35 sync_reg_2_.id = "2";
36 }
37
38 void SetUp() override {
39 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager(
40 new MockServiceWorkerDatabaseTaskManager(
41 base::ThreadTaskRunnerHandle::Get()));
42
43 service_worker_context_->InitInternal(
44 base::FilePath(), base::ThreadTaskRunnerHandle::Get(),
45 database_task_manager.Pass(), base::ThreadTaskRunnerHandle::Get(), NULL,
46 NULL);
47 context_ptr_ = service_worker_context_->context()->AsWeakPtr();
48
49 background_sync_manager_ =
50 BackgroundSyncManager::Create(service_worker_context_);
51
52 // Wait for storage to finish initializing before registering service
53 // workers.
54 base::RunLoop().RunUntilIdle();
55
56 RegisterServiceWorker(kServiceWorkerId1);
57 RegisterServiceWorker(kServiceWorkerId2);
58 }
59
60 protected:
61 bool Register(const BackgroundSyncManager::BackgroundSyncRegistration&
62 sync_registration) {
63 return RegisterWithId(kServiceWorkerId1, sync_registration);
64 }
65
66 bool RegisterWithId(int64 sw_registration_id,
67 const BackgroundSyncManager::BackgroundSyncRegistration&
68 sync_registration) {
69 bool was_called = false;
70 background_sync_manager_->Register(
71 origin_, sw_registration_id, sync_registration,
72 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
73 base::Unretained(this), &was_called));
74 base::RunLoop().RunUntilIdle();
75 EXPECT_TRUE(was_called);
76 return callback_error_ == BackgroundSyncManager::ErrorTypeOK;
77 }
78
79 bool Unregister(const BackgroundSyncManager::BackgroundSyncRegistration&
80 sync_registration) {
81 return UnregisterWithId(kServiceWorkerId1, sync_registration);
82 }
83
84 bool UnregisterWithId(int64 sw_registration_id,
85 const BackgroundSyncManager::BackgroundSyncRegistration&
86 sync_registration) {
87 bool was_called = false;
88 background_sync_manager_->Unregister(
89 origin_, sw_registration_id, sync_registration,
90 base::Bind(&BackgroundSyncManagerTest::StatusCallback,
91 base::Unretained(this), &was_called));
92 base::RunLoop().RunUntilIdle();
93 EXPECT_TRUE(was_called);
94 return callback_error_ == BackgroundSyncManager::ErrorTypeOK;
95 }
96
97 bool GetRegistration(const std::string& sync_registration_id) {
98 return GetRegistrationWithId(kServiceWorkerId1, sync_registration_id);
99 }
100
101 bool GetRegistrationWithId(int64 sw_registration_id,
102 const std::string& sync_registration_id) {
103 bool was_called = false;
104 background_sync_manager_->GetRegistration(
105 origin_, sw_registration_id, sync_registration_id,
106 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
107 base::Unretained(this), &was_called));
108 base::RunLoop().RunUntilIdle();
109 EXPECT_TRUE(was_called);
110 if (callback_error_ == BackgroundSyncManager::ErrorTypeOK)
111 EXPECT_TRUE(sync_registration_id == callback_registration_.id);
112
113 return callback_error_ == BackgroundSyncManager::ErrorTypeOK;
114 }
115
116 void StatusAndRegistrationCallback(
117 bool* was_called,
118 BackgroundSyncManager::ErrorType error,
119 const BackgroundSyncManager::BackgroundSyncRegistration& registration) {
120 *was_called = true;
121 callback_error_ = error;
122 callback_registration_ = registration;
123 }
124
125 void StatusCallback(bool* was_called,
126 BackgroundSyncManager::ErrorType error) {
127 *was_called = true;
128 callback_error_ = error;
129 }
130
131 void StorageRegistrationCallback(ServiceWorkerStatusCode result) {
132 callback_sw_status_code_ = result;
133 }
134
135 void RegisterServiceWorker(uint64 sw_registration_id) {
136 scoped_refptr<ServiceWorkerRegistration> live_registration =
137 new ServiceWorkerRegistration(origin_, sw_registration_id,
138 context_ptr_);
139
140 scoped_refptr<ServiceWorkerVersion> live_version = new ServiceWorkerVersion(
141 live_registration.get(), GURL(std::string(kOriginUrl) + "/script.js"),
142 kServiceWorkerVersionId, context_ptr_);
143 live_version->SetStatus(ServiceWorkerVersion::INSTALLED);
144 live_registration->SetWaitingVersion(live_version.get());
145
146 service_worker_context_->context()->storage()->StoreRegistration(
147 live_registration.get(), live_version.get(),
148 base::Bind(&BackgroundSyncManagerTest::StorageRegistrationCallback,
149 base::Unretained(this)));
150
151 base::RunLoop().RunUntilIdle();
152 EXPECT_EQ(SERVICE_WORKER_OK, callback_sw_status_code_);
153 }
154
155 TestBrowserThreadBundle browser_thread_bundle_;
156 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
157 scoped_ptr<BackgroundSyncManager> background_sync_manager_;
158 base::WeakPtr<ServiceWorkerContextCore> context_ptr_;
159
160 const GURL origin_;
161 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_1_;
162 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_2_;
163
164 // Callback values.
165 BackgroundSyncManager::ErrorType callback_error_;
166 BackgroundSyncManager::BackgroundSyncRegistration callback_registration_;
167 ServiceWorkerStatusCode callback_sw_status_code_;
168 };
169
170 TEST_F(BackgroundSyncManagerTest, Register) {
171 EXPECT_TRUE(Register(sync_reg_1_));
172 }
173
174 TEST_F(BackgroundSyncManagerTest, RegistractionIntact) {
175 EXPECT_TRUE(Register(sync_reg_1_));
176 EXPECT_TRUE(sync_reg_1_.id == callback_registration_.id);
177 }
178
179 TEST_F(BackgroundSyncManagerTest, RegisterExisting) {
180 EXPECT_TRUE(Register(sync_reg_1_));
181 EXPECT_FALSE(Register(sync_reg_1_));
182 EXPECT_EQ(BackgroundSyncManager::ErrorTypeExists, callback_error_);
183 }
184
185 TEST_F(BackgroundSyncManagerTest, TwoRegistrations) {
186 EXPECT_TRUE(Register(sync_reg_1_));
187 EXPECT_TRUE(Register(sync_reg_2_));
188 }
189
190 TEST_F(BackgroundSyncManagerTest, GetRegistrationNonExisting) {
191 EXPECT_FALSE(GetRegistration(sync_reg_1_.id));
192 }
193
194 TEST_F(BackgroundSyncManagerTest, GetRegistrationExisting) {
195 EXPECT_TRUE(Register(sync_reg_1_));
196 EXPECT_TRUE(GetRegistration(sync_reg_1_.id));
197 EXPECT_FALSE(GetRegistration(sync_reg_2_.id));
198 }
199
200 TEST_F(BackgroundSyncManagerTest, Unregister) {
201 EXPECT_TRUE(Register(sync_reg_1_));
202 EXPECT_TRUE(Unregister(sync_reg_1_));
203 }
204
205 TEST_F(BackgroundSyncManagerTest, Reregister) {
206 EXPECT_TRUE(Register(sync_reg_1_));
207 EXPECT_TRUE(Unregister(sync_reg_1_));
208 EXPECT_TRUE(Register(sync_reg_1_));
209 }
210
211 TEST_F(BackgroundSyncManagerTest, UnregisterNonExisting) {
212 EXPECT_FALSE(Unregister(sync_reg_1_));
213 EXPECT_EQ(BackgroundSyncManager::ErrorTypeNotFound, callback_error_);
214 }
215
216 TEST_F(BackgroundSyncManagerTest, UnregisterSecond) {
217 EXPECT_TRUE(Register(sync_reg_1_));
218 EXPECT_TRUE(Register(sync_reg_2_));
219 EXPECT_TRUE(Unregister(sync_reg_2_));
220 EXPECT_FALSE(Register(sync_reg_1_));
221 EXPECT_TRUE(Register(sync_reg_2_));
222 }
223
224 TEST_F(BackgroundSyncManagerTest, RebootRecovery) {
225 EXPECT_TRUE(Register(sync_reg_1_));
226
227 background_sync_manager_ =
228 BackgroundSyncManager::Create(service_worker_context_);
229
230 EXPECT_TRUE(GetRegistration(sync_reg_1_.id));
231 EXPECT_FALSE(GetRegistration(sync_reg_2_.id));
232 }
233
234 TEST_F(BackgroundSyncManagerTest, RebootRecoveryTwoServiceWorkers) {
235 EXPECT_TRUE(RegisterWithId(kServiceWorkerId1, sync_reg_1_));
236 EXPECT_TRUE(RegisterWithId(kServiceWorkerId2, sync_reg_2_));
237
238 background_sync_manager_ =
239 BackgroundSyncManager::Create(service_worker_context_);
240
241 EXPECT_TRUE(GetRegistrationWithId(kServiceWorkerId1, sync_reg_1_.id));
242 EXPECT_FALSE(GetRegistrationWithId(kServiceWorkerId1, sync_reg_2_.id));
243 EXPECT_FALSE(GetRegistrationWithId(kServiceWorkerId2, sync_reg_1_.id));
244 EXPECT_TRUE(GetRegistrationWithId(kServiceWorkerId2, sync_reg_2_.id));
245
246 EXPECT_FALSE(RegisterWithId(kServiceWorkerId1, sync_reg_1_));
247 EXPECT_FALSE(RegisterWithId(kServiceWorkerId2, sync_reg_2_));
248
249 EXPECT_TRUE(RegisterWithId(kServiceWorkerId1, sync_reg_2_));
250 EXPECT_TRUE(RegisterWithId(kServiceWorkerId2, sync_reg_1_));
251 }
252
253 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698