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

Side by Side Diff: content/renderer/service_worker/worker_fetch_context_info_impl.cc

Issue 2804843005: Implement the infrastructure of creating WorkerFetchContext in worker global scope. (Closed)
Patch Set: Created 3 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
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698