| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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 <set> | 5 #include <set> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 // run on the IO thread. | 155 // run on the IO thread. |
| 156 void SetOnline(bool online); | 156 void SetOnline(bool online); |
| 157 void SetOnlineOnIOThread( | 157 void SetOnlineOnIOThread( |
| 158 const scoped_refptr<BackgroundSyncContext>& sync_context, | 158 const scoped_refptr<BackgroundSyncContext>& sync_context, |
| 159 bool online); | 159 bool online); |
| 160 | 160 |
| 161 // Returns true if the one-shot sync with tag is currently pending. Fails | 161 // Returns true if the one-shot sync with tag is currently pending. Fails |
| 162 // (assertion failure) if the tag isn't registered. | 162 // (assertion failure) if the tag isn't registered. |
| 163 bool OneShotPending(const std::string& tag); | 163 bool OneShotPending(const std::string& tag); |
| 164 | 164 |
| 165 std::string PopConsoleString(); |
| 165 bool PopConsole(const std::string& expected_msg); | 166 bool PopConsole(const std::string& expected_msg); |
| 166 bool RegisterServiceWorker(); | 167 bool RegisterServiceWorker(); |
| 167 bool RegisterOneShot(const std::string& tag); | 168 bool RegisterOneShot(const std::string& tag); |
| 169 bool RegisterOneShotFromServiceWorker(const std::string& tag); |
| 168 bool UnregisterOneShot(const std::string& tag); | 170 bool UnregisterOneShot(const std::string& tag); |
| 169 bool UnregisterOneShotTwice(const std::string& tag); | 171 bool UnregisterOneShotTwice(const std::string& tag); |
| 170 bool GetRegistrationOneShot(const std::string& tag); | 172 bool GetRegistrationOneShot(const std::string& tag); |
| 173 bool GetRegistrationOneShotFromServiceWorker(const std::string& tag); |
| 174 bool MatchRegistrations(const std::string& script_result, |
| 175 const std::vector<std::string>& expected_tags); |
| 171 bool GetRegistrationsOneShot(const std::vector<std::string>& expected_tags); | 176 bool GetRegistrationsOneShot(const std::vector<std::string>& expected_tags); |
| 177 bool GetRegistrationsOneShotFromServiceWorker( |
| 178 const std::vector<std::string>& expected_tags); |
| 172 bool CompleteDelayedOneShot(); | 179 bool CompleteDelayedOneShot(); |
| 173 bool RejectDelayedOneShot(); | 180 bool RejectDelayedOneShot(); |
| 174 bool NotifyWhenDoneOneShot(const std::string& tag); | 181 bool NotifyWhenDoneOneShot(const std::string& tag); |
| 175 bool NotifyWhenDoneImmediateOneShot(const std::string& expected_msg); | 182 bool NotifyWhenDoneImmediateOneShot(const std::string& expected_msg); |
| 176 bool StoreRegistrationOneShot(const std::string& tag); | 183 bool StoreRegistrationOneShot(const std::string& tag); |
| 177 | 184 |
| 178 private: | 185 private: |
| 179 scoped_ptr<net::SpawnedTestServer> https_server_; | 186 scoped_ptr<net::SpawnedTestServer> https_server_; |
| 180 Shell* shell_ = nullptr; | 187 Shell* shell_ = nullptr; |
| 181 | 188 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 BrowserThread::IO, FROM_HERE, | 233 BrowserThread::IO, FROM_HERE, |
| 227 base::Bind(&OneShotPendingOnIOThread, make_scoped_refptr(sync_context), | 234 base::Bind(&OneShotPendingOnIOThread, make_scoped_refptr(sync_context), |
| 228 make_scoped_refptr(service_worker_context), tag, | 235 make_scoped_refptr(service_worker_context), tag, |
| 229 https_server_->GetURL(kDefaultTestURL), callback)); | 236 https_server_->GetURL(kDefaultTestURL), callback)); |
| 230 | 237 |
| 231 run_loop.Run(); | 238 run_loop.Run(); |
| 232 | 239 |
| 233 return is_pending; | 240 return is_pending; |
| 234 } | 241 } |
| 235 | 242 |
| 236 bool BackgroundSyncBrowserTest::PopConsole(const std::string& expected_msg) { | 243 std::string BackgroundSyncBrowserTest::PopConsoleString() { |
| 237 std::string script_result; | 244 std::string script_result; |
| 238 EXPECT_TRUE(RunScript("resultQueue.pop()", &script_result)); | 245 EXPECT_TRUE(RunScript("resultQueue.pop()", &script_result)); |
| 246 return script_result; |
| 247 } |
| 248 |
| 249 bool BackgroundSyncBrowserTest::PopConsole(const std::string& expected_msg) { |
| 250 std::string script_result = PopConsoleString(); |
| 239 return script_result == expected_msg; | 251 return script_result == expected_msg; |
| 240 } | 252 } |
| 241 | 253 |
| 242 bool BackgroundSyncBrowserTest::RegisterServiceWorker() { | 254 bool BackgroundSyncBrowserTest::RegisterServiceWorker() { |
| 243 std::string script_result; | 255 std::string script_result; |
| 244 EXPECT_TRUE(RunScript("registerServiceWorker()", &script_result)); | 256 EXPECT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| 245 return script_result == BuildExpectedResult("service worker", "registered"); | 257 return script_result == BuildExpectedResult("service worker", "registered"); |
| 246 } | 258 } |
| 247 | 259 |
| 248 bool BackgroundSyncBrowserTest::RegisterOneShot(const std::string& tag) { | 260 bool BackgroundSyncBrowserTest::RegisterOneShot(const std::string& tag) { |
| 249 std::string script_result; | 261 std::string script_result; |
| 250 EXPECT_TRUE( | 262 EXPECT_TRUE( |
| 251 RunScript(BuildScriptString("registerOneShot", tag), &script_result)); | 263 RunScript(BuildScriptString("registerOneShot", tag), &script_result)); |
| 252 return script_result == BuildExpectedResult(tag, "registered"); | 264 return script_result == BuildExpectedResult(tag, "registered"); |
| 253 } | 265 } |
| 254 | 266 |
| 267 bool BackgroundSyncBrowserTest::RegisterOneShotFromServiceWorker( |
| 268 const std::string& tag) { |
| 269 std::string script_result; |
| 270 EXPECT_TRUE( |
| 271 RunScript(BuildScriptString("registerOneShotFromServiceWorker", tag), |
| 272 &script_result)); |
| 273 return script_result == BuildExpectedResult(tag, "register sent to SW"); |
| 274 } |
| 275 |
| 255 bool BackgroundSyncBrowserTest::UnregisterOneShot(const std::string& tag) { | 276 bool BackgroundSyncBrowserTest::UnregisterOneShot(const std::string& tag) { |
| 256 std::string script_result; | 277 std::string script_result; |
| 257 EXPECT_TRUE( | 278 EXPECT_TRUE( |
| 258 RunScript(BuildScriptString("unregisterOneShot", tag), &script_result)); | 279 RunScript(BuildScriptString("unregisterOneShot", tag), &script_result)); |
| 259 return script_result == BuildExpectedResult(tag, "unregistered"); | 280 return script_result == BuildExpectedResult(tag, "unregistered"); |
| 260 } | 281 } |
| 261 | 282 |
| 262 bool BackgroundSyncBrowserTest::UnregisterOneShotTwice(const std::string& tag) { | 283 bool BackgroundSyncBrowserTest::UnregisterOneShotTwice(const std::string& tag) { |
| 263 std::string script_result; | 284 std::string script_result; |
| 264 EXPECT_TRUE(RunScript(BuildScriptString("unregisterOneShotTwice", tag), | 285 EXPECT_TRUE(RunScript(BuildScriptString("unregisterOneShotTwice", tag), |
| 265 &script_result)); | 286 &script_result)); |
| 266 return script_result == | 287 return script_result == |
| 267 BuildExpectedResult(tag, "failed to unregister twice"); | 288 BuildExpectedResult(tag, "failed to unregister twice"); |
| 268 } | 289 } |
| 269 | 290 |
| 270 bool BackgroundSyncBrowserTest::GetRegistrationOneShot(const std::string& tag) { | 291 bool BackgroundSyncBrowserTest::GetRegistrationOneShot(const std::string& tag) { |
| 271 std::string script_result; | 292 std::string script_result; |
| 272 EXPECT_TRUE(RunScript(BuildScriptString("getRegistrationOneShot", tag), | 293 EXPECT_TRUE(RunScript(BuildScriptString("getRegistrationOneShot", tag), |
| 273 &script_result)); | 294 &script_result)); |
| 274 return script_result == BuildExpectedResult(tag, "found"); | 295 return script_result == BuildExpectedResult(tag, "found"); |
| 275 } | 296 } |
| 276 | 297 |
| 298 bool BackgroundSyncBrowserTest::GetRegistrationOneShotFromServiceWorker( |
| 299 const std::string& tag) { |
| 300 std::string script_result; |
| 301 EXPECT_TRUE(RunScript( |
| 302 BuildScriptString("getRegistrationOneShotFromServiceWorker", tag), |
| 303 &script_result)); |
| 304 EXPECT_TRUE(script_result == "ok - getRegistration sent to SW"); |
| 305 |
| 306 return PopConsole(BuildExpectedResult(tag, "found")); |
| 307 } |
| 308 |
| 309 bool BackgroundSyncBrowserTest::MatchRegistrations( |
| 310 const std::string& script_result, |
| 311 const std::vector<std::string>& expected_tags) { |
| 312 EXPECT_TRUE(base::StartsWith(script_result, kSuccessfulOperationPrefix, |
| 313 base::CompareCase::INSENSITIVE_ASCII)); |
| 314 std::string tag_string = |
| 315 script_result.substr(strlen(kSuccessfulOperationPrefix)); |
| 316 std::vector<std::string> result_tags = base::SplitString( |
| 317 tag_string, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); |
| 318 |
| 319 return std::set<std::string>(expected_tags.begin(), expected_tags.end()) == |
| 320 std::set<std::string>(result_tags.begin(), result_tags.end()); |
| 321 } |
| 322 |
| 277 bool BackgroundSyncBrowserTest::GetRegistrationsOneShot( | 323 bool BackgroundSyncBrowserTest::GetRegistrationsOneShot( |
| 278 const std::vector<std::string>& expected_tags) { | 324 const std::vector<std::string>& expected_tags) { |
| 279 std::string script_result; | 325 std::string script_result; |
| 280 EXPECT_TRUE(RunScript("getRegistrationsOneShot()", &script_result)); | 326 EXPECT_TRUE(RunScript("getRegistrationsOneShot()", &script_result)); |
| 281 | 327 |
| 282 EXPECT_TRUE(base::StartsWith(script_result, kSuccessfulOperationPrefix, | 328 return MatchRegistrations(script_result, expected_tags); |
| 283 base::CompareCase::INSENSITIVE_ASCII)); | 329 } |
| 284 script_result = script_result.substr(strlen(kSuccessfulOperationPrefix)); | |
| 285 std::vector<std::string> result_tags = base::SplitString( | |
| 286 script_result, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); | |
| 287 | 330 |
| 288 return std::set<std::string>(expected_tags.begin(), expected_tags.end()) == | 331 bool BackgroundSyncBrowserTest::GetRegistrationsOneShotFromServiceWorker( |
| 289 std::set<std::string>(result_tags.begin(), result_tags.end()); | 332 const std::vector<std::string>& expected_tags) { |
| 333 std::string script_result; |
| 334 EXPECT_TRUE( |
| 335 RunScript("getRegistrationsOneShotFromServiceWorker()", &script_result)); |
| 336 EXPECT_TRUE(script_result == "ok - getRegistrations sent to SW"); |
| 337 |
| 338 return MatchRegistrations(PopConsoleString(), expected_tags); |
| 290 } | 339 } |
| 291 | 340 |
| 292 bool BackgroundSyncBrowserTest::CompleteDelayedOneShot() { | 341 bool BackgroundSyncBrowserTest::CompleteDelayedOneShot() { |
| 293 std::string script_result; | 342 std::string script_result; |
| 294 EXPECT_TRUE(RunScript("completeDelayedOneShot()", &script_result)); | 343 EXPECT_TRUE(RunScript("completeDelayedOneShot()", &script_result)); |
| 295 return script_result == BuildExpectedResult("delay", "completing"); | 344 return script_result == BuildExpectedResult("delay", "completing"); |
| 296 } | 345 } |
| 297 | 346 |
| 298 bool BackgroundSyncBrowserTest::RejectDelayedOneShot() { | 347 bool BackgroundSyncBrowserTest::RejectDelayedOneShot() { |
| 299 std::string script_result; | 348 std::string script_result; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 324 | 373 |
| 325 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, OneShotFires) { | 374 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, OneShotFires) { |
| 326 EXPECT_TRUE(RegisterServiceWorker()); | 375 EXPECT_TRUE(RegisterServiceWorker()); |
| 327 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. | 376 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| 328 | 377 |
| 329 EXPECT_TRUE(RegisterOneShot("foo")); | 378 EXPECT_TRUE(RegisterOneShot("foo")); |
| 330 EXPECT_TRUE(PopConsole("foo fired")); | 379 EXPECT_TRUE(PopConsole("foo fired")); |
| 331 EXPECT_FALSE(GetRegistrationOneShot("foo")); | 380 EXPECT_FALSE(GetRegistrationOneShot("foo")); |
| 332 } | 381 } |
| 333 | 382 |
| 383 // Verify that Register works in a service worker |
| 384 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, |
| 385 OneShotFromServiceWorkerFires) { |
| 386 EXPECT_TRUE(RegisterServiceWorker()); |
| 387 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| 388 |
| 389 EXPECT_TRUE(RegisterOneShotFromServiceWorker("foo_sw")); |
| 390 EXPECT_TRUE(PopConsole("ok - foo_sw registered in SW")); |
| 391 EXPECT_TRUE(PopConsole("foo_sw fired")); |
| 392 EXPECT_FALSE(GetRegistrationOneShot("foo_sw")); |
| 393 } |
| 394 |
| 334 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, OneShotDelaysForNetwork) { | 395 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, OneShotDelaysForNetwork) { |
| 335 EXPECT_TRUE(RegisterServiceWorker()); | 396 EXPECT_TRUE(RegisterServiceWorker()); |
| 336 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. | 397 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| 337 | 398 |
| 338 // Prevent firing by going offline. | 399 // Prevent firing by going offline. |
| 339 SetOnline(false); | 400 SetOnline(false); |
| 340 EXPECT_TRUE(RegisterOneShot("foo")); | 401 EXPECT_TRUE(RegisterOneShot("foo")); |
| 341 EXPECT_TRUE(GetRegistrationOneShot("foo")); | 402 EXPECT_TRUE(GetRegistrationOneShot("foo")); |
| 342 EXPECT_TRUE(OneShotPending("foo")); | 403 EXPECT_TRUE(OneShotPending("foo")); |
| 343 | 404 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 SetOnline(false); | 489 SetOnline(false); |
| 429 registered_tags.push_back("foo"); | 490 registered_tags.push_back("foo"); |
| 430 registered_tags.push_back("bar"); | 491 registered_tags.push_back("bar"); |
| 431 | 492 |
| 432 for (const std::string& tag : registered_tags) | 493 for (const std::string& tag : registered_tags) |
| 433 EXPECT_TRUE(RegisterOneShot(tag)); | 494 EXPECT_TRUE(RegisterOneShot(tag)); |
| 434 | 495 |
| 435 EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); | 496 EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); |
| 436 } | 497 } |
| 437 | 498 |
| 499 // Verify that GetRegistrations works in a service worker |
| 500 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, |
| 501 GetRegistrationsFromServiceWorker) { |
| 502 EXPECT_TRUE(RegisterServiceWorker()); |
| 503 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| 504 |
| 505 std::vector<std::string> registered_tags; |
| 506 EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); |
| 507 |
| 508 SetOnline(false); |
| 509 registered_tags.push_back("foo_sw"); |
| 510 registered_tags.push_back("bar_sw"); |
| 511 |
| 512 for (const std::string& tag : registered_tags) { |
| 513 EXPECT_TRUE(RegisterOneShotFromServiceWorker(tag)); |
| 514 EXPECT_TRUE(PopConsole(BuildExpectedResult(tag, "registered in SW"))); |
| 515 } |
| 516 |
| 517 EXPECT_TRUE(GetRegistrationsOneShotFromServiceWorker(registered_tags)); |
| 518 } |
| 519 |
| 520 // Verify that GetRegistration works in a service worker |
| 521 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, |
| 522 GetRegistrationFromServiceWorker) { |
| 523 EXPECT_TRUE(RegisterServiceWorker()); |
| 524 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| 525 |
| 526 std::vector<std::string> registered_tags; |
| 527 EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); |
| 528 |
| 529 SetOnline(false); |
| 530 |
| 531 EXPECT_TRUE(RegisterOneShotFromServiceWorker("foo_sw")); |
| 532 EXPECT_TRUE(PopConsole("ok - foo_sw registered in SW")); |
| 533 EXPECT_TRUE(GetRegistrationOneShotFromServiceWorker("foo_sw")); |
| 534 } |
| 535 |
| 438 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, Unregister) { | 536 IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, Unregister) { |
| 439 EXPECT_TRUE(RegisterServiceWorker()); | 537 EXPECT_TRUE(RegisterServiceWorker()); |
| 440 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. | 538 EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| 441 | 539 |
| 442 SetOnline(false); | 540 SetOnline(false); |
| 443 EXPECT_TRUE(RegisterOneShot("foo")); | 541 EXPECT_TRUE(RegisterOneShot("foo")); |
| 444 EXPECT_TRUE(UnregisterOneShot("foo")); | 542 EXPECT_TRUE(UnregisterOneShot("foo")); |
| 445 EXPECT_FALSE(GetRegistrationOneShot("foo")); | 543 EXPECT_FALSE(GetRegistrationOneShot("foo")); |
| 446 } | 544 } |
| 447 | 545 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 EXPECT_TRUE(RegisterOneShot("delay")); | 627 EXPECT_TRUE(RegisterOneShot("delay")); |
| 530 EXPECT_FALSE(OneShotPending("delay")); | 628 EXPECT_FALSE(OneShotPending("delay")); |
| 531 EXPECT_TRUE(StoreRegistrationOneShot("delay")); | 629 EXPECT_TRUE(StoreRegistrationOneShot("delay")); |
| 532 | 630 |
| 533 EXPECT_TRUE(RejectDelayedOneShot()); | 631 EXPECT_TRUE(RejectDelayedOneShot()); |
| 534 EXPECT_TRUE(PopConsole("ok - delay rejected")); | 632 EXPECT_TRUE(PopConsole("ok - delay rejected")); |
| 535 EXPECT_TRUE(NotifyWhenDoneImmediateOneShot("ok - delay result: false")); | 633 EXPECT_TRUE(NotifyWhenDoneImmediateOneShot("ok - delay result: false")); |
| 536 } | 634 } |
| 537 | 635 |
| 538 } // namespace content | 636 } // namespace content |
| OLD | NEW |