1// Copyright 2014 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 CHROME_BROWSER_NET_RESOURCE_PREFETCH_PREDICTOR_OBSERVER_H_ 6#define CHROME_BROWSER_NET_RESOURCE_PREFETCH_PREDICTOR_OBSERVER_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/weak_ptr.h" 10#include "chrome/browser/predictors/resource_prefetch_predictor.h" 11#include "content/public/common/resource_type.h" 12 13namespace net { 14class URLRequest; 15} 16 17class GURL; 18 19namespace chrome_browser_net { 20 21// Observes resource requests in the ResourceDispatcherHostDelegate and notifies 22// the ResourcePrefetchPredictor about the ones it is interested in. 23// - Has an instance per profile, and is owned by the corresponding 24// ProfileIOData. 25// - Needs to be constructed on UI thread. Rest of the functions can only be 26// called on the IO thread. Can be destroyed on UI or IO thread. 27class ResourcePrefetchPredictorObserver { 28 public: 29 explicit ResourcePrefetchPredictorObserver( 30 predictors::ResourcePrefetchPredictor* predictor); 31 ~ResourcePrefetchPredictorObserver(); 32 33 // Parts of the ResourceDispatcherHostDelegate that we want to observe. 34 void OnRequestStarted(net::URLRequest* request, 35 content::ResourceType resource_type, 36 int child_id, 37 int frame_id); 38 void OnRequestRedirected(const GURL& redirect_url, net::URLRequest* request); 39 void OnResponseStarted(net::URLRequest* request); 40 41 private: 42 // Owned by profile. 43 base::WeakPtr<predictors::ResourcePrefetchPredictor> predictor_; 44 45 DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorObserver); 46}; 47 48} // namespace chrome_browser_net 49 50#endif // CHROME_BROWSER_NET_RESOURCE_PREFETCH_PREDICTOR_OBSERVER_H_ 51