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

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

Issue 2627543002: ServiceWorker: Returns true for IsMojoForServiceWorkerEnabled (Closed)
Patch Set: Created 3 years, 11 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/service_worker/service_worker_process_manager.h" 5 #include "content/browser/service_worker/service_worker_process_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 std::unique_ptr<TestBrowserContext> browser_context_; 63 std::unique_ptr<TestBrowserContext> browser_context_;
64 std::unique_ptr<ServiceWorkerProcessManager> process_manager_; 64 std::unique_ptr<ServiceWorkerProcessManager> process_manager_;
65 GURL pattern_; 65 GURL pattern_;
66 GURL script_url_; 66 GURL script_url_;
67 67
68 private: 68 private:
69 content::TestBrowserThreadBundle thread_bundle_; 69 content::TestBrowserThreadBundle thread_bundle_;
70 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProcessManagerTest); 70 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProcessManagerTest);
71 }; 71 };
72 72
73 class ServiceWorkerProcessManagerTestP 73 TEST_F(ServiceWorkerProcessManagerTest, SortProcess) {
74 : public MojoServiceWorkerTestP<ServiceWorkerProcessManagerTest> {};
75
76 TEST_P(ServiceWorkerProcessManagerTestP, SortProcess) {
77 // Process 1 has 2 refs, 2 has 3 refs and 3 has 1 ref. 74 // Process 1 has 2 refs, 2 has 3 refs and 3 has 1 ref.
78 process_manager_->AddProcessReferenceToPattern(pattern_, 1); 75 process_manager_->AddProcessReferenceToPattern(pattern_, 1);
79 process_manager_->AddProcessReferenceToPattern(pattern_, 1); 76 process_manager_->AddProcessReferenceToPattern(pattern_, 1);
80 process_manager_->AddProcessReferenceToPattern(pattern_, 2); 77 process_manager_->AddProcessReferenceToPattern(pattern_, 2);
81 process_manager_->AddProcessReferenceToPattern(pattern_, 2); 78 process_manager_->AddProcessReferenceToPattern(pattern_, 2);
82 process_manager_->AddProcessReferenceToPattern(pattern_, 2); 79 process_manager_->AddProcessReferenceToPattern(pattern_, 2);
83 process_manager_->AddProcessReferenceToPattern(pattern_, 3); 80 process_manager_->AddProcessReferenceToPattern(pattern_, 3);
84 81
85 // Process 2 has the biggest # of references and it should be chosen. 82 // Process 2 has the biggest # of references and it should be chosen.
86 EXPECT_THAT(process_manager_->SortProcessesForPattern(pattern_), 83 EXPECT_THAT(process_manager_->SortProcessesForPattern(pattern_),
87 testing::ElementsAre(2, 1, 3)); 84 testing::ElementsAre(2, 1, 3));
88 85
89 process_manager_->RemoveProcessReferenceFromPattern(pattern_, 1); 86 process_manager_->RemoveProcessReferenceFromPattern(pattern_, 1);
90 process_manager_->RemoveProcessReferenceFromPattern(pattern_, 1); 87 process_manager_->RemoveProcessReferenceFromPattern(pattern_, 1);
91 // Scores for each process: 2 : 3, 3 : 1, process 1 is removed. 88 // Scores for each process: 2 : 3, 3 : 1, process 1 is removed.
92 EXPECT_THAT(process_manager_->SortProcessesForPattern(pattern_), 89 EXPECT_THAT(process_manager_->SortProcessesForPattern(pattern_),
93 testing::ElementsAre(2, 3)); 90 testing::ElementsAre(2, 3));
94 } 91 }
95 92
96 TEST_P(ServiceWorkerProcessManagerTestP, FindAvailableProcess) { 93 TEST_F(ServiceWorkerProcessManagerTest, FindAvailableProcess) {
97 std::unique_ptr<MockRenderProcessHost> host1(CreateRenderProcessHost()); 94 std::unique_ptr<MockRenderProcessHost> host1(CreateRenderProcessHost());
98 std::unique_ptr<MockRenderProcessHost> host2(CreateRenderProcessHost()); 95 std::unique_ptr<MockRenderProcessHost> host2(CreateRenderProcessHost());
99 std::unique_ptr<MockRenderProcessHost> host3(CreateRenderProcessHost()); 96 std::unique_ptr<MockRenderProcessHost> host3(CreateRenderProcessHost());
100 97
101 // Process 1 has 2 refs, 2 has 3 refs and 3 has 1 ref. 98 // Process 1 has 2 refs, 2 has 3 refs and 3 has 1 ref.
102 process_manager_->AddProcessReferenceToPattern(pattern_, host1->GetID()); 99 process_manager_->AddProcessReferenceToPattern(pattern_, host1->GetID());
103 process_manager_->AddProcessReferenceToPattern(pattern_, host1->GetID()); 100 process_manager_->AddProcessReferenceToPattern(pattern_, host1->GetID());
104 process_manager_->AddProcessReferenceToPattern(pattern_, host2->GetID()); 101 process_manager_->AddProcessReferenceToPattern(pattern_, host2->GetID());
105 process_manager_->AddProcessReferenceToPattern(pattern_, host2->GetID()); 102 process_manager_->AddProcessReferenceToPattern(pattern_, host2->GetID());
106 process_manager_->AddProcessReferenceToPattern(pattern_, host2->GetID()); 103 process_manager_->AddProcessReferenceToPattern(pattern_, host2->GetID());
(...skipping 11 matching lines...) Expand all
118 // refcount should be chosen. 115 // refcount should be chosen.
119 host1->set_is_process_backgrounded(true); 116 host1->set_is_process_backgrounded(true);
120 host3->set_is_process_backgrounded(true); 117 host3->set_is_process_backgrounded(true);
121 EXPECT_EQ(host2->GetID(), process_manager_->FindAvailableProcess(pattern_)); 118 EXPECT_EQ(host2->GetID(), process_manager_->FindAvailableProcess(pattern_));
122 119
123 // Process 3 should be chosen because it is the only foreground process. 120 // Process 3 should be chosen because it is the only foreground process.
124 host3->set_is_process_backgrounded(false); 121 host3->set_is_process_backgrounded(false);
125 EXPECT_EQ(host3->GetID(), process_manager_->FindAvailableProcess(pattern_)); 122 EXPECT_EQ(host3->GetID(), process_manager_->FindAvailableProcess(pattern_));
126 } 123 }
127 124
128 TEST_P(ServiceWorkerProcessManagerTestP, 125 TEST_F(ServiceWorkerProcessManagerTest,
129 AllocateWorkerProcess_FindAvailableProcess) { 126 AllocateWorkerProcess_FindAvailableProcess) {
130 const int kEmbeddedWorkerId1 = 100; 127 const int kEmbeddedWorkerId1 = 100;
131 const int kEmbeddedWorkerId2 = 200; 128 const int kEmbeddedWorkerId2 = 200;
132 const int kEmbeddedWorkerId3 = 300; 129 const int kEmbeddedWorkerId3 = 300;
133 GURL scope1("http://example.com/scope1"); 130 GURL scope1("http://example.com/scope1");
134 GURL scope2("http://example.com/scope2"); 131 GURL scope2("http://example.com/scope2");
135 132
136 // Set up mock renderer process hosts. 133 // Set up mock renderer process hosts.
137 std::unique_ptr<MockRenderProcessHost> host1(CreateRenderProcessHost()); 134 std::unique_ptr<MockRenderProcessHost> host1(CreateRenderProcessHost());
138 std::unique_ptr<MockRenderProcessHost> host2(CreateRenderProcessHost()); 135 std::unique_ptr<MockRenderProcessHost> host2(CreateRenderProcessHost());
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 EXPECT_EQ(0u, host2->GetWorkerRefCount()); 226 EXPECT_EQ(0u, host2->GetWorkerRefCount());
230 EXPECT_EQ(1u, instance_info.size()); 227 EXPECT_EQ(1u, instance_info.size());
231 EXPECT_TRUE(base::ContainsKey(instance_info, kEmbeddedWorkerId2)); 228 EXPECT_TRUE(base::ContainsKey(instance_info, kEmbeddedWorkerId2));
232 229
233 process_manager_->ReleaseWorkerProcess(kEmbeddedWorkerId2); 230 process_manager_->ReleaseWorkerProcess(kEmbeddedWorkerId2);
234 EXPECT_EQ(0u, host1->GetWorkerRefCount()); 231 EXPECT_EQ(0u, host1->GetWorkerRefCount());
235 EXPECT_EQ(0u, host2->GetWorkerRefCount()); 232 EXPECT_EQ(0u, host2->GetWorkerRefCount());
236 EXPECT_TRUE(instance_info.empty()); 233 EXPECT_TRUE(instance_info.empty());
237 } 234 }
238 235
239 TEST_P(ServiceWorkerProcessManagerTestP, AllocateWorkerProcess_InShutdown) { 236 TEST_F(ServiceWorkerProcessManagerTest, AllocateWorkerProcess_InShutdown) {
240 process_manager_->Shutdown(); 237 process_manager_->Shutdown();
241 ASSERT_TRUE(process_manager_->IsShutdown()); 238 ASSERT_TRUE(process_manager_->IsShutdown());
242 239
243 base::RunLoop run_loop; 240 base::RunLoop run_loop;
244 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 241 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
245 int process_id = -10; 242 int process_id = -10;
246 bool is_new_process = true; 243 bool is_new_process = true;
247 process_manager_->AllocateWorkerProcess( 244 process_manager_->AllocateWorkerProcess(
248 1, pattern_, script_url_, true /* can_use_existing_process */, 245 1, pattern_, script_url_, true /* can_use_existing_process */,
249 base::Bind(&DidAllocateWorkerProcess, run_loop.QuitClosure(), &status, 246 base::Bind(&DidAllocateWorkerProcess, run_loop.QuitClosure(), &status,
250 &process_id, &is_new_process)); 247 &process_id, &is_new_process));
251 run_loop.Run(); 248 run_loop.Run();
252 249
253 // Allocating a process in shutdown should abort. 250 // Allocating a process in shutdown should abort.
254 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, status); 251 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, status);
255 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, process_id); 252 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, process_id);
256 EXPECT_FALSE(is_new_process); 253 EXPECT_FALSE(is_new_process);
257 EXPECT_TRUE(process_manager_->instance_info_.empty()); 254 EXPECT_TRUE(process_manager_->instance_info_.empty());
258 } 255 }
259 256
260 INSTANTIATE_TEST_CASE_P(ServiceWorkerProcessManagerTest,
261 ServiceWorkerProcessManagerTestP,
262 testing::Bool());
263
264 } // namespace content 257 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698