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

Side by Side Diff: extensions/renderer/api_test_base.cc

Issue 669303002: Add an extensions keep-alive client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@keep-alive-service
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
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 "extensions/renderer/api_test_base.h" 5 #include "extensions/renderer/api_test_base.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "extensions/common/extension_urls.h" 10 #include "extensions/common/extension_urls.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 } 94 }
95 95
96 TestServiceProvider::TestServiceProvider() { 96 TestServiceProvider::TestServiceProvider() {
97 } 97 }
98 98
99 ApiTestBase::ApiTestBase() { 99 ApiTestBase::ApiTestBase() {
100 } 100 }
101 ApiTestBase::~ApiTestBase() { 101 ApiTestBase::~ApiTestBase() {
102 } 102 }
103 103
104 class KeepAliveCounter::Instance : public mojo::InterfaceImpl<KeepAlive> {
105 public:
106 Instance(KeepAliveCounter* counter);
107 ~Instance() override;
108
109 private:
110 KeepAliveCounter* counter_;
111
112 DISALLOW_COPY_AND_ASSIGN(Instance);
113 };
114
115 KeepAliveCounter::KeepAliveCounter() : keep_alives_(0), keep_alive_ends_(0) {
116 }
117
118 void KeepAliveCounter::CreateKeepAlive(
119 mojo::InterfaceRequest<KeepAlive> request) {
120 keep_alives_++;
121 mojo::BindToRequest(new Instance(this), &request);
122 }
123
124 void KeepAliveCounter::WaitUntilKeepAlivesFinish() {
125 base::RunLoop run_loop;
126 base::MessageLoop::current()->PostTask(
127 FROM_HERE, base::Bind(&KeepAliveCounter::PollKeepAlives,
128 base::Unretained(this), run_loop.QuitClosure()));
129 run_loop.Run();
130 }
131
132 void KeepAliveCounter::PollKeepAlives(const base::Closure& quit_closure) {
133 if (keep_alives_ == keep_alive_ends_) {
134 quit_closure.Run();
135 return;
136 }
137 base::MessageLoop::current()->PostTask(
138 FROM_HERE, base::Bind(&KeepAliveCounter::PollKeepAlives,
139 base::Unretained(this), quit_closure));
140 }
141
142 KeepAliveCounter::Instance::Instance(KeepAliveCounter* counter)
143 : counter_(counter) {
144 }
145
146 KeepAliveCounter::Instance::~Instance() {
147 counter_->keep_alive_ends_++;
148 }
149
104 void ApiTestBase::SetUp() { 150 void ApiTestBase::SetUp() {
105 ModuleSystemTest::SetUp(); 151 ModuleSystemTest::SetUp();
106 InitializeEnvironment(); 152 InitializeEnvironment();
107 RegisterModules(); 153 RegisterModules();
108 } 154 }
109 155
110 void ApiTestBase::RegisterModules() { 156 void ApiTestBase::RegisterModules() {
111 v8_schema_registry_.reset(new V8SchemaRegistry); 157 v8_schema_registry_.reset(new V8SchemaRegistry);
112 const std::vector<std::pair<std::string, int> > resources = 158 const std::vector<std::pair<std::string, int> > resources =
113 Dispatcher::GetJsResources(); 159 Dispatcher::GetJsResources();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 ->AddBuiltinModule(env()->isolate(), 202 ->AddBuiltinModule(env()->isolate(),
157 mojo::js::Support::kModuleName, 203 mojo::js::Support::kModuleName,
158 mojo::js::Support::GetModule(env()->isolate())); 204 mojo::js::Support::GetModule(env()->isolate()));
159 gin::Handle<TestServiceProvider> service_provider = 205 gin::Handle<TestServiceProvider> service_provider =
160 TestServiceProvider::Create(env()->isolate()); 206 TestServiceProvider::Create(env()->isolate());
161 service_provider_ = service_provider.get(); 207 service_provider_ = service_provider.get();
162 gin::ModuleRegistry::From(env()->context()->v8_context()) 208 gin::ModuleRegistry::From(env()->context()->v8_context())
163 ->AddBuiltinModule(env()->isolate(), 209 ->AddBuiltinModule(env()->isolate(),
164 "content/public/renderer/service_provider", 210 "content/public/renderer/service_provider",
165 service_provider.ToV8()); 211 service_provider.ToV8());
212 service_provider_->AddService(
213 base::Bind(&KeepAliveCounter::CreateKeepAlive,
214 base::Unretained(&keep_alive_counter_)));
166 } 215 }
167 216
168 void ApiTestBase::InitializeEnvironment() { 217 void ApiTestBase::InitializeEnvironment() {
169 gin::Dictionary global(env()->isolate(), 218 gin::Dictionary global(env()->isolate(),
170 env()->context()->v8_context()->Global()); 219 env()->context()->v8_context()->Global());
171 gin::Dictionary navigator(gin::Dictionary::CreateEmpty(env()->isolate())); 220 gin::Dictionary navigator(gin::Dictionary::CreateEmpty(env()->isolate()));
172 navigator.Set("appVersion", base::StringPiece("")); 221 navigator.Set("appVersion", base::StringPiece(""));
173 global.Set("navigator", navigator); 222 global.Set("navigator", navigator);
174 gin::Dictionary chrome(gin::Dictionary::CreateEmpty(env()->isolate())); 223 gin::Dictionary chrome(gin::Dictionary::CreateEmpty(env()->isolate()));
175 global.Set("chrome", chrome); 224 global.Set("chrome", chrome);
(...skipping 14 matching lines...) Expand all
190 TestNatives::Create(env()->isolate(), run_loop.QuitClosure()).ToV8()); 239 TestNatives::Create(env()->isolate(), run_loop.QuitClosure()).ToV8());
191 base::MessageLoop::current()->PostTask(FROM_HERE, 240 base::MessageLoop::current()->PostTask(FROM_HERE,
192 base::Bind(&ApiTestBase::RunTestInner, 241 base::Bind(&ApiTestBase::RunTestInner,
193 base::Unretained(this), 242 base::Unretained(this),
194 test_name, 243 test_name,
195 run_loop.QuitClosure())); 244 run_loop.QuitClosure()));
196 base::MessageLoop::current()->PostTask( 245 base::MessageLoop::current()->PostTask(
197 FROM_HERE, 246 FROM_HERE,
198 base::Bind(&ApiTestBase::RunPromisesAgain, base::Unretained(this))); 247 base::Bind(&ApiTestBase::RunPromisesAgain, base::Unretained(this)));
199 run_loop.Run(); 248 run_loop.Run();
249 keep_alive_counter_.WaitUntilKeepAlivesFinish();
200 } 250 }
201 251
202 void ApiTestBase::RunTestInner(const std::string& test_name, 252 void ApiTestBase::RunTestInner(const std::string& test_name,
203 const base::Closure& quit_closure) { 253 const base::Closure& quit_closure) {
204 v8::HandleScope scope(env()->isolate()); 254 v8::HandleScope scope(env()->isolate());
205 ModuleSystem::NativesEnabledScope natives_enabled(env()->module_system()); 255 ModuleSystem::NativesEnabledScope natives_enabled(env()->module_system());
206 v8::Handle<v8::Value> result = 256 v8::Handle<v8::Value> result =
207 env()->module_system()->CallModuleMethod("testBody", test_name); 257 env()->module_system()->CallModuleMethod("testBody", test_name);
208 if (!result->IsTrue()) { 258 if (!result->IsTrue()) {
209 base::MessageLoop::current()->PostTask(FROM_HERE, quit_closure); 259 base::MessageLoop::current()->PostTask(FROM_HERE, quit_closure);
210 FAIL() << "Failed to run test \"" << test_name << "\""; 260 FAIL() << "Failed to run test \"" << test_name << "\"";
211 } 261 }
212 } 262 }
213 263
214 void ApiTestBase::RunPromisesAgain() { 264 void ApiTestBase::RunPromisesAgain() {
215 RunResolvedPromises(); 265 RunResolvedPromises();
216 base::MessageLoop::current()->PostTask( 266 base::MessageLoop::current()->PostTask(
217 FROM_HERE, 267 FROM_HERE,
218 base::Bind(&ApiTestBase::RunPromisesAgain, base::Unretained(this))); 268 base::Bind(&ApiTestBase::RunPromisesAgain, base::Unretained(this)));
219 } 269 }
220 270
221 } // namespace extensions 271 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698