| Index: chrome/browser/net/chrome_network_delegate.cc
|
| diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
|
| index 230b40b3fcfd613ffa05ba5603efa781be3e0df1..1d418bafadbd5208286af728fe9b470392b913ab 100644
|
| --- a/chrome/browser/net/chrome_network_delegate.cc
|
| +++ b/chrome/browser/net/chrome_network_delegate.cc
|
| @@ -52,6 +52,12 @@
|
| #include "net/socket_stream/socket_stream.h"
|
| #include "net/url_request/url_request.h"
|
|
|
| +#if defined(OS_ANDROID)
|
| +#include "components/precache/content/precache_manager.h"
|
| +#include "components/precache/content/precache_manager_factory.h"
|
| +#include "components/precache/core/precache_database.h"
|
| +#endif
|
| +
|
| #if defined(OS_CHROMEOS)
|
| #include "base/command_line.h"
|
| #include "base/sys_info.h"
|
| @@ -299,6 +305,41 @@ void RecordContentLengthHistograms(
|
| #endif // defined(OS_ANDROID)
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +
|
| +void RecordPrecacheStatsOnUIThread(void* profile_id, const GURL& url,
|
| + const base::Time& fetch_time,
|
| + int64 received_content_length,
|
| + bool was_cached) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + // Ignore empty responses and empty URLs.
|
| + if (!received_content_length || url.is_empty())
|
| + return;
|
| + Profile* profile = reinterpret_cast<Profile*>(profile_id);
|
| + if (!g_browser_process->profile_manager()->IsValidProfile(profile))
|
| + return;
|
| +
|
| + precache::PrecacheManager* precache_manager =
|
| + precache::PrecacheManagerFactory::GetForBrowserContext(profile);
|
| +
|
| + // This will be NULL in incognito mode.
|
| + if (!precache_manager)
|
| + return;
|
| +
|
| + bool is_cellular = net::NetworkChangeNotifier::IsConnectionCellular(
|
| + net::NetworkChangeNotifier::GetConnectionType());
|
| +
|
| + BrowserThread::PostTask(
|
| + BrowserThread::DB, FROM_HERE,
|
| + base::Bind(&precache::PrecacheDatabase::RecordURLFetched,
|
| + precache_manager->precache_database(), url, fetch_time,
|
| + received_content_length, was_cached,
|
| + precache_manager->IsPrecaching(), is_cellular));
|
| +}
|
| +
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| } // namespace
|
|
|
| ChromeNetworkDelegate::ChromeNetworkDelegate(
|
| @@ -515,6 +556,17 @@ void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request,
|
| // or missing, as is the case with chunked encoding.
|
| int64 received_content_length = request->received_response_content_length();
|
|
|
| +#if defined(OS_ANDROID)
|
| + if (precache::PrecacheManager::IsPrecachingEnabled()) {
|
| + // Record precache statistics for the fetch.
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&RecordPrecacheStatsOnUIThread, profile_, request->url(),
|
| + request->response_info().response_time,
|
| + received_content_length, request->was_cached()));
|
| + }
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| // Only record for http or https urls.
|
| bool is_http = request->url().SchemeIs("http");
|
| bool is_https = request->url().SchemeIs("https");
|
|
|