Home | History | Annotate | Download | only in browser
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_PUBLIC_BROWSER_RESOURCE_REQUEST_INFO_H_
      6 #define CONTENT_PUBLIC_BROWSER_RESOURCE_REQUEST_INFO_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "content/common/content_export.h"
     10 #include "content/public/common/page_transition_types.h"
     11 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
     12 #include "webkit/common/resource_type.h"
     13 
     14 namespace net {
     15 class URLRequest;
     16 }
     17 
     18 namespace content {
     19 class ResourceContext;
     20 
     21 // Each URLRequest allocated by the ResourceDispatcherHost has a
     22 // ResourceRequestInfo instance associated with it.
     23 class ResourceRequestInfo {
     24  public:
     25   // Returns the ResourceRequestInfo associated with the given URLRequest.
     26   CONTENT_EXPORT static const ResourceRequestInfo* ForRequest(
     27       const net::URLRequest* request);
     28 
     29   // Allocates a new, dummy ResourceRequestInfo and associates it with the
     30   // given URLRequest.
     31   // NOTE: Add more parameters if you need to initialize other fields.
     32   CONTENT_EXPORT static void AllocateForTesting(
     33       net::URLRequest* request,
     34       ResourceType::Type resource_type,
     35       ResourceContext* context,
     36       int render_process_id,
     37       int render_view_id,
     38       bool is_async);
     39 
     40   // Returns the associated RenderView for a given process. Returns false, if
     41   // there is no associated RenderView. This method does not rely on the
     42   // request being allocated by the ResourceDispatcherHost, but works for all
     43   // URLRequests that are associated with a RenderView.
     44   CONTENT_EXPORT static bool GetRenderViewForRequest(
     45       const net::URLRequest* request,
     46       int* render_process_id,
     47       int* render_view_id);
     48 
     49   // Returns the associated ResourceContext.
     50   virtual ResourceContext* GetContext() const = 0;
     51 
     52   // The child process unique ID of the requestor.
     53   virtual int GetChildID() const = 0;
     54 
     55   // The IPC route identifier for this request (this identifies the RenderView
     56   // or like-thing in the renderer that the request gets routed to).
     57   virtual int GetRouteID() const = 0;
     58 
     59   // The pid of the originating process, if the request is sent on behalf of a
     60   // another process.  Otherwise it is 0.
     61   virtual int GetOriginPID() const = 0;
     62 
     63   // Unique identifier (within the scope of the child process) for this request.
     64   virtual int GetRequestID() const = 0;
     65 
     66   // The IPC route identifier of the RenderFrame.
     67   // TODO(jam): once all navigation and resource requests are sent between
     68   // frames and RenderView/RenderViewHost aren't involved we can remove this and
     69   // just use GetRouteID above.
     70   virtual int GetRenderFrameID() const = 0;
     71 
     72   // True if GetFrameID() represents a main frame in the RenderView.
     73   virtual bool IsMainFrame() const = 0;
     74 
     75   // Frame ID that sent this resource request. -1 if unknown / invalid.
     76   virtual int64 GetFrameID() const = 0;
     77 
     78   // True if GetParentFrameID() represents a main frame in the RenderView.
     79   virtual bool ParentIsMainFrame() const = 0;
     80 
     81   // Frame ID of parent frame of frame that sent this resource request.
     82   // -1 if unknown / invalid.
     83   virtual int64 GetParentFrameID() const = 0;
     84 
     85   // Returns the associated resource type.
     86   virtual ResourceType::Type GetResourceType() const = 0;
     87 
     88   // Returns the associated referrer policy.
     89   virtual blink::WebReferrerPolicy GetReferrerPolicy() const = 0;
     90 
     91   // Returns the associated page transition type.
     92   virtual PageTransition GetPageTransition() const = 0;
     93 
     94   // True if the request was initiated by a user action (like a tap to follow
     95   // a link).
     96   virtual bool HasUserGesture() const = 0;
     97 
     98   // True if ResourceController::CancelAndIgnore() was called.  For example,
     99   // the requested URL may be being loaded by an external program.
    100   virtual bool WasIgnoredByHandler() const = 0;
    101 
    102   // Returns false if there is NOT an associated render view.
    103   virtual bool GetAssociatedRenderView(int* render_process_id,
    104                                        int* render_view_id) const = 0;
    105 
    106   // Returns true if this is associated with an asynchronous request.
    107   virtual bool IsAsync() const = 0;
    108 
    109   // Whether this is a download.
    110   virtual bool IsDownload() const = 0;
    111 
    112  protected:
    113   virtual ~ResourceRequestInfo() {}
    114 };
    115 
    116 }  // namespace content
    117 
    118 #endif  // CONTENT_PUBLIC_BROWSER_RESOURCE_REQUEST_INFO_H_
    119