| // 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/NavigatorBudget.h" |
| |
| #include "core/frame/LocalFrame.h" |
| #include "core/frame/LocalFrameClient.h" |
| #include "core/frame/Navigator.h" |
| #include "modules/budget/BudgetService.h" |
| |
| namespace blink { |
| |
| NavigatorBudget::NavigatorBudget(Navigator& navigator) |
| : Supplement<Navigator>(navigator) {} |
| |
| // static |
| const char* NavigatorBudget::SupplementName() { |
| return "NavigatorBudget"; |
| } |
| |
| // static |
| NavigatorBudget& NavigatorBudget::From(Navigator& navigator) { |
| // Get the unique NavigatorBudget associated with this navigator. |
| NavigatorBudget* navigator_budget = static_cast<NavigatorBudget*>( |
| Supplement<Navigator>::From(navigator, SupplementName())); |
| if (!navigator_budget) { |
| // If there isn't one already, create it now and associate it. |
| navigator_budget = new NavigatorBudget(navigator); |
| Supplement<Navigator>::ProvideTo(navigator, SupplementName(), |
| navigator_budget); |
| } |
| return *navigator_budget; |
| } |
| |
| BudgetService* NavigatorBudget::budget(ExecutionContext* context) { |
| if (!budget_) { |
| if (auto* interface_provider = context->GetInterfaceProvider()) { |
| budget_ = BudgetService::Create(interface_provider); |
| } |
| } |
| return budget_.Get(); |
| } |
| |
| // static |
| BudgetService* NavigatorBudget::budget(ExecutionContext* context, |
| Navigator& navigator) { |
| return NavigatorBudget::From(navigator).budget(context); |
| } |
| |
| void NavigatorBudget::Trace(blink::Visitor* visitor) { |
| visitor->Trace(budget_); |
| Supplement<Navigator>::Trace(visitor); |
| } |
| |
| } // namespace blink |