1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // Copyright 2017 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 THIRD_PARTY_BLINK_RENDERER_MODULES_LOCKS_LOCK_H_
- #define THIRD_PARTY_BLINK_RENDERER_MODULES_LOCKS_LOCK_H_
- #include "third_party/blink/public/mojom/feature_observer/feature_observer.mojom-blink.h"
- #include "third_party/blink/public/mojom/locks/lock_manager.mojom-blink.h"
- #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
- #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
- #include "third_party/blink/renderer/platform/heap/handle.h"
- #include "third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote.h"
- #include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
- #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
- #include "third_party/blink/renderer/platform/wtf/vector.h"
- namespace blink {
- class LockManager;
- class ScriptPromise;
- class ScriptPromiseResolver;
- class ScriptState;
- class Lock final : public ScriptWrappable,
- public ExecutionContextLifecycleObserver {
- DEFINE_WRAPPERTYPEINFO();
- public:
- Lock(ScriptState*,
- const String& name,
- mojom::blink::LockMode,
- mojo::PendingAssociatedRemote<mojom::blink::LockHandle>,
- mojo::PendingRemote<mojom::blink::ObservedFeature>,
- LockManager*);
- ~Lock() override;
- void Trace(Visitor*) const override;
- // Lock.idl
- String name() const { return name_; }
- String mode() const;
- // ExecutionContextLifecycleObserver
- void ContextDestroyed() override;
- // The lock is held until the passed promise resolves. When it is released,
- // the passed resolver is invoked with the promise's result.
- void HoldUntil(ScriptPromise, ScriptPromiseResolver*);
- static mojom::blink::LockMode StringToMode(const String&);
- static String ModeToString(mojom::blink::LockMode);
- private:
- class ThenFunction;
- void ReleaseIfHeld();
- void OnConnectionError();
- Member<ScriptPromiseResolver> resolver_;
- const String name_;
- const mojom::blink::LockMode mode_;
- // An opaque handle; this one end of a mojo pipe. When this is closed,
- // the lock is released by the back end.
- HeapMojoAssociatedRemote<mojom::blink::LockHandle> handle_;
- HeapMojoRemote<mojom::blink::ObservedFeature> lock_lifetime_;
- // LockManager::OnLockReleased() is called when this lock is released, to
- // stop artificially keeping this instance alive. It is necessary in the
- // case where the resolver's promise could potentially be GC'd.
- Member<LockManager> manager_;
- };
- } // namespace blink
- #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_LOCKS_LOCK_H_
|