summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/idle/navigator_idle.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/idle/navigator_idle.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/idle/navigator_idle.cc79
1 files changed, 79 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/modules/idle/navigator_idle.cc b/chromium/third_party/blink/renderer/modules/idle/navigator_idle.cc
new file mode 100644
index 00000000000..e6bfeb25d41
--- /dev/null
+++ b/chromium/third_party/blink/renderer/modules/idle/navigator_idle.cc
@@ -0,0 +1,79 @@
+// Copyright 2018 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 "third_party/blink/renderer/modules/idle/navigator_idle.h"
+
+#include "third_party/blink/renderer/core/frame/navigator.h"
+#include "third_party/blink/renderer/core/workers/worker_navigator.h"
+#include "third_party/blink/renderer/modules/idle/idle_manager.h"
+#include "third_party/blink/renderer/platform/bindings/name_client.h"
+#include "third_party/blink/renderer/platform/bindings/script_state.h"
+#include "third_party/blink/renderer/platform/bindings/trace_wrapper_member.h"
+#include "third_party/blink/renderer/platform/supplementable.h"
+
+namespace blink {
+
+namespace {
+
+template <typename T>
+class NavigatorIdleImpl final : public GarbageCollected<NavigatorIdleImpl<T>>,
+ public Supplement<T> {
+ USING_GARBAGE_COLLECTED_MIXIN(NavigatorIdleImpl);
+
+ public:
+ static const char kSupplementName[];
+
+ NavigatorIdleImpl(T& navigator) : Supplement<T>(navigator) {}
+
+ static NavigatorIdleImpl& From(T& navigator) {
+ NavigatorIdleImpl* supplement = static_cast<NavigatorIdleImpl*>(
+ Supplement<T>::template From<NavigatorIdleImpl>(navigator));
+ if (!supplement) {
+ supplement = MakeGarbageCollected<NavigatorIdleImpl>(navigator);
+ // MakeGarbageCollected seems appropriate, but why was the following
+ // working prior to my rebase? it doesn't seem like the new operator
+ // was deleted since my rebase from GarbageCollected. What changed?
+ // supplement = new NavigatorIdleImpl(navigator);
+ Supplement<T>::ProvideTo(navigator, supplement);
+ }
+ return *supplement;
+ }
+
+ IdleManager* GetIdleManager(ExecutionContext* context) {
+ if (!idle_manager_ && context) {
+ // idle_manager_ = new IdleManager(context);
+ // Supplement<T>::GetSupplementable()->GetFrame()->GetDocument()
+ idle_manager_ = IdleManager::Create(context);
+ }
+ return idle_manager_.Get();
+ }
+
+ void Trace(blink::Visitor* visitor) override {
+ visitor->Trace(idle_manager_);
+ Supplement<T>::Trace(visitor);
+ }
+
+ private:
+ mutable TraceWrapperMember<IdleManager> idle_manager_;
+};
+
+// static
+template <typename T>
+const char NavigatorIdleImpl<T>::kSupplementName[] = "NavigatorIdleImpl";
+
+} // namespace
+
+IdleManager* NavigatorIdle::idle(ScriptState* script_state,
+ Navigator& navigator) {
+ return NavigatorIdleImpl<Navigator>::From(navigator).GetIdleManager(
+ ExecutionContext::From(script_state));
+}
+
+IdleManager* NavigatorIdle::idle(ScriptState* script_state,
+ WorkerNavigator& navigator) {
+ return NavigatorIdleImpl<WorkerNavigator>::From(navigator).GetIdleManager(
+ ExecutionContext::From(script_state));
+}
+
+} // namespace blink