blob: d73e70df8e05a6b1f4993a3fb7d82bb48e33142a [file] [log] [blame]
// Copyright 2019 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_PAGE_LOAD_METRICS_RESOURCE_TRACKER_H_
#define CHROME_BROWSER_PAGE_LOAD_METRICS_RESOURCE_TRACKER_H_
#include <map>
#include <memory>
#include <vector>
#include "chrome/common/page_load_metrics/page_load_metrics.mojom.h"
#include "content/public/browser/global_request_id.h"
namespace page_load_metrics {
// Tracks individual resource loads on the page. Only tracks resources loaded
// by the network stack (including HTTP cache).
class ResourceTracker {
public:
// Maps a request id for a blink resource to the metadata for the resource
// load. GlobalRequestIDs are used because this map may aggregate across
// renderers and blink request ids are unique per-renderer.
using ResourceMap = std::map<content::GlobalRequestID,
page_load_metrics::mojom::ResourceDataUpdatePtr>;
ResourceTracker();
~ResourceTracker();
// Updates map of ongoing resource loads given a new update. |process_id| is
// the id of renderer process where the update originated and is used to
// create globally unique resource ids.
void UpdateResourceDataUse(
int process_id,
const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>&
resources);
const ResourceMap& unfinished_resources() const {
return unfinished_resources_;
}
// Previous ResourceDataUseUpdate objects are only stored for resources that
// are still actively loaded. These methods should only be used for resources
// that were received by observers in
// PageLoadMetricsObserver::OnResourceDataUseObserved().
bool HasPreviousUpdateForResource(content::GlobalRequestID request_id) const;
const page_load_metrics::mojom::ResourceDataUpdatePtr&
GetPreviousUpdateForResource(content::GlobalRequestID request_id) const;
private:
void ProcessResourceUpdate(
int process_id,
const page_load_metrics::mojom::ResourceDataUpdatePtr& resource);
// Stores all resources that have started loading on the page but have
// not completed loading.
ResourceMap unfinished_resources_;
// Maps a request_id for a blink resource to the previous ResourceDataUpdate
// received for the resource. This only stores previous updates for
// resources that are still actively receiving updates. A resource that was
// unfinished then completes will have its previous update in this map until
// the next call to UpdateResourceDataUse().
ResourceMap previous_resource_updates_;
};
} // namespace page_load_metrics
#endif // CHROME_BROWSER_PAGE_LOAD_METRICS_RESOURCE_TRACKER_H_