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