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

Side by Side Diff: android_webview/browser/net/aw_request_interceptor.cc

Issue 2737663004: Introduce a secondary map for enabling plznavigate (Closed)
Patch Set: with plznavigate Created 3 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "android_webview/browser/net/aw_request_interceptor.h" 5 #include "android_webview/browser/net/aw_request_interceptor.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "android_webview/browser/aw_contents_io_thread_client.h" 9 #include "android_webview/browser/aw_contents_io_thread_client.h"
10 #include "android_webview/browser/input_stream.h" 10 #include "android_webview/browser/input_stream.h"
11 #include "android_webview/browser/net/android_stream_reader_url_request_job.h" 11 #include "android_webview/browser/net/android_stream_reader_url_request_job.h"
12 #include "android_webview/browser/net/aw_web_resource_response.h" 12 #include "android_webview/browser/net/aw_web_resource_response.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
15 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
16 #include "base/supports_user_data.h" 16 #include "base/supports_user_data.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/resource_request_info.h" 18 #include "content/public/browser/resource_request_info.h"
19 #include "net/http/http_response_headers.h" 19 #include "net/http/http_response_headers.h"
20 #include "net/url_request/url_request_job.h" 20 #include "net/url_request/url_request_job.h"
21 #include "url/url_constants.h"
21 22
22 namespace android_webview { 23 namespace android_webview {
23 24
24 namespace { 25 namespace {
25 26
26 const void* const kRequestAlreadyHasJobDataKey = &kRequestAlreadyHasJobDataKey; 27 const void* const kRequestAlreadyHasJobDataKey = &kRequestAlreadyHasJobDataKey;
27 28
28 class StreamReaderJobDelegateImpl 29 class StreamReaderJobDelegateImpl
29 : public AndroidStreamReaderURLRequestJob::Delegate { 30 : public AndroidStreamReaderURLRequestJob::Delegate {
30 public: 31 public:
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 Callback callback_; 113 Callback callback_;
113 base::WeakPtrFactory<ShouldInterceptRequestAdaptor> weak_factory_; 114 base::WeakPtrFactory<ShouldInterceptRequestAdaptor> weak_factory_;
114 115
115 DISALLOW_COPY_AND_ASSIGN(ShouldInterceptRequestAdaptor); 116 DISALLOW_COPY_AND_ASSIGN(ShouldInterceptRequestAdaptor);
116 }; 117 };
117 118
118 std::unique_ptr<AwContentsIoThreadClient> GetCorrespondingIoThreadClient( 119 std::unique_ptr<AwContentsIoThreadClient> GetCorrespondingIoThreadClient(
119 net::URLRequest* request) { 120 net::URLRequest* request) {
120 if (content::ResourceRequestInfo::OriginatedFromServiceWorker(request)) 121 if (content::ResourceRequestInfo::OriginatedFromServiceWorker(request))
121 return AwContentsIoThreadClient::GetServiceWorkerIoThreadClient(); 122 return AwContentsIoThreadClient::GetServiceWorkerIoThreadClient();
122
123 int render_process_id, render_frame_id; 123 int render_process_id, render_frame_id;
124 if (!content::ResourceRequestInfo::GetRenderFrameForRequest( 124 if (!content::ResourceRequestInfo::GetRenderFrameForRequest(
125 request, &render_process_id, &render_frame_id)) { 125 request, &render_process_id, &render_frame_id)) {
126 return nullptr; 126 return nullptr;
127 } 127 }
128 128
129 if (render_process_id == -1 || render_frame_id == -1) {
jam 2017/03/09 22:13:05 since this block (and rest of method) is duplicate
jam 2017/03/10 17:08:44 Ok ignore this comment, I looked through the usage
sgurun-gerrit only 2017/03/10 18:40:58 Acknowledged.
130 const content::ResourceRequestInfo* resourceRequestInfo =
131 content::ResourceRequestInfo::ForRequest(request);
132 if (resourceRequestInfo == nullptr) {
133 return nullptr;
134 }
135 return AwContentsIoThreadClient::FromID(
136 resourceRequestInfo->GetFrameTreeNodeId());
137 }
138
129 return AwContentsIoThreadClient::FromID(render_process_id, render_frame_id); 139 return AwContentsIoThreadClient::FromID(render_process_id, render_frame_id);
130 } 140 }
131 141
132 } // namespace 142 } // namespace
133 143
134 AwRequestInterceptor::AwRequestInterceptor() {} 144 AwRequestInterceptor::AwRequestInterceptor() {}
135 145
136 AwRequestInterceptor::~AwRequestInterceptor() {} 146 AwRequestInterceptor::~AwRequestInterceptor() {}
137 147
138 net::URLRequestJob* AwRequestInterceptor::MaybeInterceptRequest( 148 net::URLRequestJob* AwRequestInterceptor::MaybeInterceptRequest(
139 net::URLRequest* request, 149 net::URLRequest* request,
140 net::NetworkDelegate* network_delegate) const { 150 net::NetworkDelegate* network_delegate) const {
141 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 151 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
142 152
143 // MaybeInterceptRequest can be called multiple times for the same request. 153 // MaybeInterceptRequest can be called multiple times for the same request.
144 if (request->GetUserData(kRequestAlreadyHasJobDataKey)) 154 if (request->GetUserData(kRequestAlreadyHasJobDataKey))
145 return nullptr; 155 return nullptr;
146 156
157 if (request->url().SchemeIs(url::kBlobScheme)) {
jam 2017/03/09 22:13:05 comment?
sgurun-gerrit only 2017/03/10 18:40:58 Done.
158 return nullptr;
159 }
160
147 std::unique_ptr<AwContentsIoThreadClient> io_thread_client = 161 std::unique_ptr<AwContentsIoThreadClient> io_thread_client =
148 GetCorrespondingIoThreadClient(request); 162 GetCorrespondingIoThreadClient(request);
149 163
150 if (!io_thread_client) 164 if (!io_thread_client)
151 return nullptr; 165 return nullptr;
152 166
153 GURL referrer(request->referrer()); 167 GURL referrer(request->referrer());
154 if (referrer.is_valid() && 168 if (referrer.is_valid() &&
155 (!request->is_pending() || request->is_redirecting())) { 169 (!request->is_pending() || request->is_redirecting())) {
156 request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kReferer, 170 request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kReferer,
157 referrer.spec(), true); 171 referrer.spec(), true);
158 } 172 }
159 request->SetUserData(kRequestAlreadyHasJobDataKey, 173 request->SetUserData(kRequestAlreadyHasJobDataKey,
160 new base::SupportsUserData::Data()); 174 new base::SupportsUserData::Data());
161 return new AndroidStreamReaderURLRequestJob( 175 return new AndroidStreamReaderURLRequestJob(
162 request, network_delegate, 176 request, network_delegate,
163 base::MakeUnique<ShouldInterceptRequestAdaptor>( 177 base::MakeUnique<ShouldInterceptRequestAdaptor>(
164 std::move(io_thread_client)), 178 std::move(io_thread_client)),
165 true); 179 true);
166 } 180 }
167 181
168 } // namespace android_webview 182 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698