blob: 083b7eedb6903c79cf9bf9cce9e62d06e44b51e7 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_LOADER_PREDICTOR_RESOURCE_THROTTLE_H_
#define CHROME_BROWSER_LOADER_PREDICTOR_RESOURCE_THROTTLE_H_
#include <memory>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "content/public/browser/resource_throttle.h"
namespace chrome_browser_net {
class Predictor;
}
namespace net {
struct RedirectInfo;
class URLRequest;
}
class GURL;
class ProfileIOData;
// This resource throttle tracks requests in order to help the predictor learn
// resource relationships. It notifies the predictor of redirect and referrer
// relationships, and populates the predictor's timed cache of ongoing
// navigations. It also initiates predictive actions based on navigation
// requests and redirects.
// Note: This class does not issue predictive actions off of the initial main
// frame request (before any redirects). That is done on the UI thread in
// response to navigation callbacks in predictor_tab_helper.cc.
// TODO(csharrison): This class shouldn't depend on chrome_browser_net. The
// predictor should probably be moved here (along with its dependencies).
class PredictorResourceThrottle : public content::ResourceThrottle {
public:
PredictorResourceThrottle(net::URLRequest* request,
chrome_browser_net::Predictor* predictor);
~PredictorResourceThrottle() override;
static std::unique_ptr<PredictorResourceThrottle> MaybeCreate(
net::URLRequest* request,
ProfileIOData* io_data);
// content::ResourceThrottle:
void WillStartRequest(bool* defer) override;
void WillRedirectRequest(const net::RedirectInfo& redirect_info,
bool* defer) override;
const char* GetNameForLogging() const override;
private:
void DispatchPredictions(const GURL& url, const GURL& site_for_cookies);
void DoPredict(const GURL& url, const GURL& site_for_cookies);
net::URLRequest* request_;
chrome_browser_net::Predictor* predictor_;
base::WeakPtrFactory<PredictorResourceThrottle> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(PredictorResourceThrottle);
};
#endif // CHROME_BROWSER_LOADER_PREDICTOR_RESOURCE_THROTTLE_H_