[Extensions Bindings] Add ExtensionBindingsSystem interface; hook it up
Add an ExtensionBindingsSystem interface to handle exposing bindings to
extension contexts, extension API calls and responses, and dispatching
events.
Pull much of the current JS binding logic out of the dispatcher and into
a JsExtensionBindingsSystem implementation; this will allow the bindings
system associated with the dispatcher to be easily switched out as we
migrate to native bindings.
Update NativeExtensionBindingsSystem to implement
ExtensionBindingsSystem fully.
BUG=653596
Review-Url: https://codereview.chromium.org/2512233002
Cr-Commit-Position: refs/heads/master@{#433605}
diff --git a/extensions/renderer/worker_thread_dispatcher.cc b/extensions/renderer/worker_thread_dispatcher.cc
index 0d189d44f..432592f 100644
--- a/extensions/renderer/worker_thread_dispatcher.cc
+++ b/extensions/renderer/worker_thread_dispatcher.cc
@@ -9,6 +9,8 @@
#include "content/public/child/worker_thread.h"
#include "content/public/renderer/render_thread.h"
#include "extensions/common/extension_messages.h"
+#include "extensions/renderer/extension_bindings_system.h"
+#include "extensions/renderer/js_extension_bindings_system.h"
#include "extensions/renderer/service_worker_data.h"
namespace extensions {
@@ -24,12 +26,22 @@
bool succeeded,
const std::unique_ptr<base::ListValue>& response,
const std::string& error) {
+ // TODO(devlin): Using the RequestSender directly here won't work with
+ // NativeExtensionBindingsSystem (since there is no associated RequestSender
+ // in that case). We should instead be going
+ // ExtensionBindingsSystem::HandleResponse().
ServiceWorkerData* data = g_data_tls.Pointer()->Get();
WorkerThreadDispatcher::GetRequestSender()->HandleWorkerResponse(
request_id, data->service_worker_version_id(), succeeded, *response,
error);
}
+ServiceWorkerData* GetServiceWorkerData() {
+ ServiceWorkerData* data = g_data_tls.Pointer()->Get();
+ DCHECK(data);
+ return data;
+}
+
} // namespace
WorkerThreadDispatcher::WorkerThreadDispatcher() {}
@@ -47,17 +59,20 @@
render_thread->AddObserver(this);
}
-V8SchemaRegistry* WorkerThreadDispatcher::GetV8SchemaRegistry() {
- ServiceWorkerData* data = g_data_tls.Pointer()->Get();
- DCHECK(data);
- return data->v8_schema_registry();
+// static
+ExtensionBindingsSystem* WorkerThreadDispatcher::GetBindingsSystem() {
+ return GetServiceWorkerData()->bindings_system();
}
// static
ServiceWorkerRequestSender* WorkerThreadDispatcher::GetRequestSender() {
- ServiceWorkerData* data = g_data_tls.Pointer()->Get();
- DCHECK(data);
- return data->request_sender();
+ return static_cast<ServiceWorkerRequestSender*>(
+ GetBindingsSystem()->GetRequestSender());
+}
+
+// static
+V8SchemaRegistry* WorkerThreadDispatcher::GetV8SchemaRegistry() {
+ return GetServiceWorkerData()->v8_schema_registry();
}
bool WorkerThreadDispatcher::OnControlMessageReceived(
@@ -86,11 +101,17 @@
base::Passed(response.CreateDeepCopy()), error));
}
-void WorkerThreadDispatcher::AddWorkerData(int64_t service_worker_version_id) {
+void WorkerThreadDispatcher::AddWorkerData(
+ int64_t service_worker_version_id,
+ ResourceBundleSourceMap* source_map) {
ServiceWorkerData* data = g_data_tls.Pointer()->Get();
if (!data) {
- ServiceWorkerData* new_data =
- new ServiceWorkerData(this, service_worker_version_id);
+ std::unique_ptr<ExtensionBindingsSystem> bindings_system =
+ base::MakeUnique<JsExtensionBindingsSystem>(
+ source_map, base::MakeUnique<ServiceWorkerRequestSender>(
+ this, service_worker_version_id));
+ ServiceWorkerData* new_data = new ServiceWorkerData(
+ service_worker_version_id, std::move(bindings_system));
g_data_tls.Pointer()->Set(new_data);
}
}