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

Side by Side Diff: content/browser/appcache/appcache_subresource_url_factory.cc

Issue 2956373002: Add support for subresource request loads in AppCache for the network service. (Closed)
Patch Set: Use the precreated AppCacheHost from the AppCacheNavigationHandleCore instance. 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/appcache/appcache_subresource_url_factory.h" 5 #include "content/browser/appcache/appcache_subresource_url_factory.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/browser/appcache/appcache_host.h"
9 #include "content/browser/appcache/appcache_request_handler.h" 10 #include "content/browser/appcache/appcache_request_handler.h"
10 #include "content/browser/appcache/appcache_url_loader_job.h" 11 #include "content/browser/appcache/appcache_url_loader_job.h"
11 #include "content/browser/appcache/appcache_url_loader_request.h" 12 #include "content/browser/appcache/appcache_url_loader_request.h"
12 #include "content/browser/url_loader_factory_getter.h" 13 #include "content/browser/url_loader_factory_getter.h"
13 #include "content/common/resource_request.h" 14 #include "content/common/resource_request.h"
14 #include "content/common/url_loader_factory.mojom.h" 15 #include "content/common/url_loader_factory.mojom.h"
15 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
16 #include "mojo/public/cpp/bindings/binding.h" 17 #include "mojo/public/cpp/bindings/binding.h"
17 #include "mojo/public/cpp/bindings/binding_set.h" 18 #include "mojo/public/cpp/bindings/binding_set.h"
18 #include "mojo/public/cpp/bindings/interface_ptr.h" 19 #include "mojo/public/cpp/bindings/interface_ptr.h"
19 #include "net/traffic_annotation/network_traffic_annotation.h" 20 #include "net/traffic_annotation/network_traffic_annotation.h"
20 21
21 namespace content { 22 namespace content {
22 23
24 SubresourceLoadInfo::SubresourceLoadInfo()
25 : routing_id(-1), request_id(-1), options(0) {}
26
27 SubresourceLoadInfo::~SubresourceLoadInfo() {}
28
23 // Implements the URLLoaderFactory mojom for AppCache requests. 29 // Implements the URLLoaderFactory mojom for AppCache requests.
24 AppCacheSubresourceURLFactory::AppCacheSubresourceURLFactory( 30 AppCacheSubresourceURLFactory::AppCacheSubresourceURLFactory(
25 mojom::URLLoaderFactoryRequest request, 31 mojom::URLLoaderFactoryRequest request,
26 URLLoaderFactoryGetter* default_url_loader_factory_getter) 32 URLLoaderFactoryGetter* default_url_loader_factory_getter,
33 base::WeakPtr<AppCacheHost> host)
27 : binding_(this, std::move(request)), 34 : binding_(this, std::move(request)),
28 default_url_loader_factory_getter_(default_url_loader_factory_getter) { 35 default_url_loader_factory_getter_(default_url_loader_factory_getter),
36 appcache_host_(host->GetWeakPtr()) {
29 binding_.set_connection_error_handler( 37 binding_.set_connection_error_handler(
30 base::Bind(&AppCacheSubresourceURLFactory::OnConnectionError, 38 base::Bind(&AppCacheSubresourceURLFactory::OnConnectionError,
31 base::Unretained(this))); 39 base::Unretained(this)));
32 } 40 }
33 41
34 AppCacheSubresourceURLFactory::~AppCacheSubresourceURLFactory() {} 42 AppCacheSubresourceURLFactory::~AppCacheSubresourceURLFactory() {}
35 43
36 // static 44 // static
37 mojom::URLLoaderFactoryPtr 45 AppCacheSubresourceURLFactory*
38 AppCacheSubresourceURLFactory::CreateURLLoaderFactory( 46 AppCacheSubresourceURLFactory::CreateURLLoaderFactory(
39 URLLoaderFactoryGetter* default_url_loader_factory_getter) { 47 URLLoaderFactoryGetter* default_url_loader_factory_getter,
40 mojom::URLLoaderFactoryPtr loader_factory; 48 base::WeakPtr<AppCacheHost> host,
41 mojom::URLLoaderFactoryRequest request = mojo::MakeRequest(&loader_factory); 49 mojom::URLLoaderFactoryPtr* loader_factory) {
50 mojom::URLLoaderFactoryRequest request = mojo::MakeRequest(loader_factory);
42 51
43 // This instance will get deleted when the client drops the connection. 52 // This instance will get deleted when the client drops the connection.
44 // Please see OnConnectionError() for details. 53 // Please see OnConnectionError() for details.
45 new AppCacheSubresourceURLFactory(std::move(request), 54 return new AppCacheSubresourceURLFactory(
46 default_url_loader_factory_getter); 55 std::move(request), default_url_loader_factory_getter, host);
47 return loader_factory;
48 } 56 }
49 57
50 void AppCacheSubresourceURLFactory::CreateLoaderAndStart( 58 void AppCacheSubresourceURLFactory::CreateLoaderAndStart(
51 mojom::URLLoaderAssociatedRequest url_loader_request, 59 mojom::URLLoaderAssociatedRequest url_loader_request,
52 int32_t routing_id, 60 int32_t routing_id,
53 int32_t request_id, 61 int32_t request_id,
54 uint32_t options, 62 uint32_t options,
55 const ResourceRequest& request, 63 const ResourceRequest& request,
56 mojom::URLLoaderClientPtr client, 64 mojom::URLLoaderClientPtr client,
57 const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { 65 const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) {
58 DCHECK_CURRENTLY_ON(BrowserThread::IO); 66 DCHECK_CURRENTLY_ON(BrowserThread::IO);
59 DLOG(WARNING) << "Received request for loading : " << request.url.spec(); 67 DLOG(WARNING) << "Received request for loading : " << request.url.spec();
60 default_url_loader_factory_getter_->GetNetworkFactory() 68
61 ->get() 69 // If the host is invalid, it means that the renderer has probably died.
62 ->CreateLoaderAndStart(mojom::URLLoaderAssociatedRequest(), routing_id, 70 // (Frame has navigated elsewhere?)
63 request_id, options, request, std::move(client), 71 if (!appcache_host_.get())
64 traffic_annotation); 72 return;
73
74 std::unique_ptr<AppCacheRequestHandler> handler =
75 appcache_host_->CreateRequestHandler(
76 AppCacheURLLoaderRequest::Create(request), request.resource_type,
77 request.should_reset_appcache);
78 if (!handler)
79 return;
80
81 handler->set_network_url_loader_factory_getter(
82 default_url_loader_factory_getter_.get());
83
84 std::unique_ptr<SubresourceLoadInfo> load_info(new SubresourceLoadInfo());
85 load_info->url_loader_request = std::move(url_loader_request);
86 load_info->routing_id = routing_id;
87 load_info->request_id = request_id;
88 load_info->options = options;
89 load_info->request = request;
90 load_info->client = std::move(client);
91 load_info->traffic_annotation = traffic_annotation;
92
93 handler->set_subresource_request_load_info(std::move(load_info));
94
95 handler->MaybeLoadResource(nullptr);
96 // The handler is owned by the job.
97 handler.release();
65 } 98 }
66 99
67 void AppCacheSubresourceURLFactory::SyncLoad(int32_t routing_id, 100 void AppCacheSubresourceURLFactory::SyncLoad(int32_t routing_id,
68 int32_t request_id, 101 int32_t request_id,
69 const ResourceRequest& request, 102 const ResourceRequest& request,
70 SyncLoadCallback callback) { 103 SyncLoadCallback callback) {
71 NOTREACHED(); 104 NOTREACHED();
72 } 105 }
73 106
74 void AppCacheSubresourceURLFactory::OnConnectionError() { 107 void AppCacheSubresourceURLFactory::OnConnectionError() {
75 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); 108 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
76 } 109 }
77 110
78 } // namespace content 111 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698