Index: third_party/WebKit/Source/modules/budget/BudgetService.cpp |
diff --git a/third_party/WebKit/Source/modules/budget/BudgetService.cpp b/third_party/WebKit/Source/modules/budget/BudgetService.cpp |
index 52ae315ddafb453f58e4b13fade28daa1d8c6a25..47a7c2c4519904ab44ecd8206a5837293074a81e 100644 |
--- a/third_party/WebKit/Source/modules/budget/BudgetService.cpp |
+++ b/third_party/WebKit/Source/modules/budget/BudgetService.cpp |
@@ -9,21 +9,66 @@ |
#include "bindings/core/v8/ScriptState.h" |
#include "core/dom/DOMException.h" |
#include "core/dom/ExceptionCode.h" |
+#include "modules/budget/BudgetState.h" |
+#include "public/platform/InterfaceProvider.h" |
+#include "public/platform/Platform.h" |
+#include "public/platform/modules/budget_service/budget_service.mojom-blink.h" |
namespace blink { |
-BudgetService::BudgetService() {} |
+BudgetService::BudgetService() |
+{ |
+ Platform::current()->interfaceProvider()->getInterface(mojo::GetProxy(&m_service)); |
+} |
-ScriptPromise BudgetService::getCost(ScriptState* scriptState, const AtomicString& actionType) |
+BudgetService::~BudgetService() |
{ |
- // TODO(harkness): Trigger the cost calculation. |
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "Not yet implemented")); |
+} |
+ |
+ScriptPromise BudgetService::getCost(ScriptState* scriptState, const AtomicString& /* actionType */) |
+{ |
+ DCHECK(m_service); |
+ |
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ // TODO(harkness): Map the actionType to BudgetOperationType. |
+ // Get the cost for the action from the browser BudgetService. |
+ mojom::blink::BudgetOperationType type = mojom::blink::BudgetOperationType::SILENT_PUSH; |
+ m_service->GetCost(type, convertToBaseCallback(WTF::bind(&BudgetService::gotCost, wrapPersistent(this), wrapPersistent(resolver)))); |
+ return promise; |
+} |
+ |
+void BudgetService::gotCost(ScriptPromiseResolver* resolver, double cost) const |
+{ |
+ resolver->resolve(cost); |
} |
ScriptPromise BudgetService::getBudget(ScriptState* scriptState) |
{ |
- // TODO(harkness): Trigger the budget calculation. |
- return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "Not yet implemented")); |
+ DCHECK(m_service); |
+ |
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ ExecutionContext* context = scriptState->getExecutionContext(); |
+ if (!context) |
+ return promise; |
+ |
+ // Get the budget from the browser BudgetService. |
+ RefPtr<SecurityOrigin> origin(context->getSecurityOrigin()); |
+ m_service->GetBudget(origin, convertToBaseCallback(WTF::bind(&BudgetService::gotBudget, wrapPersistent(this), wrapPersistent(resolver)))); |
+ return promise; |
+} |
+ |
+void BudgetService::gotBudget(ScriptPromiseResolver* resolver, const mojo::WTFArray<mojom::blink::BudgetStatePtr> expectations) const |
+{ |
+ // Copy the chunks into the budget array. |
+ HeapVector<Member<BudgetState>> budget(expectations.size()); |
+ for (size_t i = 0; i < expectations.size(); i++) |
+ budget[i] = new BudgetState(expectations[i]->budget_at, expectations[i]->time); |
+ |
+ resolver->resolve(budget); |
} |
} // namespace blink |