OLD | NEW |
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 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading | 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading |
6 | 6 |
7 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 7 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 #include "net/cookies/cookie_monster.h" | 80 #include "net/cookies/cookie_monster.h" |
81 #include "net/http/http_cache.h" | 81 #include "net/http/http_cache.h" |
82 #include "net/http/http_response_headers.h" | 82 #include "net/http/http_response_headers.h" |
83 #include "net/http/http_response_info.h" | 83 #include "net/http/http_response_info.h" |
84 #include "net/http/http_transaction_factory.h" | 84 #include "net/http/http_transaction_factory.h" |
85 #include "net/ssl/ssl_cert_request_info.h" | 85 #include "net/ssl/ssl_cert_request_info.h" |
86 #include "net/url_request/url_request.h" | 86 #include "net/url_request/url_request.h" |
87 #include "net/url_request/url_request_context.h" | 87 #include "net/url_request/url_request_context.h" |
88 #include "net/url_request/url_request_job_factory.h" | 88 #include "net/url_request/url_request_job_factory.h" |
89 #include "webkit/browser/appcache/appcache_interceptor.h" | 89 #include "webkit/browser/appcache/appcache_interceptor.h" |
90 #include "webkit/browser/blob/blob_storage_controller.h" | 90 #include "webkit/common/blob/blob_data.h" |
| 91 #include "webkit/browser/blob/blob_data_handle.h" |
| 92 #include "webkit/browser/blob/blob_storage_context.h" |
| 93 #include "webkit/browser/blob/blob_url_request_job_factory.h" |
91 #include "webkit/browser/fileapi/file_permission_policy.h" | 94 #include "webkit/browser/fileapi/file_permission_policy.h" |
92 #include "webkit/browser/fileapi/file_system_context.h" | 95 #include "webkit/browser/fileapi/file_system_context.h" |
93 #include "webkit/common/appcache/appcache_interfaces.h" | 96 #include "webkit/common/appcache/appcache_interfaces.h" |
94 #include "webkit/common/blob/shareable_file_reference.h" | 97 #include "webkit/common/blob/shareable_file_reference.h" |
95 #include "webkit/common/resource_request_body.h" | 98 #include "webkit/common/resource_request_body.h" |
96 | 99 |
97 using base::Time; | 100 using base::Time; |
98 using base::TimeDelta; | 101 using base::TimeDelta; |
99 using base::TimeTicks; | 102 using base::TimeTicks; |
100 using webkit_blob::ShareableFileReference; | 103 using webkit_blob::ShareableFileReference; |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 request_data.request_body->elements(); | 212 request_data.request_body->elements(); |
210 std::vector<ResourceRequestBody::Element>::const_iterator iter; | 213 std::vector<ResourceRequestBody::Element>::const_iterator iter; |
211 for (iter = uploads->begin(); iter != uploads->end(); ++iter) { | 214 for (iter = uploads->begin(); iter != uploads->end(); ++iter) { |
212 if (iter->type() == ResourceRequestBody::Element::TYPE_FILE && | 215 if (iter->type() == ResourceRequestBody::Element::TYPE_FILE && |
213 !policy->CanReadFile(child_id, iter->path())) { | 216 !policy->CanReadFile(child_id, iter->path())) { |
214 NOTREACHED() << "Denied unauthorized upload of " | 217 NOTREACHED() << "Denied unauthorized upload of " |
215 << iter->path().value(); | 218 << iter->path().value(); |
216 return false; | 219 return false; |
217 } | 220 } |
218 if (iter->type() == ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM) { | 221 if (iter->type() == ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM) { |
219 fileapi::FileSystemURL url = file_system_context->CrackURL(iter->url()); | 222 fileapi::FileSystemURL url = |
| 223 file_system_context->CrackURL(iter->filesystem_url()); |
220 if (!policy->HasPermissionsForFileSystemFile( | 224 if (!policy->HasPermissionsForFileSystemFile( |
221 child_id, url, fileapi::kReadFilePermissions)) { | 225 child_id, url, fileapi::kReadFilePermissions)) { |
222 NOTREACHED() << "Denied unauthorized upload of " | 226 NOTREACHED() << "Denied unauthorized upload of " |
223 << iter->url().spec(); | 227 << iter->filesystem_url().spec(); |
224 return false; | 228 return false; |
225 } | 229 } |
226 } | 230 } |
227 } | 231 } |
228 } | 232 } |
229 | 233 |
230 return true; | 234 return true; |
231 } | 235 } |
232 | 236 |
233 void RemoveDownloadFileFromChildSecurityPolicy(int child_id, | 237 void RemoveDownloadFileFromChildSecurityPolicy(int child_id, |
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
975 // TODO(darin): Do we really need all of these URLRequest setters in the | 979 // TODO(darin): Do we really need all of these URLRequest setters in the |
976 // transferred navigation case? | 980 // transferred navigation case? |
977 | 981 |
978 request->set_load_flags(load_flags); | 982 request->set_load_flags(load_flags); |
979 request->SetPriority(request_data.priority); | 983 request->SetPriority(request_data.priority); |
980 | 984 |
981 // Resolve elements from request_body and prepare upload data. | 985 // Resolve elements from request_body and prepare upload data. |
982 if (request_data.request_body.get()) { | 986 if (request_data.request_body.get()) { |
983 request->set_upload(UploadDataStreamBuilder::Build( | 987 request->set_upload(UploadDataStreamBuilder::Build( |
984 request_data.request_body.get(), | 988 request_data.request_body.get(), |
985 filter_->blob_storage_context()->controller(), | 989 filter_->blob_storage_context()->context(), |
986 filter_->file_system_context(), | 990 filter_->file_system_context(), |
987 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE) | 991 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE) |
988 .get())); | 992 .get())); |
989 } | 993 } |
990 | 994 |
991 bool allow_download = request_data.allow_download && | 995 bool allow_download = request_data.allow_download && |
992 ResourceType::IsFrame(request_data.resource_type); | 996 ResourceType::IsFrame(request_data.resource_type); |
993 | 997 |
994 // Make extra info and read footer (contains request ID). | 998 // Make extra info and read footer (contains request ID). |
995 ResourceRequestInfoImpl* extra_info = | 999 ResourceRequestInfoImpl* extra_info = |
(...skipping 14 matching lines...) Expand all Loading... |
1010 allow_download, | 1014 allow_download, |
1011 request_data.has_user_gesture, | 1015 request_data.has_user_gesture, |
1012 request_data.referrer_policy, | 1016 request_data.referrer_policy, |
1013 resource_context, | 1017 resource_context, |
1014 !is_sync_load); | 1018 !is_sync_load); |
1015 extra_info->AssociateWithRequest(request); // Request takes ownership. | 1019 extra_info->AssociateWithRequest(request); // Request takes ownership. |
1016 | 1020 |
1017 if (request->url().SchemeIs(chrome::kBlobScheme)) { | 1021 if (request->url().SchemeIs(chrome::kBlobScheme)) { |
1018 // Hang on to a reference to ensure the blob is not released prior | 1022 // Hang on to a reference to ensure the blob is not released prior |
1019 // to the job being started. | 1023 // to the job being started. |
1020 extra_info->set_requested_blob_data( | 1024 webkit_blob::BlobProtocolHandler::SetRequestedBlobDataHandle( |
1021 filter_->blob_storage_context()->controller()-> | 1025 request, |
1022 GetBlobDataFromUrl(request->url())); | 1026 filter_->blob_storage_context()->context()-> |
| 1027 GetBlobDataFromPublicURL(request->url())); |
1023 } | 1028 } |
1024 | 1029 |
1025 // Have the appcache associate its extra info with the request. | 1030 // Have the appcache associate its extra info with the request. |
1026 appcache::AppCacheInterceptor::SetExtraRequestInfo( | 1031 appcache::AppCacheInterceptor::SetExtraRequestInfo( |
1027 request, filter_->appcache_service(), child_id, | 1032 request, filter_->appcache_service(), child_id, |
1028 request_data.appcache_host_id, request_data.resource_type); | 1033 request_data.appcache_host_id, request_data.resource_type); |
1029 | 1034 |
1030 // Construct the IPC resource handler. | 1035 // Construct the IPC resource handler. |
1031 scoped_ptr<ResourceHandler> handler; | 1036 scoped_ptr<ResourceHandler> handler; |
1032 if (sync_result) { | 1037 if (sync_result) { |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1871 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) | 1876 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) |
1872 && !policy->CanReadRawCookies(child_id)) { | 1877 && !policy->CanReadRawCookies(child_id)) { |
1873 VLOG(1) << "Denied unauthorized request for raw headers"; | 1878 VLOG(1) << "Denied unauthorized request for raw headers"; |
1874 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS; | 1879 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS; |
1875 } | 1880 } |
1876 | 1881 |
1877 return load_flags; | 1882 return load_flags; |
1878 } | 1883 } |
1879 | 1884 |
1880 } // namespace content | 1885 } // namespace content |
OLD | NEW |