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

Side by Side Diff: extensions/browser/service_worker_task_queue.cc

Issue 2943583002: [extension SW] Support lazy events from extension service workers. (Closed)
Patch Set: sync @tott Created 3 years, 5 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "extensions/browser/service_worker_task_queue.h"
6
7 #include "content/public/browser/browser_context.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/browser/render_process_host.h"
10 #include "content/public/browser/service_worker_context.h"
11 #include "content/public/browser/storage_partition.h"
12 #include "extensions/browser/event_router.h"
13 #include "extensions/browser/lazy_context_id.h"
14 #include "extensions/browser/service_worker_task_queue_factory.h"
15 #include "extensions/common/constants.h"
16
17 using content::BrowserContext;
18 using content::BrowserThread;
19
20 namespace extensions {
21
22 namespace {
23
24 void FinishTask(const LazyContextTaskQueue::PendingTask& task,
25 const ExtensionId& extension_id,
26 int process_id,
27 int thread_id) {
28 auto params = base::MakeUnique<LazyContextTaskQueue::ContextInfo>(
29 extension_id, content::RenderProcessHost::FromID(process_id), thread_id,
30 GURL());
31 task.Run(std::move(params));
32 }
33
34 void DidStartActiveWorkerForPattern(
35 const LazyContextTaskQueue::PendingTask& task,
36 const ExtensionId& extension_id,
37 int process_id,
38 int thread_id) {
39 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
40 content::BrowserThread::PostTask(
41 content::BrowserThread::UI, FROM_HERE,
42 base::Bind(FinishTask, task, extension_id, process_id, thread_id));
43 }
44
45 void DidStartActiveWorkerFail() {
46 DCHECK(false) << "DidStartActiveWorkerFail";
47 // TODO(lazyboy): Handle failure case.
48 }
49
50 void GetServiceWorkerInfoOnIO(
51 const GURL& pattern,
52 const ExtensionId& extension_id,
53 content::ServiceWorkerContext* service_worker_context,
54 const LazyContextTaskQueue::PendingTask& task) {
55 service_worker_context->StartActiveWorkerForPattern(
56 pattern,
57 base::BindOnce(&DidStartActiveWorkerForPattern, task, extension_id),
58 base::BindOnce(&DidStartActiveWorkerFail));
59 }
60
61 } // namespace
62
63 ServiceWorkerTaskQueue::ServiceWorkerTaskQueue(
64 content::BrowserContext* browser_context) {}
65
66 ServiceWorkerTaskQueue::~ServiceWorkerTaskQueue() {}
67
68 // static
69 ServiceWorkerTaskQueue* ServiceWorkerTaskQueue::Get(
70 content::BrowserContext* context) {
71 return ServiceWorkerTaskQueueFactory::GetForBrowserContext(context);
72 }
73
74 bool ServiceWorkerTaskQueue::ShouldEnqueueTask(content::BrowserContext* context,
75 const Extension* extension) {
76 // We call StartWorker every time we want to dispatch an event to an extension
77 // Service worker.
78 // TODO(lazyboy): Is that a problem?
79 return true;
80 }
81
82 void ServiceWorkerTaskQueue::AddPendingTaskToDispatchEvent(
83 LazyContextId* context_id,
84 const LazyContextTaskQueue::PendingTask& task) {
85 DCHECK(context_id->is_for_service_worker());
86 content::StoragePartition* partition =
87 BrowserContext::GetStoragePartitionForSite(
88 context_id->browser_context(), context_id->service_worker_scope());
89 content::ServiceWorkerContext* service_worker_context =
90 partition->GetServiceWorkerContext();
91
92 BrowserThread::PostTask(
93 BrowserThread::IO, FROM_HERE,
94 base::Bind(&GetServiceWorkerInfoOnIO, context_id->service_worker_scope(),
95 context_id->extension_id(), service_worker_context, task));
96 }
97
98 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/service_worker_task_queue.h ('k') | extensions/browser/service_worker_task_queue_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698