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

Side by Side Diff: content/browser/loader/async_revalidation_manager.cc

Issue 2481093003: Introduce ResourceRequesterInfo to abstract the requester of resource request (Closed)
Patch Set: incorporated kinuko's comment Created 4 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/loader/async_revalidation_manager.h" 5 #include "content/browser/loader/async_revalidation_manager.h"
6 6
7 #include <tuple> 7 #include <tuple>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "content/browser/loader/async_revalidation_driver.h" 11 #include "content/browser/loader/async_revalidation_driver.h"
12 #include "content/browser/loader/resource_message_filter.h"
13 #include "content/browser/loader/resource_request_info_impl.h" 12 #include "content/browser/loader/resource_request_info_impl.h"
14 #include "content/browser/loader/resource_scheduler.h" 13 #include "content/browser/loader/resource_scheduler.h"
15 #include "content/common/resource_messages.h" 14 #include "content/common/resource_messages.h"
16 #include "content/common/resource_request.h" 15 #include "content/common/resource_request.h"
17 #include "content/public/browser/resource_throttle.h" 16 #include "content/public/browser/resource_throttle.h"
18 #include "net/base/load_flags.h" 17 #include "net/base/load_flags.h"
19 #include "net/http/http_transaction_factory.h" 18 #include "net/http/http_transaction_factory.h"
20 #include "net/http/http_util.h" 19 #include "net/http/http_util.h"
21 #include "net/url_request/url_request.h" 20 #include "net/url_request/url_request.h"
22 #include "net/url_request/url_request_context.h" 21 #include "net/url_request/url_request_context.h"
(...skipping 28 matching lines...) Expand all
51 DCHECK(in_progress_.empty()); 50 DCHECK(in_progress_.empty());
52 } 51 }
53 52
54 void AsyncRevalidationManager::BeginAsyncRevalidation( 53 void AsyncRevalidationManager::BeginAsyncRevalidation(
55 const net::URLRequest& for_request, 54 const net::URLRequest& for_request,
56 ResourceScheduler* scheduler) { 55 ResourceScheduler* scheduler) {
57 DCHECK_EQ(for_request.url_chain().size(), 1u); 56 DCHECK_EQ(for_request.url_chain().size(), 1u);
58 const ResourceRequestInfoImpl* info = 57 const ResourceRequestInfoImpl* info =
59 ResourceRequestInfoImpl::ForRequest(&for_request); 58 ResourceRequestInfoImpl::ForRequest(&for_request);
60 DCHECK(info); 59 DCHECK(info);
61 if (!info->filter()) { 60 if (!info->requester_info().IsRenderer() ||
mmenke 2016/11/21 19:51:55 First check should actually be a DCHECK - the bool
horo 2016/11/22 01:12:07 Done.
61 !info->requester_info().filter()) {
62 // The child has gone away and we can no longer get ResourceContext and 62 // The child has gone away and we can no longer get ResourceContext and
63 // URLRequestContext to perform async revalidation. 63 // URLRequestContext to perform async revalidation.
64 // This can happen in the following cases, ordered from bad to not-so-bad 64 // This can happen in the following cases, ordered from bad to not-so-bad
65 // 65 //
66 // 1. PlzNavigate (but enabling PlzNavigate automatically disables 66 // 1. PlzNavigate (but enabling PlzNavigate automatically disables
67 // stale-while-revalidate; see crbug.com/561609) 67 // stale-while-revalidate; see crbug.com/561609)
68 // 2. <link rel=prefetch> may read a stale cache entry without a 68 // 2. <link rel=prefetch> may read a stale cache entry without a
69 // revalidation being performed if the original renderer goes away. This 69 // revalidation being performed if the original renderer goes away. This
70 // is a lost optimisation opportunity. 70 // is a lost optimisation opportunity.
71 // 71 //
(...skipping 10 matching lines...) Expand all
82 // 82 //
83 // TODO(ricea): Resolve these lifetime issues. crbug.com/561591 83 // TODO(ricea): Resolve these lifetime issues. crbug.com/561591
84 return; 84 return;
85 } 85 }
86 86
87 ResourceContext* resource_context = nullptr; 87 ResourceContext* resource_context = nullptr;
88 net::URLRequestContext* request_context = nullptr; 88 net::URLRequestContext* request_context = nullptr;
89 89
90 // The embedder of //content needs to ensure that the URLRequestContext object 90 // The embedder of //content needs to ensure that the URLRequestContext object
91 // remains valid until after the ResourceContext object is destroyed. 91 // remains valid until after the ResourceContext object is destroyed.
92 info->filter()->GetContexts(info->GetResourceType(), &resource_context, 92 info->requester_info().GetContexts(info->GetResourceType(), &resource_context,
93 &request_context); 93 &request_context);
94 94
95 AsyncRevalidationKey async_revalidation_key( 95 AsyncRevalidationKey async_revalidation_key(
96 resource_context, request_context->http_transaction_factory()->GetCache(), 96 resource_context, request_context->http_transaction_factory()->GetCache(),
97 for_request.url()); 97 for_request.url());
98 std::pair<AsyncRevalidationMap::iterator, bool> insert_result = 98 std::pair<AsyncRevalidationMap::iterator, bool> insert_result =
99 in_progress_.insert(AsyncRevalidationMap::value_type( 99 in_progress_.insert(AsyncRevalidationMap::value_type(
100 async_revalidation_key, std::unique_ptr<AsyncRevalidationDriver>())); 100 async_revalidation_key, std::unique_ptr<AsyncRevalidationDriver>()));
101 if (!insert_result.second) { 101 if (!insert_result.second) {
102 // A matching async revalidation is already in progress for this cache; we 102 // A matching async revalidation is already in progress for this cache; we
103 // don't need another one. 103 // don't need another one.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 184
185 return true; 185 return true;
186 } 186 }
187 187
188 void AsyncRevalidationManager::OnAsyncRevalidationComplete( 188 void AsyncRevalidationManager::OnAsyncRevalidationComplete(
189 AsyncRevalidationMap::iterator it) { 189 AsyncRevalidationMap::iterator it) {
190 in_progress_.erase(it); 190 in_progress_.erase(it);
191 } 191 }
192 192
193 } // namespace content 193 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698