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

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

Issue 205033002: Browser side of new ServiceWorker 'sync' event. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Kinuko comments Created 6 years, 8 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_internals_ui.h" 5 #include "content/browser/service_worker/service_worker_internals_ui.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 : internals_(internals), original_args_(original_args.Pass()) {} 42 : internals_(internals), original_args_(original_args.Pass()) {}
43 43
44 void GetRegistrationsOnIOThread(ServiceWorkerContextWrapper* context, 44 void GetRegistrationsOnIOThread(ServiceWorkerContextWrapper* context,
45 const base::FilePath& context_path); 45 const base::FilePath& context_path);
46 void UnregisterOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context, 46 void UnregisterOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
47 const GURL& scope); 47 const GURL& scope);
48 void StartWorkerOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context, 48 void StartWorkerOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
49 const GURL& scope); 49 const GURL& scope);
50 void StopWorkerOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context, 50 void StopWorkerOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
51 const GURL& scope); 51 const GURL& scope);
52 void DispatchSyncEventToWorkerOnIOThread(
53 scoped_refptr<ServiceWorkerContextWrapper> context,
54 const GURL& scope);
52 55
53 private: 56 private:
54 friend class base::RefCountedThreadSafe<OperationProxy>; 57 friend class base::RefCountedThreadSafe<OperationProxy>;
55 ~OperationProxy() {} 58 ~OperationProxy() {}
56 void OnHaveRegistrations( 59 void OnHaveRegistrations(
57 const base::FilePath& context_path, 60 const base::FilePath& context_path,
58 const std::vector<ServiceWorkerRegistrationInfo>& registrations); 61 const std::vector<ServiceWorkerRegistrationInfo>& registrations);
59 62
60 void OperationComplete(ServiceWorkerStatusCode status); 63 void OperationComplete(ServiceWorkerStatusCode status);
61 64
62 void StartActiveWorker( 65 void StartActiveWorker(
63 ServiceWorkerStatusCode status, 66 ServiceWorkerStatusCode status,
64 const scoped_refptr<ServiceWorkerRegistration>& registration); 67 const scoped_refptr<ServiceWorkerRegistration>& registration);
65 68
66 void StopActiveWorker( 69 void StopActiveWorker(
67 ServiceWorkerStatusCode status, 70 ServiceWorkerStatusCode status,
68 const scoped_refptr<ServiceWorkerRegistration>& registration); 71 const scoped_refptr<ServiceWorkerRegistration>& registration);
69 72
73 void DispatchSyncEventToActiveWorker(
74 ServiceWorkerStatusCode status,
75 const scoped_refptr<ServiceWorkerRegistration>& registration);
76
70 WeakPtr<ServiceWorkerInternalsUI> internals_; 77 WeakPtr<ServiceWorkerInternalsUI> internals_;
71 scoped_ptr<ListValue> original_args_; 78 scoped_ptr<ListValue> original_args_;
72 }; 79 };
73 80
74 ServiceWorkerInternalsUI::ServiceWorkerInternalsUI(WebUI* web_ui) 81 ServiceWorkerInternalsUI::ServiceWorkerInternalsUI(WebUI* web_ui)
75 : WebUIController(web_ui) { 82 : WebUIController(web_ui) {
76 WebUIDataSource* source = 83 WebUIDataSource* source =
77 WebUIDataSource::Create(kChromeUIServiceWorkerInternalsHost); 84 WebUIDataSource::Create(kChromeUIServiceWorkerInternalsHost);
78 source->SetUseJsonJSFormatV2(); 85 source->SetUseJsonJSFormatV2();
79 source->SetJsonPath("strings.js"); 86 source->SetJsonPath("strings.js");
(...skipping 16 matching lines...) Expand all
96 base::Bind(&ServiceWorkerInternalsUI::StartWorker, 103 base::Bind(&ServiceWorkerInternalsUI::StartWorker,
97 base::Unretained(this))); 104 base::Unretained(this)));
98 web_ui->RegisterMessageCallback( 105 web_ui->RegisterMessageCallback(
99 "stop", 106 "stop",
100 base::Bind(&ServiceWorkerInternalsUI::StopWorker, 107 base::Bind(&ServiceWorkerInternalsUI::StopWorker,
101 base::Unretained(this))); 108 base::Unretained(this)));
102 web_ui->RegisterMessageCallback( 109 web_ui->RegisterMessageCallback(
103 "unregister", 110 "unregister",
104 base::Bind(&ServiceWorkerInternalsUI::Unregister, 111 base::Bind(&ServiceWorkerInternalsUI::Unregister,
105 base::Unretained(this))); 112 base::Unretained(this)));
113 web_ui->RegisterMessageCallback(
114 "sync",
115 base::Bind(&ServiceWorkerInternalsUI::DispatchSyncEventToWorker,
116 base::Unretained(this)));
106 } 117 }
107 118
108 ServiceWorkerInternalsUI::~ServiceWorkerInternalsUI() {} 119 ServiceWorkerInternalsUI::~ServiceWorkerInternalsUI() {}
109 120
110 void ServiceWorkerInternalsUI::GetAllRegistrations(const ListValue* args) { 121 void ServiceWorkerInternalsUI::GetAllRegistrations(const ListValue* args) {
111 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
112 123
113 BrowserContext* browser_context = 124 BrowserContext* browser_context =
114 web_ui()->GetWebContents()->GetBrowserContext(); 125 web_ui()->GetWebContents()->GetBrowserContext();
115 126
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 BrowserContext::StoragePartitionCallback cb = 182 BrowserContext::StoragePartitionCallback cb =
172 base::Bind(&FindContext, *partition_path, &result_partition, context); 183 base::Bind(&FindContext, *partition_path, &result_partition, context);
173 BrowserContext::ForEachStoragePartition(browser_context, cb); 184 BrowserContext::ForEachStoragePartition(browser_context, cb);
174 185
175 if (!result_partition || !(*context)) 186 if (!result_partition || !(*context))
176 return false; 187 return false;
177 188
178 return true; 189 return true;
179 } 190 }
180 191
192 void ServiceWorkerInternalsUI::DispatchSyncEventToWorker(
193 const ListValue* args) {
194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
195 base::FilePath partition_path;
196 GURL scope;
197 scoped_refptr<ServiceWorkerContextWrapper> context;
198 if (!GetRegistrationInfo(args, &partition_path, &scope, &context))
199 return;
200
201 scoped_ptr<ListValue> args_copy(args->DeepCopy());
202 BrowserThread::PostTask(
203 BrowserThread::IO,
204 FROM_HERE,
205 base::Bind(&ServiceWorkerInternalsUI::OperationProxy::
206 DispatchSyncEventToWorkerOnIOThread,
207 new OperationProxy(AsWeakPtr(), args_copy.Pass()),
208 context,
209 scope));
210 }
211
181 void ServiceWorkerInternalsUI::Unregister(const ListValue* args) { 212 void ServiceWorkerInternalsUI::Unregister(const ListValue* args) {
182 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 213 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
183 base::FilePath partition_path; 214 base::FilePath partition_path;
184 GURL scope; 215 GURL scope;
185 scoped_refptr<ServiceWorkerContextWrapper> context; 216 scoped_refptr<ServiceWorkerContextWrapper> context;
186 if (!GetRegistrationInfo(args, &partition_path, &scope, &context)) 217 if (!GetRegistrationInfo(args, &partition_path, &scope, &context))
187 return; 218 return;
188 219
189 scoped_ptr<ListValue> args_copy(args->DeepCopy()); 220 scoped_ptr<ListValue> args_copy(args->DeepCopy());
190 BrowserThread::PostTask( 221 BrowserThread::PostTask(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 const GURL& scope) { 305 const GURL& scope) {
275 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 306 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
276 // TODO(alecflett): Add support for starting/stopping workers for 307 // TODO(alecflett): Add support for starting/stopping workers for
277 // pending versions too. 308 // pending versions too.
278 context->context()->storage()->FindRegistrationForPattern( 309 context->context()->storage()->FindRegistrationForPattern(
279 scope, 310 scope,
280 base::Bind(&ServiceWorkerInternalsUI::OperationProxy::StopActiveWorker, 311 base::Bind(&ServiceWorkerInternalsUI::OperationProxy::StopActiveWorker,
281 this)); 312 this));
282 } 313 }
283 314
315 void
316 ServiceWorkerInternalsUI::OperationProxy::DispatchSyncEventToWorkerOnIOThread(
317 scoped_refptr<ServiceWorkerContextWrapper> context,
318 const GURL& scope) {
319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
320 context->context()->storage()->FindRegistrationForPattern(
321 scope,
322 base::Bind(&ServiceWorkerInternalsUI::OperationProxy::
323 DispatchSyncEventToActiveWorker,
324 this));
325 }
326
284 namespace { 327 namespace {
285 void UpdateVersionInfo(const ServiceWorkerVersionInfo& version, 328 void UpdateVersionInfo(const ServiceWorkerVersionInfo& version,
286 DictionaryValue* info) { 329 DictionaryValue* info) {
287 switch (version.running_status) { 330 switch (version.running_status) {
288 case ServiceWorkerVersion::STOPPED: 331 case ServiceWorkerVersion::STOPPED:
289 info->SetString("running_status", "STOPPED"); 332 info->SetString("running_status", "STOPPED");
290 break; 333 break;
291 case ServiceWorkerVersion::STARTING: 334 case ServiceWorkerVersion::STARTING:
292 info->SetString("running_status", "STARTING"); 335 info->SetString("running_status", "STARTING");
293 break; 336 break;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 456 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
414 if (status == SERVICE_WORKER_OK) { 457 if (status == SERVICE_WORKER_OK) {
415 registration->active_version()->StopWorker(base::Bind( 458 registration->active_version()->StopWorker(base::Bind(
416 &ServiceWorkerInternalsUI::OperationProxy::OperationComplete, this)); 459 &ServiceWorkerInternalsUI::OperationProxy::OperationComplete, this));
417 return; 460 return;
418 } 461 }
419 462
420 OperationComplete(status); 463 OperationComplete(status);
421 } 464 }
422 465
466 void ServiceWorkerInternalsUI::OperationProxy::DispatchSyncEventToActiveWorker(
467 ServiceWorkerStatusCode status,
468 const scoped_refptr<ServiceWorkerRegistration>& registration) {
469 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
470 if (status == SERVICE_WORKER_OK && registration->active_version() &&
471 registration->active_version()->status() ==
472 ServiceWorkerVersion::ACTIVE) {
473 registration->active_version()->DispatchSyncEvent(base::Bind(
474 &ServiceWorkerInternalsUI::OperationProxy::OperationComplete, this));
475 return;
476 }
477
478 OperationComplete(SERVICE_WORKER_ERROR_FAILED);
479 }
480
423 } // namespace content 481 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_internals_ui.h ('k') | content/browser/service_worker/service_worker_version.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698