// Copyright (c) 2010 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. #include "chrome/browser/net/connect_interceptor.h" #include "chrome/browser/net/predictor_api.h" namespace chrome_browser_net { ConnectInterceptor::ConnectInterceptor() { URLRequest::RegisterRequestInterceptor(this); } ConnectInterceptor::~ConnectInterceptor() { URLRequest::UnregisterRequestInterceptor(this); } URLRequestJob* ConnectInterceptor::MaybeIntercept(URLRequest* request) { if (!request->referrer().empty()) { // Learn about our referring URL, for use in the future. GURL referring_url(GURL(request->referrer()).GetWithEmptyPath()); // TODO(jar): Only call if we think this was part of a frame load, and not a // link navigation. For now, we'll "learn" that to preconnect when a user // actually does a click... which will probably waste space in our referrers // table (since it probably won't be that deterministic). LearnFromNavigation(referring_url, request->url().GetWithEmptyPath()); } // Now we use previous learning and setup for our subresources. if (request->was_fetched_via_proxy()) return NULL; // TODO(jar): Only call if we believe this is a frame, and might have // subresources. We could "guess" by looking at path extensions (such as // foo.jpg or goo.gif etc.), but better would be to get this info from webkit // and have it add the info to the request (we currently only set the // priority, but we could record whether it was a frame). PredictFrameSubresources(request->url().GetWithEmptyPath()); return NULL; } } // namespace chrome_browser_net