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

Side by Side Diff: content/browser/loader/resource_dispatcher_host_impl.h

Issue 2182633007: Avoid using ContentBrowserClient::IsIllegalOrigin in ResourceDispatcherHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile errors Created 4 years, 4 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 // This is the browser side of the resource dispatcher, it receives requests 5 // This is the browser side of the resource dispatcher, it receives requests
6 // from the child process (i.e. [Renderer, Plugin, Worker]ProcessHost), and 6 // from the child process (i.e. [Renderer, Plugin, Worker]ProcessHost), and
7 // dispatches them to URLRequests. It then forwards the messages from the 7 // dispatches them to URLRequests. It then forwards the messages from the
8 // URLRequests back to the correct process for handling. 8 // URLRequests back to the correct process for handling.
9 // 9 //
10 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading 10 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 RenderFrameHost* root_frame_host); 100 RenderFrameHost* root_frame_host);
101 101
102 // Cancels any blocked request for the frame and its subframes. 102 // Cancels any blocked request for the frame and its subframes.
103 static void CancelBlockedRequestsForFrameFromUI( 103 static void CancelBlockedRequestsForFrameFromUI(
104 RenderFrameHostImpl* root_frame_host); 104 RenderFrameHostImpl* root_frame_host);
105 105
106 // ResourceDispatcherHost implementation: 106 // ResourceDispatcherHost implementation:
107 void SetDelegate(ResourceDispatcherHostDelegate* delegate) override; 107 void SetDelegate(ResourceDispatcherHostDelegate* delegate) override;
108 void SetAllowCrossOriginAuthPrompt(bool value) override; 108 void SetAllowCrossOriginAuthPrompt(bool value) override;
109 void ClearLoginDelegateForRequest(net::URLRequest* request) override; 109 void ClearLoginDelegateForRequest(net::URLRequest* request) override;
110 110 void AddSchemeForAccessCheck(const std::string& scheme) override;
111 void AddProcessForOrigin(const ResourceContext* context,
112 const std::string& origin,
113 int process_id) override;
114 void RemoveProcessForOrigin(const ResourceContext* context,
115 const std::string& origin,
116 int process_id) override;
111 // Puts the resource dispatcher host in an inactive state (unable to begin 117 // Puts the resource dispatcher host in an inactive state (unable to begin
112 // new requests). Cancels all pending requests. 118 // new requests). Cancels all pending requests.
113 void Shutdown(); 119 void Shutdown();
114 120
115 // Force cancels any pending requests for the given |context|. This is 121 // Force cancels any pending requests for the given |context|. This is
116 // necessary to ensure that before |context| goes away, all requests 122 // necessary to ensure that before |context| goes away, all requests
117 // for it are dead. 123 // for it are dead.
118 void CancelRequestsForContext(ResourceContext* context); 124 void CancelRequestsForContext(ResourceContext* context);
119 125
120 // Returns true if the message was a resource message that was processed. 126 // Returns true if the message was a resource message that was processed.
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 // Turns on stale-while-revalidate support, regardless of command-line flags 291 // Turns on stale-while-revalidate support, regardless of command-line flags
286 // or experiment status. For unit tests only. 292 // or experiment status. For unit tests only.
287 void EnableStaleWhileRevalidateForTesting(); 293 void EnableStaleWhileRevalidateForTesting();
288 294
289 // Sets the LoaderDelegate, which must outlive this object. Ownership is not 295 // Sets the LoaderDelegate, which must outlive this object. Ownership is not
290 // transferred. The LoaderDelegate should be interacted with on the IO thread. 296 // transferred. The LoaderDelegate should be interacted with on the IO thread.
291 void SetLoaderDelegate(LoaderDelegate* loader_delegate); 297 void SetLoaderDelegate(LoaderDelegate* loader_delegate);
292 298
293 void OnRenderFrameDeleted(const GlobalFrameRoutingId& global_routing_id); 299 void OnRenderFrameDeleted(const GlobalFrameRoutingId& global_routing_id);
294 300
301 // Checks whether the child process identified by |child_process_id| is
302 // allowed to access the |origin| and returns true if not.
303 bool IsIllegalOrigin(ResourceContext* context,
304 const GURL& origin,
305 int child_process_id);
306
295 private: 307 private:
296 friend class ResourceDispatcherHostTest; 308 friend class ResourceDispatcherHostTest;
297 309
298 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, 310 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest,
299 TestBlockedRequestsProcessDies); 311 TestBlockedRequestsProcessDies);
300 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, 312 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest,
301 CalculateApproximateMemoryCost); 313 CalculateApproximateMemoryCost);
302 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, 314 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest,
303 DetachableResourceTimesOut); 315 DetachableResourceTimesOut);
304 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, 316 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest,
(...skipping 13 matching lines...) Expand all
318 struct LoadInfo { 330 struct LoadInfo {
319 GURL url; 331 GURL url;
320 net::LoadStateWithParam load_state; 332 net::LoadStateWithParam load_state;
321 uint64_t upload_position; 333 uint64_t upload_position;
322 uint64_t upload_size; 334 uint64_t upload_size;
323 }; 335 };
324 336
325 // Map from ProcessID+RouteID pair to the "most interesting" LoadState. 337 // Map from ProcessID+RouteID pair to the "most interesting" LoadState.
326 typedef std::map<GlobalRoutingID, LoadInfo> LoadInfoMap; 338 typedef std::map<GlobalRoutingID, LoadInfo> LoadInfoMap;
327 339
340 // Information about a web origin.
341 struct OriginAccessInfo {
342 // This structure is complicated enough for clang to require the ctors to
343 // be explicitly defined in the cc file.
jam 2016/08/02 17:01:46 now that this is just one set, any reason to keep
ananta 2016/08/02 22:28:28 Done.
344 OriginAccessInfo();
345 ~OriginAccessInfo();
346 OriginAccessInfo(const OriginAccessInfo& other);
347
348 std::set<int> allowed_processes;
349 };
350
351 // Map from the origin host (std::string) to its information
352 // (OriginAccessInfo).
353 // This map is per ResourceContext.
354 typedef std::map<std::string, OriginAccessInfo> OriginAccessInfoMap;
355
356 typedef std::map<const ResourceContext*,
357 std::unique_ptr<OriginAccessInfoMap>>
358 ResourceContextOriginMap;
359
328 // ResourceLoaderDelegate implementation: 360 // ResourceLoaderDelegate implementation:
329 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( 361 ResourceDispatcherHostLoginDelegate* CreateLoginDelegate(
330 ResourceLoader* loader, 362 ResourceLoader* loader,
331 net::AuthChallengeInfo* auth_info) override; 363 net::AuthChallengeInfo* auth_info) override;
332 bool HandleExternalProtocol(ResourceLoader* loader, const GURL& url) override; 364 bool HandleExternalProtocol(ResourceLoader* loader, const GURL& url) override;
333 void DidStartRequest(ResourceLoader* loader) override; 365 void DidStartRequest(ResourceLoader* loader) override;
334 void DidReceiveRedirect(ResourceLoader* loader, const GURL& new_url) override; 366 void DidReceiveRedirect(ResourceLoader* loader, const GURL& new_url) override;
335 void DidReceiveResponse(ResourceLoader* loader) override; 367 void DidReceiveResponse(ResourceLoader* loader) override;
336 void DidFinishLoading(ResourceLoader* loader) override; 368 void DidFinishLoading(ResourceLoader* loader) override;
337 std::unique_ptr<net::ClientCertStore> CreateClientCertStore( 369 std::unique_ptr<net::ClientCertStore> CreateClientCertStore(
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 // The certificate on a ResourceResponse is associated with a 562 // The certificate on a ResourceResponse is associated with a
531 // particular renderer process. As a transfer to a new process 563 // particular renderer process. As a transfer to a new process
532 // completes, the stored certificate has to be updated to reflect the 564 // completes, the stored certificate has to be updated to reflect the
533 // new renderer process. 565 // new renderer process.
534 void UpdateResponseCertificateForTransfer(ResourceResponse* response, 566 void UpdateResponseCertificateForTransfer(ResourceResponse* response,
535 const net::SSLInfo& ssl_info, 567 const net::SSLInfo& ssl_info,
536 int child_id); 568 int child_id);
537 569
538 CertStore* GetCertStore(); 570 CertStore* GetCertStore();
539 571
572 // Returns the OriginAccessInfoMap instance for the |context| passed in. This
573 // map is used to enforce access checks on web requests for some origins.
574 OriginAccessInfoMap* GetOriginAccessMapForResourceContext(
575 const ResourceContext* context);
576
540 LoaderMap pending_loaders_; 577 LoaderMap pending_loaders_;
541 578
542 // Collection of temp files downloaded for child processes via 579 // Collection of temp files downloaded for child processes via
543 // the download_to_file mechanism. We avoid deleting them until 580 // the download_to_file mechanism. We avoid deleting them until
544 // the client no longer needs them. 581 // the client no longer needs them.
545 typedef std::map<int, scoped_refptr<storage::ShareableFileReference> > 582 typedef std::map<int, scoped_refptr<storage::ShareableFileReference> >
546 DeletableFilesMap; // key is request id 583 DeletableFilesMap; // key is request id
547 typedef std::map<int, DeletableFilesMap> 584 typedef std::map<int, DeletableFilesMap>
548 RegisteredTempFiles; // key is child process id 585 RegisteredTempFiles; // key is child process id
549 RegisteredTempFiles registered_temp_files_; 586 RegisteredTempFiles registered_temp_files_;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 typedef std::map<GlobalRequestID, 661 typedef std::map<GlobalRequestID,
625 base::ObserverList<ResourceMessageDelegate>*> DelegateMap; 662 base::ObserverList<ResourceMessageDelegate>*> DelegateMap;
626 DelegateMap delegate_map_; 663 DelegateMap delegate_map_;
627 664
628 std::unique_ptr<ResourceScheduler> scheduler_; 665 std::unique_ptr<ResourceScheduler> scheduler_;
629 666
630 // Allows tests to use a mock CertStore. If set, the CertStore must 667 // Allows tests to use a mock CertStore. If set, the CertStore must
631 // outlive this ResourceDispatcherHostImpl. 668 // outlive this ResourceDispatcherHostImpl.
632 CertStore* cert_store_for_testing_; 669 CertStore* cert_store_for_testing_;
633 670
671 // Used to check whether a request to retrieve an origin resource is allowed.
672 // This is only done for origins which are to be checked for access.
673 ResourceContextOriginMap context_origin_access_info_map_;
674
675 // This contains the set of origins we need to enforce access checks on. By
676 // default everything is allowed.
677 std::set<std::string> origins_for_access_check_;
678
634 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostImpl); 679 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostImpl);
635 }; 680 };
636 681
637 } // namespace content 682 } // namespace content
638 683
639 #endif // CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ 684 #endif // CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698