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

Unified Diff: extensions/browser/events/lazy_event_dispatcher.cc

Issue 2943583002: [extension SW] Support lazy events from extension service workers. (Closed)
Patch Set: sync @tott Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/events/lazy_event_dispatcher.h ('k') | extensions/browser/extension_message_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/events/lazy_event_dispatcher.cc
diff --git a/extensions/browser/events/lazy_event_dispatcher.cc b/extensions/browser/events/lazy_event_dispatcher.cc
index 60dbbe453741a84bc2926f6690c0bd33f95e620b..7f4da36ee04937ca675228792005aa5e5d7ea911 100644
--- a/extensions/browser/events/lazy_event_dispatcher.cc
+++ b/extensions/browser/events/lazy_event_dispatcher.cc
@@ -11,6 +11,7 @@
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/browser/lazy_context_id.h"
+#include "extensions/browser/service_worker_task_queue.h"
#include "extensions/common/manifest_handlers/incognito_info.h"
using content::BrowserContext;
@@ -34,11 +35,27 @@ void LazyEventDispatcher::DispatchToEventPage(
DispatchToLazyContext(&dispatch_context, listener_filter);
}
+void LazyEventDispatcher::DispatchToServiceWorker(
+ const ExtensionId& extension_id,
+ const GURL& service_worker_scope,
+ const base::DictionaryValue* listener_filter) {
+ LazyContextId dispatch_context(browser_context_, extension_id,
+ service_worker_scope);
+ DispatchToLazyContext(&dispatch_context, listener_filter);
+}
+
bool LazyEventDispatcher::HasAlreadyDispatched(
BrowserContext* context,
const EventListener* listener) const {
- auto dispatch_context =
- base::MakeUnique<LazyContextId>(context, listener->extension_id());
+ std::unique_ptr<LazyContextId> dispatch_context;
+ if (listener->is_for_service_worker()) {
+ dispatch_context = base::MakeUnique<LazyContextId>(
+ context, listener->extension_id(), listener->listener_url());
+ } else {
+ dispatch_context =
+ base::MakeUnique<LazyContextId>(context, listener->extension_id());
+ }
+
return HasAlreadyDispatchedImpl(dispatch_context.get());
}
@@ -79,7 +96,7 @@ bool LazyEventDispatcher::QueueEventDispatch(
if (HasAlreadyDispatchedImpl(dispatch_context))
return false;
- LazyBackgroundTaskQueue* queue = dispatch_context->GetTaskQueue();
+ LazyContextTaskQueue* queue = dispatch_context->GetTaskQueue();
if (!queue->ShouldEnqueueTask(dispatch_context->browser_context(),
extension)) {
return false;
@@ -102,15 +119,20 @@ bool LazyEventDispatcher::QueueEventDispatch(
dispatched_event->will_dispatch_callback.Reset();
}
- queue->AddPendingTask(dispatch_context->browser_context(),
- dispatch_context->extension_id(),
- base::Bind(dispatch_function_, dispatched_event));
+ queue->AddPendingTaskToDispatchEvent(
+ dispatch_context, base::Bind(dispatch_function_, dispatched_event));
return true;
}
bool LazyEventDispatcher::HasAlreadyDispatchedImpl(
const LazyContextId* dispatch_context) const {
+ if (dispatch_context->is_for_service_worker()) {
+ ServiceWorkerDispatchIdentifier dispatch_id(
+ dispatch_context->browser_context(),
+ dispatch_context->service_worker_scope());
+ return base::ContainsKey(dispatched_ids_for_service_worker_, dispatch_id);
+ }
DCHECK(dispatch_context->is_for_event_page());
EventPageDispatchIdentifier dispatch_id(dispatch_context->browser_context(),
dispatch_context->extension_id());
@@ -119,6 +141,12 @@ bool LazyEventDispatcher::HasAlreadyDispatchedImpl(
void LazyEventDispatcher::RecordAlreadyDispatched(
LazyContextId* dispatch_context) {
+ if (dispatch_context->is_for_service_worker()) {
+ dispatched_ids_for_service_worker_.insert(
+ std::make_pair(dispatch_context->browser_context(),
+ dispatch_context->service_worker_scope()));
+ return;
+ }
DCHECK(dispatch_context->is_for_event_page());
dispatched_ids_for_event_page_.insert(std::make_pair(
dispatch_context->browser_context(), dispatch_context->extension_id()));
« no previous file with comments | « extensions/browser/events/lazy_event_dispatcher.h ('k') | extensions/browser/extension_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698