Index: headless/public/util/expedited_dispatcher_test.cc |
diff --git a/headless/public/util/expedited_dispatcher_test.cc b/headless/public/util/expedited_dispatcher_test.cc |
index 5ef6301ba1d34b1026b35b88a1a8802facb7d990..54f5249b6503cc26c1317acd7bd3218e193cfa86 100644 |
--- a/headless/public/util/expedited_dispatcher_test.cc |
+++ b/headless/public/util/expedited_dispatcher_test.cc |
@@ -8,8 +8,10 @@ |
#include <string> |
#include <vector> |
+#include "base/memory/ptr_util.h" |
#include "base/run_loop.h" |
#include "base/single_thread_task_runner.h" |
+#include "headless/public/util/navigation_request.h" |
#include "headless/public/util/testing/fake_managed_dispatch_url_request_job.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -83,4 +85,51 @@ TEST_F(ExpeditedDispatcherTest, ErrorsAndDataReadyDispatchedInCallOrder) { |
"id: 2 OK", "id: 1 OK")); |
} |
+namespace { |
+class NavigationRequestForTest : public NavigationRequest { |
+ public: |
+ explicit NavigationRequestForTest(base::Closure* done_closure) |
+ : done_closure_(done_closure) {} |
+ |
+ ~NavigationRequestForTest() override {} |
+ |
+ // NavigationRequest implementation: |
+ void StartProcessing(base::Closure done_callback) override { |
+ *done_closure_ = std::move(done_callback); |
+ } |
+ |
+ private: |
+ base::Closure* done_closure_; // NOT OWNED |
+}; |
+} // namespace |
+ |
+TEST_F(ExpeditedDispatcherTest, NavigationDoesNotBlockUrlRequests) { |
+ std::vector<std::string> notifications; |
+ std::unique_ptr<FakeManagedDispatchURLRequestJob> job1( |
+ new FakeManagedDispatchURLRequestJob(expedited_dispatcher_.get(), 1, |
+ ¬ifications)); |
+ base::Closure navigation_done_closure; |
+ expedited_dispatcher_->NavigationRequested( |
+ base::MakeUnique<NavigationRequestForTest>(&navigation_done_closure)); |
+ std::unique_ptr<FakeManagedDispatchURLRequestJob> job2( |
+ new FakeManagedDispatchURLRequestJob(expedited_dispatcher_.get(), 2, |
+ ¬ifications)); |
+ std::unique_ptr<FakeManagedDispatchURLRequestJob> job3( |
+ new FakeManagedDispatchURLRequestJob(expedited_dispatcher_.get(), 3, |
+ ¬ifications)); |
+ std::unique_ptr<FakeManagedDispatchURLRequestJob> job4( |
+ new FakeManagedDispatchURLRequestJob(expedited_dispatcher_.get(), 4, |
+ ¬ifications)); |
+ job1->DispatchHeadersComplete(); |
+ job2->DispatchHeadersComplete(); |
+ job3->DispatchHeadersComplete(); |
+ job4->DispatchHeadersComplete(); |
+ |
+ EXPECT_TRUE(notifications.empty()); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_THAT(notifications, |
+ ElementsAre("id: 1 OK", "id: 2 OK", "id: 3 OK", "id: 4 OK")); |
+} |
+ |
} // namespace headless |