blob: 84dcefeb4e18d627b42fa71d2f46c2517357cad0 [file] [log] [blame]
// Copyright 2020 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_OPTIMIZATION_GUIDE_BLINK_BLINK_OPTIMIZATION_GUIDE_INQUIRER_H_
#define CHROME_BROWSER_OPTIMIZATION_GUIDE_BLINK_BLINK_OPTIMIZATION_GUIDE_INQUIRER_H_
#include "base/memory/weak_ptr.h"
#include "components/optimization_guide/content/browser/optimization_guide_decider.h"
#include "third_party/blink/public/mojom/optimization_guide/optimization_guide.mojom.h"
namespace content {
class NavigationHandle;
} // namespace content
namespace optimization_guide {
// BlinkOptimizationGuideInquirer asks the optimization guide service about
// hints for optimization types for Blink. This is instantiated per main frame
// by BlinkOptimizationGuideWebContentsObserver, and destroyed when the next
// main frame navigation gets ready to commit.
class BlinkOptimizationGuideInquirer {
public:
// Creates an instance of this class, and starts an inquiry.
static std::unique_ptr<BlinkOptimizationGuideInquirer> CreateAndStart(
content::NavigationHandle& navigation_handle,
OptimizationGuideDecider& decider);
~BlinkOptimizationGuideInquirer();
BlinkOptimizationGuideInquirer(const BlinkOptimizationGuideInquirer&) =
delete;
BlinkOptimizationGuideInquirer& operator=(
const BlinkOptimizationGuideInquirer&) = delete;
BlinkOptimizationGuideInquirer(BlinkOptimizationGuideInquirer&&) = delete;
BlinkOptimizationGuideInquirer& operator=(BlinkOptimizationGuideInquirer&&) =
delete;
// Returns a snapshot of the hints currently available. This may not contain
// information for some optimization types yet because the optimization guide
// service needs network access to provide the hints when they are not locally
// cached.
blink::mojom::BlinkOptimizationGuideHintsPtr GetHints() {
return optimization_guide_hints_.Clone();
}
private:
BlinkOptimizationGuideInquirer();
// Asks the optimization guide service about the hints. When the hints are
// locally cached in the service, this synchronously updates
// |optimization_guide_hints_|.
void InquireHints(content::NavigationHandle& navigation_handle,
OptimizationGuideDecider& decider);
void DidInquireHints(proto::OptimizationType optimization_type,
OptimizationGuideDecision decision,
const OptimizationMetadata& metadata);
void PopulateHintsForDelayAsyncScriptExecution(
const OptimizationMetadata& optimization_metadata);
void PopulateHintsForDelayCompetingLowPriorityRequests(
const OptimizationMetadata& optimization_metadata);
// The hints currently available.
blink::mojom::BlinkOptimizationGuideHintsPtr optimization_guide_hints_;
base::WeakPtrFactory<BlinkOptimizationGuideInquirer> weak_ptr_factory_{this};
};
} // namespace optimization_guide
#endif // CHROME_BROWSER_OPTIMIZATION_GUIDE_BLINK_BLINK_OPTIMIZATION_GUIDE_INQUIRER_H_