blob: f9ed295665a0420e4f82ddb2515e90903d5df8e2 [file] [log] [blame]
// Copyright 2016 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 "modules/budget/WorkerNavigatorBudget.h"
#include "core/workers/WorkerGlobalScope.h"
#include "core/workers/WorkerNavigator.h"
#include "core/workers/WorkerThread.h"
#include "modules/budget/BudgetService.h"
namespace blink {
WorkerNavigatorBudget::WorkerNavigatorBudget(WorkerNavigator& worker_navigator)
: Supplement<WorkerNavigator>(worker_navigator) {}
// static
const char* WorkerNavigatorBudget::SupplementName() {
return "WorkerNavigatorBudget";
}
// static
WorkerNavigatorBudget& WorkerNavigatorBudget::From(
WorkerNavigator& worker_navigator) {
// Get the unique WorkerNavigatorBudget associated with this workerNavigator.
WorkerNavigatorBudget* worker_navigator_budget =
static_cast<WorkerNavigatorBudget*>(Supplement<WorkerNavigator>::From(
worker_navigator, SupplementName()));
if (!worker_navigator_budget) {
// If there isn't one already, create it now and associate it.
worker_navigator_budget = new WorkerNavigatorBudget(worker_navigator);
Supplement<WorkerNavigator>::ProvideTo(worker_navigator, SupplementName(),
worker_navigator_budget);
}
return *worker_navigator_budget;
}
BudgetService* WorkerNavigatorBudget::budget(ExecutionContext* context) {
if (!budget_) {
budget_ = BudgetService::Create(context->GetInterfaceProvider());
}
return budget_.Get();
}
// static
BudgetService* WorkerNavigatorBudget::budget(
ExecutionContext* context,
WorkerNavigator& worker_navigator) {
return WorkerNavigatorBudget::From(worker_navigator).budget(context);
}
void WorkerNavigatorBudget::Trace(blink::Visitor* visitor) {
visitor->Trace(budget_);
Supplement<WorkerNavigator>::Trace(visitor);
}
} // namespace blink