OLD | NEW |
(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 "content/renderer/service_worker/worker_fetch_context_info_impl.h" |
| 6 |
| 7 #include "content/child/child_thread_impl.h" |
| 8 #include "content/child/request_extra_data.h" |
| 9 #include "content/child/resource_dispatcher.h" |
| 10 #include "content/child/thread_safe_sender.h" |
| 11 #include "content/child/web_url_loader_impl.h" |
| 12 #include "content/common/frame_messages.h" |
| 13 #include "mojo/public/cpp/bindings/associated_binding.h" |
| 14 #include "third_party/WebKit/public/platform/WebWorkerFetchContext.h" |
| 15 #include "third_party/WebKit/public/platform/WebWorkerFetchContextInfo.h" |
| 16 |
| 17 namespace content { |
| 18 |
| 19 namespace { |
| 20 |
| 21 class WorkerFetchContextImpl : public blink::WebWorkerFetchContext, |
| 22 public mojom::ServiceWorkerClient { |
| 23 public: |
| 24 WorkerFetchContextImpl(mojom::WorkerFetchContextFactoryPtrInfo factory_info, |
| 25 blink::WebWorkerFetchContextInfo* info, |
| 26 base::SingleThreadTaskRunner* loading_task_runner) |
| 27 : binding_(this), |
| 28 service_worker_provider_id_(info->GetServiceWorkerProviderID()), |
| 29 parent_is_controlled_by_service_worker_( |
| 30 info->IsControlledByServiceWorker()), |
| 31 resource_dispatcher_( |
| 32 base::MakeUnique<ResourceDispatcher>(nullptr, |
| 33 loading_task_runner)) { |
| 34 factory_.Bind(std::move(factory_info)); |
| 35 mojom::ServiceWorkerClientAssociatedPtrInfo ptr_info; |
| 36 binding_.Bind(&ptr_info); |
| 37 factory_->CreateWorkerFetchContext(mojo::MakeRequest(&url_loader_factory_), |
| 38 std::move(ptr_info), |
| 39 service_worker_provider_id_); |
| 40 } |
| 41 ~WorkerFetchContextImpl() override {} |
| 42 |
| 43 void SetControllerServiceWorker(int64_t controller_version_id) override { |
| 44 controller_version_id_ = controller_version_id; |
| 45 } |
| 46 |
| 47 bool IsControlledByServiceWorker() const override { |
| 48 return parent_is_controlled_by_service_worker_ || |
| 49 (controller_version_id_ != kInvalidServiceWorkerVersionId); |
| 50 } |
| 51 |
| 52 blink::WebURLLoader* CreateURLLoader() override { |
| 53 return new content::WebURLLoaderImpl(resource_dispatcher_.get(), |
| 54 url_loader_factory_.get()); |
| 55 } |
| 56 |
| 57 void WillSendRequest(blink::WebURLRequest& request) override { |
| 58 RequestExtraData* extra_data = new RequestExtraData(); |
| 59 extra_data->set_service_worker_provider_id(service_worker_provider_id_); |
| 60 request.SetExtraData(extra_data); |
| 61 |
| 62 if (!IsControlledByServiceWorker() && |
| 63 request.GetServiceWorkerMode() != |
| 64 blink::WebURLRequest::ServiceWorkerMode::kNone) { |
| 65 request.SetServiceWorkerMode( |
| 66 blink::WebURLRequest::ServiceWorkerMode::kForeign); |
| 67 } |
| 68 } |
| 69 |
| 70 private: |
| 71 mojo::AssociatedBinding<mojom::ServiceWorkerClient> binding_; |
| 72 const int service_worker_provider_id_; |
| 73 const bool parent_is_controlled_by_service_worker_; |
| 74 std::unique_ptr<ResourceDispatcher> resource_dispatcher_; |
| 75 int controller_version_id_ = kInvalidServiceWorkerVersionId; |
| 76 mojom::WorkerFetchContextFactoryPtr factory_; |
| 77 mojom::URLLoaderFactoryAssociatedPtr url_loader_factory_; |
| 78 }; |
| 79 |
| 80 } // namespace |
| 81 |
| 82 WorkerFetchContextInfoImpl::WorkerFetchContextInfoImpl( |
| 83 mojom::WorkerFetchContextFactoryPtrInfo factory_info) |
| 84 : factory_info_(std::move(factory_info)) {} |
| 85 |
| 86 WorkerFetchContextInfoImpl::~WorkerFetchContextInfoImpl() {} |
| 87 |
| 88 std::unique_ptr<blink::WebWorkerFetchContext> |
| 89 WorkerFetchContextInfoImpl::CreateContext( |
| 90 base::SingleThreadTaskRunner* loading_task_runner) { |
| 91 DCHECK(factory_info_.is_valid()); |
| 92 return base::MakeUnique<WorkerFetchContextImpl>(std::move(factory_info_), |
| 93 this, loading_task_runner); |
| 94 } |
| 95 |
| 96 } // namespace content |
OLD | NEW |